video-podcast-maker-na…
Smallest personal narrated-explainer-video pipeline (spoken narration over visuals, not an audio podcast), fully tool-agnostic and autonomous by default —…
Minimal personal narrated-video pipeline — a topic becomes a talking-head-free explainer MP4 (1080p or 4K) via script → Azure TTS (SSML) → Remotion. Use when the user wants a quick narrated video from a topic without the full video-podcast-maker machinery (no extra skills, no
$ npx -y skills add Agents365-ai/video-podcast-maker --skill video-podcast-maker-lite --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/video-podcast-maker-liteContext preview
The summary Claude sees to decide when to auto-load this skill.
Minimal personal narrated-video pipeline — a topic becomes a talking-head-free explainer MP4 (1080p or 4K) via script → Azure TTS (SSML) → Remotion. Use when the user wants a quick narrated video from a topic without the full video-podcast-maker machinery (no extra skills, no
name: video-podcast-maker-lite description: Minimal personal narrated-video pipeline — a topic becomes a talking-head-free explainer MP4 (1080p or 4K) via script → Azure TTS (SSML) → Remotion. Use when the user wants a quick narrated video from a topic without the full video-podcast-maker machinery (no extra skills, no thumbnails/shorts/publish matrix). Do NOT trigger for heavy production needs — use video-podcast-maker for those. argument-hint: "[topic]" author: Agents365-ai category: Content Creation version: 1.1.0
A single-purpose pipeline for personal use: **topic → narration script → Azure TTS (SSML) → Remotion → 1080p/4K MP4**. No external skills, no config files, no bundled templates — the Remotion composition is generated once against the [contract below](#composition-contract), then reused across videos.
pip3 install azure-cognitiveservices-speech # the only Python dependency export AZURE_SPEECH_KEY="..." # Azure Speech resource key export AZURE_SPEECH_REGION="..." # e.g. eastasia # ffmpeg + node 18+ required; one Remotion project with npm install done # Playwright MCP (session browser) needed only for Step 5 BGM fetching
1. **Locate the Remotion project** — the directory containing both `src/remotion/index.ts` and `node_modules/remotion/`. Check the current working directory first; if it is not there, ask the user for the project path. Do NOT scan the filesystem, and do NOT create a new project if one exists elsewhere. 2. **Inventory existing videos** — `ls videos/` and `ls src/remotion/*Video.tsx`. The most recent `*Video.tsx` is the component to copy in Step 3; `videos/` shows which videos already exist. 3. **Existing `videos/{name}/`?** Then this is an iteration on that video, not a new one — reuse the directory and re-run only what changed (see [Iterating](#iterating)). 4. **No project anywhere** (first run only) → scaffold once in the working directory: `npm init -y && npm i remotion @remotion/cli @remotion/transitions react react-dom`, create `src/remotion/`, and warn the user about the one-time ~2 GB install. All later videos skip this.
Run all commands from the project root. All artifacts for one video live in `videos/{name}/` inside the project. `{name}` is lowercase English, hyphen-separated.
One `[SECTION:xxx]` marker per video segment; section names are lowercase English (`hero`, `content-1`, `outro`). An optional display title goes after a `|` — `[SECTION:outro|thanks]` — it labels the progress-bar pill and default layout (without it, the label derives from the first sentence, which can be awkward). Lines starting with `#` are ignored (and may safely mention markers). Spoken text only — no markdown — and follow the [script style rules](#script-style-anti-ai-flavor-zh-cn) below. Example:
# comment lines are not spoken [SECTION:hero|intro] 欢迎来到本期视频!今天我们要聊一个大家都关心的话题。 [SECTION:content-1|point 1] 首先,我们来看第一个要点。这里有几个关键信息需要你知道。 [SECTION:outro|thanks] 好了,今天的内容就到这里。如果觉得有帮助,欢迎点赞关注,我们下期再见!
Apply while writing, then self-check before TTS. Goal: everyday spoken Chinese, not written prose with commas. (Distilled from the full skill's `natural-narration.md` + `script-polish.md` — those are the canonical sources; edit rules there first, then mirror here.)
**Connector swap** (written → spoken): 此外→还有 · 然而→但是 · 因此→所以 · 与此同时→这时候 · 总的来说/综上所述→删掉 · 首先/其次/最后→直接讲下一件事。
**Kill list** (rewrite or delete): 赋能、打造、深入探讨、值得一提/值得注意的是、众所周知、至关重要、革命性、颠覆、天花板、无缝、闭环、抓手、里程碑、标志着、未来可期、让我们拭目以待。
**Structural tells** — the fix patterns:
| Pattern | Fix | | ------ | ------ | | Verb-noun shells: 进行优化/实现增长/做出选择 | concrete action + result: "把审批从三步改成一步" | | Negation contrast: 不是 X,而是 Y | state Y directly | | Three-part parallelism: 既是…又是…更是… | keep the most informative item; two beat three | | Empty intensifiers: 显著/大幅/非常 | a number or a perceivable consequence | | Vague attribution: 业内普遍认为/有专家指出 | named source + date, else delete the sentence | | Slogan endings: 未来可期/注入新的活力 | land on a concrete fact: number, date, next action |
**Write for the ear**: one idea per sentence, subject first, vary sentence length, no nested clauses, no — or · as connectives (they don't get spoken and clutter subtitles). A light first person is fine ("我实测下来").
**Subtitles are the script, verbatim** — so write numbers the way they should LOOK on screen: Arabic digits (`3.8`, `63K`, `98.8%`, `128G`), never Chinese numerals (`六十五点一` / `三百九十七`). The same digit rule applies to on-screen text in the Remotion components (cards, headlines). Do NOT write the spoken form into the script to fix pronunciation — it leaks into subtitles. `tts.py` derives the spoken layer itself: every number-bearing token (`86.1`, `9B`, `5600`, `Qwen3.5`) is converted to its Chinese reading (`八十六点一`, `九B`, `五千六百`, `千问三点五`) before synthesis, then word boundaries are mapped back so subtitles keep the display text. (Multilingual voices like `zh-CN-XiaoxiaoMultilingualNeural` read bare digits in English in mixed context — that is exactly what this layer prevents. SSML `<sub alias>` was tried and abandoned: Azure's word-boundary events for `<sub>` are buggy and corrupt the SRT.)
**Numbers must be traceable** — a precise number without a source is fabricated; drop it or attribute it.
**Self-check before Step 2**: no kill-list words? no "不是…而是…"? no slogan ending? Read each section aloud — if you stumble, split the sentence.
**STOP — script review gate (mandatory)**: when `podcast.txt` is written, halt the pipeline and hand the script to the user for review. Do NOT run TTS (Step 2) until the user explicitly approves the script. This gate comes before everything else downstream — audio, timings, and visual entrances all derive from the script, so a late script change costs a full re-run.
`
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).
Repo: Agents365-ai/video-podcast-maker
Smallest personal narrated-explainer-video pipeline (spoken narration over visuals, not an audio podcast), fully tool-agnostic and autonomous by default —…
Use when the user gives a topic and wants an automated topic-driven narrated explainer, podcast, or knowledge-summary video (Bilibili / YouTube / Xiaohongshu /…