yt2bb
A Claude Code skill that repurposes YouTube videos for Bilibili with bilingual (EN/ZH) hardcoded subtitles. Compatible with Claude Code, OpenClaw, Hermes Agent, Pi (pi-mono), and indexed by SkillsMP.
Automated pipeline to create professional video podcasts from a topic. Supports Bilibili, YouTube, Xiaohongshu, Douyin, and WeChat Channels with multi-language output (zh-CN, en-US).
$ npx -y skills add Agents365-ai/video-podcast-maker --agent claude-code
Run the curl in your terminal, the rest in Claude Code.
Repo: Agents365-ai/video-podcast-maker
What's inside
Automated pipeline to create professional video podcasts from a topic. Supports Bilibili, YouTube, Xiaohongshu, Douyin, and WeChat Channels with multi-language output (zh-CN, en-US). Combines research, script generation, multi-engine TTS (11 backends via the ttscn bridge), Remotion rendering, and FFmpeg mixing. Current release: v5.2.1 β see CHANGELOG.md for version history.
Works with: Claude Code Β· OpenClaw Β· OpenCode Β· Codex Β· Pi β any coding agent that supports SKILL.md
Publish to: Bilibili Β· YouTube Β· Xiaohongshu Β· Douyin Β· WeChat Channels
No coding required! Just describe your topic in plain language β the coding agent guides you through each step interactively. You make creative decisions, the agent handles all the technical details.
Note: This project is still under active development and may not be fully mature yet. Your feedback is greatly appreciated β feel free to open an issue.
1. Install β via the 365-skills marketplace (recommended) or by cloning this repo.
2. Set up β Python 3.8+, Node.js 18+, FFmpeg, and a Remotion project:
brew install ffmpeg node python3 # macOS (Ubuntu: sudo apt install ffmpeg nodejs python3)
pip install -r skills/video-podcast-maker/requirements.txt
npx create-video@latest my-video-project # or reuse an existing Remotion project
cd my-video-project && npm i
3. Configure β set TTS_BACKEND plus its API keys (see TTS Backends and Environment Variables).
4. Tell your agent:
"Create a video podcast about [your topic]"
The agent runs the whole workflow (research β script β TTS β Remotion composition β Studio review β 4K render + BGM). Preview and iterate in Remotion Studio (npx remotion studio src/remotion/index.ts); the agent waits for your explicit "render 4K" confirmation before the final render.
podcast.txt, repeatedlyThis section is for you, the human β not the agent. Every downstream step β TTS narration, subtitles, section transitions, animation timing, final cut β is derived from this single
podcast.txt. A weak script renders into 4K garbage. No amount of polish downstream saves it.The AI-generated draft is a starting point, nothing more. Do these yourself β don't hand them off to the AI:
- Mentally read it as the narrator. Treat each sentence as one breath β if a line forces you to "catch your breath" or backtrack to parse, fix it. Where you stumble silently is where TTS stumbles audibly.
- Revise at least three times.
- Pass 1: typos, awkward phrasing, tongue-twisters
- Pass 2: cut filler, cut throat-clearing intros ("So today we're going to talk aboutβ¦"), cut redundancy
- Pass 3: tune rhythm β where to pause, where to break a long sentence, which word carries the stress
- Read each
[SECTION:xxx]block end-to-end. Confirm each section opens with a hook and lands a clean transition into the next β not a bullet-point dump.- Audit numbers, proper nouns, and English terms separately. ~90% of TTS mispronunciations live here. If pronunciation is wrong, add it to
phonemes.json; if it just sounds awkward, rewrite it.- Know your length budget. Estimate ~280 zh-CN chars/min or ~150 en words/min. A 5β10 min video means ~1400β2800 chars / 750β1500 words. Don't pad to fill time.
The only acceptance test: read through it once in your head β does any line make you wince? If yes, don't move on to Step 7 (TTS) yet. Otherwise you're just rendering 4K of something even you don't want to hear.



~/.claude/skills/ttscn, as a Pi skill, or set TTSCN_HOME)| Software | Version | Purpose |
|---|---|---|
| macOS / Linux | - | Tested on macOS, Linux compatible |
| Python | 3.8+ | TTS script, automation |
| Node.js | 18+ | Remotion video rendering |
| FFmpeg | 4.0+ | Audio/video processing |
Marketplace install (recommended): users typically install this skill via the 365-skills marketplace rather than cloning. SKILL.md, scripts, and templates then live under the agent's
${SKILL_DIR}; paths in this README are written from the repo-root perspective for contributors.
All 11 platforms are synthesized by the required ttscn component skill. Set TTS_BACKEND to any platform id; only the active platform's env vars are needed:
TTS_BACKEND | Provider | Required env vars | Get Key |
|---|---|---|---|
edge (default) | Microsoft Edge TTS | (none β free) | β |
azure | Microsoft Azure Speech | AZURE_SPEECH_KEY (+ optional AZURE_SPEECH_REGION, default eastasia) | Azure Portal |
cosyvoice | Aliyun CosyVoice | DASHSCOPE_API_KEY | Aliyun Bailian |
doubao | Volcengine Doubao | VOLCENGINE_APPID, VOLCENGINE_ACCESS_TOKEN | Volcengine Console |
tencent | Tencent Cloud TTS | TENCENT_SECRET_ID, TENCENT_SECRET_KEY | Tencent Console |
baidu | Baidu AI TTS | BAIDU_APP_ID, BAIDU_API_KEY, BAIDU_SECRET_KEY | Baidu Console |
minimax | MiniMax TTS | MINIMAX_API_KEY | MiniMax Platform |
xunfei | iFlytek Xunfei TTS | XUNFEI_APP_ID, XUNFEI_API_KEY, XUNFEI_API_SECRET | Xfyun |
elevenlabs | ElevenLabs | ELEVENLABS_API_KEY | ElevenLabs |
openai | OpenAI TTS | OPENAI_API_KEY | OpenAI Platform |
google | Google Cloud TTS | GOOGLE_TTS_API_KEY | Google Cloud Console |
Non-TTS keys (optional): GEMINI_API_KEY / DASHSCOPE_API_KEY for AI thumbnails (imagencn).
Add to ~/.zshrc or ~/.bashrc:
export TTS_BACKEND="edge" # azure / cosyvoice / doubao / tencent / baidu / minimax / xunfei / elevenlabs / openai / google
export TTS_VOICE="zh-CN-XiaoxiaoNeural" # optional; unset = platform default
export TTS_RATE="+5%" # optional; also settable in user_prefs.json (global.tts.rate)
export TTS_STYLE="gentle" # optional; azure only
export AZURE_SPEECH_KEY="..." # keys for the active platform only (see table above)
export GEMINI_API_KEY="..." # optional: AI thumbnails
export DASHSCOPE_API_KEY="..." # optional: AI thumbnails (also the cosyvoice TTS key)
Then reload: source ~/.zshrc
Mutable user-level files live in ~/.video-podcast-maker/ (shared across projects, safe from skill updates); the rest live in the skill root (skills/video-podcast-maker/ in this repo, ${SKILL_DIR} when installed):
| File | Location | Purpose |
|---|---|---|
phonemes.json | ~/.video-podcast-maker/ | Global polyphone dictionary; auto-created from the bundled template; per-project overrides in videos/{name}/phonemes.json |
user_prefs.json | ~/.video-podcast-maker/ | Your preferences (TTS, BGM, platform, visual overrides, style profiles); auto-created from template |
user_prefs.template.json / phonemes.template.json | Skill root | Default templates β sources for the user-level copies |
prefs_schema.json | Skill root | JSON Schema for preference validation |
tsconfig.json | Skill root | TypeScript config for Remotion templates |
Output structure β every video renders into its own videos/{name}/ directory:
videos/{video-name}/
βββ topic_definition.md # Topic direction
βββ topic_research.md # Research notes
βββ podcast.txt # Narration script
βββ phonemes.json # (Optional) pronunciation overrides
βββ assets/manifest.json # Asset registry (role / source / license)
βββ podcast_audio.wav # TTS audio
βββ podcast_audio.srt # Subtitles
βββ timing.json # Section timing (drives animation sync)
βββ thumbnail_*.png # Video thumbnails
βββ publish_info.md # Title, tags, description
βββ output.mp4 # Raw 4K render
βββ video_with_bgm.mp4 # With BGM
βββ bgm.mp3 # Background music
βββ final_video.mp4 # Final output
βββ shorts/ # (Optional) 9:16 vertical shorts
Background music: bundled tracks live in skills/video-podcast-maker/assets/ β perfect-beauty-191271.mp3 (upbeat) and snow-stevekaldes-piano-397491.mp3 (calm piano). Per-platform behavior (thumbnails, chapters, CTA, publish formats) is documented in the skill's references/platform-matrix.md.
If this project helps you, consider supporting the author:
Agents365-ai
CC BY-NC 4.0 β Free for non-commercial use. Commercial use requires permission.
.github/
workflows/
sync-365-skills.yml
tests.yml
.gitignore
AGENTS.md
CHANGELOG.md
conftest.py
images/
assets-cn.drawio
assets-cn.png
assets.drawio
assets.png
pipeline-cn.drawio
pipeline-cn.png
pipeline.drawio
pipeline.png
skills-cn.drawio
skills-cn.png
skills.drawio
skills.png
LICENSE
README_CN.md
README.md
skills/
video-podcast-maker/
.env.example
.python-version
.skillspector-baseline.yaml
AGENTS.md
assets/
bilibili-triple-black.mp4
bilibili-triple-white.mp4
perfect-beauty-191271.mp3
snow-stevekaldes-piano-397491.mp3
LICENSE
package.json
phonemes.template.json
prefs_schema.json
references/
design-guide.md
design-learning.md
natural-narration.md
platform-matrix.md
script-polish.md
troubleshooting.md
visual-taste.md
workflow-assets.md
workflow-production.md
workflow-publish.md
workflow-script.md
zh-polyphones.md
requirements.txt
scripts/
_state.py
align_timing_from_srt.py
assets.py
audit_beat_sync.py
audit_components.py
check_prereqs.py
cli_envelope.py
cli.py
components.py
generate_shorts.py
generate_tts.py
get_pref.py
learn_design.py
migrate_prefs.py
resolve_backend.py
resolve_bgm_path.py
tts/
__init__.py
backends/
__init__.py
base.py
ttscn.py
markers.py
phonemes.py
sections.py
srt.py
voice_advisor.py
verify_output.py
SKILL.md
templates/
components/
AnimatedBackground.tsx
animations.tsx
AssetImage.tsx
AssetVideo.tsx
AudioWaveform.tsx
ChapterProgressBar.tsx
CodeBlock.tsx
ComparisonCard.tsx
DataBar.tsx
DataTable.tsx
DiagramReveal.tsx
ErrorBoundary.tsx
FeatureGrid.tsx
FlowChart.tsx
Icon.tsx
IconCard.tsx
iconMap.ts
index.ts
layouts.tsx
LottieAnimation.tsx
MediaSection.tsx
OverlayLayer.tsx
QuoteBlock.tsx
SectionLayouts.tsx
ShortCTACard.tsx
ShortIntroCard.tsx
StatCounter.tsx
Subtitles.tsx
Timeline.tsx
useAssets.ts
useTiming.ts
podcast_en.txt
podcast_zh.txt
podcast.txt
presets/
kinetic-typography/
colors.json
motion.json
README.md
Thumbnail.tsx.template
Video.tsx.template
voice.json
README.md
remotion.config.ts
Root.tsx
ShortVideo.tsx
Thumbnail.tsx
Video.en.tsx
Video.tsx
tsconfig.json
tsconfig.templates.json
user_prefs.template.json
skillspector-baseline.txt
skillspector-scan.md
tests/
__init__.py
conftest.py
fixtures/
smoke-render/
podcast_audio.wav
Root.tsx
timing.json
test_align_timing_from_srt.py
test_assets.py
test_audit_beat_sync.py
test_check_prereqs.py
test_chunk_text.py
test_cli_dispatcher.py
test_components.py
test_docs_consistency.py
test_frame_math.py
test_generate_shorts.py
test_learn_design.py
test_markers.py
test_migrate_prefs.py
test_overlay_checks.py
test_phonemes.py
test_sections.py
test_ttscn_boundaries.py
test_ttscn_bridge.py
test_verify_output.pyA Claude Code skill that repurposes YouTube videos for Bilibili with bilingual (EN/ZH) hardcoded subtitles. Compatible with Claude Code, OpenClaw, Hermes Agent, Pi (pi-mono), and indexed by SkillsMP.
A Claude Code / OpenClaw skill for generating video clips with Chinese video models across four providers β Alibaba Bailian (Wan/PixVerse/Kling/Vidu/HappyHorse), Volcengine Ark (Jimeng/ε³ζ’¦), MiniMax (ζ΅·θΊ AI), and Tencent Hunyuan (ζ··ε ).
A skill that evaluates whether a CLI is reliably usable by AI agents and helps you design CLIs that serve humans, agents, and orchestration systems at the same time. Built around seven principles, a 14-criterion rubric, and a structured refactor playbook.
FAQ
video-podcast-maker is a Claude Code plugin with 1 hand-picked skill for content work, indexed on Flowy. Install it with the command on its page. It includes video-podcast-maker. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.