TRANSCODE
The Transcode panel is a format-aware transcoding and packaging tool for post deliverables: proxies, mezzanine masters, review encodes, archival intermediates, and image sequences. It’s built around the principle that “unsupported” should never be a surprise halfway through an export—capability detection and compatibility filtering happen up front.
What it’s for (real workflows)
-
Generate editorial proxies (H.264/H.265) with deterministic settings.
-
Make mezzanine / finishing intermediates (ProRes flavors, FFV1, uncompressed).
-
Create image sequences (EXR/PNG/TIFF/TGA sequences) when you need frame-accurate pipelines.
-
Batch transcode a stack of mixed sources while preserving predictable naming and folder output.
-
Run continuous watch-folder transcodes for dailies/proxy automation.
-
Attach broadcast caption sidecars into MXF when a delivery demands embedded captions (with explicit constraints).
Capability-driven UI (fail-closed):
Output format options are populated from a runtime capability source (“Codex”) so the UI only offers formats that the bundled FFmpeg build can actually encode. If no supported formats can be detected, the panel intentionally offers nothing and surfaces a clear error—this avoids a dangerous “UI promises something your legal/static FFmpeg build can’t do.”
Probe-first metadata pipeline:
When you select source files, the panel runs ffprobe JSON reads and builds a per-file grid showing container, resolution, frame rate (including DF/NDF labeling), audio summary, and duration. Probing runs concurrently (bounded) to keep UI responsive on large batches.
Queue-based execution:
Starting a transcode submits a job to a background queue (queue-add-transcode) instead of blocking the UI thread. Progress events update a unified progress bar and per-job status events drive the UI state.
Inputs and outputs
-
Common containers: MOV, MP4, MKV, MXF, WebM, AVI, and image sequence output.
-
Video settings: output format, container format, resolution, frame rate, pixel format, color range, field order, optional LUT path.
-
Audio settings: codec selection (format-aware), channel layout controls, sample rate, bitrate, normalization, and audio delay.
Guardrails and validation (designed to prevent silent wrong output)
Hard blocks (won’t start):
-
Sequence/Container mismatches: sequence formats require an image-sequence container, and image-sequence containers require a sequence format. This is treated as an error to prevent “it ran but gave the wrong thing.”
-
Watch mode folder validity: watch mode requires a directory input, a directory output, and blocks output paths that are the same as (or nested inside) the watched folder.
-
Captions attach mode constraints: caption embedding requires MXF and Match Source, requires exactly one input file, and only accepts .mcc / .scc.
Compatibility filtering (format-aware):
-
Containers, resolutions, frame rates, pixel formats, and audio codecs can be filtered based on the selected output format via Codex compatibility lookups.
-
Defaults can be pulled from backend-provided normalized values to reduce renderer drift and keep behavior consistent across releases.
Collision avoidance:
The panel checks for output path collisions (output equaling an input path) and blocks configurations that could overwrite sources.
Metadata preservation behavior:
When “Preserve Metadata” is enabled, the panel warns about container limitations (notably MP4 and image sequences). For outputs that can’t safely embed certain metadata/tracks, it can fall back to writing a sidecar metadata JSON instead of pretending everything is preserved.
Verification and QC options
The panel includes verification modes intended for post-style confidence checks:
-
Duration / Frame verification (lightweight sanity checks)
-
SSIM / PSNR verification (quality metrics)
There’s also an option to save verification logs for QC traceability.
Automation: Watch Mode and webhook logging
A dedicated watch-folder workflow swaps the input UI from file list to a single-path “watch folder” row, hides per-file probing UI, and emphasizes continuous operation with clear “start watching / stop watching” controls.
Webhook logging (n8n):
Webhook logging validates the URL format and (by default) rejects localhost/private network targets unless explicitly allowed. This is a deliberate safety measure to avoid accidental internal routing and reduce data leakage risk.
Safety and security (specific to this panel)
-
XSS mitigation in file metadata UI: the file info grid is built with DOM APIs (textContent) rather than innerHTML, blocking filename/path injection from becoming script execution in the panel UI.
-
Path approval for dropped files: dropped LUT paths are routed through an approval step before being saved/used, preventing untrusted path strings from entering persistent config without validation.
-
Main-process execution: ffmpeg/ffprobe execution is mediated by the main process; the renderer does not get to pick executable paths.
Logs and troubleshooting
-
Transcode emits structured log messages to a central log stream and mirrors key lines into the panel’s inline log box during long jobs.
-
The panel maintains log buffers with trimming limits to prevent runaway memory usage during lengthy sessions.
