Ctrl + Shift + A to toggle
Encode every frame. One brain, every machine working — distributed video transcoding for your own hardware.
Drop a video into TRNSCODE and it gets sliced, sent to every encoder on your LAN, encoded in parallel, then stitched back together — automatically. One machine becomes the conductor; every other machine becomes a worker that picks up chunks and returns finished video. Built for on-prem first: your own GPU rigs, your own quiet office Macs, your own laptop in the corner. Bursting to cloud is optional, never required.
Owns the job queue, the SQLite state store, the web UI, and every chunk's signed HTTP transfer. One brain per fleet.
Probes hardware, registers via mDNS, pulls chunks over signed URLs, and streams live progress back over a bidi gRPC channel.
Reads the source's keyframe index via ffprobe and picks GOP-aligned boundaries — no source re-encoding for closed-GOP H.264 / HEVC.
Scores idle workers against pending chunks on encode speed (EMA), network distance, queue delay, and capability fit — lowest cost wins.
YouTube 4K HEVC, Instagram Reels, Premiere Pro proxies, ProRes 422 HQ, DNxHR HQX, AV1 — every flag pinned, every output verified.
PyInstaller-packaged master.exe and worker.exe — Python runtime, ffmpeg, and ffprobe baked in. No installer, no PATH wrangling.
A 4 GB H.264 movie isn't encoded as one big file across the fleet. TRNSCODE slices it into chunks of ~12 seconds each (tunable per preset — ProRes gets ~30s, AV1 gets ~8s), and chunks always start on a keyframe so each worker can decode its slice independently. For closed-GOP H.264 / HEVC the planner walks the source's keyframe index via ffprobe and picks GOP-aligned boundaries — no source re-encoding. For open-GOP or unknown sources, a fast force_key_frames remux inserts keyframes at the target boundaries first. Scene-aware mode aligns boundaries to actual scene cuts so chunks never cross dissolves.
Workers don't need a shared filesystem. The master serves chunk source bytes over HTTP at GET /chunks/{id}/source and accepts encoded output at PUT /chunks/{id}/output. Every URL carries an HMAC-signed token scoped to a single chunk with a 60-minute TTL. Same-host workers use loopback. Cross-host workers dial the master's mDNS-advertised LAN IP — no static configuration on a typical LAN.
Each worker pulls the chunk, runs ffmpeg with the preset's exact argv, PUTs the encoded chunk back, and reports progress every second over a bidi gRPC stream (frame, fps, bitrate, speed, ETA). When the master sees every chunk arrive, it confirms the codec signature matches across chunks, extracts the source audio once via ffmpeg -c copy, runs ffmpeg -f concat -c copy to glue the encoded video together, and muxes the audio sidecar back in. The assembled output is verified — PTS monotonicity, duration within ±1 frame of the source, audio present if expected.
Workers don't all get equal work. The scheduler scores each idle worker against each pending chunk on four signals: runtime estimate (an EMA of historical encode speed per worker × preset class), network penalty (same-host > LAN > WAN), queue delay (idle workers prioritized), and capability penalty (NVENC-needed chunks penalize VAAPI-only workers heavily). Lowest total cost wins. Work-stealing kicks in if a chunk's been queued too long while another worker idles.
Failures are classified before retry, not after. Transient failures (network blip, signaled mid-encode, OOM with fallback) retry up to 3 times — OOM falls back to a smaller-chunk flag. Permanent failures (decode error, malformed source, codec rejection) never retry; the chunk and job both mark failed. Pause-the-job conditions (disk full on the master) pause the queue until you free space, then resume from the failed chunk forward.