ai pacing copilot
AI proposes; you accept; the cue engine executes.
The Pacing Copilot is the wedge feature: real-time ASR runs on programme audio, aligns the active script to the planned rundown, and detects timing drift. When the show is four minutes long, the Copilot doesn't sound an alarm — it proposes a concrete fix. "Cut the sponsor reel (saves 90s), compress the customer panel by 2 minutes, trim Sarah's closing intro paragraph (30s). Net change: −4:00. Confidence 0.74." The producer sees a diff card with checkboxes, accepts a subset with one tap, and the rundown, prompter, and cue times reflow instantly. AI never fires cues directly. The deterministic local cue engine is the only system that triggers OSC, MIDI, OBS, vMix, or Companion events. Every cue dispatch is traceable in the immutable signed audit log back to a human acceptance.
The hard rules
- · AI proposes; humans accept; the cue engine executes. Three separated roles, no shortcuts.
- · The Copilot can only edit segments still in
plannedorstandby. Live, complete, and skipped segments are immutable. - · Total proposal delta must approximately match observed drift (within 30 seconds). Over-correcting is worse than under-correcting.
- · Confidence below 0.5 surfaces a yellow "verify" hint on the diff card.
- · Every accepted proposal writes to the immutable signed audit log with the operator's identity.
- · No voice-activated cue calling in v1 — false-trigger risk on a comms bus is unacceptable.
How it works
The producer-app pipes programme audio into Whisper.cpp transcription. Token-level timestamps on the transcribed text get aligned against the planned script via dynamic time warping. Cumulative drift = total seconds of programme audio minus total seconds of planned script consumed at this point. Once drift crosses a configurable threshold (default ±90 seconds), the producer-app POSTs the rundown state to /pacing-copilot/replan on the AI service, which calls Claude Sonnet 4.5 with a locked system prompt. The model returns a structured proposal (cut, compress, shorten, extend). The diff card UI renders it; the producer chooses.