Use when user provides a topic and wants an automated video podcast created, OR when user wants to learn/analyze video design patterns from reference videos — handles research, script writing, TTS audio synthesis, Remotion video creation, and final MP4 output with background music. Also supports design learning from reference videos (learn command), style profile management, and design reference library.
Add this skill
npx mdskills install Agents365-ai/video-podcast-makerComprehensive video podcast automation pipeline with strong platform support, TTS options, and visual design learning
1---2name: video-podcast-maker3description: Use when user provides a topic and wants an automated video podcast created, OR when user wants to learn/analyze video design patterns from reference videos — handles research, script writing, TTS audio synthesis, Remotion video creation, and final MP4 output with background music. Also supports design learning from reference videos (learn command), style profile management, and design reference library. Supports Bilibili, YouTube, Xiaohongshu, Douyin, and WeChat Channels platforms with independent language configuration (zh-CN, en-US).4argument-hint: "[topic]"5effort: high6allowed-tools: Bash, Read, Write, Edit, Glob, Grep, WebFetch, WebSearch, Agent7# --- Claude Code fields above, OpenClaw/SkillsMP fields below ---8author: Agents365-ai9category: Content Creation10version: 2.0.011created: 2025-01-2712updated: 2026-04-0313bilibili: https://space.bilibili.com/44183188414github: https://github.com/Agents365-ai/video-podcast-maker15dependencies:16 - remotion-best-practices17metadata:18 openclaw:19 requires:20 bins:21 - python322 - ffmpeg23 - node24 - npx25 primaryEnv: AZURE_SPEECH_KEY26 emoji: "🎬"27 homepage: https://github.com/Agents365-ai/video-podcast-maker28 os: ["macos", "linux"]29 install:30 - kind: brew31 formula: ffmpeg32 bins: [ffmpeg]33 - kind: uv34 package: edge-tts35 bins: [edge-tts]36---3738> **REQUIRED: Load Remotion Best Practices First**39>40> This skill depends on `remotion-best-practices`. **You MUST invoke it before proceeding:**41> ```42> Skill tool: skill="remotion-best-practices"43> ```4445# Video Podcast Maker4647## Quick Start4849Open Claude Code and say: **"Make a video podcast about $ARGUMENTS"**5051Or invoke directly: `/video-podcast-maker AI Agent tutorial`5253---5455## Design Learning5657Extract visual design patterns from reference videos or images, store them in a searchable library, and apply them to new video compositions.5859### Commands6061```bash62# Learn from images (Claude Vision analyzes design patterns)63python3 learn_design.py ./screenshot1.png ./screenshot2.png6465# Learn from a local video (ffmpeg extracts frames automatically)66python3 learn_design.py ./reference.mp46768# Learn from a URL (Playwright captures screenshots — experimental)69python3 learn_design.py https://www.bilibili.com/video/BV1xx411c7mD7071# Save with a named profile and tags72python3 learn_design.py ./reference.mp4 --profile "tech-minimal" --tags "tech,minimal,dark"73```7475### Reference Library Commands7677```78references list # List all stored references (auto-cleans orphaned entries)79references show <id> # Show full design report for a reference80references delete <id> # Delete a reference and its files81```8283### Style Profile Commands8485```86profiles list # List all saved style profiles87profiles show <name> # Show profile props_override88profiles delete <name> # Delete a style profile89profiles create <name> # Create a new style profile interactively90```9192### Pre-Workflow Usage9394When the user provides a reference video or image alongside a video creation request, extract design patterns before Step 1 and apply them as session overrides. See `references/workflow-steps.md` → Pre-workflow section for the full extraction flow.9596### Step 9 Integration9798Before choosing visual design in Step 9, check for matching style profiles or reference library entries. Apply the best match as a starting point for Remotion composition props. See `references/workflow-steps.md` → Step 9 Style Profile Integration for the priority chain.99100---101102## Auto Update Check103104**Agent behavior:** Check for updates at most once per day (throttled by timestamp file):105106```bash107STAMP="${CLAUDE_SKILL_DIR}/.last_update_check"108NOW=$(date +%s)109LAST=$(cat "$STAMP" 2>/dev/null || echo 0)110if [ $((NOW - LAST)) -gt 86400 ]; then111 timeout 5 git -C ${CLAUDE_SKILL_DIR} fetch --quiet 2>/dev/null || true112 LOCAL=$(git -C ${CLAUDE_SKILL_DIR} rev-parse HEAD 2>/dev/null)113 REMOTE=$(git -C ${CLAUDE_SKILL_DIR} rev-parse origin/main 2>/dev/null)114 echo "$NOW" > "$STAMP"115 if [ -n "$LOCAL" ] && [ -n "$REMOTE" ] && [ "$LOCAL" != "$REMOTE" ]; then116 echo "UPDATE_AVAILABLE"117 else118 echo "UP_TO_DATE"119 fi120else121 echo "SKIPPED_RECENT_CHECK"122fi123```124125- **Update available**: Ask user via AskUserQuestion. Yes → `git -C ${CLAUDE_SKILL_DIR} pull`. No → continue.126- **Up to date / Skipped**: Continue silently.127128---129130## Prerequisites Check131132!`( missing=""; node -v >/dev/null 2>&1 || missing="$missing node"; python3 --version >/dev/null 2>&1 || missing="$missing python3"; ffmpeg -version >/dev/null 2>&1 || missing="$missing ffmpeg"; [ -n "$AZURE_SPEECH_KEY" ] || missing="$missing AZURE_SPEECH_KEY"; if [ -n "$missing" ]; then echo "MISSING:$missing"; else echo "ALL_OK"; fi )`133134**If MISSING reported above**, see README.md for full setup instructions (install commands, API key setup, Remotion project init).135136---137138## Overview139140Automated pipeline for professional **Bilibili horizontal knowledge videos** from a topic.141142> **Target: Bilibili horizontal video (16:9)**143> - Resolution: 3840×2160 (4K) or 1920×1080 (1080p)144> - Style: Clean white (default)145146**Tech stack:** Claude + Azure TTS + Remotion + FFmpeg147148### Output Specs149150| Parameter | Horizontal (16:9) | Vertical (9:16) |151|-----------|-------------------|-----------------|152| **Resolution** | 3840×2160 (4K) | 2160×3840 (4K) |153| **Frame rate** | 30 fps | 30 fps |154| **Encoding** | H.264, 16Mbps | H.264, 16Mbps |155| **Audio** | AAC, 192kbps | AAC, 192kbps |156| **Duration** | 1-15 min | 60-90s (highlight) |157158---159160## Execution Modes161162**Agent behavior:** Detect user intent at workflow start:163164- "Make a video about..." / no special instructions → **Auto Mode**165- "I want to control each step" / mentions interactive → **Interactive Mode**166- Default: **Auto Mode**167168### Auto Mode (Default)169170Full pipeline with sensible defaults. **Only 1 mandatory stop:**1711721. **Step 10**: After 720p preview render — user reviews, confirms before 4K173174| Step | Decision | Auto Default |175|------|----------|-------------|176| 3 | Title position | top-center |177| 5 | Media assets | Skip (text-only animations) |178| 7 | Thumbnail method | Remotion-generated (16:9 + 4:3) |179| 9 | Outro animation | Pre-made MP4 (white/black by theme) |180| 9 | Preview method | Preview render (720p, self-validates) |181| 12 | Subtitles | Skip |182| 14 | Cleanup | Auto-clean temp files |183184Users can override any default in their initial request:185- "make a video about AI, burn subtitles" → auto + subtitles on186- "use dark theme, AI thumbnails" → auto + dark + imagen187- "need screenshots" → auto + media collection enabled188189### Interactive Mode190191Prompts at each decision point. Activated by:192- "interactive mode" / "I want to choose each option"193- User explicitly requests control194195---196197## Workflow State & Resume198199> **Planned feature (not yet implemented).** Currently, workflow progress is tracked via Claude's conversation context. If a session is interrupted, re-invoke the skill and Claude will check existing files in `videos/{name}/` to determine where to resume.200201---202203## Technical Rules204205Hard constraints for video production — visual design is Claude's creative freedom:206207| Rule | Requirement |208|------|-------------|209| **Single Project** | All videos under `videos/{name}/` in user's Remotion project. NEVER create a new project per video. |210| **4K Output** | 3840×2160, use `scale(2)` wrapper over 1920×1080 design space |211| **Content Width** | ≥85% of screen width |212| **Bottom Safe Zone** | Bottom 100px reserved for subtitles |213| **Audio Sync** | All animations driven by `timing.json` timestamps |214| **Thumbnail** | MUST generate 16:9 (1920×1080) AND 4:3 (1200×900). Title ≥80px bold, high contrast. |215| **Font** | PingFang SC / Noto Sans SC for Chinese text |216217---218219## Additional Resources220221Claude loads these files on demand — **do NOT load all at once**:222223- **[references/workflow-steps.md](references/workflow-steps.md)**: Detailed step-by-step instructions (Steps 1-14). Load at workflow start.224- **[references/design-guide.md](references/design-guide.md)**: Visual minimums, typography, layout patterns, checklists. **MUST load before Step 9.**225- **[references/troubleshooting.md](references/troubleshooting.md)**: Error fixes, BGM options, preference commands, preference learning. Load on error or user request.226- **[examples/](examples/)**: Real production video projects. Claude may reference these for composition structure and timing.json format.227228---229230## Directory Structure231232```233project-root/ # Remotion project root234├── src/remotion/ # Remotion source235│ ├── compositions/ # Video composition definitions236│ ├── Root.tsx # Remotion entry237│ └── index.ts # Exports238│239├── public/ # Remotion default (unused — use --public-dir videos/{name}/)240│241├── videos/{video-name}/ # Video project assets242│ ├── workflow_state.json # Workflow progress243│ ├── topic_definition.md # Step 1244│ ├── topic_research.md # Step 2245│ ├── podcast.txt # Step 4: narration script246│ ├── podcast_audio.wav # Step 8: TTS audio247│ ├── podcast_audio.srt # Step 8: subtitles248│ ├── timing.json # Step 8: timeline249│ ├── thumbnail_*.png # Step 7250│ ├── output.mp4 # Step 10251│ ├── video_with_bgm.mp4 # Step 11252│ ├── final_video.mp4 # Step 12: final output253│ └── bgm.mp3 # Background music254│255└── remotion.config.ts256```257258> **Important**: Always use `--public-dir` and full output path for Remotion render:259> ```bash260> npx remotion render src/remotion/index.ts CompositionId videos/{name}/output.mp4 --public-dir videos/{name}/261> ```262263### Naming Rules264265**Video name `{video-name}`**: lowercase English, hyphen-separated (e.g., `reference-manager-comparison`)266267**Section name `{section}`**: lowercase English, underscore-separated, matches `[SECTION:xxx]`268269**Thumbnail naming** (16:9 AND 4:3 both required):270| Type | 16:9 | 4:3 |271|------|------|-----|272| Remotion | `thumbnail_remotion_16x9.png` | `thumbnail_remotion_4x3.png` |273| AI | `thumbnail_ai_16x9.png` | `thumbnail_ai_4x3.png` |274275### Public Directory276277Use `--public-dir videos/{name}/` for all Remotion commands. Each video's assets (timing.json, podcast_audio.wav, bgm.mp3) stay in its own directory — no copying to `public/` needed. This enables parallel renders of different videos.278279```bash280# All render/studio/still commands use --public-dir281npx remotion studio src/remotion/index.ts --public-dir videos/{name}/282npx remotion render src/remotion/index.ts CompositionId videos/{name}/output.mp4 --public-dir videos/{name}/ --video-bitrate 16M283npx remotion still src/remotion/index.ts Thumbnail16x9 videos/{name}/thumbnail.png --public-dir videos/{name}/284```285286---287288## Workflow289290### Progress Tracking291292At Step 1 start:2931. Create `videos/{name}/workflow_state.json`2942. Use `TaskCreate` to create tasks per step. Mark `in_progress` on start, `completed` on finish.2953. Each step updates BOTH `workflow_state.json` AND TaskUpdate.296297```298 1. Define topic direction → topic_definition.md299 2. Research topic → topic_research.md300 3. Design video sections (5-7 chapters)301 4. Write narration script → podcast.txt302 5. Collect media assets → media_manifest.json303 6. Generate publish info (Part 1) → publish_info.md304 7. Generate thumbnails (16:9 + 4:3) → thumbnail_*.png305 8. Generate TTS audio → podcast_audio.wav, timing.json306 9. Create Remotion composition + Studio preview30710. Render 4K video → output.mp430811. Mix background music → video_with_bgm.mp430912. Add subtitles (optional) → final_video.mp431013. Complete publish info (Part 2) → chapter timestamps31114. Verify output & cleanup31215. Generate vertical shorts (optional) → shorts/313```314315### Validation Checkpoints316317**After Step 8 (TTS)**:318- [ ] `podcast_audio.wav` exists and plays correctly319- [ ] `timing.json` has all sections with correct timestamps320- [ ] `podcast_audio.srt` encoding is UTF-8321322**After Step 10 (Render)**:323- [ ] `output.mp4` resolution is 3840x2160324- [ ] Audio-video sync verified325- [ ] No black frames326327---328329## Key Commands Reference330331See **CLAUDE.md** for the full command reference (TTS, Remotion, FFmpeg, shorts generation).332333---334335## User Preference System336337Skill learns and applies preferences automatically. See [references/troubleshooting.md](references/troubleshooting.md) for commands and learning details.338339### Storage Files340341| File | Purpose |342|------|---------|343| `user_prefs.json` | Learned preferences (auto-created from template) |344| `user_prefs.template.json` | Default values |345| `prefs_schema.json` | JSON schema definition |346347### Priority348349```350Final = merge(Root.tsx defaults < global < topic_patterns[type] < current instructions)351```352353### User Commands354355| Command | Effect |356|---------|--------|357| "show preferences" | Show current preferences |358| "reset preferences" | Reset to defaults |359| "save as X default" | Save to topic_patterns |360361---362363## Troubleshooting & Preferences364365> **Full reference:** Read [references/troubleshooting.md](references/troubleshooting.md) on errors, preference questions, or BGM options.366
Full transparency — inspect the skill content before installing.