Score to Screen — One prompt → one song → a music video (YuE2 × MiniMax H3)
Write one prompt and pick your images. You get an original song made with YuE2 and a music video made with MiniMax H3. The singer lip-syncs, the band plays along with the music, and every scene change lands exactly on a bar line.
v3.9 Simple: 2 scenes, with all the newest features (this version)
v4.0 Simple: choose 1–4 scenes each run
v3.9 comes in ONE download: the workflows (English + Japanese) and the custom nodes. Only a few switches; everything else is automatic, or set to the values that worked best.
Updated 2026-10-12 (same v3.9 version): better drummers. The drummer now keeps a steady beat on the snare and hi-hat with the sticks really touching the drums, holds just one stick in each hand, and the README now points to the right ComfyUI-Video-Saver. If you downloaded v3.9 before, please download it again and replace the ComfyUI-ABCTiming folder.
About this workflow
This is a personal, experimental workflow. It started from wanting to make songs with YuE2 and have MiniMax H3 move in time with them, and from wondering whether a short, simple prompt could be expanded by a local model (such as Gemma 4) into prompts tuned for H3.
For the local LLM, I recommend a model that can understand images (a vision-capable model), but which model you use is entirely up to you.
Because it grew out of experiments, some features may seem odd and some things may not behave as expected. Please treat it as something to experiment with, not a finished tool. If that sounds interesting to you, give it a try!
このワークフローについて
これは個人的な実験として作っているワークフローです。YuE2 で曲を作り、その曲に H3 の動きを合わせたい。そして短く簡潔に書いたプロンプトを、Gemma 4 などのローカルで動かすモデルで H3 向けに最適化できないか試してみたい。そんな思いから始まりました。
ローカル LLM は画像を理解できるモデルをおすすめしますが、どのモデルを使うかはご自由に選んでください。
実験の積み重ねでできているので、変わった機能があったり、思った通りに動かないところもあります。完成品ではなく、あくまで実験目的での使用をおすすめします。こういったことに興味のある方は、ぜひ試してみてください。
⚠ THE CUSTOM NODES ARE NOT IN COMFYUI MANAGER
It is normal that Manager can't find them. They are inside the download: unzip it, then copy the 4 folders from custom_nodes/ into ComfyUI/custom_nodes/ (see QUICK START).
"Image Saver Save Video" comes from ComfyUI-Video-Saver (by diodiogod), NOT from ComfyUI-Image-Saver.
In Manager use "Install via Git URL": https://github.com/diodiogod/ComfyUI-Video-Saver
Searching "Image Saver" in Manager finds the image-only package, which has no video node. If it is installed, remove it (the node names overlap).
🎬 WHAT IT DOES
One prompt, two models: a local LLM (LM Studio) splits your prompt into YuE2 style tags and lyrics, plus an H3 video prompt for each scene
One song, 2 scenes: YuE2 writes a single song. H3 renders each scene from its own image, and the scenes are joined while the song plays straight through (no audible seam)
The score drives the picture: YuE2 also writes an ABC sheet-music plan. The workflow reads its tempo, time signature and chords, then turns them into timed cues in each scene's H3 prompt
Bar-accurate cuts: the scene change snaps to the start of a bar
Band performance: write who plays what ("the white-haired woman plays the drums") and each player gets cues
🥁 Drum sync: an on-screen drummer follows the song's real drums (STRUM if installed, then the Demucs drum stem, then the score)
A steady beat H3 can draw: on every beat one stick taps the hi-hat and the other comes down onto the snare drumhead, the same whether the drummer is the main character or one of the band
One stick in each hand: the prompt tells H3 the drummer holds exactly two sticks, and no accent is stacked on top of the drums' entry fill
Drums that come in later: on a guitar intro the drummer waits, sticks still, until the drums really start (auto, or set the second yourself)
Kick-only intros and single crash hits before the full beat
Fill or no fill: a short fill, a big fill, or just one kick + crash
Kit layout: tells H3 where the snare, hi-hat, crash, toms and ride are, as seen from the drummer's seat (standard / left-handed / off). The cymbal nearest the snare on the drummer's left is played as the hi-hat, even if it looks like an ordinary cymbal
The song is transcribed once; scene 2 reuses it, even after a ComfyUI restart
🎹 Piano sync: an on-screen pianist follows the real key strikes (STRUM + Basic Pitch, optional)
🎚 Even loudness: every song is brought to -16 LUFS with a peak limiter, so a quiet piano song plays as loud as a band song
Singing on screen: auto / yes / no. A song can have vocals while nobody on screen lip-syncs
Instrumentals: write "Instrumental." The lyrics are removed, the melody moves to an instrument, and everyone's mouth stays closed
Skips the intro automatically: vocal onset detection (Demucs) starts the clip just before the singing
Use your own songs:
load a song you made earlier; its .abc score is loaded with it
"(newest song in output/)" picks the song you just made, without restarting ComfyUI
a pre-made song is not saved again as a copy
▶ Start at lets you begin from the chorus, or any second you choose
A/V sync: H3's motion lags the sound by about 0.2 s, so the final audio is shifted to match (adjustable)
Run log inside the workflow: 📺 Runs so far adds one line per run (video name, seeds, steps, memo), also saved as a CSV
Civitai-ready output: the MP4 is saved with metadata (both scene prompts, YuE2 style and lyrics, H3 + YuE2 model hashes)
⚙️ HOW IT FLOWS
Prompt Splitter (LLM): makes the YuE2 style and lyrics, plus one H3 prompt per scene
YuE2: writes the ABC score, then sings the song (skipped when you pick a pre-made song)
Loudness + vocal onset: evens out the volume, trims the song, cuts the scenes on a bar line
ABC Timing: adds tempo, chord, band and drum cues to each scene's H3 prompt
H3 ref2va: renders scene 1 and scene 2 from their images. The scenes are joined, the song is laid over them, and the video is saved
The internals are packed into subgraphs. Day to day, you only touch the input panel and the 🎛 switches.
🎛 THE SWITCHES
⚡ Turbo: fast drafts (off = 20 steps)
🎤 On-screen singing: auto / yes / no
🥁 Drum sync: auto / off (piano sync follows this switch too)
🎵 Song delay: seconds of silence at the start of the video
🎵 Song only: makes just the song; H3 and all video saving are skipped
(The 🎬 scene count on the switch panel is for v4. v3.9 doesn't use it and always makes 2 scenes.)
Seeds (video, vocals, score) can be locked separately in the 🎲 Seed details group. Rarely used settings live in 🔧 Details:
bar snapping
drum cue style (simple = what H3 can draw, the default / detailed = every hit named and timed, experimental), when the drums come in (auto / start / a second in the song), kit layout
A/V sync
song volume: even loudness (-16 LUFS, on by default) + optional volume curve
📦 REQUIREMENTS
Custom nodes (my own, included in the download):
ComfyUI-PromptSplitter v2.13: prompt split, vocal onset, song loudness. Run pip install demucs in ComfyUI's Python
ComfyUI-ABCTiming v2.34: score → rhythm, band, drum and piano cues
ComfyUI-ABCInstrumentalize v1.4: instrumental score and bar-snapped scene cuts
ComfyUI-ABCScoreIO v1.27: switches, scores, pre-made / newest song, run log, A/V sync, scene pictures
Other custom nodes:
ComfyUI-Video-Saver by diodiogod ("Image Saver Save Video", final save with Civitai metadata): https://github.com/diodiogod/ComfyUI-Video-Saver
Models:
diffusion_models: minimax_h3_ref2va_pruned_int8_convrot
loras: minimax_h3_ref2v_turbo_4step (⚡ Turbo)
text_encoders: qwen3vl_32b_minimax_h3_nvfp4_awq
vae: minimax_h3_video_vae_fp16, minimax_h3_audio_vae_fp32
checkpoints: yue2_3b_bf16 (default) or yue2_3b_int8_convrot (lighter)
LLM: LM Studio (or another OpenAI-compatible server). A vision model (Qwen2.5-VL, Qwen3-VL, Gemma 4…) is recommended so the LLM can see your images. A text-only model works too, but it can't look at the pictures.
Optional: STRUM, for more precise drum and piano sync. A setup guide is included. Without it, the workflow uses Demucs or the score.
🚀 QUICK START
Download and unzip. Inside: workflows/, custom_nodes/ and a README (English + Japanese)
Copy the 4 folders inside custom_nodes/ into ComfyUI/custom_nodes/ (not one folder deeper). Updating? Replace the old folders
Install ComfyUI-Video-Saver via Git URL, and pip install demucs in ComfyUI's Python. Restart ComfyUI
Start LM Studio's server (default http://127.0.0.1:1234/v1)
Drag a workflow from workflows/ onto the canvas
Write scene 1's text: the scene AND the song (mood, genre, vocals or "Instrumental."). Scene 2: the scene only
Choose your 2 images and the seconds for each scene, then Run. Check the 📺 previews: the scene cut, the detected start, the prompts H3 got, and Runs so far
💡 TIPS
Prompts can be English or Japanese. Add "Lyrics in English." to be sure of the lyric language
For a band, always write who plays what
Guitar intro before the drums? Leave "drums come in" on auto with drum sync on, or type the second in the song
Drummer images: a kit with a cymbal low beside the snare on the drummer's left works best (it is played as the hi-hat). The drummer should be clearly visible, not hidden behind other players
Want to try a few songs first? Turn on 🎵 Song only, then pick "(newest song in output/)" and make the video
Turbo LoRA ON for drafts, OFF for final renders
Scene length: up to 15 s per scene by default; up to 24 s has worked
Need 3–4 scenes? Use v4.0
Fine finger work and fast stick work are still hard for H3: avoid long close-ups of hands
Resolution: multiples of 32, short side up to 768 (1024×768 recommended)
Errors? Paste the ComfyUI console log and the workflow .json into Claude or ChatGPT and ask what is missing
🗂 OLDER: v2.34 Full / Legacy
The older "every option" workflow (H3-made music, sound effects only, frozen audio, 17 switches) still works with these custom nodes. Get it from an older version on this page.
Version history
v3.9 (update 2026-10-12): drummer keeps a steady beat on the snare and hi-hat, sticks touch the drums, one stick in each hand, hi-hat found by its place next to the snare, README points to ComfyUI-Video-Saver
v3.9: one-zip download, even song loudness, song-only switch, newest-song pick, drums that wait / come in later, kick-only intros, fill or no fill, kit layout for H3
v4.0: choose 1–4 scenes (🎬 scene count switch)
v3.8: drum cues H3 can draw
v3.7: piano sync
v3.6: A/V sync
v3.4 / v3.5: run log in the workflow
v3.2: ▶ Start at for pre-made songs
v3.0: the new Simple line (4 switches)
v2.09: first public release
Description
v3.9 (2026-10-12) — easier install, even loudness, song-only switch, much smarter drums
📦 Download / install
- Everything is now in ONE zip: workflows/ (v3.9 English + Japanese) + custom_nodes/ (the 4 node folders) + README
- Copy the 4 folders inside custom_nodes/ directly into ComfyUI/custom_nodes/ (they are not in ComfyUI Manager)
- Fixed install note: the "Image Saver Save Video" node comes from ComfyUI-Video-Saver by diodiogod (install via Git URL: https://github.com/diodiogod/ComfyUI-Video-Saver), NOT from ComfyUI-Image-Saver
- Same custom nodes as v4.1 (1-4 scenes): PromptSplitter v2.13, ABCTiming v2.29, ABCScoreIO v1.27, ABCInstrumentalize v1.4
🎵 Song
- Even loudness (default ON, -16 LUFS): every song comes out equally loud, so piano songs are no longer much quieter than band songs. A limiter keeps peaks at -1 dB (no clipping)
- 🎵 Song only switch is back: makes and saves just the song and its .abc score, no video, so it's quick
- Pre-made song: new choice "(newest song in output/)" uses the song you just made, with no list refresh or restart
- Using a pre-made song no longer saves a copy of it (and its .abc) under a new number every run
🥁 Drums (with 🥁 Drum sync on auto; best with STRUM)
- Drums can come in later: in a guitar intro the drummer waits with the sticks still, then comes in. "auto" finds the time, or type the second in the song (e.g. 10) in 🔧 Details
- A scene with no drums at all (a guitar-only intro scene) keeps the drummer waiting the whole scene
- Single crash hits before the drums come in ("boom-crash") are played as their own hits
- Kick-only intros: the sticks stay still, the right foot plays the kick, and the body dips with each kick
- Fill or no fill: no snare / tom before a section change = just one crash with the kick; a couple of hits = a short snare fill; more = a full fill from when it really starts
- Kit layout (🔧 Details, default standard): H3 is told where each drum is, as seen from the drummer's seat: snare in front, hi-hat and crash on the left, floor tom and ride on the right. left-handed = mirrored, off = as before
- The waiting drummer is said more firmly, so it doesn't conflict with "keeps playing the drums" from the LLM
- Scene 2 reuses the whole-song STRUM run reliably (it sometimes re-transcribed only its own part and missed hits)
🔧 Small fixes
- About: YuE2 note links yue2_3b_bf16 (the file the YuE2 picker uses); int8 stays as the lighter option
- The muted comparison save is renamed, so the run log can't pick it up by mistake
- The 🎬 scene_count on the switches is for v4 and isn't used in v3.9 (always 2 scenes)