Text-based, local-first video & podcast editor.
Cut video or audio by deleting words — local, private, and free, all on your Mac.
🔒 100% local & private · 💸 Free transcription · 🔇 Silence auto-trim · 💬 Caption burn-in · 🎬 One-click export
Poddie turns podcast editing into text editing. Import a recording — video or audio-only — get a word-level transcript, then delete the words you don't want, and Poddie cuts the media to match. What takes an hour of timeline scrubbing now takes minutes of proofreading.
Built for podcasters and creators who don't have time to edit their footage.
- 🎙️ Transcribe free & offline with a local Whisper model — or use OpenAI's API (~$0.006/min) when you want it faster.
- ✂️ Edit by deleting words — select words or silences, hit delete, done. Full undo/redo.
- 🔇 Silence auto-trim — strip dead air across the whole episode in one click, no hunting for gaps.
▶️ Preview instantly — the player skips your cuts live, no re-encoding, with a zoomable waveform for frame-precise selections.- 💬 Caption burn-in — generate captions from your transcript and burn them straight into the video. The kind of subtitle feature other editors put behind a subscription.
- 📤 Export anything — cut video (MP4), audio-only podcast (M4A/MP3), or captions as a standalone SRT file. Audio sources export audio and captions — no fake video track.
No lock-in, no hidden database, no cloud.
Beta / personal tool. Poddie was built for one person's podcast workflow and runs on macOS only. Expect rough edges, and see Known limitations before relying on it.
| Requirement | Notes |
|---|---|
| macOS (Apple Silicon or Intel) | Distributed as a universal build. Uses h264_videotoolbox with a libx264 software fallback, and probes both Homebrew prefixes (/opt/homebrew on Apple Silicon, /usr/local on Intel). Best-tested on Apple Silicon. |
| Node.js 22+ and npm | To run or build from source. |
| ffmpeg | brew install ffmpeg-full recommended — the standard ffmpeg bottle works but lacks libass, so caption burn-in is disabled (SRT export still works). |
| whisper.cpp (optional) | brew install whisper-cpp — only needed for the free local transcription engine. Without it, the OpenAI API engine still works. |
| OpenAI API key (optional) | Only needed for the API transcription engine. Set OPENAI_API_KEY, or enter it once in the app. |
Poddie shells out to system
ffmpeg/ffprobe/whisper-cli(it does not bundle them), preferring theffmpeg-fullkeg (either Homebrew prefix), then/opt/homebrew/bin→/usr/local/bin→PATH, health-checking each. Override withPODDIE_FFMPEG,PODDIE_FFPROBE, orPODDIE_WHISPER_CLI.
git clone https://github.com/SinanTang/poddie.git
cd poddie
npm install
npm run devOptionally create a .env in the repo root so the app picks up your API key in dev:
OPENAI_API_KEY=sk-...
npm run dist:dir # unpacked universal Poddie.app in dist/mac-universal/ (try this first)
npm run dist # a universal .dmg in dist/The build is ad-hoc signed, not notarized. The first time you open it, macOS Gatekeeper will warn about an "unidentified developer" — right-click the app → Open, then confirm, and it launches normally from then on.
- Open Media… — pick a video (
.mov/.mp4/.m4v) or audio file (.m4a/.mp3/.wav/.flac/.ogg/.opus/.aac). iPhone HEVC is auto-converted to an H.264 preview proxy, and audio Chromium can't play (e.g. ALAC) to an AAC one — your original is untouched and is what gets exported. - Choose how to transcribe in the header — Local model (free, private, no key) or OpenAI API (paste your key). Local's first run downloads a ~1.6 GB Whisper model once. You'll see a cost/time estimate and confirm.
- Edit — click a word to seek; drag or shift-click to select, then ⌫ to cut (press again on a fully-cut selection to restore). Double-click a word to fix its text. Use ✂ Trim silences to bulk-remove dead air.
- Preview — the player skips your cuts live. Zoom the waveform for precise selections.
- Export the cut video, audio-only, or captions. (Audio sources offer audio and captions only.)
Keyboard: Space play/pause · ←/→ ±3s · ⌘F search · ⌘Z/⇧⌘Z undo/redo.
- Your edits are saved as a sidecar next to the source video:
<video>.poddie.json(API engine) and<video>.poddie.local.json(local engine). Each engine keeps its own file, so switching engines swaps transcript + edits without losing either. These files are plain JSON — readable, diffable, no hidden database. - App data (preview proxies, waveform peaks, extracted audio, downloaded Whisper models,
logs, and your saved API key) lives in
~/Library/Application Support/poddie/.
Two things to know:
- Keep the video where it is. The sidecar is tied to the video's path — move or rename
the video and its project file is orphaned. If you move the video, move its
.poddie*.jsonfiles alongside it. - The video's folder must be writable for edits to save. A video opened from a read-only location (mounted DMG, locked SD card) will transcribe but fail to save a project.
Poddie is an Electron + Vite + React + TypeScript app. Main process (Node/ffmpeg/fs),
preload bridge, and renderer (React UI) live under src/.
npm run dev # run in development (hot reload)
npm test # unit tests (Vitest)
npm run typecheck # tsc --noEmit
npm run lint # eslint- Architecture & conventions:
CLAUDE.mdexplains the core edit model (non-destructiveEditItem/keptRanges), the media-serving approach, and the packaging gotchas. - Design decisions & history:
docs/development/records every architecture decision. - Keep business logic as pure, unit-tested functions (see
src/shared/).
Please open an issue to discuss substantial changes before a PR.
- macOS only. Universal build runs on Apple Silicon and Intel; no Windows/Linux. Best-tested on Apple Silicon.
- Depends on Homebrew tools —
ffmpeg/whisper-cliare not bundled; other users must install them (see Requirements). - Tuned for iPhone H.264/HEVC recordings; exotic codecs are untested.
Poddie is licensed under the GNU General Public License v3.0 or later. See LICENSE for the full license text.