Backends
Two transcription backends are available. Admins can switch between them at runtime via the System page in the web app — no code deployment needed.Local (Whisper.cpp)
Runs entirely on the worker machine. Audio never leaves your infrastructure.- Model files must be present in the
ai_models/volume - The worker must restart to load the model (switching back to local from Foresight requires a restart)
- Accuracy depends on the model size loaded
Foresight (remote inference)
Audio is posted to an OpenAI-compatible endpoint ({base_url}/audio/transcriptions). Results come back in verbose_json format with word-level timestamps.
- Faster and generally more accurate than local models
- Requires network access to the Foresight cluster
base_urlandapi_keyare set inconfig.yml— not editable from the admin UI (security boundary)- The realtime model and final model can be set separately from the admin UI
Diarisation (speaker labelling)
Diarisation assigns a speaker label (S1, S2, etc.) to each transcript segment so you know who said what.
Important: Diarisation only runs on the final full-audio transcription — never on individual chunks. Enabling diarisation on a chunk-based recording has no effect until finalisation.
When Foresight diarisation is enabled, pyannote still runs locally to compute voiceprint embeddings for cross-session speaker identity — but its labels are mapped to match Foresight’s output.
If diarisation is disabled, segments still get speaker labels from Foresight but no identity matching runs.
Runtime configuration (admin)
Admins can change the following at runtime from Admin → System → Transcription:base_url and api_key are config-file only — not exposed in the admin UI.
Transcript format
Transcripts are stored as structured segments:S1 in session A is the same person as S1 in session B) requires voiceprint matching, which runs when diarisation is enabled.