Mirror and flip
For beam-splitter glass and overhead rigs. Toggle from either device, mid-take.
free forever, open source, installs like an app
Turn any second device into the remote for the screen your audience sees. Both stay on the same line.
Both panels are showing the same script at different type sizes. The remote’s controls drive them together.
The one you hold
A plain Markdown editor. Headings split the script into sections, bullets give you one beat per line, and a line starting with two colons becomes a cue only you see.
Press Start a session and this screen becomes the display. You get a six-character code, the only thing you have to carry to the other device.
Sign in on your phone with the same account, type the code, and it becomes the remote: play, pace, previous line, next line, tap any line to jump there.
Turn on voice tracking and the display listens. Words go grey as you say them, and the script moves when you move, not at 130 words a minute, not at whatever you guessed before you started. Pause to take a question and it waits. Skip a sentence and it skips with you.
Every product starts as a sentence. Somebody said it out loud, badly, to three people. Our jobis to keep that sentence intact.
heard: “somebody said it out loud badly to three people our job”
Recognition is your browser’s, not ours. In Chrome and Edge that means the audio goes to the browser vendor’s speech service; it never reaches Teleprompt, and nothing is recorded or stored. If that is not a trade you want to make, leave it off: everything else works exactly as it did.
For beam-splitter glass and overhead rigs. Toggle from either device, mid-take.
Not pixels per second. 130 wpm reads the same on a phone and a 27-inch display, because the speed is derived from the measured height of your script.
Lines beginning with :: show up in orange on the prompter and are excluded from the word count.
Three reading surfaces. Amber is the classic low-glare prompter look.
Space to roll, arrows to step and change pace, F for fullscreen, M to mirror.
Add a second display for a co-host, or a second remote for a producer. One device drives; the rest follow.
The display holds a screen wake lock, so it will not dim halfway through your second paragraph.
Position is written back to the database every few seconds. Reload, or hand the remote to someone else, and the line is still there.
No rich-text toolbar to fight, no formatting that only exists in one app. Write the words you are going to say, and let the structure of the document become the structure of the read.
## Opening Good evening, and thank you for making the time. :: look at the lens, not the screen Tonight I want to talk about one small thing. - Every product starts as a sentence.- Somebody said it out loud, badly, to three people.- Our job is to keep that sentence intact. --- :: slow down, let it land That is the whole idea. Thank you.Teleprompt installs like an app on iOS, Android, macOS and Windows. Full screen, its own icon, its own window, and a service worker that keeps the shell on the device, so a flaky venue network cannot leave you staring at a browser error two minutes before you go on.
The whole thing is MIT licensed and the repository is the real one: same code that runs here. Bring your own Supabase project and Google OAuth client and you have your own instance in about ten minutes.
built with
the studio behind it
biiosBuilding what's next.
We partner with ambitious founders to build, scale and grow businesses that create real impact. Biios is a startup consulting studio in Pune, India.
Teleprompt started as a tool we needed for founder videos and launch films, and there was no reason to keep it to ourselves. It is given to the community as it is used internally: same code, no held-back paid tier.
Start a project with BiiosOnly if they are signed in to your account. Rooms are scoped to an account, and the secret that names the realtime channel is only ever returned to a signed-in device on the owning account. The six-character code is a convenience for you, not a permission grant.
Because it is a phone. Both devices show the same words on the same line, but each lays them out for its own screen.
Yes. Mirror horizontally for a standard beam-splitter rig, and flip vertically for an overhead setup. Both toggles are available from either device and take effect immediately.
The room picks it up on its own, within a few seconds. A room holds a snapshot rather than a live reference, because both devices have to render byte-identical text for positions to mean the same thing on each, but keeping that snapshot current is the app's job, not yours. Your reading position is carried across the change rather than reset.
It uses the speech recognition built into your browser, so where the audio goes is your browser's decision rather than ours. In Chrome and Edge it is streamed to the browser vendor's speech service; Safari does more of it on the device. Either way it never reaches Teleprompt, we receive no audio and store no transcript, and nothing listens until you press the microphone button.
Well enough to present with, though "well enough" is not "always". It matches the last few words you said against the part of the script you were already in, so mishearings, ad-libs and skipped lines are absorbed. It struggles in a loud room, with heavy background music, and with languages that are not written with spaces between words.
No. Teleprompt is free and MIT licensed, and the hosted version runs the same code that is in the repository. If you would rather run your own, the self-hosting guide takes about ten minutes.
Your name, email address and profile image from whichever provider you signed in with, the scripts you write, and the rooms you open. No analytics on what you say, no recordings, no third-party trackers.
Where the network allows it, yes. The two devices meet on a realtime channel, exchange WebRTC offers over it, and then move the position updates onto a direct data channel between them. The connection badge tells you which path is live: Direct or Relay. Signalling always goes through the relay, because that is what bootstraps the direct path.
No. Same Wi-Fi gives the lowest latency and the best chance of a direct route, but a phone on mobile data and a laptop on hotel Wi-Fi will still pair. They just fall back to the relay if no direct route can be found.
Something else? Troubleshooting covers the awkward cases, and the documentation covers everything else.
Most remote-prompter setups sync a scroll position. That works right up until the two devices are different shapes, which they always are. Teleprompt syncs the text itself.
What goes over the wire
{
"t": "state",
"state": {
"anchor": { "blockIndex": 42, "blockFraction": 0.31 },
"isPlaying": true,
"speedWpm": 130
}
}Block 42, a third of the way through. Every device turns that into its own pixel offset.
Devices exchange a text anchor: which block is under the reading line, and how far into it. A phone at 19px and a monitor at 72px resolve that to completely different scroll offsets and still land on the same sentence.
The two devices meet on a realtime channel, then negotiate a WebRTC data channel and move the position updates onto it. On the same Wi-Fi that is single-digit milliseconds, with no server in the path.
Locked-down networks and symmetric NATs happen. When a direct route cannot be established, the relay keeps carrying the same messages and the badge simply reads Relay instead of Direct. Nothing else changes.
Sign in with Google or GitHub on the screen you want to read from, then on the phone you want to hold. That is the entire setup.