Podcast Generation
bytedance/deer-flow
Turns written content into a two-host conversational podcast MP3 with a transcript, by drafting a JSON script and running a text-to-speech script.
Generates Chinese speech audio from text using Volcengine's Doubao TTS API, for narration, voiceovers or multi-voice podcasts.
$ npx skills add xvirobotics/metabot --skill doubao-tts -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install xvirobotics/metabot doubao-tts --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/xvirobotics/metabot.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/doubao-tts .claude/skills/doubao-tts && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "doubao-tts" agent skill from https://github.com/xvirobotics/metabot/tree/main/.claude/skills/doubao-tts into .claude/skills/doubao-tts/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "doubao-tts", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/xvirobotics/metabot/tree/main/.claude/skills/doubao-ttsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add xvirobotics/metabot --skill doubao-tts -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install xvirobotics/metabot doubao-tts --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/xvirobotics/metabot.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/doubao-tts .agents/skills/doubao-tts && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "doubao-tts" agent skill from https://github.com/xvirobotics/metabot/tree/main/.claude/skills/doubao-tts into .agents/skills/doubao-tts/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "doubao-tts", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add xvirobotics/metabot --skill doubao-tts -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install xvirobotics/metabot doubao-tts --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/xvirobotics/metabot.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/doubao-tts .cursor/skills/doubao-tts && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "doubao-tts" agent skill from https://github.com/xvirobotics/metabot/tree/main/.claude/skills/doubao-tts into .cursor/skills/doubao-tts/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "doubao-tts", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/xvirobotics/metabot.git --path .claude/skills/doubao-tts--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add xvirobotics/metabot --skill doubao-tts -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install xvirobotics/metabot doubao-tts --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/xvirobotics/metabot.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/doubao-tts .gemini/skills/doubao-tts && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "doubao-tts" agent skill from https://github.com/xvirobotics/metabot/tree/main/.claude/skills/doubao-tts into .gemini/skills/doubao-tts/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "doubao-tts", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install xvirobotics/metabot doubao-ttsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add xvirobotics/metabot --skill doubao-tts -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/xvirobotics/metabot.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/doubao-tts .github/skills/doubao-tts && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "doubao-tts" agent skill from https://github.com/xvirobotics/metabot/tree/main/.claude/skills/doubao-tts into .github/skills/doubao-tts/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "doubao-tts", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add xvirobotics/metabot --skill doubao-tts -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install xvirobotics/metabot doubao-tts --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/xvirobotics/metabot.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/doubao-tts .opencode/skills/doubao-tts && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "doubao-tts" agent skill from https://github.com/xvirobotics/metabot/tree/main/.claude/skills/doubao-tts into .opencode/skills/doubao-tts/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "doubao-tts", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
doubao-ttsGenerates Chinese speech audio from text using Volcengine's Doubao TTS API, for narration, voiceovers or multi-voice podcasts.
This skill wraps Volcengine's Doubao TTS API behind a local CLI tool, supporting both a real-time path for short text under 300 characters and an asynchronous long-form path for up to 100K characters, where text is submitted and then polled for a result that returns an audio URL valid for an hour.
It ships a list of verified Chinese female and male voice IDs with short descriptions, and reads its Volcengine app ID, access key, and optional resource ID from environment variables already configured in the host app. For a podcast, it has you write the script first, generate audio per speaker with the matching voice ID for a multi-voice result, then stitch the segments together with ffmpeg.
Output is copied to a per-chat outputs folder so it can be delivered back to the user; voice families beyond the Chinese set listed need a different resource ID enabled in the Volcengine console first.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 916637e. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
ffmpegcurlpython3From the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
openspeech.bytedance.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
VOLCENGINE_TTS_ACCESS_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Doubao Text-to-Speech Generator loads about 1.1k tokens when it runs. Until then it costs about 46 tokens; SKILL.md has 220 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
Variables (already configured in MetaBot .env)Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from xvirobotics/metabot at commit 916637e, republished under its MIT licence (© xvirobotics). 220 words, ~1,057 tokens.
.claude/skills/doubao-tts/SKILL.md (or your agent's skills folder).Generate high-quality speech audio from text using Volcengine's Doubao TTS API. Supports short-form (real-time) and long-form (async, up to 100K characters) synthesis.
Use the doubao-tts CLI tool (installed at bin/doubao-tts):
# Short text (real-time, < 300 chars)
bin/doubao-tts "你好世界" -o output.mp3
# Long text from file (async mode, up to 100K chars)
bin/doubao-tts -f article.txt -o podcast.mp3
# Pipe content
echo "Hello world" | bin/doubao-tts -o hello.mp3
# Choose voice
bin/doubao-tts "你好" -v zh_male_aojiaobazong_moon_bigtts -o output.mp3
# Adjust speed/volume/pitch
bin/doubao-tts "你好" --speed 1.2 --volume 1.5 -o output.mp3| Voice ID | Description |
|---|---|
zh_female_sajiaonvyou_moon_bigtts | 撒娇女友 (default) |
zh_female_gaolengyujie_moon_bigtts | 高冷御姐 |
zh_female_tianmeixiaoyuan_moon_bigtts | 甜美校园 |
zh_female_yuanqinvyou_moon_bigtts | 元气女友 |
zh_female_wanwanxiaohe_moon_bigtts | 弯弯小何 |
zh_female_linjianvhai_moon_bigtts | 邻家女孩 |
| Voice ID | Description |
|---|---|
zh_male_aojiaobazong_moon_bigtts | 傲娇霸总 |
zh_male_jingqiangkanye_moon_bigtts | 京腔侃爷 |
zh_male_wennuanahu_moon_bigtts | 温暖阿虎 |
zh_male_yangguangqingnian_moon_bigtts | 阳光青年 |
Note: 其他音色 (BV系列, mars后缀) 需要不同的 resource ID。如需更多音色,请在火山引擎控制台开通对应资源。
VOLCENGINE_TTS_APPID=<app_id>
VOLCENGINE_TTS_ACCESS_KEY=<access_key>
VOLCENGINE_TTS_RESOURCE_ID=volc.service_type.10029 (optional)https://openspeech.bytedance.com/api/v3/tts/unidirectionaldata fieldPOST https://openspeech.bytedance.com/api/v1/tts_async/submitGET https://openspeech.bytedance.com/api/v1/tts_async/query?appid=X&task_id=Yaudio_url (valid for 1 hour)bin/doubao-tts -f script.txt -v zh_male_aojiaobazong_moon_bigtts -o podcast.mp3cp podcast.mp3 /tmp/metabot-outputs/<chatId>/ to send to userffmpeg# Generate segments for different speakers
bin/doubao-tts -f host_lines.txt -v zh_male_aojiaobazong_moon_bigtts -o host.mp3
bin/doubao-tts -f guest_lines.txt -v zh_female_gaolengyujie_moon_bigtts -o guest.mp3
# Concatenate (requires ffmpeg)
echo "file 'host.mp3'" > list.txt
echo "file 'guest.mp3'" >> list.txt
ffmpeg -f concat -safe 0 -i list.txt -c copy podcast.mp3# Short-form
curl -X POST "https://openspeech.bytedance.com/api/v3/tts/unidirectional" \
-H "Content-Type: application/json" \
-H "X-Api-App-Id: $VOLCENGINE_TTS_APPID" \
-H "X-Api-Access-Key: $VOLCENGINE_TTS_ACCESS_KEY" \
-H "X-Api-Resource-Id: volc.service_type.10029" \
-H "X-Api-Request-Id: $(uuidgen)" \
-d '{
"req_params": {
"text": "你好世界",
"speaker": "zh_female_sajiaonvyou_moon_bigtts",
"audio_params": {"format": "mp3", "sample_rate": 24000}
}
}' | python3 -c "
import sys, json, base64
chunks = []
for line in sys.stdin:
line = line.strip()
if not line: continue
try:
d = json.loads(line)
if d.get('data'): chunks.append(base64.b64decode(d['data']))
except: pass
sys.stdout.buffer.write(b''.join(chunks))
" > output.mp3© xvirobotics, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/doubao-tts of xvirobotics/metabot.
Open the folder on GitHubat commit 916637e
Doubao Text-to-Speech Generator next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Doubao Text-to-Speech Generator this skillxvirobotics/metabot | 994 | — | ~1.1k | Automated safety check: Notes | MIT | |
| Podcast Generationbytedance/deer-flow | 84k | 2 repos | ~2.2k | Automated safety check: Pass | MIT | |
| Video Podcast Makerdtsola/xiaoyaosearch | 1k | — | ~3.4k | Automated safety check: Pass | MIT | |
| Podcastzarazhangrui/personalized-podcast | 438 | — | ~2.3k | Automated safety check: Notes | None | |
| Video Podcast Maker NanoAgents365-ai/video-podcast-maker | 1.7k | — | ~3.6k | Automated safety check: Pass | MIT | |
| Azure Realtime Podcast Generationmicrosoft/skills | 3.1k | 1 repos | ~947 | Automated safety check: Pass | MIT |
bytedance/deer-flow
Turns written content into a two-host conversational podcast MP3 with a transcript, by drafting a JSON script and running a text-to-speech script.
dtsola/xiaoyaosearch
Turns a topic into a 4K horizontal video podcast through research, scripting, text-to-speech, Remotion rendering and background music, and can learn styles from references.
zarazhangrui/personalized-podcast
Generate a podcast episode from content you provide. An agent skill from zarazhangrui/personalized-podcast.
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 — topic → research ∥ asset collection →…
microsoft/skills
Builds podcast-style audio narration from text with Azure OpenAI's GPT Realtime Mini over WebSocket, from a Python FastAPI backend to a React player.
tjxj/z-skills
A skill your agent uses when creating complete generated audio with qwen-audio-3.1-tts-next, including podcasts, radio drama, advertisements, multiple speakers, reference voices, ambience, sound…
xvirobotics/metabot
Documents the metabot teams command surface for creating durable teams, spawning teammates, dispatching tasks and inspecting their runs across engine sessions.
xvirobotics/metabot
Schedules persistent cron and one-shot tasks on the MetaBot server that survive Claude session restarts and can be managed by other bots.
xvirobotics/metabot
Documents the unified `metabot` CLI for personal memory, the skill hub, durable agent messaging, the agent registry, T5T status and scheduling.
xvirobotics/metabot
Decides whether a request wants a full agent team, one agent, or one skill, then follows the matching flow file to generate it.
Categories
Generates Chinese speech audio from text using Volcengine's Doubao TTS API, for narration, voiceovers or multi-voice podcasts. This skill wraps Volcengine's Doubao TTS API behind a local CLI tool, supporting both a real-time path for short text under 300 characters and an asynchronous long-form path for up to 100K characters, where text is submitted and then polled for a result that returns an audio URL valid for an hour.
Doubao Text-to-Speech Generator fits situations like: generating narration or a voiceover from written text; turning a written script into a multi-voice podcast episode; reading a block of text aloud as an audio file.
Run `npx skills add xvirobotics/metabot --skill doubao-tts -a claude-code`. Or copy the skill folder (.claude/skills/doubao-tts in xvirobotics/metabot) into .claude/skills/doubao-tts in your project. Claude Code loads it when a task matches its description.
Run `npx skills add xvirobotics/metabot --skill doubao-tts -a codex`. Or copy the skill folder (.claude/skills/doubao-tts in xvirobotics/metabot) into .agents/skills/doubao-tts in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add xvirobotics/metabot --skill doubao-tts -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/doubao-tts, .gemini/skills/doubao-tts, .github/skills/doubao-tts and .opencode/skills/doubao-tts in your project.
Going by SKILL.md and its folder, Doubao Text-to-Speech Generator needs the command-line tools its instructions call (ffmpeg, curl and python3) and credentials named VOLCENGINE_TTS_ACCESS_KEY. Our summary lists: Volcengine Doubao TTS API credentials; ffmpeg (for multi-voice podcasts).
SKILL.md names 1 domain. In commands or code: openspeech.bytedance.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Doubao Text-to-Speech Generator is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.1k tokens (SKILL.md is roughly 4.2k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Doubao Text-to-Speech Generator: Podcast Generation (bytedance/deer-flow, 84k stars), Video Podcast Maker (dtsola/xiaoyaosearch, 1k stars), Podcast (zarazhangrui/personalized-podcast, 438 stars) and Video Podcast Maker Nano (Agents365-ai/video-podcast-maker, 1.7k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
xvirobotics (a GitHub organization) maintains it in xvirobotics/metabot, which has 994 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on September 15, 2026.
Source: xvirobotics/metabot on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.