
Podcli
โ 19from nmbrthirteen
Generate upload-ready clips from podcast.
Open-source AI podcast clipper.
Generate short clips in 9:16, 16:9, or 1:1 with face tracking and burned-in captions. CLI, MCP server, and web app.
podcli.com ยท Quick start ยท MCP ยท Features
podcli process episode.mp4One command transcribes, picks the best moments, crops to the face, and burns captions in. Nothing leaves your machine.
What It Does
podcli takes a long-form podcast and turns it into a complete content operation:
Record episode
โ
Transcribe (Whisper, speaker detection)
โ
Find viral moments (Claude AI + audio energy + knowledge base)
โ
Render clips (9:16, 16:9, or 1:1, captions, smart crop, normalized audio)
โ
Generate content package (titles, descriptions, thumbnails, SEO) โ PodStack
โ
Publish with optimization checklist โ PodStack
โ
Review performance โ PodStackThe first half is video processing โ podcli's core engine. The second half is content workflow โ powered by PodStack, a set of Claude Code slash commands that ship with podcli. Both halves are deeply integrated: the clip suggestion engine reads from your PodStack knowledge base, uses your title formulas and voice rules, checks the episode database for duplicates, and outputs MCP-aligned fields that flow through to export.
How It Works (From a User's Perspective)
1. Drop in your episode
podcli # then choose "Open Web UI"
# โ http://localhost:3847Drag your video into the Web UI, or use the CLI:
podcli process episode.mp42. Get clips automatically
podcli uses Claude to analyze your transcript against your show's knowledge base, finding the most viral moments. It scores each one on 4 dimensions, suggests clips with multi-cut segments (cutting out filler), and lets you toggle them on/off before rendering.
Clips come out as upload-ready Shorts: 1080x1920, 9:16 vertical, with burned-in captions, normalized audio, and your logo.
3. Generate the full content package
Open the project in Claude Code and run:
/produce-shortsThis runs the PodStack pipeline โ a gstack-style workflow that gives you:
- 8-15 scored moments with timestamps, categories, and reasoning
- 8 title options per clip following your show's title spec (verified against 6 quality gates)
- Ready-to-paste descriptions with hooks, guest attribution, hashtags, SEO keywords
- Thumbnail briefs for both podcast (16:9) and shorts (9:16) formats
- Brand review that catches banned words, voice violations, and weak hooks
- Publish checklist covering pre-upload, at-publish, first-24-hours, and day 3-4 optimization
4. Publish and track
Run /publish-checklist when uploading. A week later, run /retro-episode with your YouTube Studio stats to see what worked and what to improve.
The Two Halves
| Video Engine (podcli core) | Content Workflow (PodStack) | |
|---|---|---|
| What | Transcription, clip detection, rendering | Titles, descriptions, thumbnails, publishing |
| How | Python + FFmpeg + Whisper + OpenCV + Claude/Codex | Claude Code slash commands |
| Interface | Web UI, CLI, MCP tools | /slash-commands in Claude Code |
| Output | .mp4 files ready to upload | Content packages ready to paste into YouTube |
Both halves share the same knowledge base (.podcli/knowledge/) โ your show's brand, voice, title formulas, episode database, and style guide. Set it up once, everything stays on-brand.
Features
Video Processing
- AI clip suggestion โ Claude/Codex-powered moment detection with knowledge base context, multi-cut segments, 4-dimension scoring
- Multi-format output โ vertical 9:16, horizontal 16:9, or square 1:1 (
--format, the studio selector, or thecreate_clipMCP tool); captions scale to each canvas. Defaults to vertical. - Import from a URL โ paste a YouTube or direct video link in the studio to download and process it
- Face tracking โ YuNet face detection, exponential-smoothing camera, split-screen support, speaker-aware tracking with snap cooldown
- Burned-in captions โ 4 styles: branded, hormozi, karaoke, subtle
- Hardware-accelerated encoding โ VideoToolbox (Mac), NVENC (NVIDIA), VAAPI, CPU fallback
- Smart cropping โ center crop or face tracking (handles split-screen, Riverside-style mixed layouts)
- Multi-segment clips โ automatically cuts out filler, long pauses, and tangents
- Whisper transcription โ auto-transcribe with speaker detection (tiny โ large)
- Transcript import โ paste
Speaker (MM:SS), JSON, drag-drop.txt/.srt/.vtt
Content Workflow (PodStack)
/process-transcriptโ extract and score best moments from any transcript/generate-titlesโ 8 titles per clip with 6-point verification checklist/generate-descriptionsโ descriptions + hashtags + SEO keywords/plan-thumbnailsโ thumbnail text + designer briefs for both formats/review-contentโ paranoid brand check (banned words, voice, title rules)/produce-shortsโ full pipeline: transcript โ publish-ready package/publish-checklistโ pre/post-publish optimization/retro-episodeโ performance analysis after publishing
Infrastructure
- Knowledge base โ
.mdfiles that teach the AI your brand, voice, and style - Asset management โ register logos and videos for quick reuse
- Clip history โ tracks everything to avoid duplicates
- Preset system โ save named configurations per show
- Content studio โ generate titles, descriptions, tags, and hashtags in the web UI; regenerate any section with your own guidance, or ask for anything custom
- MCP server โ 17 tools for Claude Desktop / Claude Code integration
- Web UI โ single-page flow at
localhost:3847 - CLI โ one-command processing:
podcli process episode.mp4
Knowledge Base
The knowledge base is what makes podcli understand your show. Drop .md files into .podcli/knowledge/ and both the video engine and content workflow use them. The clip suggestion engine reads 8 of these files (prioritized by relevance), checks the episode database for duplicate avoidance, and applies your voice rules and title formulas when generating suggestions.
PodStack ships with 13 starter templates that you fill in with your show's details:
| File | What It Teaches The AI |
|---|---|
00-master-instructions.md | Auto-detection rules, decision tree, quality gates |
01-brand-identity.md | Show name, positioning, tagline, hosts, format |
02-voice-and-tone.md | Voice fingerprint, banned words, the Coffee Test |
03-episodes-database.md | Episode tracking, existing shorts (for dedup) |
04-shorts-creation-guide.md | Moment types, selection criteria, extraction process |
05-title-formulas.md | Title shapes, rules, templates by content type |
06-descriptions-template.md | Description formulas, hashtag library, SEO keywords |
07-thumbnail-guide.md | Layouts, brand colors, typography, visual specs |
08-topics-themes.md | Core topics, cross-cutting themes, audience map |
09-content-workflow.md | End-to-end workflow phases, handoff specs |
10-internal-processing.md | Auto-execution rules, internal quality gates |
11-inspiration-channels.md | Reference channels, viral hooks, hybrid formulas |
12-quick-reference.md | Copy-paste hooks, hashtags, CTAs, checklists |
Manage via the web UI at /knowledge.html (drag & drop, inline editor) or through the knowledge_base MCP tool.
MCP Server (Claude Integration)
podcli is a Model Context Protocol server โ Claude can use it as a tool to create clips through conversation.
Claude Code โ register the bundled MCP server in one command:
podcli mcp installClaude Desktop โ add to claude_desktop_config.json:
{
"mcpServers": {
"podcli": {
"command": "podcli",
"args": ["mcp"]
}
}
}MCP Tools
| Tool | Description |
|---|---|
transcribe_podcast | Transcribe audio/video with Whisper + speaker detection |
suggest_clips | Submit clip suggestions (includes duplicate check) |
create_clip | Render a single short-form clip as a vertical short |
batch_create_clips | Render multiple clips in one batch |
knowledge_base | Read/manage podcast context files (hosts, style, audience, etc.) |
manage_assets | Register/list reusable assets (logos, videos) |
clip_history | View previously created clips, check for duplicates |
get_ui_state | Read current session state and get workflow next-step guidance |
modify_clip | Adjust a suggested clip's timing, title, or caption style (or delete it) |
toggle_clip | Select or deselect a suggested clip for export |
update_settings | Update rendering settings (caption style, crop strategy, logo, outro) |
list_outputs | List all rendered clip files in the output directory |
manage_presets | Save, load, list, or delete rendering presets |
analyze_energy | Analyze audio energy levels to find high-energy moments |
set_video | Set the working video file without transcribing |
import_transcript | Import an external transcript with word-level timestamps (skips Whisper) |
parse_transcript | Parse raw speaker-labeled plain text into word-level timestamps |
Caption Styles
| Style | Look |
|---|---|
| branded | Large bold text, dark box highlight on active word, gradient overlay, optional logo |
| hormozi | Bold uppercase pop-on text, yellow active word (Alex Hormozi style) |
| karaoke | Full sentence visible, words highlight progressively |
| subtle | Clean minimal white text at bottom |
Project Structure
podcli/
โโโ cli/ # Go launcher (native binary, provisioning, self-update)
โโโ install.sh / install.ps1 # node-less installers
โโโ setup.sh # dev environment setup (venv + npm)
โโโ package.json
โโโ CLAUDE.md # PodStack master config
โ
โโโ .claude/commands/ # PodStack slash commands
โ โโโ process-transcript.md
โ โโโ generate-titles.md
โ โโโ generate-descriptions.md
โ โโโ plan-thumbnails.md
โ โโโ review-content.md
โ โโโ produce-shorts.md
โ โโโ publish-checklist.md
โ โโโ retro-episode.md
โ
โโโ src/ # TypeScript
โ โโโ index.ts # MCP server entry (stdio)
โ โโโ server.ts # MCP tool definitions
โ โโโ config/paths.ts
โ โโโ models/index.ts
โ โโโ handlers/ # MCP tool handlers
โ โโโ services/
โ โ โโโ python-executor.ts
โ โ โโโ file-manager.ts
โ โ โโโ asset-manager.ts
โ โ โโโ clips-history.ts
โ โ โโโ knowledge-base.ts
โ โ โโโ transcript-cache.ts
โ โโโ ui/
โ โโโ web-server.ts # Express server + API
โ โโโ public/ # Frontend (React SPA)
โ
โโโ backend/ # Python
โ โโโ main.py # stdin/stdout JSON dispatcher
โ โโโ cli.py # CLI entry point
โ โโโ presets.py
โ โโโ requirements.txt
โ โโโ models/ # ML model files
โ โ โโโ face_detection_yunet_2023mar.onnx
โ โโโ services/ # Whisper, FFmpeg, captions, face tracking, etc.
โ โ โโโ face_detector.py # shared YuNet face detector
โ โ โโโ ...
โ โโโ config/
โ โโโ caption_styles.py
โ
โโโ .podcli/ # config home (gitignored) โ knowledge, presets, assets
โ โโโ knowledge/
โ โโโ assets/
โ โโโ presets/
โ โโโ history/
โโโ data/ # runtime data (gitignored) โ cache, output, working
โโโ cache/ # CLI transcription cache + remotion bundle
โ โโโ transcripts/ # MCP/UI transcript cache
โโโ output/ # rendered clips
โโโ working/ # temp uploads and task dirsTranscript Format
Speaker Name (00:00)
What they said goes here as plain text.
Another Speaker (00:45)
Their response text here.The time offset field (default: -1s) shifts all timestamps to sync with audio.
Install
No prerequisites โ the install fetches a self-contained binary, and the first run provisions everything it needs (Python, Node, FFmpeg, whisper.cpp, models) into a managed directory. You don't need Go, Node, Python, or FFmpeg installed.
macOS / Linux
curl -fsSL https://podcli.com/install.sh | shWindows (PowerShell)
irm https://podcli.com/install.ps1 | iexThen just run it โ the first launch sets itself up:
podcli # interactive menu (and Web UI)
podcli process episode.mp4 # transcribe + export clipsSupported platforms: macOS (Apple Silicon), Linux (x64 / arm64), Windows (x64). Intel Macs are coming in a follow-up release.
To uninstall, remove podcli and everything under its managed folder โ runtime, models, cache, and your config, knowledge, presets, assets, and history:
podcli uninstallThis removes all managed data by default. Run podcli uninstall --dry-run first to see exactly what will be removed, and back up the folder if you want to keep any of it. (--purge is kept as a no-op alias.)
Optional, for AI clip suggestion and the PodStack slash commands: install Claude Code or Codex (auto-detected).
Building from source needs Go 1.23+ (and Node for the studio bundle); see
plans/native-cli.md.
Usage
Web UI
podcli # then choose "Open Web UI"
# โ http://localhost:3847- Set video โ drag-and-drop or enter a local path
- Add transcript โ drag a
.txtfile, pasteSpeaker (MM:SS)text, or auto-transcribe with Whisper - Generate Clips โ analyzes audio energy + transcript to suggest viral moments
- Review โ toggle clips on/off, pick caption style, crop mode, logo
- Export โ batch-renders selected clips with hardware acceleration
- Preview / Download โ watch results inline, download individual clips
CLI
# One command. Auto-transcribes, picks moments, renders clips.
podcli process episode.mp4With more control:
# Use an existing transcript instead of transcribing
podcli process episode.mp4 --transcript transcript.txt --top 5
# Full options
podcli process episode.mp4 \
--transcript transcript.txt \
--top 8 \
--caption-style branded \
--crop center \
--logo logo.pngPresets
podcli presets save myshow --caption-style branded --logo logo.png --top 5
podcli presets list
podcli process video.mp4 --preset myshowContent Workflow (PodStack)
Open the project in Claude Code, then use slash commands:
# Full pipeline โ transcript to publish-ready package
/produce-shorts
# Individual steps
/process-transcript # extract moments from a transcript
/generate-titles # get 8 title options for a clip
/generate-descriptions # get descriptions + hashtags
/plan-thumbnails # get thumbnail briefs for your designer
/review-content # brand and quality review
/publish-checklist # pre/post-publish ops
/retro-episode # performance analysisOr just paste a transcript โ Claude auto-detects the input and runs the right command.
Configuration
Copy .env.example to .env (setup.sh does this automatically):
| Variable | Default | Description |
|---|---|---|
WHISPER_MODEL | base | Whisper model size (tiny, base, small, medium, large) |
WHISPER_DEVICE | auto | cpu, cuda, or auto |
PYTHON_PATH | (venv) | Path to Python binary |
PODCLI_HOME | .podcli/ | Config home (knowledge, presets, assets, settings) |
PODCLI_DATA | data/ | Runtime data (cache, output, working, logs) |
FFMPEG_PATH | ffmpeg | Custom FFmpeg path |
LOG_LEVEL | info | Logging verbosity |
Config profiles (multi-show / multi-machine)
Portable bundles zip your config home (not cache or rendered clips):
podcli config export ~/backups/myshow.zip
podcli config import ~/backups/myshow.zip --home ~/.podcli-myshow --activate
podcli config statusActivate a config root without importing: podcli config use ~/.podcli-myshow (writes .podcli-home in the project).
Upgrading from older layouts
Older releases stored transcription cache under project/.podcli/cache/ (now data/cache/) and presets under project/presets/ (now .podcli/presets/). After upgrading, migration runs automatically when legacy files are still present (CLI, Web UI, MCP). To preview or run manually:
podcli config migrate --dry-run # preview only
podcli config migrate # apply (same as auto when legacy cache exists)One source of truth: settings live in config home (PODCLI_HOME or .podcli/, tracked by .podcli-home); heavy/runtime files live under data (PODCLI_DATA or data/). The marker file only points at which config home is active โ it does not replace either root.
MCP: manage_config(action=migrate).
Web UI: Config profiles (when npm run ui is running).
See CONTRIBUTING.md for development conventions.
No common issues documented yet. If you hit a problem, the repository's GitHub Issues page is the best place to look.
Licensed under AGPL-3.0โ you can use, modify, and redistribute it under that license's terms.
License
AGPL-3.0. See LICENSE.
Need to use Podcli without AGPL terms? A commercial license is available โ email siradze@nikusha.me with a one-line description of your use case.