Local, privacy-first teleprompter that can follow your voice (Speech Recognition) and optionally accept commands from a phone remote on the same Wi-Fi.
- Voice tracking: highlights/advances words as you speak (low-latency with interim results).
- Auto-scroll mode (fixed speed).
- Pop-out prompter view (for a second monitor).
- Mirror mode (for teleprompter rigs).
- Phone remote (Start/Stop, reset, word/sentence nudges, speed).
- Node.js 18+.
- For voice tracking: Chrome / Edge recommended (Firefox/Safari often do not support Web Speech).
cd /home/soso/voice-prompter
npm install
npm startOpen the URL printed in the terminal (for example http://localhost:32177/app).
If the port is already in use, the server will automatically try the next uncommon port and print the new URL.
Force a specific port:
PORT=45678 npm startDev mode (auto-restart on file changes):
npm run dev- Open
/app. - Paste or type your script on the left.
- Pick a mode:
- Voice Tracking: press Start and read normally; the highlight should follow your speech.
- Auto-Scroll: press Start and adjust Scroll Speed.
- Controls:
- Space: Start/Stop
- Left/Right: nudge a word
- PgUp/PgDn: jump by sentence
- Phone remote:
- Click "Open Remote" to show a QR code/link.
- Open it on your phone (same Wi-Fi). The remote controls the desktop prompter.
- Your script stays in your browser (localStorage) and is not uploaded by this app.
- Depending on your browser/OS, Speech Recognition may require an internet connection and may send audio to a speech service.
- The phone remote is a WebSocket connection to your own server (typically on your LAN).
- "EADDRINUSE" / port conflict: run
npm startand use the URL it prints (it will pick another port), or setPORT=.... - "Voice Unsupported": use Auto-Scroll mode, or switch to Chrome/Edge.
- "It's still running old code": hard refresh (
Ctrl+Shift+R) or open an incognito window (service worker caching). - Remote won't connect: make sure you opened a LAN IP URL (not
localhost) and the phone is on the same Wi-Fi.
MIT. See LICENSE.
