Nodes/SpicyAPI/Video Sound Effects · Add Sound Effects
ComfyUI Node

Video Sound Effects · Add Sound Effects

The last stage your silent render has been missing

By spicyapi-ai·Created 21 days ago·Updated 2 days ago· 2
Video Sound Effects · Add Sound Effects
  • video_url
  • video
  • task id
◄prompt►
◄duration_seconds8►
◄negative_prompt►
◄ignore_visual_semanticsfalse►
◄guidance_scale4.5►
◄steps25►
◄seed0►

Silence is what gives AI video away

A generated clip with no sound is instantly readable as generated. Footsteps that don't land, a door that doesn't click, no room tone - your eye forgives a lot, your ear forgives almost nothing. The local answer has been MMAudio for a while: flow-matching video-to-audio, bolted onto the end of a Wan or Hunyuan render, and it's still the last stage of the big multi-model chains you see posted.

This node is the same job as a hosted call, and at about $0.0012 per second it's the cheapest per-second node in the pack. A full 30-second clip of generated effects costs about 3.6 cents. If you've ever given up on a render because adding sound was a whole separate install, that price is the argument.

How it works

You hand it a clip, it looks at the action and generates effects and ambience that follow what's happening on screen, then hands back the same video with the new track. The picture is kept - this is not a video model. It calls spicyapi/foley-v1/video-to-audio and returns a VIDEO.

Two boundaries from the author's own description, worth internalising: it runs 1 to 30 seconds of sound, and it is not for dialogue or music. Reach for it for footsteps, cloth, impacts, wind, machine hum and room tone. Dialogue is a TTS job; music is Suno's.

Inputs

video_url (VIDEO) - the clip to add sound to. The picture is preserved; the returned clip carries the generated audio.

prompt (STRING) - the sounds you want, as a short list. "footsteps on gravel, distant traffic, wind in trees" is the right shape. Leave it empty and a general "sounds that match the on-screen action" request is used, which is a perfectly good default for a first pass.

duration_seconds - 1 to 30, default 8. The returned clip is cut to this length and these seconds are what's billed. That makes it the one field with a direct cost line: 30 seconds is 3.6 cents, 8 seconds is under a cent.

negative_prompt (STRING) - sounds to keep out. "music, speech, narration" is the standard exclusions list, and you'll want it often, because the model's idea of ambience sometimes includes a swell.

ignore_visual_semantics (default off) - takes the sounds from your prompt alone rather than from the picture, while timing still follows the motion. The niche use: an obviously animated or stylised clip where the model's visual reading is wrong but the timing is right.

guidance_scale - 0 to 20, default 4.5. How closely the sound follows your description. Advanced; raise it when the prompt is specific and being ignored.

steps - 4 to 50, default 25. Refinement passes; more takes longer. Advanced. 25 is fine.

Outputs: video (VIDEO), task id (STRING).

Install

Manager → search SpicyAPI, or:

cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi

Restart and add your key under Settings > SpicyAPI (or set SPICY_API_KEY on a server), then restart once more so the node list comes from your account. No pip install, no model download, no GPU: the pack declares zero dependencies and all inference happens on SpicyAPI's servers. Python 3.10+ and a recent ComfyUI (V3 node API) is the whole bill of materials.

Reality checks

  • It's a single mono-ish effects track, not a mix. Generated foley sits over your production; it won't duck under a voice or replace a real soundtrack. If your clip already has dialogue, expect to layer in an editor rather than run this as the only audio stage.
  • 30-second ceiling on both the sound and the returned clip. Longer sources get cut. Foley per scene, then concatenate.
  • Timing follows motion, so it inherits motion problems. Frames where the action is ambiguous get generic sound.
  • Seed behaviour. There's no seed on this node, so a re-run can differ. Each attempt is charged.
  • Upload limit. The input video has a 90 MiB ceiling; a long high-bitrate MP4 gets rejected before anything is charged.
CategorySpicyAPI/Video/Tools

Inputs (8)

NameTypeDefaultDescription
video_urlVIDEOClip to add sound to. The picture is kept; the returned clip carries the generated sound as its audio.
promptSTRINGThe sounds you want, as a short list. If omitted, a general request for sounds that match the on-screen action is used.
duration_secondsINT81–30Seconds of sound to generate, from 1 to 30. The returned clip is cut to this length and these seconds are billed.
negative_promptSTRINGSounds to keep out, such as music or speech.
ignore_visual_semanticsBOOLEANfalseChoose the sounds from the prompt alone instead of from what the picture shows; timing still follows the motion.
guidance_scaleFLOAT4.50–20How closely the sound follows the description, from 0 to 20.
stepsINT254–50Refinement passes, from 4 to 50. More passes take longer.
seedINT00–2147483647This model takes no seed, so the number is never sent. Changing it makes ComfyUI run the node again: set 'control after generate' to randomize for a new result on every run; every run is billed.

Outputs (2)

NameTypeDescription
videoVIDEO—
task idSTRINGThe SpicyAPI task id, for the console logs or support.