| name | podguy-post-production |
| description | Use for generic podcast and video-podcast post-production. Run the repo's transcript and optional visual scanner tools on episode media, prepare transcript artifacts, propose YouTube/podcast chapters, and give editorial feedback such as cuts, clips, show notes, quotes, highlights, and proper noun cleanup. |
| compatibility | Launch pi from the repository root. The visual scanner requires macOS and Swift. The transcript CLI requires Python 3.9+, uv, and an installed transcription backend. |
podguy Post Production
This repository is meant to be operated through pi from the repo root.
Goal
Help with repeatable post-recording podcast editing for any podcast or video podcast.
Use this workflow when the user wants any of the following:
- analyze a new episode recording, draft export, or preview media file
- generate a transcript for the current cut of the episode
- prepare transcript artifacts for long-context editorial review
- find likely interstitial or inserted-content timecodes in video episodes
- propose YouTube or podcast chapter markers
- review the episode for cuts, highlights, clips, weak sections, and publishing assets
- cut/export selected clip candidates for TikTok, Reels, YouTube Shorts, trailers, or social review
Podcast profile
Prefer show-specific context from podguy.toml when it exists. If only podcast.toml exists, use that as a compatible profile file.
Use profile fields such as:
show_name
show_slug
hosts
tone
audience
chapter_style
preferred_review
[outputs] toggles
Do not assume a specific show, hosts, audience, tone, domain, or episode naming pattern unless the user or profile provides it.
If profile context is missing, only ask for it when it affects the requested deliverable. For example, chapters usually do not need a full show profile; publishable show notes might.
Natural-language UX
Assume the user will ask in plain English and may not know or remember slash commands.
Prompt templates such as /prepare-analysis, /phase1, /full-review, /chapters, and /cuts are optional shortcuts for power users, not required vocabulary.
When the request is ambiguous, ask one short clarifying question before deciding how much work to do.
Use this default clarification:
- quick pass = optional video scan + transcript + prepared transcript artifacts + short summary
- full review = quick pass + chapters + clips + cuts + show notes + quotes + proper noun review
If the user already clearly asked for a specific deliverable, do that directly instead of asking.
For synthetic or test fixture inputs, default to a leaner evaluation mindset and prefer a quick pass unless the user explicitly asks for the full editorial bundle.
Default workflow
Quick pass
- Start from the input media file. It can be audio or video as long as
scripts/transcribe_video.py can process it.
- If the input is video, optionally run the visual scanner to find likely interstitials and other non-host inserts. Skip this for audio-only inputs.
- Run the transcript tool on the same media file.
- Prepare deterministic transcript artifacts for pi with
scripts/prepare_transcript_analysis.py.
- Return a short grounded summary with:
- scan status and likely interstitials / non-host inserts when applicable
- transcript status
- prepared artifact paths
- suggested next step if the user wants more
Full review
After the quick pass, use the prepared transcript artifacts to generate episode outputs with pi-driven judgment:
- chapters
- clip candidates
- cuts for time
- show notes and likely links
- quote sheet
- proper noun review
Write the outputs under dist/analysis/ and summarize what was produced.
Scripts vs pi
Keep this boundary clear:
- repo scripts should do deterministic work such as scanning, transcribing, chunking, indexing, and formatting support
- pi should do editorial judgment such as chapter selection, clip selection, cut suggestions, show notes, quotes, and proper noun review
Do not build a second heuristic editorial brain in local scripts when pi can reason over prepared artifacts directly.
Output locations
Unless the user asks for different paths or the profile config says otherwise, write generated artifacts under dist/analysis/.
Recommended single-show pattern:
dist/analysis/<episode>/scan/
dist/analysis/<episode>/transcript/
dist/analysis/<episode>/transcript_large/ when keeping multiple transcript variants
dist/analysis/<episode>/transcript_chunks.md
dist/analysis/<episode>/transcript_index.json
dist/analysis/<episode>/chapters.txt
dist/analysis/<episode>/clips.md
dist/analysis/<episode>/clips/cuts/
dist/analysis/<episode>/clips/shorts/
dist/analysis/<episode>/cut_report.md
dist/analysis/<episode>/show_notes.md
dist/analysis/<episode>/quotes.md
dist/analysis/<episode>/proper_nouns.md
dist/analysis/fixtures/<fixture>/... for test-media outputs
dist/test-fixtures/open-license/cordkillers-572/ for the optional downloaded Cordkillers sample
For multi-show usage, prefer:
dist/analysis/<show-slug>/<episode>/...
If the repo already has outputs for the same episode and media version, prefer reusing them unless the user asks for a fresh run.
Visual scan
Run this only for video inputs.
Command:
swift scripts/scan_podcast.swift <input-video> <output-dir> [sample-interval-seconds]
Example:
swift scripts/scan_podcast.swift "episode-006-draft.mp4" dist/analysis/ep006/scan 0.5
Key outputs:
interstitial_candidates.csv
non_host_candidates.csv
report.html
thumbs/
Important: the scanner is heuristic. Use it to narrow review work, not to claim exact edit points.
Transcript generation
Check available backends first if needed:
uv run python scripts/transcribe_video.py --list-backends
Preferred order:
mlx-whisper on Apple Silicon
faster-whisper on other machines
whisper if that is the installed option
mock only for tests or setup validation
Command:
uv run python scripts/transcribe_video.py <input-media> <output-dir> [options]
Examples:
uv run --group transcribe-mlx python scripts/transcribe_video.py \
"episode-006-draft.mp4" \
dist/analysis/ep006/transcript \
--backend mlx-whisper
uv run --group transcribe-faster python scripts/transcribe_video.py \
"episode-006-draft.mp4" \
dist/analysis/ep006/transcript \
--backend faster-whisper
Key outputs:
segments.json
transcript.txt
transcript.srt
transcript.vtt
summary.txt
Transcript analysis prep
Command:
uv run python scripts/prepare_transcript_analysis.py <transcript-dir> [options]
Example:
uv run python scripts/prepare_transcript_analysis.py \
dist/analysis/ep006/transcript \
--output-dir dist/analysis/ep006 \
--slug ep006 \
--plain-output-names
Key outputs:
dist/analysis/<episode>/transcript_chunks.md
dist/analysis/<episode>/transcript_index.json
Use these prepared artifacts as the main input for chaptering and editorial analysis.
Prefer reusing prepared artifacts when they already match the requested transcript and slug.
Prompt templates
When prompt templates are available, treat them as optional shortcuts for the repo-local workflow:
/prepare-analysis
/phase1
/full-review
/chapters
/clips
/cuts
/cut-clips
/show-notes
/quotes
/proper-nouns
Do not assume the user knows these names. Prefer natural-language clarification first, and mention the shortcut only if it would help.
Required deliverables
For a quick pass
-
Scan status
- whether visual scanning was run, skipped for audio-only input, or unavailable
- likely interstitial timecodes when applicable
- likely non-host insert timecodes when applicable
- any scan caveats
-
Transcript status
- transcript output path
- backend and model used, if relevant
-
Prepared transcript status
- prepared artifact paths
- whether they were reused or freshly generated
-
Short editorial summary
- strongest moment or two
- biggest obvious cut or cleanup opportunity
- suggested next step if the user wants a full review
For a full review
Include the quick-pass deliverables plus:
-
Chapters
- derive from the prepared transcript artifacts and overall episode flow
- keep titles concise and descriptive
-
Editorial outputs
dist/analysis/<episode>/clips.md
dist/analysis/<episode>/cut_report.md
dist/analysis/<episode>/show_notes.md
dist/analysis/<episode>/quotes.md
dist/analysis/<episode>/proper_nouns.md
Chapter format
When the user asks for sections or chapters, return them as one timestamp-and-title per line.
Format:
00:00 Intro
05:34 Main topic begins
01:12:10 Final takeaways
Rules:
- first line must start at
00:00
- no bullets or numbering inside the chapter list
- use
HH:MM:SS when a timestamp goes past one hour
- keep titles short enough to paste directly into YouTube or podcast platforms
- follow
chapter_style from podguy.toml when present
Editorial analysis guidance
Use the prepared transcript artifacts as the primary source for transcript-heavy analysis, and use raw transcript files only when you need additional detail.
Use transcript evidence and timecodes whenever possible.
Focus on:
- what to cut for time
- where the episode gets stronger or weaker
- where the speakers repeat the same point
- which segments are most likely to make good clips
- what belongs in show notes or a quote sheet
- which names, products, or terms look suspicious and should be reviewed
- where interstitials or inserted visuals would help pacing or context, when video is available
Clip cutting
When the user wants actual media files for likely clippable moments, use the podguy-clip-cutter skill and scripts/cut_clips.py after clip candidates have been selected.
Default original-aspect command:
uv run python scripts/cut_clips.py \
<input-media> \
dist/analysis/<episode>/clips.md \
dist/analysis/<episode>/clips/cuts
Vertical Shorts/TikTok/Reels review export:
uv run python scripts/cut_clips.py \
<input-media> \
dist/analysis/<episode>/clips.md \
dist/analysis/<episode>/clips/shorts \
--aspect vertical \
--pad-start 1 \
--pad-end 1
Treat generated clips as review exports, not final edit points. Warn when simple center-crop vertical framing may cut off speakers, slides, or screen shares.
If you suggest cuts, explain why:
- repetitive
- speculative without payoff
- low energy
- too niche relative to the main thesis
- setup chatter that should not survive the final edit
References