Agent skill

Dubbing

by elevenlabs in elevenlabs/skills

Dub audio and video into other languages using the ElevenLabs Dubbing API (dubbingv2), preserving the original speakers' voices.

MITAuto-check passedMedia & Creative

Install Dubbing

skills CLI
$ npx skills add elevenlabs/skills --skill dubbing -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install elevenlabs/skills dubbing --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/elevenlabs/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/dubbing .claude/skills/dubbing && rm -rf skills-src

Use ~/.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/

Facts

Skill name
dubbing
GitHub stars
482
Token cost
~3.3k tokens
SKILL.md length
912 words
Files
3 (incl. references)
Skills in repo
8
Repo updated
First seen
Licence
MIT

At a glance

Dub audio and video into other languages using the ElevenLabs Dubbing API (dubbingv2), preserving the original speakers' voices.

  • Works in 7 steps: Create the project from a file or URL →… → Poll the project until ready → Review and finalize the source… → …
  • Translating videos
  • SKILL.md covers Concepts, Workflow, Quick Start (Python) and Quick Start (JavaScript), plus 8 more sections
  • Reaches api.elevenlabs.io; needs ELEVENLABS_API_KEY

What it does

Dubbing is an agent skill from elevenlabs/skills. Dub audio and video into other languages using the ElevenLabs Dubbing API (dubbingv2), preserving the original speakers' voices. Use when translating videos, podcasts, or recordings into other languages, localizing media content, reviewing or correcting dubbing transcripts and translations, or regenerating a dub after edits.

Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files, including reference files (for example `references/api-reference.md` and `references/installation.md`). Compatibility notes: Requires internet access and an ElevenLabs API key (ELEVENLABSAPIKEY).

It sits in Media & Creative, covering Text to speech and voice and Translation. It works with ElevenLabs. The repository describes itself as: Collections of skills for building with ElevenLabs. The licence is MIT.

When your agent uses it

  • Translating videos
  • Recordings into other languages
  • Localizing media content
  • Correcting dubbing transcripts and translations

Example prompts

  • “/dubbing”

Requirements

  • Python 3
  • A credential in ELEVENLABS_API_KEY
  • Compatibility (from SKILL.md): Requires internet access and an ElevenLabs API key (ELEVENLABS_API_KEY).

Workflow steps

7 steps, taken from the first numbered list in SKILL.md.

  1. Create the project from a file or URL → queued
  2. Poll the project until ready
  3. Review and finalize the source transcript (edit/add/delete segments)
  4. Add one language per target → queued → processing → completed
  5. Download each language's outputs.lossless_audio when completed
  6. Refine translations per segment if needed → the language goes stale
  7. Regenerate the language → completed again with fresh output

What it can do on your machine

Read from SKILL.md and the folder at commit 1d08a4a. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are python, bash and typescript).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • api.elevenlabs.io

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • ELEVENLABS_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    Requires internet access and an ElevenLabs API key (ELEVENLABS_API_KEY).

    From compatibility in the SKILL.md frontmatter.

Context cost

Dubbing loads about 3.3k tokens when it runs, and up to ~7.4k if it reads all its reference files. Until then it costs about 84 tokens; SKILL.md has 912 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~84
When it runs · the whole SKILL.md, loaded when a task matches
~3.3k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~7.4k

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.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

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.

SKILL.md

The full file from elevenlabs/skills at commit 1d08a4a, republished under its MIT licence (© elevenlabs). 912 words, ~3,267 tokens.

Download SKILL.mdSave it as .claude/skills/dubbing/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
name
dubbing
description
Dub audio and video into other languages using the ElevenLabs Dubbing API (dubbing_v2), preserving the original speakers' voices. Use when translating videos, podcasts, or recordings into other languages, localizing media content, reviewing or correcting dubbing transcripts and translations, or regenerating a dub after edits.
compatibility
Requires internet access and an ElevenLabs API key (ELEVENLABS_API_KEY).
license
MIT

ElevenLabs Dubbing

Dub audio or video into other languages while preserving the original speakers' voices. Create a project from a file or URL, review and edit the source transcript, add one or more target languages, refine translations per segment, and regenerate outputs.

Important: Use the Dubbing Projects API — elevenlabs.dubbing.project.* in the SDKs, or the /v1/dubbing/project REST endpoints. Do not use the legacy v1 dubbing surface (client.dubbing.create(), client.dubbing.get(), client.dubbing.audio.get(), or bare /v1/dubbing routes) — that is the older dubbing API, now under Legacy in the API reference.

Setup: See Installation Guide. The elevenlabs CLI and the SDKs read ELEVENLABS_API_KEY automatically; REST base URL is https://api.elevenlabs.io with your API key in the xi-api-key header.

Concepts

ConceptMeaning
ProjectOne source of media (file or URL) plus its source transcript. Prepared (transcribed) once, then rests in ready while you add languages.
Source transcriptEditable segments (text, speaker, timing) transcribed from the source. The single source of truth every language is translated from.
Language (target)One dubbed output language. Each has its own transcript (source segments + a translation per segment) and its own dubbed audio output.
RevisionsIndependent monotonic counters. The project's revision bumps on source-transcript edits; a language's revision bumps on translation edits or source edits that affect it. A language's output_revision is the revision its current audio was generated from — when it's behind revision, the output is out of date.

Recommended order of operations: finalize the source transcript before adding any languages. Translations are produced from the source, so correcting the source first means every language starts from the right text — editing the source after a language completes marks it stale and requires a (charged) regeneration.

Enterprise: Transcript editing and regeneration are available to enterprise workspaces only. Creating projects, adding languages, and downloading dubs work on all plans.

Workflow

  1. Create the project from a file or URL → queued
  2. Poll the project until ready
  3. Review and finalize the source transcript (edit/add/delete segments)
  4. Add one language per target → queued → processing → completed
  5. Download each language's outputs.lossless_audio when completed
  6. Refine translations per segment if needed → the language goes stale
  7. Regenerate the language → completed again with fresh output

Quick Start (Python)

python
import os
import time
import requests
from elevenlabs.client import ElevenLabs

elevenlabs = ElevenLabs(api_key=os.getenv("ELEVENLABS_API_KEY"))

# 1. Create a project from a local file (or pass source_url=... instead of file)
with open("promo.mp4", "rb") as f:
    project = elevenlabs.dubbing.project.create(
        file=f,
        source_language="en",
        reference="Q3 marketing video",
    )

# 2. Wait for the source media to be transcribed
while True:
    project = elevenlabs.dubbing.project.get(project.project_id)
    if project.status == "ready":
        break
    if project.status == "failed":
        raise RuntimeError("Project preparation failed")
    time.sleep(5)

# 3. Add a Spanish language target
language = elevenlabs.dubbing.project.language.create(
    project.project_id,
    target_language="es",
)

# 4. Wait for the dub to finish generating
while True:
    language = elevenlabs.dubbing.project.language.get(
        project.project_id, language.language_id
    )
    if language.status == "completed":
        break
    if language.status == "failed":
        raise RuntimeError("Dub generation failed")
    time.sleep(5)

# 5. Download the dubbed audio (signed URL, valid ~1 hour — re-fetch the language for a fresh one)
audio = requests.get(language.outputs.lossless_audio)
with open("promo_es.wav", "wb") as f:
    f.write(audio.content)

Quick Start (JavaScript)

typescript
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";
import { writeFile } from "fs/promises";

const elevenlabs = new ElevenLabsClient();

// 1. Create a project (sourceUrl shown; file upload is also supported)
let project = await elevenlabs.dubbing.project.create({
  sourceUrl: "https://example.com/promo.mp4",
  sourceLanguage: "en",
  reference: "Q3 marketing video",
});

// 2. Wait for the source media to be transcribed
while (true) {
  project = await elevenlabs.dubbing.project.get(project.projectId);
  if (project.status === "ready") break;
  if (project.status === "failed") throw new Error("Project preparation failed");
  await new Promise((resolve) => setTimeout(resolve, 5000));
}

// 3. Add a Spanish language target
let language = await elevenlabs.dubbing.project.language.create(project.projectId, {
  targetLanguage: "es",
});

// 4. Wait for the dub to finish generating
while (true) {
  language = await elevenlabs.dubbing.project.language.get(project.projectId, language.languageId);
  if (language.status === "completed") break;
  if (language.status === "failed") throw new Error("Dub generation failed");
  await new Promise((resolve) => setTimeout(resolve, 5000));
}

// 5. Download the dubbed audio from the signed URL
const response = await fetch(language.outputs!.losslessAudio!);
await writeFile("promo_es.wav", Buffer.from(await response.arrayBuffer()));

Quick Start (CLI)

The elevenlabs CLI reads ELEVENLABS_API_KEY from the environment automatically.

bash
# 1. Create a project (use --source-url "https://..." instead of --file to dub from a URL)
elevenlabs dubbing project create --file promo.mp4 --source-language en
# → {"project_id": "proj_...", "status": "queued", ...}

# 2. Poll until status is "ready"
elevenlabs dubbing project get --project-id proj_...

# 3. Add a target language
elevenlabs dubbing project language create --project-id proj_... --target-language es

# 4. Poll the language until "completed", then download outputs.lossless_audio
elevenlabs dubbing project language get --project-id proj_... --language-id lang_...

Create Options

elevenlabs dubbing project create (REST: POST /v1/dubbing/project, multipart/form-data) takes either file or source_url (not both):

FieldRequiredNotes
fileone of file/source_urlSource media to dub (audio or video), up to 3 GiB
source_urlone of file/source_urlPublic URL to fetch the source media from
source_languagenoISO 639 code (e.g. en). Omit to auto-detect — the detected language is reported on the source transcript's language field
referencenoFree-form label to identify the project on your end (max 500 chars)
model_idnodubbing_v2 (default)
target_languagenoOptionally queue the first language target at creation; add more with language.create
keytermsnoTerms to bias transcription/translation toward (product/brand names). Up to 1000 terms; each at most 50 chars and 5 words; <>{}[]\ not allowed. Repeat the field once per term in multipart

Editing the Source Transcript

Once the project is ready, read the transcript, then correct it before adding languages. Every edit bumps the project's revision. Each segment has a stable id used to edit or delete it. (Enterprise workspaces only.)

python
# Read the source transcript
transcript = elevenlabs.dubbing.project.transcript.get(project_id)

# Correct a segment's text — send only the fields to change (text, speaker_id, start_s, end_s)
elevenlabs.dubbing.project.transcript.update_segment(
    project_id,
    segment_id=transcript.segments[0].id,
    text="Welcome to our latest product demo.",
)

# Add a segment (reuse an existing speaker_id so it's dubbed with that speaker's voice)
added = elevenlabs.dubbing.project.transcript.create_segment(
    project_id,
    text="Thanks for watching.",
    speaker_id=transcript.segments[0].speaker_id,
    start_s=40.0,
    end_s=42.0,
)

# Delete a segment
elevenlabs.dubbing.project.transcript.delete_segment(project_id, segment_id=added.segment.id)

Via the CLI: elevenlabs dubbing project transcript get --project-id proj_..., then update a segment with only the changed fields (--text, --speaker-id, --start-s, --end-s):

bash
elevenlabs dubbing project transcript update_segment \
  --project-id proj_... --segment-id seg_... \
  --text "Welcome to our latest product demo."
Show full SKILL.md (344 more words)Show less

Refining Translations and Regenerating

A language's transcript pairs each source segment with its translation (null = not yet translated; segment ids match the source). Edit a single translation, then regenerate. (Enterprise workspaces only.)

python
# Read the language's translations
target = elevenlabs.dubbing.project.language.transcript.get(project_id, language_id)

# Refine a single translation (pass translation=None to clear it and mark for re-translation)
elevenlabs.dubbing.project.language.transcript.update_segment(
    project_id,
    language_id,
    segment_id=target.segments[0].id,
    translation="Bienvenido a nuestra última demostración de producto.",
)

# Regenerate the dub from the current transcript (charged like a generation)
elevenlabs.dubbing.project.language.transcript.regenerate(project_id, language_id)

Via the CLI: elevenlabs dubbing project language transcript update_segment --project-id proj_... --language-id lang_... --segment-id seg_... --translation "...", then elevenlabs dubbing project language transcript regenerate --project-id proj_... --language-id lang_... (returns 202 Accepted).

A translation edit affects only that language. After the edit, a completed language becomes stale — it keeps serving its previous output until you regenerate. Poll until completed; output_revision then equals revision and outputs.lossless_audio reflects the current transcript.

Dubbing into Multiple Languages

Add one language target per language — each generates independently. Track them all with language.list instead of polling one by one:

python
for lang in ["es", "fr", "de", "ja"]:
    elevenlabs.dubbing.project.language.create(project_id, target_language=lang)

while True:
    result = elevenlabs.dubbing.project.language.list(project_id)
    if not any(l.status in ("queued", "processing") for l in result.languages):
        break
    time.sleep(5)

States

Project:

StatusMeaning
queuedCreated; source fetch + preparation enqueued
preparingPreparation (transcription) running
readySource transcript available; add/generate languages. Projects stay ready — per-language progress lives on the languages
failedPreparation failed (e.g. source couldn't be fetched or decoded)

Language:

StatusMeaning
queuedWaiting on the project becoming ready, or on a generation worker
processingThe dub is being generated
completedFinished; outputs populated with a signed download URL (valid ~1 hour — re-fetch for a fresh one)
stalePreviously completed, but the transcript changed; keeps the last output until regenerated
failedGeneration failed

You can add a language before the project is ready — it stays queued and starts automatically once the project becomes ready. Adding a language accepts optional model_id (defaults to the project's) and voice_settings (e.g. {"cloning_strength": 7}, range 0–10, default 7 — controls how strongly dubbed speakers clone the source voices).

Error Handling

  • 401: Invalid API key
  • 409 Conflict on regenerate: The project isn't ready or the language isn't settled (e.g. already generating) — wait and retry
  • Expired download URL: outputs.lossless_audio is signed and valid ~1 hour; re-fetch the language for a fresh URL
  • Transcript editing / regeneration unavailable: These endpoints are enterprise-only — on other plans, create the project with a finalized source and add languages directly

References

© elevenlabs, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 2 other files (references) in dubbing of elevenlabs/skills.

  • SKILL.md
  • references/api-reference.md
  • references/installation.md

Open the folder on GitHubat commit 1d08a4a

Compare with similar skills

Dubbing 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.

Dubbing compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Dubbing this skillelevenlabs/skills482—~3.3kAutomated safety check: PassMIT
Video Translatorshang-zhu/violin1.1k—~1kAutomated safety check: NotesMIT
Musictadaspetra/loop2962 repos~827Automated safety check: PassMIT
Sound Effectstadaspetra/loop2962 repos~1.1kAutomated safety check: PassMIT
Edu Math Videowy51ai/edulab1.4k—~2.5kAutomated safety check: NotesApache-2.0
Elevenlabs Transcribeqdhenry/Claude-Command-Suite1.3k—~1.5kAutomated safety check: NotesNone

Similar skills

  • Video Translator

    shang-zhu/violin

    Dub a video into another language and generate subtitles using the default Together + Cartesia stack.

    1.1k GitHub stars~1k tokensUpdated 1 mo ago
    Media & CreativeAuto-check: notes
  • Music

    tadaspetra/loop

    Generate music using ElevenLabs Music API. An agent skill from tadaspetra/loop.

    296 GitHub starsUsed in 2 repos~827 tokens
    Media & CreativeAuto-check passed
  • Sound Effects

    tadaspetra/loop

    Generate sound effects from text descriptions using ElevenLabs.

    296 GitHub starsUsed in 2 repos~1.1k tokens
    Media & CreativeAuto-check passed
  • Edu Math Video

    wy51ai/edulab

    A skill your agent uses when asked to make an explainer / walkthrough video (讲解视频、解题视频、例题精讲、微课) for a math problem (数学题, geometry, algebra, functions, motion/行程 problems), from a problem screenshot…

    1.4k GitHub stars~2.5k tokensUpdated today
    Media & CreativeAuto-check: notes
  • Elevenlabs Transcribe

    qdhenry/Claude-Command-Suite

    Transcribes audio/video files using ElevenLabs Scribe v2 API.

    1.3k GitHub stars~1.5k tokensUpdated 7 mo ago
    Media & CreativeAuto-check: notes
  • Sag

    trpc-group/trpc-agent-go

    ElevenLabs text-to-speech with mac-style say UX. An agent skill from trpc-group/trpc-agent-go.

    1.9k GitHub starsUsed in 15 repos~574 tokens
    Media & CreativeAuto-check passed

More from elevenlabs/skills

All 8 skills in this repo
  • Text To Speech

    elevenlabs/skills

    Convert text to speech using ElevenLabs voice AI. An agent skill from elevenlabs/skills.

    482 GitHub stars~2.2k tokensUpdated today
    Auto-check passed
  • Voice Changer

    elevenlabs/skills

    Transform the voice in an audio recording into a different target voice while preserving emotion, timing, and delivery using the ElevenLabs Voice Changer (speech-to-speech) API.

    482 GitHub stars~2.9k tokensUpdated today
    Auto-check passed
  • Voice Isolator

    elevenlabs/skills

    Remove background noise and isolate vocals/speech from audio using ElevenLabs Voice Isolator (audio isolation) API.

    482 GitHub stars~923 tokensUpdated today
    Auto-check passed
  • Speech Engine

    elevenlabs/skills

    Add real-time voice conversations to a custom agent runtime with ElevenLabs Speech Engine.

    482 GitHub stars~2.5k tokensUpdated today
    Auto-check: warnings
  • Agents

    elevenlabs/skills

    Build voice AI agents with ElevenLabs. An agent skill from elevenlabs/skills.

    482 GitHub stars~6.5k tokensUpdated today
    Auto-check passed
  • Setup API Key

    elevenlabs/skills

    Guides users through setting up an ElevenLabs API key for REST API and SDK workflows.

    482 GitHub stars~954 tokensUpdated today
    Auto-check: notes

Works with

Questions about Dubbing

What does Dubbing do?

Dub audio and video into other languages using the ElevenLabs Dubbing API (dubbingv2), preserving the original speakers' voices. Dubbing is an agent skill from elevenlabs/skills. Dub audio and video into other languages using the ElevenLabs Dubbing API (dubbingv2), preserving the original speakers' voices.

When should I use Dubbing?

Dubbing fits situations like: translating videos; recordings into other languages; localizing media content; correcting dubbing transcripts and translations.

How do I install Dubbing in Claude Code?

Run `npx skills add elevenlabs/skills --skill dubbing -a claude-code`. Or copy the skill folder (dubbing in elevenlabs/skills) into .claude/skills/dubbing in your project. Claude Code loads it when a task matches its description.

How do I install Dubbing in Codex?

Run `npx skills add elevenlabs/skills --skill dubbing -a codex`. Or copy the skill folder (dubbing in elevenlabs/skills) into .agents/skills/dubbing in your project. Codex loads it when a task matches its description.

Can I use Dubbing in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add elevenlabs/skills --skill dubbing -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/dubbing, .gemini/skills/dubbing, .github/skills/dubbing and .opencode/skills/dubbing in your project.

What does Dubbing need to run?

Going by SKILL.md and its folder, Dubbing needs credentials named ELEVENLABS_API_KEY. Our summary lists: Python 3; A credential in ELEVENLABS_API_KEY. Compatibility (from SKILL.md): Requires internet access and an ElevenLabs API key (ELEVENLABS_API_KEY)..

Does Dubbing access the network?

SKILL.md names 1 domain. In commands or code: api.elevenlabs.io; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Dubbing safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Dubbing use?

Dubbing is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Dubbing use?

About 3.3k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 4.1k tokens, read only when the agent opens those files.

What are the alternatives to Dubbing?

Skills that share tags, products or a category with Dubbing: Video Translator (shang-zhu/violin, 1.1k stars), Music (tadaspetra/loop, 296 stars), Sound Effects (tadaspetra/loop, 296 stars) and Edu Math Video (wy51ai/edulab, 1.4k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Dubbing?

elevenlabs (a GitHub organization) maintains it in elevenlabs/skills, which has 482 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on October 9, 2026.

Source: elevenlabs/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.