Communitygithub.com

ElevenLabs Dubbing

Dobla audio y video a otros idiomas usando la API de Doblaje de ElevenLabs (dubbing_v2), preservando las voces de los hablantes originales. Útil para traducir videos, podcasts o grabaciones a otros idiomas, localizar contenido multimedia, revisar o corregir transcripciones y traducciones de doblaje, o regenerar un doblaje después de ediciones.

¿Qué es ElevenLabs Dubbing?

Esta habilidad permite doblar audio o video a otros idiomas manteniendo las voces originales de los hablantes. Soporta plataformas como Claude Code, Cursor y Codex, y se basa en la API de Proyectos de Doblaje de ElevenLabs (elevenlabs.dubbing.project.* en SDKs, o endpoints REST /v1/dubbing/project). El flujo de trabajo incluye: crear un proyecto desde un archivo o URL, esperar a que se transcriba, revisar y editar la transcripción fuente, agregar idiomas objetivo, refinar traducciones por segmento y regenerar salidas. Es importante no usar la API de doblaje heredada (v1). Para configurarlo, se debe ejecutar `npx -y @elevenlabs/cli@latest onboard init` si la clave de API no está configurada. La habilidad es útil para localización de contenido multimedia, traducción de videos y podcasts, y revisión de traducciones de doblaje. Incluye manejo de estados (proyecto: queued, preparing, ready, failed; idioma: queued, processing, completed, stale, failed) y soporta edición de transcripciones y regeneración (solo en planes empresariales).

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/elevenlabs/skills/tree/HEAD/dubbing

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Doblaje con ElevenLabs

Dobla audio o video a otros idiomas mientras preservas las voces de los hablantes originales. Crea un proyecto desde un archivo o URL, revisa y edita la transcripción fuente, agrega uno o más idiomas objetivo, refina las traducciones por segmento y regenera las salidas.

Importante: Usa la API de Proyectos de Doblaje — elevenlabs.dubbing.project.* en los SDKs, o los endpoints REST /v1/dubbing/project. No uses la superficie de doblaje v1 heredada (client.dubbing.create(), client.dubbing.get(), client.dubbing.audio.get(), o rutas /v1/dubbing simples) — esa es la API de doblaje anterior, ahora en Heredado en la referencia de la API.

Configuración, antes de escribir cualquier código: si ELEVENLABS_API_KEY no está configurada para este proyecto, ejecuta npx -y @elevenlabs/cli@latest onboard init desde la carpeta de la aplicación primero y sigue lo que imprime: inicia sesión del usuario y almacena una clave para el proyecto, para que nadie la copie manualmente. De lo contrario, consulta la Guía de Instalación. La CLI de elevenlabs y los SDKs leen ELEVENLABS_API_KEY automáticamente; la URL base REST es https://api.elevenlabs.io con tu clave API en el encabezado xi-api-key.

Conceptos

ConceptoSignificado
ProyectoUna fuente de medios (archivo o URL) más su transcripción fuente. Preparado (transcrito) una vez, luego permanece en ready mientras agregas idiomas.
Transcripción fuenteSegmentos editables (texto, hablante, tiempo) transcritos desde la fuente. La única fuente de verdad desde la que se traduce cada idioma.
Idioma (objetivo)Un idioma de salida doblado. Cada uno tiene su propia transcripción (segmentos fuente + una traducción por segmento) y su propia salida de audio doblado.
RevisionesContadores monótonos independientes. La revision del proyecto aumenta con ediciones en la transcripción fuente; la revision de un idioma aumenta con ediciones de traducción o ediciones fuente que lo afectan. El output_revision de un idioma es la revisión con la que se generó su audio actual — cuando está detrás de revision, la salida está desactualizada.

Orden de operaciones recomendado: finaliza la transcripción fuente antes de agregar idiomas. Las traducciones se producen a partir de la fuente, por lo que corregir la fuente primero significa que cada idioma comienza con el texto correcto — editar la fuente después de que un idioma se complete lo marca como stale y requiere una regeneración (con costo).

Empresarial: La edición de transcripciones y la regeneración están disponibles solo para espacios de trabajo empresariales. La creación de proyectos, la adición de idiomas y la descarga de doblajes funcionan en todos los planes.

Flujo de trabajo

  1. Crear el proyecto desde un archivo o URL → queued
  2. Consultar el proyecto hasta que esté ready
  3. Revisar y finalizar la transcripción fuente (editar/agregar/eliminar segmentos)
  4. Agregar un idioma por objetivo → queued → processing → completed
  5. Descargar los outputs.lossless_audio de cada idioma cuando esté completed
  6. Refinar las traducciones por segmento si es necesario → el idioma pasa a stale
  7. Regenerar el idioma → completed nuevamente con salida fresca

Inicio Rápido (Python)

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

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

# 1. Crear un proyecto desde un archivo local (o pasa source_url=... en lugar de file)
with open("promo.mp4", "rb") as f:
    project = elevenlabs.dubbing.project.create(
        file=f,
        source_language="en",
        reference="Video promocional Q3",
    )

# 2. Esperar a que el medio fuente sea transcrito
while True:
    project = elevenlabs.dubbing.project.get(project.project_id)
    if project.status == "ready":
        break
    if project.status == "failed":
        raise RuntimeError("La preparación del proyecto falló")
    time.sleep(5)

# 3. Agregar un idioma objetivo español
language = elevenlabs.dubbing.project.language.create(
    project.project_id,
    target_language="es",
)

# 4. Esperar a que termine la generación del doblaje
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("La generación del doblaje falló")
    time.sleep(5)

# 5. Descargar el audio doblado (URL firmada, válida ~1 hora — vuelve a obtener el idioma para una nueva)
audio = requests.get(language.outputs.lossless_audio)
with open("promo_es.wav", "wb") as f:
    f.write(audio.content)

Inicio Rápido (JavaScript)

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

const elevenlabs = new ElevenLabsClient();

// 1. Crear un proyecto (sourceUrl mostrado; también se admite carga de archivos)
let project = await elevenlabs.dubbing.project.create({
  sourceUrl: "https://example.com/promo.mp4",
  sourceLanguage: "en",
  reference: "Video promocional Q3",
});

// 2. Esperar a que el medio fuente sea transcrito
while (true) {
  project = await elevenlabs.dubbing.project.get(project.projectId);
  if (project.status === "ready") break;
  if (project.status === "failed") throw new Error("La preparación del proyecto falló");
  await new Promise((resolve) => setTimeout(resolve, 5000));
}

// 3. Agregar un idioma objetivo español
let language = await elevenlabs.dubbing.project.language.create(project.projectId, {
  targetLanguage: "es",
});

// 4. Esperar a que termine la generación del doblaje
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("La generación del doblaje falló");
  await new Promise((resolve) => setTimeout(resolve, 5000));
}

// 5. Descargar el audio doblado desde la URL firmada
const response = await fetch(language.outputs!.losslessAudio!);
await writeFile("promo_es.wav", Buffer.from(await response.arrayBuffer()));

Inicio Rápido (CLI)

La CLI de elevenlabs lee ELEVENLABS_API_KEY del entorno automáticamente.

# 1. Crear un proyecto (usa --source-url "https://..." en lugar de --file para doblar desde una URL)
elevenlabs dubbing project create --file promo.mp4 --source-language en
# → {"project_id": "proj_...", "status": "queued", ...}

# 2. Consultar hasta que el estado sea "ready"
elevenlabs dubbing project get --project-id proj_...

# 3. Agregar un idioma objetivo
elevenlabs dubbing project language create --project-id proj_... --target-language es

# 4. Consultar el idioma hasta que esté "completed", luego descargar outputs.lossless_audio
elevenlabs dubbing project language get --project-id proj_... --language-id lang_...

Opciones de Creación

elevenlabs dubbing project create (REST: POST /v1/dubbing/project, multipart/form-data) toma file o source_url (no ambos):

CampoRequeridoNotas
fileuno de file/source_urlMedio fuente a doblar (audio o video), hasta 3 GiB
source_urluno de file/source_urlURL pública para obtener el medio fuente
source_languagenoCódigo ISO 639 (ej. en). Omitir para detección automática — el idioma detectado se reporta en el campo language de la transcripción fuente
referencenoEtiqueta libre para identificar el proyecto (máx. 500 caracteres)
model_idnodubbing_v2 (predeterminado)
target_languagenoOpcionalmente encolar el primer idioma objetivo al crear; agregar más con language.create
keytermsnoTérminos para sesgar la transcripción/traducción (nombres de productos/marcas). Hasta 1000 términos; cada uno máximo 50 caracteres y 5 palabras; no se permiten <>{}[]\. Repite el campo una vez por término en multipart

Editar la Transcripción Fuente

Una vez que el proyecto está ready, lee la transcripción, luego corrígela antes de agregar idiomas. Cada edición aumenta la revision del proyecto. Cada segmento tiene un id estable usado para editarlo o eliminarlo. (Solo espacios de trabajo empresariales.)

# Leer la transcripción fuente
transcript = elevenlabs.dubbing.project.transcript.get(project_id)

# Corregir el texto de un segmento — enviar solo los campos a cambiar (text, speaker_id, start_s, end_s)
elevenlabs.dubbing.project.transcript.update_segment(
    project_id,
    segment_id=transcript.segments[0].id,
    text="Bienvenidos a nuestra última demostración de producto.",
)

# Agregar un segmento (reutiliza un speaker_id existente para que se doble con la voz de ese hablante)
added = elevenlabs.dubbing.project.transcript.create_segment(
    project_id,
    text="Gracias por ver.",
    speaker_id=transcript.segments[0].speaker_id,
    start_s=40.0,
    end_s=42.0,
)

# Eliminar un segmento
elevenlabs.dubbing.project.transcript.delete_segment(project_id, segment_id=added.segment.id)

A través de la CLI: elevenlabs dubbing project transcript get --project-id proj_..., luego actualiza un segmento solo con los campos cambiados (--text, --speaker-id, --start-s, --end-s):

elevenlabs dubbing project transcript update_segment \
  --project-id proj_... --segment-id seg_... \
  --text "Bienvenidos a nuestra última demostración de producto."

Refinar Traducciones y Regenerar

La transcripción de un idioma empareja cada segmento fuente con su translation (null = aún no traducido; los ids de segmento coinciden con la fuente). Edita una sola traducción, luego regenera. (Solo espacios de trabajo empresariales.)

# Leer las traducciones del idioma
target = elevenlabs.dubbing.project.language.transcript.get(project_id, language_id)

# Refinar una sola traducción (pasa translation=None para limpiarla y marcar para retraducción)
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.",
)

# Regenerar el doblaje desde la transcripción actual (con costo como una generación)
elevenlabs.dubbing.project.language.transcript.regenerate(project_id, language_id)

A través de la CLI: elevenlabs dubbing project language transcript update_segment --project-id proj_... --language-id lang_... --segment-id seg_... --translation "...", luego elevenlabs dubbing project language transcript regenerate --project-id proj_... --language-id lang_... (devuelve 202 Accepted).

Una edición de traducción afecta solo a ese idioma. Después de la edición, un idioma completed se vuelve stale — sigue sirviendo su salida anterior hasta que regeneres. Consulta hasta que esté completed; output_revision entonces es igual a revision y outputs.lossless_audio refleja la transcripción actual.

Doblaje a Múltiples Idiomas

Agrega un idioma objetivo por idioma — cada uno se genera de forma independiente. Rastréalos todos con language.list en lugar de consultar uno por uno:

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)

Estados

Proyecto:

EstadoSignificado
queuedCreado; obtención y preparación de fuente encoladas
preparingPreparación (transcripción) en ejecución
readyTranscripción fuente disponible; agregar/generar idiomas. Los proyectos permanecen ready — el progreso por idioma vive en los idiomas
failedPreparación falló (ej. fuente no pudo obtenerse o decodificarse)

Idioma:

EstadoSignificado
queuedEsperando a que el proyecto esté ready, o a un trabajador de generación
processingEl doblaje se está generando
completedTerminado; outputs poblado con una URL de descarga firmada (válida ~1 hora — vuelve a obtener para una nueva)
staleAnteriormente completado, pero la transcripción cambió; mantiene la última salida hasta que se regenere
failedGeneración falló

Puedes agregar un idioma antes de que el proyecto esté ready — permanece queued y comienza automáticamente una vez que el proyecto se vuelve ready. Agregar un idioma acepta opcionalmente model_id (por defecto el del proyecto) y voice_settings (ej. {"cloning_strength": 7}, rango 0–10, por defecto 7 — controla cuán fuertemente los hablantes doblados clonan las voces fuente).

Manejo de Errores

  • 401: Clave API inválida
  • 409 Conflict en regenerate: El proyecto no está ready o el idioma no está estable (ej. ya generando) — espera y reintenta
  • URL de descarga expirada: outputs.lossless_audio está firmada y es válida ~1 hora; vuelve a obtener el idioma para una URL nueva
  • Edición de transcripción / regeneración no disponible: Estos endpoints son solo empresariales — en otros planes, crea el proyecto con una fuente finalizada y agrega idiomas directamente

Referencias

Individual skills in this repo

This repo contains 8 individual skills — each has its own dedicated page.

elevenlabs/agents

Build voice AI agents with ElevenLabs. Use when creating voice assistants, customer service bots, interactive voice characters, or any real-time voice conversation experience.

elevenlabs/music

Generate music using ElevenLabs Music API. Use when creating instrumental tracks, songs with lyrics, background music, jingles, or any AI-generated music composition. Supports prompt-based generation, composition plans for granular control, and detailed output with metadata.

elevenlabs/setup-api-key

Guides users through setting up an ElevenLabs API key for ElevenLabs MCP tools. Use when the user needs to configure an ElevenLabs API key, when ElevenLabs tools fail due to missing API key, or when the user mentions needing access to ElevenLabs. First checks whether ELEVENLABS_API_KEY is already configured and valid, and only runs full setup when needed.

elevenlabs/sound-effects

Generate sound effects from text descriptions using ElevenLabs. Use when creating sound effects, generating audio textures, producing ambient sounds, cinematic impacts, UI sounds, or any audio that isn't speech. Supports looping, duration control, and prompt influence tuning.

elevenlabs/speech-to-text

Transcribe audio to text using ElevenLabs Scribe v2. Use when converting audio/video to text, generating subtitles, transcribing meetings, or processing spoken content.

elevenlabs/text-to-speech

Convert text to speech using ElevenLabs voice AI. Use when generating audio from text, creating voiceovers, building voice apps, or synthesizing speech in 70+ languages.

elevenlabs/voice-changer

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. Use when converting one voice to another, changing the speaker/narrator of an existing recording, dubbing a voice-over in a different voice, creating character voices from a scratch performance, anonymizing a speaker, or any "voice conversion / voice transfer / speech-to-speech" task. Make sure to use this skill whenever the user mentions voice changing, voice conversion, speech-to-speech, swapping a voice in audio, re-voicing a clip, or applying a different voice to an existing recording — even if they don't explicitly say "voice changer".

elevenlabs/voice-isolator

Remove background noise and isolate vocals/speech from audio using ElevenLabs Voice Isolator (audio isolation) API. Use when cleaning up noisy recordings, removing music or background ambience from dialogue, isolating speech from field recordings, preparing audio for transcription, extracting vocals, or any "denoise / clean up / isolate voice" task.

Skills relacionados