From iamzhihuix-happy-claude-skills
Synthesizes speech from text using 6 TTS providers (OpenAI, ElevenLabs, Bailian, MiniMax, SiliconFlow, PlayHT). Supports multilingual, voice cloning, and long-form narration.
How this skill is triggered — by the user, by Claude, or both
Slash command
/iamzhihuix-happy-claude-skills:happy-audio-genThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Turns text into speech across 6 providers through one CLI. All providers are synchronous (TTS is fast — typically under 10 seconds) except Bailian's voice-design flow (which is still covered but uses a longer poll window).
assets/EXTEND.template.mdpackage.jsonreferences/config/extend-schema.mdreferences/config/first-time-setup.mdreferences/error_codes.mdreferences/providers.mdreferences/voices.mdscripts/main.tsscripts/providers/bailian.tsscripts/providers/elevenlabs.tsscripts/providers/minimax.tsscripts/providers/openai.tsscripts/providers/playht.tsscripts/providers/siliconflow.tsscripts/types.tsscripts/utils/output.tsscripts/utils/text_chunk.tsTurns text into speech across 6 providers through one CLI. All providers are synchronous (TTS is fast — typically under 10 seconds) except Bailian's voice-design flow (which is still covered but uses a longer poll window).
# Shortest path — OpenAI default voice
bun scripts/main.ts --text "Hello, world" --out ./hello.mp3
# Chinese, MiniMax
bun scripts/main.ts --provider minimax --text "大家好" --voice male-qn-qingse --out ./hello.mp3
# Long-form, Bailian (auto-splits by sentence)
bun scripts/main.ts --provider bailian --textfiles ./script.md --out ./narration.mp3
Do not route here when the user wants to transcribe audio → text (that's STT, different domain), or edit / mix audio files (use a dedicated audio editor).
Locate EXTEND.md:
./.happy-skills/happy-audio-gen/EXTEND.md$XDG_CONFIG_HOME/happy-skills/happy-audio-gen/EXTEND.md~/.happy-skills/happy-audio-gen/EXTEND.mdIf none found, run bun scripts/main.ts --setup and walk the user through references/config/first-time-setup.md.
Verify at least one provider has credentials (env var or 1Password reference).
Verify Bun is available. Fallback: npx -y bun.
Preference order:
--provider <id>default_provideropenai > elevenlabs > bailian > minimax > siliconflow > playhtPick by language / voice intent:
openai (gpt-4o-mini-tts / tts-1).elevenlabs.bailian (qwen-tts auto-chunks long scripts) or minimax.bailian (voice-design with qwen3-tts-vd) or siliconflow (CosyVoice2).playht (2.0).--text or --textfiles: input. Always quote.--out <path>: REQUIRED. Extension determines format (.mp3 / .wav / .ogg / .flac).--voice <id>: provider-specific. See references/voices.md for the short list of well-known voices.--rate 0.5..2.0: speaking rate.--instruction "...": voice direction (only openai gpt-4o-mini-tts and siliconflow honor this).--language <code>: en, zh, ja — only a few providers honor this explicitly.bun scripts/main.ts \
--provider openai \
--model gpt-4o-mini-tts \
--voice alloy \
--text "..." \
--out ./out.mp3
JSON mode:
{ "success": true, "provider": "openai", "model": "gpt-4o-mini-tts", "voice": "alloy", "output": "/abs/out.mp3", "size_bytes": 76032, "format": "mp3" }
happy-audio-gen automatically splits long input for providers that cap per-call length (Bailian ≤ 200 Chinese chars per call). Chunks are concatenated byte-for-byte on output.[openai] OpenAI TTS 400 with invalid voice → the voice name is not supported by the model. Use one of alloy, ash, coral, echo, fable, onyx, nova, sage, shimmer.[minimax] ... 2049 invalid api key → try MINIMAX_BASE_URL=https://api.minimaxi.com/v1 (different region).[bailian] ... 400 DataInspectionFailed → Aliyun content filter. Surface to the user.[elevenlabs] 401 → key invalid or subscription expired.references/providers.md — per-provider env vars, default models, voice lists.references/voices.md — curated voices for each provider.references/error_codes.md — common errors and fixes.references/config/first-time-setup.mdreferences/config/extend-schema.mdassets/EXTEND.template.mdnpx claudepluginhub iamzhihuix/happy-claude-skillsConverts text to speech audio with support for voice cloning, SRT timeline alignment, and per-segment voice control. Uses Kokoro (local) or Noiz (cloud) backends.
Generate audio content — text-to-speech, podcasts, voice cloning, sound effects, speech-to-speech, dubbing, and audio isolation. Currently powered by ElevenLabs. Works with both the Python SDK and the ElevenLabs CLI. Includes ready-to-run generator scripts that Claude writes to a temp file and executes directly. Triggers: audio, elevenlabs, text-to-speech, TTS, podcast, voice, voiceover, narration, voice clone, sound effects, dubbing, speech-to-speech, audio isolation.
Converts text and documents to audio using ElevenLabs TTS API. Supports single-voice narration and two-host conversational podcast generation from PDF, DOCX, or text files.