Skip to content

Live mode

Keeping up with real time

Recording never waits for transcription. ffmpeg finalizes a segment every --segment-seconds whatever the transcriber is doing, so a model that takes longer than that per segment — a large model on CPU, a busy machine, or a short --segment-seconds chosen for latency — falls further behind every segment, and "live" output quietly stops being live.

Live mode measures that backlog and warns once it is more than a couple of segments deep:

WARNING: Transcription is not keeping up: 32s of audio (4 segments) waiting to be transcribed

By default nothing is discarded: the backlog is transcribed in full, just late. To bound it, set a tolerance and a policy:

# stay close to live, discarding the oldest audio when more than 30s is queued
sys2txt live --model medium --segment-seconds 5 --max-lag 30

# or refuse to run behind: save what was transcribed and exit non-zero
sys2txt live --model medium --segment-seconds 5 --max-lag 30 --on-lag fail

drop keeps the newest audio, so the transcript has a hole where the dropped segments were. Timestamps stay true to the recording, so a gap in them is exactly that hole. Dropped audio is never counted as silence by --silence-timeout, since nobody transcribed it.

Segment files are removed as soon as they have been transcribed, so the temporary directory holds the backlog rather than the whole session either way.