Nodes/comfyui-magic-hour/Magic Hour: AI Video Translator
ComfyUI Node

Magic Hour: AI Video Translator

Dub a Clip Into 53 Languages Without Leaving Your Workflow

By magichourhq·Created about 16 hours ago·Updated about 15 hours ago· 0
Magic Hour: AI Video Translator
  • video
  • video
  • video_path
  • credits_charged
◄target_languageEnglish►
◄resolution720p►
◄start_seconds0.0►
◄end_seconds0.0►

Localization is the job nobody budgets for. You finish a clip, someone asks "can we get this in Spanish and Portuguese," and suddenly you're pricing dubbing studios. The AI Video Translator node is the shortcut: give it a VIDEO and a target language, get back a version of the clip where the speech is in that language.

Worth being clear about what it produces, because the name is vague. It translates speech - this is a dub, not captions. If you want burned-in subtitles, that's a different node in the same pack (Auto Subtitle Generator), and you can run both.

How it works

The node writes your clip to a temp MP4, uploads it, and calls Magic Hour's ai_video_translator endpoint with the target language, the resolution, and a start/end window. The job runs on their hardware; the node waits it out - polling every few seconds - then downloads the result into ComfyUI/output/magic_hour/ and returns it as a VIDEO.

It's an API node in the sense the KB means in API-wrapper nodes: the work is a network call, billed per run, and your footage leaves your machine. Speech-to-speech translation is also one of the jobs where the hosted path still earns its keep - the KB's audio essay makes the same point about multi-language TTS, that the API remains the reliability bar while local models have caught up mainly on English-first cloning. Doing this locally would mean chaining whisper → an LLM → a TTS model → a lip-sync pass, and hoping the timing survives four handoffs. One node that does it end to end is a fair trade for a few credits.

The pack itself is the vendor's own (Magic Hour, Apache-2.0, first-party PublisherId), which is the reassurance you want in a category where nodes carry credentials and call the network by design.

The inputs that matter

video - the clip containing the speech. Any ComfyUI VIDEO works, including one you just generated locally.

target_language - 53 options, defaulting to English. The list is read live from the installed Magic Hour SDK's generate() signature, so it tracks the API rather than being a hardcoded copy: Afrikaans through Chinese (Simplified and Traditional), Czech, Danish, Dutch, and so on. There is no source-language field - it figures that out from the audio, which is one less thing to get wrong and one more thing you can't fix if it guesses wrong.

resolution - 720p, 480p or 1080p. Same content in all three; you're choosing how much you pay for pixels. 480p for a test pass, then re-run the good take at the resolution you'll ship.

start_seconds / end_seconds - the segment to translate. end_seconds defaults to 0, which the author's tooltip spells out as "to the end of the clip."

Outputs

video is the dubbed clip - wire it into Save Video. video_path is the downloaded file's path as a plain string, which is also your fallback if the VIDEO conversion fails on your ComfyUI build. credits_charged is an INT with what the run actually cost, so a localization batch is measurable instead of a mystery invoice.

Install

ComfyUI Manager → search "Magic Hour", or manually:

cd ComfyUI/custom_nodes
git clone https://github.com/magichourhq/comfyui-magic-hour
pip install -r comfyui-magic-hour/requirements.txt

One dependency (magic-hour SDK), Python 3.10+, a ComfyUI with the VIDEO type, then a restart. Key goes in before launch:

export MAGIC_HOUR_API_KEY=...
# or: echo 'YOUR_KEY' > ComfyUI/custom_nodes/comfyui-magic-hour/api_key.txt

Not a node widget, deliberately - widget values are saved in the workflow file, and a shared workflow would hand over your key.

Where people get burned

Translating a whole video before checking the voice. The output re-voices the speech, and no two target languages come back equally natural. Take the same 20-second window, run two or three languages, listen, then commit. That's what start_seconds/end_seconds are for, and it's the difference between a cheap experiment and an expensive one.

401 means the key, not the language. The pack maps API failures to readable text: 401 = bad or deleted key, 402 = out of credits or the settings need a paid plan (1080p is the usual culprit), 422 = that combination of settings isn't supported. Read the message before you start re-cloning things.

end_seconds = 0 fails when the clip length can't be read. If the VIDEO object won't report a duration, the node raises an error asking you to set end_seconds explicitly. Type the number.

Your queue is blocked while it works. Speech translation runs for tens of seconds to minutes and the node doesn't return until it's done. Queueing ten of these just means ten long waits.

Consent and rights. Dubbing someone's voice into another language is a likeness claim, not just a language setting. Only do this to footage of people who agreed to it.

CategoryMagic Hour

Inputs (5)

NameTypeDefaultDescription
videoVIDEO—
target_languageCOMBOEnglish53 options: Afrikaans, Arabic, Bengali, Bulgarian, Catalan, Chinese (Simplified), +47
resolutionCOMBO720p3 options: 720p, 480p, 1080p
start_secondsFLOAT0.00–3600—
end_secondsFLOAT0.00–36000 = to the end of the clip

Outputs (3)

NameTypeDescription
videoVIDEO—
video_pathSTRING—
credits_chargedINT—