skills/voice-clone/SKILL.md
Clone real or fictional voices using ElevenLabs Instant Voice Cloning (IVC). This skill chains together the full pipeline — finding reference audio, preparing samples, uploading to ElevenLabs IVC, testing the clone with text-to-speech, and tuning voice settings. Use this skill whenever the user wants to clone a voice, create a custom voice from audio samples, replicate a famous voice style, or build a voice for a character. Covers celebrity impressions, fictional characters, branded voices, and personal voice clones.
npx skillsauth add b-open-io/prompts voice-cloneInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Clone voices end-to-end using ElevenLabs Instant Voice Cloning (IVC). This skill handles the full pipeline from finding reference audio to a tuned, ready-to-use voice. For user-facing setup guidance, audio quality advice, voice type tips, IVC limits, and example walkthroughs, see README.md.
1. Source Audio → Find/download reference clips of the target voice
2. Prepare → Trim, normalize, ensure clean speech-only audio
3. Clone (IVC) → Upload samples to ElevenLabs Instant Voice Cloning
4. Test → Generate speech with the new voice, compare to reference
5. Tune → Adjust stability/similarity/style settings for best match
Each step is handled by scripts/voice-clone.ts. Run the full pipeline or individual steps.
Verify ELEVENLABS_API_KEY is set before starting. Accept local file paths or URLs.
# Download audio from a URL
bun run scripts/voice-clone.ts source \
--url "https://example.com/interview.mp3" \
--output-dir ./voice-samples
# Use local files
bun run scripts/voice-clone.ts source \
--files "./samples/clip1.mp3,./samples/clip2.wav" \
--output-dir ./voice-samples
# Download audio only
yt-dlp -x --audio-format mp3 --audio-quality 0 \
-o "./voice-samples/%(title)s.%(ext)s" \
"https://youtube.com/watch?v=VIDEO_ID"
# Download specific time range (requires ffmpeg)
yt-dlp -x --audio-format mp3 \
--postprocessor-args "ffmpeg:-ss 00:01:30 -to 00:03:45" \
-o "./voice-samples/clip.%(ext)s" \
"https://youtube.com/watch?v=VIDEO_ID"
Trim silence, normalize volume, and optionally remove background noise. Requires ffmpeg.
# Prepare all files in a directory
bun run scripts/voice-clone.ts prepare \
--input-dir ./voice-samples \
--output-dir ./voice-prepared
# With options
bun run scripts/voice-clone.ts prepare \
--input-dir ./voice-samples \
--output-dir ./voice-prepared \
--trim-silence \
--normalize \
--max-duration 60
The script validates ffmpeg is installed and exits with an informative error if not.
Upload prepared samples to ElevenLabs IVC. The API key must be set in the environment.
# Clone from prepared samples
bun run scripts/voice-clone.ts clone \
--input-dir ./voice-prepared \
--name "Movie Announcer" \
--description "Deep dramatic voice in the style of classic movie trailers" \
--remove-background-noise
# With labels for organization
bun run scripts/voice-clone.ts clone \
--input-dir ./voice-prepared \
--name "Movie Announcer" \
--description "Deep dramatic voice" \
--labels '{"accent":"american","age":"middle-aged","gender":"male","use_case":"trailer_narration"}'
The script outputs the voice_id on success. Capture and surface this to the user — it is needed for all subsequent steps.
Generate test speech and output audio files so the user can compare against reference.
# Quick test with default phrases
bun run scripts/voice-clone.ts test \
--voice-id "VOICE_ID_FROM_STEP_3" \
--output-dir ./voice-tests
# Test with custom text
bun run scripts/voice-clone.ts test \
--voice-id "VOICE_ID_FROM_STEP_3" \
--text "In a world where darkness threatens to consume all hope..." \
--output-dir ./voice-tests
# Test with specific model
bun run scripts/voice-clone.ts test \
--voice-id "VOICE_ID_FROM_STEP_3" \
--model eleven_v3 \
--output-dir ./voice-tests
Report the output file paths to the user after this step completes.
Adjust stability, similarity boost, and style to dial in the match.
bun run scripts/voice-clone.ts tune \
--voice-id "VOICE_ID_FROM_STEP_3" \
--stability 0.3 \
--similarity-boost 0.8 \
--style 0.5 \
--text "In a world where nothing is as it seems..." \
--output-dir ./voice-tests
When the user does not specify settings, use these defaults: stability 0.5, similarity-boost 0.75, style 0.0. For voice type presets, refer to README.md.
bun run scripts/voice-clone.ts pipeline \
--files "./samples/clip1.mp3,./samples/clip2.mp3" \
--name "Movie Announcer" \
--description "Deep dramatic voice for movie trailers" \
--test-text "In a world where heroes are forgotten..." \
--remove-background-noise \
--output-dir ./movie-announcer-voice
Runs source → prepare → clone → test in sequence. Output includes the voice_id and paths to test audio files.
# List all cloned voices
bun run scripts/voice-clone.ts list
# Delete a cloned voice
bun run scripts/voice-clone.ts delete --voice-id "VOICE_ID"
# Get details about a voice
bun run scripts/voice-clone.ts info --voice-id "VOICE_ID"
ELEVENLABS_API_KEY is unset, exit immediately with a message directing the user to README.md for setup instructions.brew install ffmpeg).README.md for tier details.voice_id is needed but not yet obtained, prompt the user to complete Step 3 first.development
This skill should be used when the user asks to "design a business card", "make a printable PDF", "render HTML to PDF", "generate a postcard", "build print collateral", "set up an HTML print pipeline", or needs help with bleed, safe areas, font embedding, or QR generation for print. Provides a Playwright-based pipeline with multiple bundled templates and theme variants for business cards (minimal, watercolor light, watercolor dark) and instructions for adding new templates.
tools
Get recent tweets from an X/Twitter user. Use when user asks "what has @username posted", "recent tweets from", "user's X posts", "show timeline for", "what is @user saying". Requires X_BEARER_TOKEN.
data-ai
Get X/Twitter user profile by username. Use when user asks "who is @username", "get X profile", "lookup Twitter user", "find X account", "user details", "follower count for". Requires X_BEARER_TOKEN.
data-ai
Search recent X/Twitter posts by query. Returns RAW TWEETS (last 7 days). Use when user asks "search X for", "find tweets about", "what are people saying about", "Twitter search", "raw tweets about". For AI summaries/sentiment, use x-research instead. Requires X_BEARER_TOKEN.