Device & browser matrix

Clear capabilities. Graceful fallbacks.

We do not claim universal support where APIs differ. Here is the verified capability matrix for teleprompter.wtf across modern desktop and mobile browsers, tested against real hardware.

Last verified: 23 August 2026

Compatibility at a glance

Capability / FeatureChrome / EdgeFirefoxSafari (macOS)iOS / iPadOSAndroid ChromeFallback when unavailable
Manual ScrollingFullFullFullFullFullAlways available (0 dependencies)
Smart Pace (Web Audio)FullFullFullFullFullFalls back to Manual scrolling
Private Precision (WASM)FullFullFullSupported (4GB+ RAM)Supported (4GB+ RAM)Falls back to Smart Pace
Document Picture-in-PictureSupported (v116+)Not in browserNot in browserNot in browserNot in browserVideo PiP or Pop-out window
Video Picture-in-PictureSupportedSupportedSupportedSupportedSupportedPop-out window
Screen / Camera RecordingWebM (VP8/Opus)WebM (VP8/Opus)MP4 (H.264/AAC)Camera onlySupportedExternal screen recorder / OBS
Fullscreen PresentationSupportedSupportedSupportediPadOS onlySupportedMaximized browser viewport
Horizontal MirroringSupportedSupportedSupportedSupportedSupportedCSS transform (Universal)
Offline OperationFull (PWA cache)Full (PWA cache)Full (PWA cache)Full (PWA cache)Full (PWA cache)Static cached bundle

Presentation mode capabilities

1. Manual Mode

Manual mode calculates scroll movement from continuous performance timestamps (`requestAnimationFrame`) multiplied by your selected speed setting. Because it has zero external dependencies and does not require microphone permission, it works across every browser engine, including legacy environments.

2. Smart Pace

Smart Pace relies on `navigator.mediaDevices.getUserMedia` and the standard `AudioContext` / `AnalyserNode` APIs. In modern browsers supporting `AudioWorklet`, PCM capture runs on an audio rendering thread; in older Safari builds, it gracefully degrades to a ScriptProcessor node. If microphone permission is denied or no input device is detected, the presenter clearly displays a notice and leaves manual scrolling active.

3. Private Precision Beta

Private Precision Beta runs single-threaded WebAssembly in a dedicated Web Worker via ONNX Runtime Web. Because Whisper Tiny requires around 250 MB to 400 MB of heap during peak model inference, devices with very low available RAM (such as budget phones or heavily throttled tabs) may experience sluggish updates. Whenever a recognition chunk fails or takes longer than the real-time deadline, the system drops the chunk and maintains scroll pace through Smart Pace without jumping.

Picture in Picture & compact views

Positioning your script right next to your camera lens is critical for natural eye contact. We implement a 3-tier capability hierarchy:

  • Tier 1: Document Picture in Picture (Chromium 116+) - Opens a true, floating HTML window containing the full interactive script, speed controls, and timer.
  • Tier 2: Canvas Video Picture in Picture (Firefox, Safari) - Renders script lines into a dynamically animated HTML Canvas streamed through a hidden <video> element into the standard Video PiP window.
  • Tier 3: Clean Pop-out Window - Launches a minimal, frameless browser popup window that can be positioned anywhere on your display.

Local video & audio recording

Local recording captures video streams directly into browser memory using `MediaRecorder`. Different browsers support different container formats:

  • Chromium & Firefox: Generates `video/webm;codecs=vp8,opus` files.
  • Safari (macOS 14+): Generates `video/mp4;codecs=avc1,mp4a` files.
  • Mobile Devices: Display capture (`getDisplayMedia`) is restricted by iOS and Android security policies, but Camera capture (`getUserMedia`) functions normally.

All recordings are generated as client-side Blobs. No video chunk is ever streamed to a remote server.

Hardware teleprompter rigs & beam-splitter glass

When placing an iPad, tablet, or monitor beneath a 70/30 or 60/40 beam-splitter glass hood, the reflected image is reversed horizontally. teleprompter.wtf provides hardware-accelerated CSS mirroring (`scaleX(-1)`) and vertical flipping (`scaleY(-1)`) that functions universally on all devices without requiring paid companion apps.