TRANSCRIBE
Transcribe is the ASR + caption packaging panel. It runs batch transcription against audio/video sources, then renders deliverables as human-readable text, edit-ready subtitle formats, and broadcast caption files with format-scoped QC and timecode rules.
What it’s for (real workflows)
-
Turn interviews, dailies, podcasts, and assemblies into:
-
TXT transcripts (with optional timecode stamping)
-
SRT / VTT for NLEs, web, review links
-
SCC (CEA-608) / MCC (CEA-708 + optional 608 compatibility) for broadcast-style deliverables (BETA)
-
Scripted CSV (syncable, pipeline-friendly)
-
Burn-in MP4 when you need a quick review encode with captions burned on
-
-
Run Watch Mode to continuously process new files dropped into a folder (with guardrails so you don’t accidentally write outputs into the watched tree).
-
Hand off directly into the Subtitle Editor for cleanup and delivery-grade shaping/QC.
Engine selection and trust boundaries
Transcribe supports multiple engines (UI exposes this explicitly):
-
WhisperX (local pipeline; “accuracy mode” applies here)
-
WhisperAPI (OpenAI Whisper API integration)
-
Lead AI (local engine)
Security behavior is intentionally strict:
-
The renderer never receives API secrets. Presets are scrubbed of “apikey/token/secret” fields before saving, and the main process loads keys from secure storage when needed.
Format-scoped configuration (not one big “subtitle settings” blob)
The panel treats each deliverable format as its own little world:
-
TXT timecode stamping is controlled by Timestamp Placement (when placement = none, timecode controls are locked off).
-
SRT/VTT have shaping and QC constraints (max chars/lines/duration, CPS limits, overlap prevention, optional end-extension).
-
SCC and MCC have broadcast-specific placement and encoder constraints that don’t bleed into web-caption formats.
SCC and MCC are “special rules” deliverables
These outputs enforce constraints before (and during) export so you don’t produce files that look OK in the UI but fail in downstream tools:
SCC (CEA-608 / Scenarist)
-
Timebase is 29.97, DF is the default path.
-
SCC is only allowed when the config is in a sane state (timecodes enabled + fps ≈ 29.97 + DF/NDF rules). The UI will disable SCC selection when impossible, and will preflight-warn if inputs aren’t actually 29.97.
-
NDF SCC (: delimiter) is explicit opt-in (advanced setting).
MCC (CEA-708 + optional 608 compatibility)
-
Window placement and 708 authoring settings are tracked separately from 608 compatibility behavior.
-
CDP timecode embedding is guarded: it’s disabled when fps > 30 (SMPTE-12M BCD frame digits don’t represent >30fps cleanly).
UI safety details (the boring stuff that prevents stupid bugs)
-
File metadata display is built with DOM APIs (textContent) rather than innerHTML, so filenames/paths can’t inject script into the panel.
-
Watch Mode uses a distinct single-line “watch folder path” control and hides the per-file info grid (reduces confusion and prevents stale file lists from acting like folders).
Watch Mode (continuous transcribe)
Watch Mode is implemented as a distinct operational state:
-
It requires a folder source (not a file list).
-
It prevents Output Path inside Watch Folder (classic “infinite loop” foot-gun).
-
While watching, the Cancel button becomes Stop Watching and is kept enabled even when global queue handlers would normally disable cancel controls.
Outputs and QC philosophy
For text-based outputs (SRT/VTT and also TXT when stamping), the panel includes QC-style constraints commonly used in post:
-
max chars / max lines / max duration
-
CPS/WPM caps
-
minimum duration and minimum split duration
-
overlap prevention and controlled time extension
SCC/MCC exports also emit report sidecars when QC is enabled/gated, so “it failed” becomes “it failed and here’s exactly why.”
Subtitle Editor
Subtitle Editor is a dedicated standalone editor window for reviewing, timing, shaping, and exporting subtitle/caption files. It’s designed for “transcription is done, now make it deliverable.”
Why it’s a separate window
The editor runs in its own Electron window with:
-
a strict Content Security Policy (no inline scripts, no remote script origins),
-
contextIsolation: true and nodeIntegration: false,
-
navigation guards that prevent external URLs from loading inside a privileged window.
The editor normalizes everything into a consistent cue document model:
-
SRT
-
VTT
-
SCC (CEA-608)
-
MCC (CEA-708 + 608 compatibility bytes)
It also stores subtitle sessions, so export paths and context can survive round-trips without corrupting format identity (SRT/VTT are forced to “web-caption mode” even if you previously edited an SCC/MCC).
Export corrected text formats
The editor can export corrected:
-
SRT
-
VTT
It supports explicit “Save As” output paths or deterministic “.corrected” filenames next to your chosen output directory.
Export SCC (broadcast 608)
SCC export is guarded like a deliverable:
-
SCC is always 29.97 timebase.
-
NDF SCC is blocked unless explicitly allowed.
-
Output is verified and a QC report is written alongside the file.
-
Export policy supports a practical gating model:
-
Draft: write + warn
-
Delivery: write + fail job on QC issues
-
(and a stricter “block write” gate exists for hard-fail workflows)
-
Export MCC (broadcast 708 + optional 608 compatibility)
MCC export includes multiple layers of sanity checks:
-
Structural verification (header/timecode/ANC checks) before declaring success.
-
Content QC, optionally per-track (708 vs derived 608).
-
Optional “dual grading” and round-trip checks to catch “we generated MCC that decodes wrong” regressions.
-
Writes an MCC QC report sidecar for auditing.
Burn-in
Burn-in uses FFmpeg subtitles filter to produce a ProRes .burnin.mov for editorial review (keeps audio as copy when possible).
Security and path safety
Subtitle Editor IPC calls enforce:
-
license gating for open/export/preview/burn-in actions,
-
approved-path policies (only explicitly approved filesystem paths are accepted),
-
no remote navigation inside the subtitle editor window (external URLs open in the user’s browser instead).






