Nodes/ComfyUI-LumaAI-API/Add Audio to Video
ComfyUI Node

Add Audio to Video

Give your silent clip a soundtrack — describe the sound, get an audio track

By lumalabs·Created 2 years ago·Updated about a year ago· 213
Add Audio to Video
  • client
  • video_url
  • generation_id
generation_id
prompt
negative_prompt
savetrue
filename

Everything Dream Machine generates comes back silent, and LumaAddAudio2Video is the node that fixes that: give it a generation id and a prompt describing the sound, and it returns a new version of the clip with a generated audio track. Ambient noise, footsteps, dialogue-adjacent foley, engine sounds - whatever your prompt describes, Luma invents audio that matches the motion. It's the closest thing in this pack to Google's Veo native-audio trick, except it's a post-step instead of baked into the generation, and it costs a separate API call.

You'll notice the workflow is always a chain: LumaText2Video (or any other generation node) → its generation_id wired into LumaAddAudio2Video → the new video_url out. The node takes generation_id, prompt (multiline, describe the soundscape), and negative_prompt (multiline - what you don't want, e.g. "no music, no dialogue"). save defaults on, with an optional filename. Outputs are a fresh video_url and a new generation_id, because adding audio creates an entirely new generation on their side.

What to set

  • generation_id - the silent clip you're scoring. Required.
  • prompt - this is where the magic lives. "Gentle ocean waves with distant seagulls" vs "city street with honking cars" produces completely different tracks. Be specific about what is making sound, since the model is matching audio to on-screen motion.
  • negative_prompt - genuinely useful here in a way it rarely is elsewhere. Exclude music when you want pure foley, or exclude speech when you don't want voices.

Where people get burned

  • Audio won't play in the ComfyUI preview. This is the pack's own documented gotcha: wire the result into LumaPreviewVideo and you'll see the video but hear nothing. Right-click the preview and select Open Image - despite the name, it opens the clip in a new tab where the audio plays. (The "Open Image" label is ComfyUI's generic video-preview action, don't let it confuse you.)
  • The prompt is about sound, not about the video. Describe the audio, not the visuals you already have. The model doesn't need to be told the clip is of a car; it needs to be told the car's engine sounds like what.
  • Every run is a fresh paid generation. Iterating on the audio prompt means re-paying for the whole thing. Get the video final first, then score it once.

Installing

Standard for the pack: ComfyUI Manager → search "ComfyUI-LumaAI-API", or git clone https://github.com/lumalabs/ComfyUI-LumaAI-API into ComfyUI/custom_nodes and install requirements.txt (lumaai==1.7.0, requests, numpy, Pillow). Nothing local to download, no VRAM; you just need a LumaAIClient node with your key feeding client. There's an AddAudio2Video.json example workflow in the pack's workflows folder showing the exact chain.

Troubleshooting

  • Silent output even after the run - check that you're previewing the new video_url from this node, not the old silent one. Easy to leave the original wired into your preview by accident.
  • "Generation failed" with a content-safety reason - audio generation can be sensitive to prompts that imply speech or voices of real people; reword and retry.
  • Audio doesn't match the motion - tighten the prompt to describe on-screen actions ("footsteps on gravel" rather than "ambient noise").

If you're comparing against Veo's native audio, that's a genuine capability gap for open models and even for other closed APIs - but for taking a finished Dream Machine clip and giving it a believable soundscape, this node is the whole tool, and it's the one piece of this pack that still has no real open-source equivalent.

CategoryLumaAI/Audio

Inputs (6)

NameTypeDefaultDescription
clientLUMACLIENT
generation_idSTRING
promptSTRING
negative_promptSTRING
saveBOOLEANtrue
filenameoptSTRING

Outputs (2)

NameTypeDescription
video_urlSTRING
generation_idSTRING