Add your words
Type or paste a script. On Mac you can organize it into pages, open a saved .textream file, or import PowerPoint presenter notes.
01 / Start here
Textream keeps the next words close to the camera and follows your pace. The basic workflow is the same on every device.
Type or paste a script. On Mac you can organize it into pages, open a saved .textream file, or import PowerPoint presenter notes.
Use Word Tracking for speech-matched progress, Classic for steady auto-scroll, or Voice-Activated to move only while you speak.
Place the prompt near the camera, press start, and speak at your own pace. Pause, restart, or jump to another word whenever you need.
First time using voice features? Allow Microphone access. Word Tracking also needs Speech Recognition access. A Classic Read session works without either permission; mobile Record sessions still capture microphone audio.
02 / Script craft
Short sentences, intentional breaks, and quiet delivery cues make a script easier to read without sounding read.
Good morning, and thank you for being here. [smile]
Today I want to share one clear idea: when we slow down and connect with one person at a time, even a complex message becomes easier to understand. [pause]
Take a breath, look into the camera, and bring the message home. [nod]
Put cues in square brackets, such as [smile], [pause], or [look at camera]. Textream displays them in the cue color but skips them when matching your voice, so they never interrupt Word Tracking.
Start a new source line when you want a visual pause. On Mac, turn on Show Paragraph Dividers to add extra space and three centered dots before the next line. Consecutive empty lines collapse into one visual divider.
.textream file and reopen it later..pptx file into the Mac editor to turn presenter notes into pages. Export Keynote or Google Slides to PowerPoint first.Use the red microphone button to dictate directly into the current page; press it again to pause dictation. The File menu can open a .textream file or presentation, save the current file, or save a new copy.
03 / Pace
Pick the mode that matches the room. You can rehearse without a microphone, follow an unscripted delivery, or track every spoken word.
Listens through Apple Speech Recognition, matches what you say to the script, and highlights progress in real time. Choose the correct language and microphone for the strongest match.
Moves steadily from 0.5 to 8 words per second. It does not need the microphone, making it useful for silent rehearsal or a fixed speaking pace.
Uses microphone activity to scroll while you speak and pause in silence. Set the same 0.5–8 words-per-second pace used by Classic mode.
04 / During a read
The prompt follows automatically, but it never locks you into a rigid take.
05 / Complete reference
Open Textream Settings to tune how the prompt looks, follows your voice, and reaches other screens. Changes save automatically. Green labels below mark new-install defaults.
Type, color, and overlay size
Tracking, input, and pace
Anchor, context, and continuity
Placement and session behavior
Displays, Sidecar, and mirror rigs
View the live prompt in a browser
?mirror=1?mirror=0Use the Mirror button to flip the complete remote prompt horizontally for teleprompter glass. The choice is saved in that browser. Add ?mirror=1 or ?mirror=0 to a QR-code or bookmark URL to override and save the initial state.Use a trusted network. Remote Connection has no Textream cloud account or public relay. Anyone who can reach the local address may be able to see the current script and reading state.
Let another person drive the script
Bottom-left of Mac Settings
Returns every Mac setting to its new-install default after confirmation, including the closest supported system speech language and Hide from Screen Sharing set to On.
06 / iPhone & iPad
The mobile app combines the script editor, camera, follow mode, and session setup on one screen.
Adjust without ending the session. Open Mirror settings during a read to change mirroring and its axis, reading position, text size, Classic or Voice-Activated speed, and whether playback controls remain visible.
07 / Mobile reference
Open the sliders icon on the setup screen. These choices are saved for future sessions.
Saved session choices
Sliders icon on the setup screen
Session-only control
08 / Build with Textream
Textream exposes a URL scheme for one-shot prompts and a local WebSocket protocol for custom Director clients. These interfaces are available in the Mac app.
Open a prompt from another app
Open textream://read?text=… with a URL-encoded text value. Textream loads that text and starts the overlay. From Terminal, try open 'textream://read?text=Hello%20world'.
Textream also includes a macOS Service named Read in Textream. Enable it once in System Settings → Keyboard → Keyboard Shortcuts → Services, under Text. Then restart the source app if needed, select text, and choose Services → Read in Textream. Some apps with custom context menus do not expose macOS Services.
import AppKit
var link = URLComponents()
link.scheme = "textream"
link.host = "read"
link.queryItems = [
URLQueryItem(
name: "text",
value: "Welcome everyone. [pause] Let's begin."
)
]
if let url = link.url {
NSWorkspace.shared.open(url)
}
const script = "Welcome everyone. [pause] Let's begin.";
const url = `textream://read?text=${encodeURIComponent(script)}`;
window.location.href = url;
Control a live read on the local network
http://<mac-ip>:7575, and extract the 64-character AUTH_TOKEN embedded in the page. Connect to ws://<mac-ip>:7576 and send {"type":"auth","text":"<token>"} as the first frame within five seconds. Custom ports use HTTP port + 1 for WebSocket.setText starts a new Word Tracking read. updateText sends the complete script plus the latest highlightedCharCount received from Textream as readCharCount; do not calculate that offset independently, and keep the locked prefix unchanged. stop ends the overlay.words, highlightedCharCount, totalCharCount, isActive, isDone, isListening, text and cue colors, the last spoken text, and audio levels.Local network only. The token changes whenever the Director server restarts. HTTP and WebSocket traffic is not encrypted, so do not expose these ports to the internet or include the token in logs, screenshots, or shared source code.
# pip install websockets
import asyncio, json, re, urllib.request
import websockets
HOST = "192.168.1.42"
HTTP_PORT = 7575
def get_token():
url = f"http://{HOST}:{HTTP_PORT}"
with urllib.request.urlopen(url, timeout=3) as response:
page = response.read().decode("utf-8")
match = re.search(r"AUTH_TOKEN='([0-9a-f]{64})'", page)
if not match:
raise RuntimeError("Director token not found")
return match.group(1)
async def run():
async with websockets.connect(
f"ws://{HOST}:{HTTP_PORT + 1}"
) as socket:
await socket.send(json.dumps({
"type": "auth", "text": get_token()
}))
await socket.send(json.dumps({
"type": "setText",
"text": "Hello everyone.\nWelcome to the show."
}))
async for message in socket:
state = json.loads(message)
print(state["highlightedCharCount"], state["isDone"])
if state["isDone"]:
await socket.send(json.dumps({"type": "stop"}))
break
asyncio.run(run())
// npm install ws (Node.js 18+)
import WebSocket from "ws";
const host = "192.168.1.42";
const httpPort = 7575;
const page = await fetch(`http://${host}:${httpPort}`)
.then(response => response.text());
const token = page.match(/AUTH_TOKEN='([0-9a-f]{64})'/)?.[1];
if (!token) throw new Error("Director token not found");
const socket = new WebSocket(`ws://${host}:${httpPort + 1}`);
socket.on("open", () => {
socket.send(JSON.stringify({ type: "auth", text: token }));
socket.send(JSON.stringify({
type: "setText",
text: "Hello everyone.\nWelcome to the show."
}));
});
socket.on("message", raw => {
const state = JSON.parse(raw.toString());
console.log(state.highlightedCharCount, state.isDone);
if (state.isDone) {
socket.send(JSON.stringify({ type: "stop" }), () => socket.close());
}
});
See the full Director protocol in the README for every command field and state property.
09 / Safe setup
Textream has no account, advertising, analytics SDK, or Textream-operated cloud service. Features that use hardware or your local network remain under your control.
Read the support guide for quick fixes, or search existing GitHub issues. Before posting, remove private scripts, credentials, QR codes, local IP addresses, and personal details from screenshots or logs.
For a full explanation of scripts, recordings, microphone audio, speech recognition, Photos access, and local-network features, read the Textream Privacy Policy.