zhenzhen-sonilo-video-to-music-fal
Score your clip without scoring it yourself
- video
- audio
- audio_url
- all_audio_urls
- response
Every silent AI video eventually needs a soundtrack, and picking music that fits a clip's pacing is the kind of tedious job nobody wants to do by hand. Comfly_sonilo_video_to_music_fal is the zhenzhen pack's FAL wrapper for Sonilo's video-to-music model: feed it a video, get back generated music that matches the mood and rhythm. It lands as a real AUDIO tensor, so you can drop it straight onto your clip in the graph. The whole pitch is "the video is the prompt."
Mechanically it's the standard fal flow: the token goes in the node's api_key field, the video goes up through zhenzhen's proxy (https://ai.t8star.org/fal), the job gets submitted to fal-ai/sonilo/video-to-music, and the node polls until the audio is ready. Pay-per-call, prepaid-style credits.
The inputs that matter
video_url(required) orvideo- the source. The required field is actuallyvideo_url(a public URL - whenvideois connected, the URL is ignored and the tensor is uploaded instead). So wire thevideooutput of any generation node in, or paste a hosted URL.prompt- optional style/mood hint ("upbeat synth-pop, 120bpm"). Empty lets Sonilo infer everything from the video, which is usually the right call.num_samples- 1–3 variations, 1 default. More samples, more cost.start_offset- seconds into the video where scoring starts (0 = unset).duration- seconds of music, default 5.0 (a low-cost default); 0 = full remaining video. If you only need a sting, 5s keeps the bill down.video_way-upload(default, from the tensor) orvideo_url.
Outputs: audio (the tensor), audio_url, all_audio_urls (all samples if num_samples > 1), and response. Standard 6s × 600 polling defaults and the usual skip_error.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/Comfyui-zhenzhen
or ComfyUI Manager (search "Comfyui-zhenzhen"), restart. Paste a zhenzhen token (overseas https://ai.t8star.org) into api_key. No model downloads; audio handling is in the pack's normal dependency stack.
Common issues
- "requires a video input" - you left both
videoandvideo_urlempty. Provide one. - Music that ignores the pacing - Sonilo works best on video with clear cuts or beats; a static talking head gives it little to latch onto. Try giving it a
promptinstead of relying on inference. - Short clip, long silence at the end - check
duration; if it's set to a fixed few seconds it won't score the whole video. Set 0 for full-remaining-video.
For the "just give me a soundtrack I don't have to think about" case, this node is the whole answer - and it slots into the same workflow as the pack's TTS nodes if you want voiceover and music on one clip.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| video_url | STRING | Public video URL. Ignored when video input is connected. | |
| videoopt | VIDEO | — | |
| api_keyopt | STRING | — | |
| promptopt | STRING | Optional music style/mood prompt. Empty lets Sonilo infer from video. | |
| num_samplesopt | INT | 11–3 | — |
| start_offsetopt | FLOAT | 0.00–600 | Seconds. 0 leaves unset. |
| durationopt | FLOAT | 5.00–600 | Seconds. 0 leaves unset/full remaining video. 5s is a low-cost default. |
| video_wayopt | COMBO | upload | 2 options: upload, video_url |
| poll_intervalopt | INT | 61–60 | — |
| max_poll_attemptsopt | INT | 60010–3600 | Default 600*6s = 3600s timeout. |
| skip_erroropt | BOOLEAN | false | — |
| seedopt | INT | 00–18446744073709550000 | Execution seed for ComfyUI cache control. Fixed reuses the cached result; randomize/increment/decrement requests a new run. This compatibility seed is not sent to APIs that do not expose a native seed parameter. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| audio_url | STRING | — |
| all_audio_urls | STRING | — |
| response | STRING | — |