voiceover-maker
SkillDocs & knowledgeText-to-speech, script in, MP3 out. Wraps ElevenLabs eleven-tts (Eleven v3) + OpenAI gpt-4o-mini-tts. Voice picker, multilingual, speed control, long-form. --execute calls the API; without it returns script + provider notes. Use when: 'voiceover for X', 'narration for this script', 'TTS this', 'озвучь', 'голосовая дорожка', 'диктор для видео'.
Use voiceover-maker in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add voiceover-maker and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use the voiceover-maker skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; Ahel provides instructions and does not run this skill.
No other account needed.
Add Ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
What this skill tells your AI
The instructions your AI receives, as published by mikefluff/skills in skills/voiceover-maker/SKILL.md and read by Ahel’s review.
Distinct from music-prompt:
- TTS is speech, not music. Different providers (Eleven TTS, OpenAI gpt-4o-mini-tts) vs. Suno/Udio/Lyria.
- No genre / meta-tags / two-box workflow.
- Output is one MP3 per call, not a song structure.
This skill does NOT:
- Generate music (use
music-prompt). - Compose voice + music together (use
audio-mix-maker— planned, see ROADMAP). - Lip-sync to a video — that requires separate tooling.
- Clone voices — Eleven supports voice cloning via their dashboard, not via this skill (consent + ToS concerns).
- Transcribe audio (the opposite direction — speech-to-text — is a separate
transcribeskill, also on the roadmap). - Mix multiple voices in a single MP3 — run the skill multiple times and stitch externally.
ROLE
Read the script text + optional voice + optional language → pick provider (Eleven for multilingual / long-form / quality voice control; OpenAI gpt-4o-mini-tts for cheap fast English-first TTS) → call the audio modality runner → save MP3.
PIPELINE
-
Resolve script source:
--prompt "<text>"— inline script--prompt-file <path>— read script from file- Or pipe via stdin (the runner accepts that too)
-
Pick provider — see
references/voice-picker.md:--model auto:- Multilingual (RU / DE / FR / JP / etc.) →
eleven-tts(Eleven v3, 70+ languages) - Long-form (>2 min) →
eleven-tts(better at sustained pacing) - English short-form quick demo →
gpt-4o-mini-tts(cheaper, faster, but English-strong only) - Brand-voice consistency →
eleven-ttswith a specific voice_id
- Multilingual (RU / DE / FR / JP / etc.) →
--model <slug>: explicit override
-
Pick voice — see
references/voice-picker.md:- OpenAI: 6 named voices (
alloy,echo,fable,onyx,nova,shimmer).--voice alloy(default). - ElevenLabs: specific voice_ids from your Eleven library.
--voice-id <id>(preferred for Eleven) or--voice <name-alias>if you've aliased one.
- OpenAI: 6 named voices (
-
Estimate cost + confirm — based on character count.
-
Execute — calls the runner's audio CLI. Saves MP3.
-
Output:
./generated/audio/<timestamp>-<model>.mp3(or the path you specified via
--output)
MODES
Input
voiceover-maker --prompt "<text>"— inlinevoiceover-maker --prompt-file <path>— from filevoiceover-maker --prompt-file -— from stdin (pipe support)
Provider / voice
--model auto|gpt-4o-mini-tts|eleven-tts— TTS provider (default auto)--voice <name>— for OpenAI:alloy/echo/fable/onyx/nova/shimmer. Fallback for Eleven (uses as voice_id if--voice-idnot set).--voice-id <eleven-id>— explicit ElevenLabs voice_id--model-id <eleven-model>— ElevenLabs model. Defaulteleven_v3. Useeleven_multilingual_v2for the previous behaviour,eleven_flash_v2_5when latency beats expressiveness.--stability N— 0-1. Lower is more expressive, higher is more consistent. Left unset, the voice's own default stands.--speed N— speech speed multiplier (0.5-2.0, provider-dependent)--lang en|ru|de|...— language hint (Eleven multilingual auto-detects; OpenAI is English-strong but handles others passably)
Execution
--execute— actually generate (else returns script + provider note)--output <path>— explicit output path--yes— skip cost confirmation--check --model <slug>— verify env + connectivity, no generation--list-providers— list TTS providers available given current env
REFERENCES (load on demand)
| File | When to load |
|---|---|
| references/voice-picker.md | Step 2-3 — provider comparison, voice catalog (OpenAI 6 names + ElevenLabs popular IDs), when to pick which |
| references/script-format.md | Writing the script — sentence pacing, pauses, SSML support per provider, multi-paragraph handling |
| references/troubleshoot.md | When the voice sounds wrong / cuts off / pronounces names badly |
EXAMPLES
See examples/before-after.md — 3 calibration runs: short EN announcement via OpenAI alloy voice, long RU narration via Eleven multilingual, brand-voice reading via a specific ElevenLabs voice_id.
CONSTRAINTS
-
TTS provider availability is gated by env vars. Eleven needs
ELEVENLABS_API_KEY; OpenAI needsOPENAI_API_KEY. The skill auto-falls-back if the chosen provider's key is missing. -
Cost per character, not per call:
- OpenAI gpt-4o-mini-tts: ~$0.015/minute spoken (very cheap)
- ElevenLabs eleven-tts: $0.12/1000 chars (~$0.11 per spoken minute at 150 wpm)
- Pick OpenAI for iteration; Eleven for final / multilingual / brand voice.
-
Multilingual: use Eleven. OpenAI handles RU / DE / FR / etc. but accent is off. Eleven multilingual_v2 is the right pick for non-English work.
-
Long scripts → consider chunking. Both providers have effective length caps (Eleven: ~5000 chars per call, OpenAI: 4096). Past that, split the script + concatenate the MP3s in your editor (or wait for the planned
subtitle-burnercompanion that handles segment concat). -
Pronunciation hints: both providers respect basic phonetic spelling for unusual names. Eleven also supports SSML tags (
<phoneme>). -
Output format MP3 by default. Most providers also support WAV / FLAC — pass
--format wavif you need uncompressed audio (planned for v2.7). -
--executeis opt-in by convention. This skill defaults to--executesince TTS is "input → output" with no obvious "prompt-only" middle state (the prompt IS the script). If you want to preview cost first:--cost-only. -
Never print API keys. Mask in errors.
-
Output dir is
./generated/audio/by default. -
Voice cloning is NOT supported here. ElevenLabs supports voice cloning in their dashboard with consent flows. Don't use unauthorized voices.
INVOCATION HINTS
When the user says any of:
- "voiceover for X", "narration for this script"
- "TTS this", "read this aloud"
- "make a podcast intro voice"
- "AI voice for my video"
- "озвучь", "голосовая дорожка", "диктор для видео"
- "сделай voice-over к этому тексту"
Defaults: --model auto --voice alloy --execute. If --prompt-file not given and no inline --prompt, reads from stdin or errors out.
If user mentions a specific language other than English: bias --model eleven-tts.
If user mentions "brand voice" / "consistent voice across episodes" / "branded podcast intro": bias --model eleven-tts --voice-id <stable-id>.
If user mentions "fast demo" / "quick test" / "cheap": bias --model gpt-4o-mini-tts.
This skill is distinct from:
music-prompt— that's music. This is speech.reel-builder— that orchestrates video + music. This is bare TTS.subtitle-burner— that burns existing captions onto video. This generates new audio from text.
For voice-over a video AND music ducking under speech, the v2.7 audio-mix-maker will combine. Current workflow: generate voiceover here, generate music via music-prompt, mix manually in an editor (Audacity / GarageBand / DaVinci).
Signals
- GitHub stars
- 21
- Forks
- 1
- Last commit
- Sep 2026
Advanced
- Item type
- skill
- Key
voiceover-maker- Source
- github.com/mikefluff/skills
More in Docs & knowledge
Skill · mattpocock
More in Docs & knowledgecanvas-design
Skill · anthropics
More in Docs & knowledgedoc-coauthoring
Skill · anthropics
More in Docs & knowledgepopups
Skill · coreyhaines31
More in Docs & knowledgewriting-for-agents
Skill · mattpocock
More in Docs & knowledgespec-driven-development
Skill · addyosmani
More in Docs & knowledge