Nodes/Elevenlabs-ComfyUI/ElevenLabs Dubbing
ComfyUI Node

ElevenLabs Dubbing

It translates your audio, but don't expect the audio back

By karthikg-09·Created 11 months ago·Updated 11 months ago· 1
ElevenLabs Dubbing
  • audio
  • dubbing_id_or_status
api_key
target_languagees
source_languageauto
num_speakers1
wait_for_completiontrue

Dubbing is where ElevenLabs earns its reputation for multilingual production work: you hand it audio in one language and it returns that same content spoken in another, with the speakers separated and re-voiced. This node wires that into your graph. But read the title of this article twice, because the gotcha is in it: the node hands you a dubbing ID and a status, not the finished audio file.

How it works

The flow is genuinely async, which is why the node looks the way it does. First it converts your audio input to WAV and POSTs it to ElevenLabs' /v1/dubbing endpoint, which creates a dubbing project and returns a dubbing_id. Dubbing is a heavy job - the API doesn't finish in one request, so:

  • If wait_for_completion is on (default), the node polls the project status every ten seconds, up to five minutes, and returns a status string when it finishes (or times out).
  • If it's off, it returns immediately with the ID and a "check status later" note.

Either way the output is dubbing_id_or_status, a STRING. There is no AUDIO socket here, and no code path that downloads the dubbed file back into your graph. The README's "Outputs: AUDIO" is wrong - what you get is the ID plus a message that the download URL is available in the API response. To actually lay your hands on the dubbed track you go to the ElevenLabs dashboard with that ID, or call the API yourself. Worth knowing before you build a "dub and continue" pipeline that expects a tensor.

Inputs

  • api_key - your key.
  • audio - the source audio (an AUDIO tensor, so load it in first).
  • target_language - where you're going (es default; fourteen options).
  • source_language - where it starts (auto detection is the default and usually fine).
  • num_speakers - 1 to 10, default 1. If your clip has multiple people talking, set this right; it's how the model separates speakers so each keeps a consistent dubbed voice.
  • wait_for_completion (optional) - the wait-vs-return-early switch above.

Install

Standard for the pack - Manager search "Elevenlabs-ComfyUI", or:

cd ComfyUI/custom_nodes
git clone https://github.com/karthikg-09/Elevenlabs-ComfyUI.git
cd Elevenlabs-ComfyUI && pip install -r requirements.txt

then restart. Add Node → ElevenLabs.

What to actually expect

Dubbing is subscription-tier territory and it burns credits per project, so check your plan first via the User Info node. The wait_for_completion path can sit there polling for a while - that's normal, not a hang; watch the console for status lines. If it times out at five minutes, the dubbing project is still processing server-side; you just get the ID to check later. And because the final audio never lands back in the graph, think of this node as a dispatch point - it starts a dubbing job and tells you where it lives - rather than a generation node. Pair it with manual dashboard retrieval, and it's a genuinely useful bridge for localizing a clip you already have in a ComfyUI pipeline.

CategoryElevenLabs

Inputs (6)

NameTypeDefaultDescription
api_keySTRING
audioAUDIO
target_languageCOMBOes14 options: es, fr, de, it, pt, pl, +8
source_languageCOMBOauto16 options: auto, en, es, fr, de, it, +10
num_speakersINT11–10
wait_for_completionoptBOOLEANtrue

Outputs (1)

NameTypeDescription
dubbing_id_or_statusSTRING