A native macOS teleprompter that floats over everything.
Built with SwiftUI. Zero dependencies.
swift build && swift run MagicTeleprompterOr open Package.swift in Xcode and hit Cmd+R. No .xcodeproj needed.
| Feature | Details |
|---|---|
| Sentence-by-sentence pacing | Auto-advances based on word count and WPM setting |
| Always-on-top overlay | Floats above all windows, lives in your menu bar |
| Hide from recordings | Invisible to OBS, Screen Studio, and all macOS capture APIs |
| Mirror mode | Horizontal flip for beam splitter / reflection setups |
| 3-2-1 countdown | Optional countdown before playback begins |
| Script editor | Import/export .txt, autosave, live word count |
| Speed control | 80 - 400 WPM with slider and keyboard shortcuts |
| Font sizing | 20 - 72pt, adjustable on the fly |
| Glass UI | Material backgrounds with frosted control bar |
| Key | Action |
|---|---|
Space |
Play / Pause |
Right / Left |
Next / Previous sentence |
Up / Down |
Increase / Decrease speed |
Cmd + / Cmd - |
Increase / Decrease font size |
M |
Toggle mirror mode |
MagicTeleprompter/
MagicTeleprompterApp.swift @main entry point
AppDelegate.swift Window lifecycle, menu bar, screen capture hiding
Engine/
PlaybackEngine.swift Playback state, timing, WPM, UserDefaults persistence
Models/
ScriptStore.swift Script text, autosave, import/export
Views/
TeleprompterView.swift Sentence display, controls, keyboard handling
SettingsView.swift Settings sheet with toggles and script editor
Design decisions:
- Pure SwiftUI + AppKit — no external dependencies, no CocoaPods, no SPM packages
NSWindow.sharingType = .none— uses the macOS capture exclusion API to hide from screen recording software- Sentence pacing — display duration =
wordCount / WPM * 60with a 1.2s minimum floor - Reactive persistence —
@Publishedproperties withdidSetwriting toUserDefaults
- macOS 26+
- Xcode 26+ / Swift 6.2+
