Sonilo Video Music (BudgetPixel)
Sonilo Video Music — a soundtrack that actually follows your footage
- video
- audio
- video
Sonilo Video Music is the node that scores your clip. Where the plain Sonilo Music node takes a text prompt and returns a track of an exact length, this one takes a video as its required input and composes a licensed soundtrack that follows the footage - its content, its pacing, its mood - sized exactly to the clip. Feed it up to six minutes of video and you get back an MP3 or WAV that fits the timeline without a single cut. That's the "AI composer who watched the movie" use case, and it's genuinely different from any text-to-music workflow.
Why you'd reach for it
Because syncing matters and text-to-music doesn't know what your footage looks like. A clip of a sunrise and a clip of a car chase want completely different music, and describing the difference in a prompt is a losing game compared to letting the model see the video. It's also the easiest legal checkmark in the pack: the output is licensed music, so you can use it without a copyright anxiety spiral. The optional prompt input gives you direction on top - "warm acoustic indie, builds gently, no vocals" - without taking over the mood-matching.
The inputs that matter
- video - required. The footage to score (MP4/WebM, up to 360 seconds, 30MB remote-fetch cap). Its duration is measured server-side and is the billing basis.
- prompt - optional direction (up to 2000 characters): genre, mood, instrumentation, business context.
- format -
mp3orwav.
Outputs are the audio track plus the pack's standard (here, unused) video socket - for video-music the video output comes back empty; the audio is the payload. Needs 2025+ ComfyUI for the core AUDIO/VIDEO types.
What it costs
15 credits per second of the input video's measured duration, with a 10-second minimum. That's the important difference from the text-to-music node: you're billed on the input length, not a requested output length, because the output is automatically the same length as the clip. A 30-second clip is 450 credits, so this is a finish-the-project node, not an iterate-on-drafts node.
How it works
Standard pack mechanics with a video on the input side: the clip is uploaded (via the API's temp storage, since videos are passed by URL rather than inlined), a job is created, the node polls, and the composed audio downloads into the graph. Video-in jobs are slower than text-in jobs, so expect a real wait.
Install and key setup
ComfyUI Manager → BudgetPixel, or:
cd ComfyUI/custom_nodes
git clone https://github.com/budgetpixel-ai/comfyui-budgetpixel.git
pip install -r comfyui-budgetpixel/requirements.txt
Only requests. API key from a paid plan via BUDGETPIXEL_API_KEY or a budgetpixel.json in the pack folder; keys never live in workflow JSON.
Where people get burned
The input-duration billing is the trap - people expect text-to-music pricing and get a 15-credits-per-second bill scaled to their footage. Draft your video short before paying for a score. And the pack rules hold: force_rerun to defeat ComfyUI's cache (and trigger a new bill), paid plan required, and an interrupted graph stops the wait but not the server-side job.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| video | VIDEO | The input video (MP4/WebM, up to 360 seconds, 30 MB remote-fetch cap). A public video URL, an uploaded-file URL from POST /v1/uploads, a data URI, or raw base64. Its duration is measured server-side and is the billing basis. | |
| formatopt | COMBO | mp3 | Output audio format. |
| promptopt | STRING | Optional direction for the music (up to 2000 characters): genre, mood, instrumentation, business context — e.g. "warm acoustic indie, builds gently, no vocals". | |
| force_rerunopt | BOOLEAN | false | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| video | VIDEO | — |