ITQAN LAB

MIT · verified 2026-08-11

catalog / Media / skill

elevenlabs-studio

Make voice-over, sound effects and music with ElevenLabs, and spend the credits on purpose. Every paid call is priced first, never paid for twice, measured after, and written to a ledger in the project. A reserve stops a runaway loop from emptying the month. Needs an ElevenLabs API key, set up once through a guided flow without the key ever being typed into the chat. Works on macOS, Windows and Linux.

version
1.0.0
updated
2026-10-05
works in
every conformant agent
needs
node
cost
free · no API key
license
MIT

Say this you do not type commands, you ask

  • “make a voice-over”
  • “read this script aloud”
  • “generate a sound effect”
  • “make background music”
  • “find a voice for this video”
  • “how many ElevenLabs credits are left”
  • “what have we spent on ElevenLabs”
  • “text to speech”
  • “elevenlabs”

Once it is installed, that is the whole interface. Your agent picks the skill up on its own and runs whatever it needs to. The commands further down are there for anyone who would rather drive it themselves.

Install pick your agent

Requirements what to install, and why

node scripts/setup.mjs begin      # creates the file and prints the steps
node scripts/setup.mjs finish     # checks the key, shows plan and credits
node scripts/setup.mjs status     # is it connected, and how much is left

The key is stored with the other toolkit credentials, in credentials/elevenlabs.env under ~/.itqan-agent-toolkit (or AGENT_TOOLKIT_HOME). Storage comes from toolkit-credentials.

Examples copy and go

Changelog what changed, newest first

1.0.0

Added

  • Connect an ElevenLabs account through a guided setup. The key is pasted into a file, never into the chat.
  • Make voice-over with any voice, with per-character timing for cutting a picture, and with neighbouring lines passed along so separate takes sound like one read (on models that support it).
  • Make sound effects at an exact length, including loops that repeat without a gap.
  • Make music from a prompt or from a composition plan. Plans are free, and the default model holds each section to its length.
  • List voices and save their preview samples for free, to choose a voice by ear.
  • See the plan, the credits left and the reset date.
  • Every paid call is estimated first, served from a cache when it was already paid for, measured after, and written to a ledger in the project. Voice-over cost is measured exactly from ElevenLabs' history. A reserve refuses any call that would leave too few credits.

An agent that has this installed reads CHANGELOG.md in the skill folder. The same history is at changelog.json, and every tool's releases are at /updates.json.

Just ask

Once the skill is installed, say what you want in your own words:

"connect my ElevenLabs account" "find a calm English narrator and let me hear a few" "make a voice-over for this script, one file per line" "I need a 2 second whoosh for the transition" "make a 45 second background track that matches these scenes" "how many credits are left, and what did we spend this week?"

The agent runs the commands, tells you what each step will cost before it spends anything, and hands you the files.

The one thing it cannot do for you is create the key. You make it on the ElevenLabs website and paste it into a file. That way the key never passes through a chat window. The agent walks you through it.

Why this exists

ElevenLabs is paid by the credit, and it is easy to waste them: asking twice for the same line, generating test sentences to choose a voice, rendering a whole script to fix one word, or a loop that keeps going. This skill puts four guards around every paid call.

Guard What it does
Cache The same request returns the file already paid for, at 0 credits
Estimate Every call is priced first from a rate table, partly published and partly measured. --dry shows the price and calls nothing. --max refuses above a limit
Measure The real cost goes in a ledger next to the estimate. Voice-over is measured exactly from ElevenLabs' history; other calls from the balance before and after
Reserve A call that would leave fewer than 1000 credits is refused (ELEVEN_RESERVE changes it)

It also keeps a working order that moves from free to expensive: choose the voice from free samples, fit the script on paper, check the timing with a half-price take, then make the final take one line at a time. Music starts from a free plan and is rendered once.

Requirements

Node 18 or newer. If you do not have it, the skill offers to install it:

sh scripts/setup-deps.sh --check    # is everything present?
sh scripts/setup-deps.sh            # show the install command, ask, then run it
.\scripts\setup-deps.ps1            # Windows

An ElevenLabs account and API key. Create the key at https://elevenlabs.io/app/settings/api-keys with Text to Speech, Sound Effects, Music, Voices (read) and User (read) switched on. User read lets the tool read your credit balance, and it will not spend credits it cannot count. If there is a History row, set it to Read too, so voice-over costs are measured exactly. A credit quota on the key is a good extra limit.

If you prefer the command line

node scripts/eleven.mjs account
node scripts/eleven.mjs voices --library --q "calm narrator" --lang en --previews ./previews

node scripts/eleven.mjs tts --voice JBFqnCBsd6RMkjVDRZzb --model eleven_flash_v2_5 \
  --text "Every project starts with a question." --timestamps --out scratch/l1.mp3 --dry
node scripts/eleven.mjs tts --voice JBFqnCBsd6RMkjVDRZzb --model eleven_multilingual_v2 \
  --text "Every project starts with a question." --next "Ours was simple." \
  --out vo/l1.mp3 --tag launch-video --why "final take, line 1"

node scripts/eleven.mjs sfx --text "soft airy whoosh, left to right" --duration 1.8 --out sfx/whoosh.mp3

node scripts/eleven.mjs plan --prompt "warm minimal piano, slow build" --ms 45000 --out music/plan.json
node scripts/eleven.mjs music --plan music/plan.json --out music/bed.mp3 --max 700

node scripts/eleven.mjs ledger

Every paid command takes --dry, --max N, --fresh (with --why), --tag, --why and --out.

Where things are kept

Each project gets a .elevenlabs/ folder in the directory you run from:

.elevenlabs/
  ledger.jsonl    every paid call: what, why, tag, estimate, measured cost
  cache/          the audio, named by request hash

Keep the ledger. Add the cache to .gitignore:

.elevenlabs/cache/

ELEVENLABS_HOME moves the folder.

Disclosure

Synthesized voice and generated music count as AI-generated material on most social platforms. Use each platform's AI label when you publish them.

Credits

The API reference tables in references/ are adapted from the ElevenLabs agent skills under the MIT License. See references/ATTRIBUTION.md.

Source on GitHub ↗

Itqan Lab

Built at Itqan Lab, a design and technology studio.

إتقان — itqan, the Arabic word for mastery: doing a thing precisely, and completely.

Open source under MIT · agent paths re-verified 2026-08-11 · this site is generated from the repository on every push.