Raw footage in.
Finished podcast out.

podcast-forge syncs your cameras, cuts dead air and fillers, switches angles like a human editor, matches colour, masters the audio and exports the episode, a trailer, vertical reels and thumbnails. From one YAML file. Free and open source.

# needs Python 3.10+ and FFmpeg pip install "git+https://github.com/dattaeswar/podcast-forge" pf init my-episode && cd my-episode pf run
MIT licence2+ cameras−14 LUFS mastering9:16 reels built in

What it does

Every step is automatic, tunable, and re-runnable. Change one shot and only that shot re-renders.

1

Auto multicam switching

Wide, close-up and tight punch-in per camera. Never the same look twice in a row, so every jump cut is hidden. Listener reaction shots after long answers, J-cuts, slow push-ins.

2

Tight pacing

Long pauses shortened, isolated "aa / mm" and false starts removed, optional 1.1× speed-up with the pitch preserved.

3

Voice-first audio

Uses the camera that heard your mics. High-pass, denoise, de-ess, compress, limit, then two-pass loudness to −14 LUFS. Music ducks under speech.

4

One look across cameras

Cameras matched to a reference, then a shared grade (studio_warm, cinematic, punchy…) or your own .cube LUT.

5

Photos when topics are spoken

A photo appears in an animated circle at the moment it is mentioned (matched on the transcript), and the shot underneath is reframed so the circle never covers a face.

6

Stats, text, tags

Count-up stat cards, kinetic text, name lower-thirds and chapter tags, all animated and cached.

7

Trailer + reels

Pick hooks, get a cold-open trailer with a title card. The same hooks become 9:16 reels centred on whoever speaks, with title, call-to-action and logo above the app UI.

8

Thumbnails

YouTube and reel covers with both people cut out, headline in a safe zone, topic photos, banner, logo and credit line.

9

Any language

Transcribe in any Whisper language. pf text renders Telugu, Hindi, Tamil, Arabic and more with correct shaping for titles and credits.

How a run works

Each stage reads and writes files in work/, so you can inspect, fix and re-run any step.

Syncalign cameras by audio, detect drift
Speechfind speech vs. silence
Speakersvoice model + on-camera motion
Transcriptword-level, any language
Gradematch cameras, build LUTs
Plancuts, shots, push-ins, XML
Renderoverlays, music, −14 LUFS
Extrastrailer, reels, thumbnails

What you can use it for

Anyone who films a conversation with two people on one to three cameras.

Who it is for

  • Podcasters and YouTube interview shows who want a weekly episode out in one run instead of a day in the timeline.
  • Regional-language creators (Telugu, Hindi, Tamil…) with code-switched speech and non-Latin titles.
  • Short-form clippers who turn long interviews into 9:16 reels with hooks and titles.
  • Small studios and agencies who need one consistent look across cameras and episodes.
  • Editors who want a strong rough cut: export the multicam XML and finish in Premiere, Resolve or Final Cut.

Typical jobs

You wantYou run
A full episode, masteredpf run
Find the moment someone said "funding"pf search "funding"
A different colour lookset grade.preset, pf grade
Remove a phone calledit.cuts: [[620, 700]]
Shorts from the best momentsadd reels.items, pf reels
Fine-tune by handopen out/timeline_episode.xml
Telugu credit on a thumbnailpf text "…" credit.png

Let an AI agent run it

Give your coding agent the instruction file and say "edit the podcast in ./footage". It writes the config, picks hooks from the transcript, checks frames and iterates on your notes.

Claude Code

python scripts/install_skill.py installs the skill. Then ask it to edit your podcast.

OpenAI Codex CLI

python scripts/install_agent_files.py --dest my-episode, then run codex in that folder. It reads AGENTS.md.

Gemini CLI

Same command copies GEMINI.md, which imports AGENTS.md. Run gemini in the folder.

Cursor, Aider, Grok, others

Most read AGENTS.md. If yours does not: "Read AGENTS.md and follow it". Aider: aider --read AGENTS.md.

Quick start

The minimum is two cameras and two speakers. Everything else is optional.

# project.yaml cameras: - {name: wide, file: footage/a.mp4, master: true} - {name: side, file: footage/b.mov} audio: {source: side} # camera with the mics speakers: - {id: host, name: Alex Rivera, side: R, seed: [[12, 22]]} # host talks alone here - {id: guest, name: Sam Carter, side: L} speed: 1.1
  • pf doctor checks FFmpeg and Python packages.
  • pf heads finds both faces automatically, or pf sheet to read positions by eye.
  • pf run goes from footage to out/*_Master.mp4, chapters, reels and thumbnails.
  • Add photos, music, trailer hooks and thumbnails when you want them. See the annotated example.

Full guide on GitHub

Honest limits