Feb 2026 - Present • WEB APP / CLI

MacOS app showing rough-cut paragraph view
Desktop app that transcribes footage, AI-generates rough cuts, and exports editable timelines to DaVinci Resolve.
Turning raw screencast or facecam footage into a usable rough cut means manually scrubbing through hours of audio to cut stutters, dead air, and rambling takes — tedious work that delays the creative editing that actually matters, and most AI editing tools lock footage into a cloud pipeline or a proprietary subscription instead of a professional NLE workflow.
Built a full desktop application that transcribes footage, uses an LLM to make AI-driven keep/cut decisions, and exports either directly or as a fully editable OpenTimelineIO timeline for DaVinci Resolve — with a custom LCS-based text-to-timestamp aligner and waveform-aware boundary snapping so cuts land on natural pauses rather than mid-word or mid-syllable.
Zensho is a hybrid desktop application: an Electron/React/Vite frontend drives a locally-spawned Python FastAPI backend over HTTP (bound to 127.0.0.1 for local-only traffic), chosen specifically so CPU/IO-heavy ffmpeg and transcription work never blocks the UI thread. The processing pipeline runs each video through ffmpeg audio extraction, Deepgram Nova-3 word-level transcription, and an LLM rough-cut pass (via LiteLLM, so any OpenAI-compatible or BYOK provider can be swapped in) that decides what to keep, cut, or treat as silence.
Key technical achievements include:
asyncio.Queue worker processes one video at a time through a QUEUED → PREPROCESSING → TRANSCRIBING → ROUGH_CUTTING → COMPLETED state machine, preventing concurrent ffmpeg instances and LLM rate-limit bans while the UI polls a /status endpoint for live progress..otio timeline (plus FCP XML) from the same 'resolved timeline' used for the in-app preview player and MP4 export, linking video/audio clips via matching reel metadata so Resolve treats them as synced pairs — letting editors drag the AI's decisions straight into a professional NLE with every cut still editable.rough_cut_ai) are never overwritten — user edits are stored as a separate rough_cut_human layer, with all exporters resolving rough_cut_human ?? rough_cut_ai per video, so some clips in a project can carry human edits while others still use the raw AI cut.run, process, export, status, config) for scripted or headless use.