Download
1 variant available
600 1 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 9
(7)
Oct 22, 2026
MiniMax H3
Score to Screen v6.1 Simple — changes since v6.0
🔬 Sync check: measure how well H3's picture follows the song (v6.1)
What it is for
Until now you could only judge by eye whether the singer starts on time or the drummer hits on the beat. v6.1 puts a number on it, in seconds and frames
Mark the same moments on two runs and you can see which seed, prompt or setting really followed the song better
It only looks: the analysis, the H3 cues and the videos are never changed, and no AI is used
How to use it
After a run, open the 🎞 Timeline and press "🔬 Sync check" on its header. The panel below becomes the inspector (press it again to get the scene editor back)
Pick the run and the video: the finished MV, or a scene's "H3 only" video
← → = one frame, Shift + ← → = one second, Space = play / stop, click the ruler = go there
While paused, each frame is taken straight from the video file by ComfyUI and numbered ("frame 68 / 288 · 2.792 s"), so you always know exactly which frame you are looking at
At the frame where the mouth starts moving, the stick comes down, the bow starts ...: choose what (🎤 starts / stops singing, 🥁 drums start / stop / one hit, 🎻 strings, 🎹 piano) and who (S1–S4), then "📍 Mark here"
How the error is shown
H3: against the time H3 was told, in seconds of the scene
Finished MV: as a viewer sees and hears it, with 🎚 A/V sync taken in (with +0.2 s, the MV error is the H3 error − 0.2 s)
Minus = early, plus = late, in seconds and frames
The marks sit on their own lane, "📍 movement seen (marks)", under the analysis on the timeline; the selected one shows the music moment it is measured against as a pink line
A 🥁 one-hit mark also says which drum it was compared with (kick, snare, crash ..., "kick + crash" when they hit together)
⚠ on a mark inside a crossfade or a dip: two scenes are mixed there, so whose movement it is may be unclear. Frames of an "H3 only" video past the cut (not in the finished MV) are shown as such
Marks are kept
A mark keeps what was seen: which video and which frame, in
output/score2screen_sync/. Seconds and errors are worked out again every timeVideos are told apart by name and by content: a video made again, even under the same name, is another video, and old marks stay with the old one
After a ComfyUI restart the earlier runs, their marks and their analysis are still there
🎞 The join now keeps each run's scene borders (frames used per scene). Videos made with v6.0 have none: their finished MV can't be matched to scenes, but their "H3 only" videos can still be measured
Careful about what it knows
Each scene is compared only with its own analysis: which 🎼 ABC Timing node made which scene is read from the run itself (a scene ComfyUI took from its cache gets that node's earlier analysis, if it fits its place in the song). A scene that can't be settled says "unknown" and is never compared with another scene's analysis
A mark can only be made once the frame is really on screen and ComfyUI has confirmed it is that frame (⏳ while it loads; stop first when playing)
A frame that fails to load is tried 3 times, then ⚠ and "↻ Try again" (it never keeps asking by itself)
Switching runs or videos quickly, or deleting marks quickly, never leaves another run's or an older list on screen; if a run's marks can't be read it says so ("↻ Read marks again") instead of showing others
Note: the sync check measures; it does not fix. If the numbers show a steady lateness in the finished MV, 🎚 A/V sync in 🔧 Details can be raised by about that much; if one scene is off, try another seed or a shorter scene, or fix the analysis by hand (✎) and run again.
Custom nodes in this download: ComfyUI-PromptSplitter v3.2, ComfyUI-ABCTiming v2.45, ComfyUI-ABCInstrumentalize v1.5 (all three unchanged), ComfyUI-ABCScoreIO v1.42 (new). Updating from v6.0? Replace the ComfyUI-ABCScoreIO folder in ComfyUI/custom_nodes/ (or all 4), restart ComfyUI and reload the page (Ctrl+F5). Nothing new to install: the frames are read with PyAV, which comes with ComfyUI.
変更点(v6.0 → v6.1)
🔬 同期チェック:H3 の映像が曲にどれだけ合っているかを測る(v6.1)
何のため
歌い出しが合っているか、ドラムが拍に合っているかは、今まで目で見て判断するしかありませんでした。v6.1 では、それを秒とコマ数の数字で出せます
2つの実行で同じ所に印を付ければ、どの seed・プロンプト・設定のほうが曲に合っていたかが分かります
見るだけの機能です。曲の解析・H3 への指示・動画は何も変えず、AI も使いません
使い方
実行のあと 🎞 タイムラインを開き、見出しの「🔬 同期チェック」を押します。下の欄が検証用に切り替わります(もう一度押すとシーンの編集欄に戻ります)
実行と動画を選びます:完成MV か、各シーンの「H3 だけ」の動画
← → で1コマ、Shift+← → で1秒、Space で再生/停止、ルーラーをクリックでその位置へ
止めている時のコマは ComfyUI が動画ファイルから正確に取り出し、「コマ 68 / 288 · 2.792 s」と番号付きで出るので、どのコマを見ているかがはっきり分かります
口が動き始めた・スティックが下りた・弓が動き始めたコマで、種類(🎤 歌い始め/終わり、🥁 叩き始め/終わり/一打、🎻 弦、🎹 ピアノ)と誰か(S1〜S4)を選んで「📍 ここを記録」
ずれの出し方
H3:H3 に伝えた時刻とのずれ(シーンの中の秒)
完成MV:完成した動画を見て聞いた時のずれ。🎚 映像と音のずれ補正も入ります(補正 +0.2 秒なら、MV のずれは H3 のずれ −0.2 秒)
マイナス=早い、プラス=遅い。秒とコマ数で表示
印はタイムラインの解析の下の「📍 映像の動き(印)」の段に並び、選んだ印は比べた曲の位置をピンクの線で示します
🥁 一打 の印は、比べたドラムの種類も出ます(kick・snare・crash など。同時に鳴った時は「kick + crash」)
crossfade・暗転の途中の印には ⚠:2つのシーンが混ざっていて、どちらの動きか分かりにくい所です。「H3 だけ」の動画の切れ目の先のコマ(完成MV には出ない所)もそう表示します
印は残ります
印は「どの動画のどのコマで見たか」という事実として
output/score2screen_sync/ に残り、秒数とずれは毎回計算し直します動画は名前と中身で見分けます。作り直した動画は同じ名前でも別の動画として扱い、前の印は前の動画に残ります
ComfyUI を起動し直しても、前の実行・その印・その解析は残ります
🎞 シーンをつなぐノードが、実行ごとのシーンの区切り(使ったコマ数)を記録するようになりました。v6.0 で作った動画は区切りがないので完成MV とシーンの対応は出ませんが、「H3 だけ」の動画では測れます
分からないことは分からないと表示
各シーンは自分の解析とだけ比べます。どの 🎼 ABC Timing ノードがどのシーンかは、その実行から読み取ります(ComfyUI のキャッシュを使ったシーンは、曲の中の位置が合えば、そのノードの前の解析を使います)。決めきれないシーンは「分からない」と表示し、別のシーンの解析とは比べません
印は、そのコマが本当に画面に出て、ComfyUI が「そのコマです」と確かめてから付けられます(読み込み中は ⏳、再生中は止めてから)
コマの読み込みに失敗したら3回まで試し、だめなら ⚠ と「↻ もう一度読む」(勝手に読み続けることはありません)
実行や動画を素早く切り替えても、印を素早く消しても、別の実行の印や古い一覧が画面に残ることはありません。印が読めない時は他の印を出さずに、そう表示します(「↻ 印を読み直す」)
ご注意: 同期チェックは測るための機能で、直す機能ではありません。完成MV の印がそろって同じくらい遅れているなら、🔧 詳細の 🎚 映像と音のずれ補正をその分だけ増やすと合います。1つのシーンだけずれる時は、seed を変える・シーンを短くする・解析を手で直して(✎)もう一度実行、を試してください。
この zip のカスタムノード:ComfyUI-PromptSplitter v3.2、ComfyUI-ABCTiming v2.45、ComfyUI-ABCInstrumentalize v1.5(この3つは v6.0 と同じ)、ComfyUI-ABCScoreIO v1.42(新しい版)。v6.0 からの更新は ComfyUI/custom_nodes/ の ComfyUI-ABCScoreIO フォルダ(または4つ全部)を入れ替えて、ComfyUI を再起動、ページも再読み込み(Ctrl+F5)してください。新しく入れるものはありません(コマの読み込みに使う PyAV は ComfyUI に入っています)。
Show more
The MiniMax H3 Community License Agreement’s grant excludes the European Union, the United Kingdom, the Republic of Korea and the United States of America.
MiniMax H3
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.
v6.1 Simple: 1–4 scenes that can continue one into the next (⛓) with the same main character in every scene (🧑), a low-memory join (💾 each scene saved to a file), the prompt LLM inside ComfyUI (no LM Studio needed), a 🎞 timeline editor that shows what was found in the song and lets you fix it by hand, 🔬 a frame-by-frame sync check of the finished video against the song, scene transitions, optional hand check of the prompts before H3
Older versions on this page: v6.0 Simple, v5.9 Simple, v4.1 Simple (1–4 scenes, LM Studio) and v3.9 Simple (2 scenes)
Each version 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.
New in v6.1 (2026-10-22): measure the sync. 🔬 After a run, open the 🎞 Timeline and press "🔬 Sync check": step through the finished MV or a scene's "H3 only" video one frame at a time (each frame is taken straight from the file and numbered), mark where the mouth really starts moving or the stick really comes down, and see how early or late it is against the song, both as H3 was told and as you see and hear it in the finished MV (🎚 A/V sync taken in). Marks are kept per video, so seeds, prompts and settings can be compared with numbers instead of a feeling. It only looks: nothing is changed and no AI is used. v6.0 added ⛓ scenes that continue, 🧑 one main character and 💾 a low-memory join; see the version history at the bottom.
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 splits your prompt into YuE2 style tags and lyrics, plus an H3 video prompt for each scene
🧠 LLM inside ComfyUI (NEW in v5): put a GGUF (the same files LM Studio uses) in ComfyUI/models/LLM/ and pick it. It runs on llama.cpp's official llama-server, downloaded automatically the first time, started only for the split and stopped right after, so YuE2 and H3 keep their VRAM. The default, Qwen3-VL-4B-Instruct Q4_K_M (about 3.3 GB, sees your images), downloads itself on the first run. Hugging Face models (transformers) and LM Studio (also on another PC) still work
🎞 Timeline (NEW in v5.5): the 🎞 Timeline button at the bottom left opens a video-editor style strip. Drop an image file on a scene clip, drag a clip's right edge for its seconds, drop a song file on the audio track and drag it sideways to choose where it starts, click ◆ for the transition, ▶ Play to check the flow with the stills and the song. It edits the same node settings, so nothing else changes
🔎 Analysis on the timeline (NEW in v5.7): under the waveform, what the last run found, in video seconds: 🎬 the real cuts, camera shots and sections, 🎤 when each singer sings, 🥁 every drum hit coloured by drum (▼ = the drums come in; from STRUM, Demucs or the score), 🎻 when the strings are heard, 🎹 piano key strikes. Players the audio can't check (guitar, bass) are marked "no audio check". It reloads after every run
💾 Kept with the song (NEW in v5.9): the analysis is saved in song seconds as <song>.s2s.json next to the song (copy it along with the song and its .abc to another PC). The same song again, any start and any scene lengths: the scenes are cut from it and STRUM / Demucs are skipped. A new render of the same score (another vocals seed) keeps its own analysis and hand edits. Parts not analysed are marked. Picking a pre-made song shows its analysis on the timeline at once; "🔎 Analyse this song" analyses just the song (no LLM, no H3) in ComfyUI's queue, never at the same time as a run; hand edits are saved with the song, come back when it is picked again and come off for another song
✎ Fix it by hand (NEW in v5.8): drag the analysis on the timeline. 🎤 singing and 🎻 strings spans: drag the ends (start / stop) or the middle (move), double-click an empty spot to add one, a span to delete it. 🥁 ▼: drag for when the drums come in. From the next run, the H3 cues (sing / wait with lips closed, bow up / down, drums in) follow your marks, only where the scenes had an analysis when you drew; the rest stays as analysed. Strings can be drawn in songs with vocals too, where there is no audio check. ↺ = back to the analysis. Mouse wheel = zoom (0.1 s ruler, finer drags), Space = play / stop (v5.8.1)
🔬 Sync check (NEW in v6.1): on the 🎞 Timeline, pick a run and a video (the finished MV or a scene's "H3 only" video) and step it frame by frame (← → one frame, Shift + ← → one second; the frame comes straight from the file, "frame 68 / 288"). 📍 Mark where singing, drums, strings or piano really start or stop (or one drum hit) and for whom (S1–S4). The error against that run's music analysis is shown in seconds and frames, as H3 was told and as the finished MV plays (A/V sync taken in), and the marks sit on their own lane under the analysis (the music moment each is measured against as a pink line). ⚠ on marks inside a crossfade or dip. Marks keep the video and the frame and stay after a restart; a video made again is another video
🎞 Scene transitions (NEW in v5.5): cut / crossfade / dip to black / dip to white at each scene change. The video length never changes, so the song and the lip sync stay in step. From v6.0 the crossfade keeps the scene before moving while it dissolves (it uses the frames H3 made past the cut)
✍ Prompt check (NEW in v5.4): auto = the prompts go straight to H3. manual = the run pauses after the prompt split and a window opens with one text box per scene: fix anything, press ▶ Continue, and H3 runs with your text
One song, several scenes: YuE2 writes a single song. H3 renders each scene (1–4) from its own image, and the scenes are joined while the song plays straight through (no audible seam)
⛓ Scenes that continue (NEW in v6.0): for each of scenes 2–4 choose own picture (a separate shot) or continue: the frame right after the cut of the scene before is anchored as H3's first frame (H3's own Add Guide), so positions, poses, the place and the light go on across the cut. Handoff: 1 frame, or 5 frames to carry the direction of the motion too. A continuing scene needs no picture (picture 1 is used as the look). On the 🎞 timeline the ⛓ under each cut toggles it (blue = continues), the clip shows "⛓ continues 1", and the panel below has Start and ⛓ handoff for the selected scene
🧑 One main character (NEW in v6.0): a picture of the main character (face, hairstyle and clothes clearly visible) goes to every scene as <Picture 2>, with a line to keep the same face, hairstyle and clothes. Pick it in its own group above the scene pictures (with a preview), or with the 🧑 button on the timeline. Best together with ⛓
💾 Low memory (NEW in v6.0): each scene is written to temp/s2s_scenes/ the moment it is decoded, and the final mp4 is joined from the files one frame at a time, with 🔍 super resolution 24 frames at a time. Only one scene's frames are in RAM at any point. Disk: up to about 1 GB per scene (1280×720, 15 s), cleared when ComfyUI starts
📺 Join report (NEW in v6.0): frames per scene, how each scene started (own picture, or ⛓ with the frames asked, available and really used) and the RAM / VRAM peak of the join and of each scene's decode
⏳ Prompts first (NEW in v5.3): every scene's prompt is read before any scene is drawn, so H3's text encoder and the H3 model are swapped once per run instead of once per scene. Same pictures, less waiting with more scenes
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: every 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: one stick taps the hi-hat on every beat, the other comes down onto the snare on beats 2 and 4, the right foot plays the kick
One stick in each hand, drums that come in later (the drummer waits through a guitar intro), kick-only intros and single crash hits
Fill or no fill: a short fill, a big fill, or just one kick + crash (no made-up tom fill where STRUM heard none)
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 song is transcribed once; the later scenes reuse it, even after a ComfyUI restart
🎹 Piano sync: an on-screen pianist follows the real key strikes (STRUM + Basic Pitch, optional)
🎤 Waiting performers (NEW in v5.6): H3 tends to make anyone holding a microphone sing and anyone holding an instrument play. A performer who doesn't sing / play yet is told the posture and until when ("S1 keeps the lips closed and does not sing until 00:12.000"), and the LLM's words that make them start too early become that posture. The singing start can also be set by hand (vocal_in). The singer is found from "who sings", "vocalist", "singer", "lead vocals" and (v5.8) "S1 ... while singing" / "S1 sings ..."
🎻 Violin sync: an on-screen violinist (viola, cello) plays only while the strings are really heard, and keeps the violin down with the bow off the strings while they are silent. Automatic for instrumental songs
🔍 Super resolution (NEW in v5.2, optional): NVIDIA RTX Video Super Resolution enlarges and sharpens the finished video just before the song is put on. H3 is not run again, so movement, lip sync and timing don't change. From v6.0 it runs 24 frames at a time while the scenes are joined from their files. Off by default
🎚 Even loudness: every song is brought to -16 LUFS with a peak limiter
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 (with its .abc score), or "(newest song in
output/)", and ▶ Start at any second (the chorus, for example)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 (all scene prompts, YuE2 style and lyrics, H3 + YuE2 model hashes)
⚠ The singing, drum, piano and violin cues are hints
These features only give H3 hints: when to wait, when to sing or come in, where to hit. H3 decides how the scene is finally drawn, so it may not always follow them. The player may start a little early, keep playing through a rest, or hit the wrong drum. Results vary from seed to seed, so if a take doesn't look right, try another seed. Shorter scenes and fewer camera changes also make the cues easier to follow.
歌・ドラム・ピアノ・バイオリンの機能は、H3 に「いつ待つか・いつ歌う/入るか・どこを叩くか」のヒントを出すだけです。最後にどう描くかは H3 しだいなので、いつも思った通りになるとは限りません。うまくいかない時は seed を変えて何回か試してみてください。
⚙️ HOW IT FLOWS
Prompt Splitter (LLM, inside ComfyUI): 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 bar lines
ABC Timing: adds tempo, chord, band, drum, piano and violin cues to each scene's H3 prompt
✍ Prompt check: straight on (auto), or a pause to fix the prompts by hand (manual)
H3 ref2va: reads every scene's prompt first, then renders each scene from its image (⛓ a continuing scene waits for the scene before and starts from its frames; 🧑 every scene gets the character picture)
💾 Each scene is saved to a file as soon as it is decoded. 🎞 The scenes are joined from the files frame by frame (with an optional transition and 🔍 super resolution), the song is laid over them, and the video is saved
🔬 Afterwards, if you like: the Sync check on the 🎞 Timeline measures how well the finished video follows the song
The internals are packed into subgraphs. Day to day, you only touch the scene columns (or the 🎞 Timeline), the 🧑 / ⛓ group above them, the 🎛 switches and, if you like, the 🧠 LLM settings.
🎛 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
🎬 Scene count: 1–4
✍ Prompt check: auto / manual (timeout_min: continue by itself after N minutes, 0 = wait)
🎞 Scene transition: cut / crossfade / dip to black / dip to white, seconds (0.5 s)
🔍 Super resolution: off / rtx (scale 1.5, quality ULTRA, strength 1.0)
🧑 Character picture: (none) / a picture (<Picture 2> in every scene)
⛓ Scene 2 / 3 / 4 start: own picture / continue, handoff 1 frame / 5 frames (also on the 🎞 Timeline)
🧠 LLM settings: gguf (default) / transformers / lm_studio, model, GPU layers, context size
Seeds (video, vocals, score) can be locked separately in the 🎲 Seed details group. One video seed is used for all scenes of a run, so one number brings back the whole video. Rarely used settings live in 🔧 Details:
bar snapping (keep fps at 24: H3 makes 24 fps video, and from v6.0 any other value stops before the run)
drum cue style (simple / detailed), when the drums come in (auto / start / a second in the song), kit layout, 🎤 when the singing comes in (auto / a second in the song), ✎ timeline marks (the singing / strings spans drawn on the timeline; filled in by the timeline)
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 v3.2: prompt split (lyrics in the language you ask for) with the LLM inside ComfyUI (GGUF / transformers / LM Studio), vocal onset (the separated vocals kept per song), song loudness. Run
pip install demucsin ComfyUI's PythonComfyUI-ABCTiming v2.45: score → rhythm, band, drum, piano and violin cues, waiting cues for the singer and players, the analysis for the timeline (kept with the song), and the spans you fix by hand
ComfyUI-ABCInstrumentalize v1.5: instrumental score and bar-snapped scene cuts (1–4 scenes, 24 fps check)
ComfyUI-ABCScoreIO v1.42: switches, scores, pre-made / newest song, run log, A/V sync, scene pictures, ⛓ scene continuity, 🧑 character picture, 💾 low-memory join from files with 📺 report, 🎞 transitions and timeline (with 🔎 analysis, 🔎 analyse-only, ✎ hand fixes kept with the song), ⏳ prompts first, ✍ prompt check, 🔍 super resolution, 🔬 sync check (frames read with PyAV, which comes with ComfyUI)
Other custom nodes:
ComfyUI-Video-Saver by diodiogod ("Image Saver Save Video", final save with Civitai metadata): https://github.com/diodiogod/ComfyUI-Video-Saver
Only for 🔍 super resolution = rtx: ComfyUI Nvidia VFX Nodes (official, in ComfyUI Manager): https://github.com/Comfy-Org/ComfyUI_Nvidia_VFX_Nodes. Needs an NVIDIA RTX GPU and CUDA 13 PyTorch (cu130 or newer)
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: models/LLM/ (any GGUF; put its mmproj file in the same folder so it can see your images). The default Qwen3-VL-4B-Instruct Q4_K_M downloads itself
LLM: no LM Studio needed any more. Nothing to pip install or compile: llama.cpp's llama-server is downloaded from GitHub the first time (CUDA build on NVIDIA, otherwise Vulkan). A vision model (Qwen3-VL, Gemma 4 …) with its mmproj is recommended so the LLM can see your images. Big MoE models can keep their experts on the CPU (extra_args, e.g. --n-cpu-moe 9). LM Studio on this or another PC still works: set backend to lm_studio.
Disk: free space for temp/ (up to about 1 GB per scene while a run is going; cleared when ComfyUI starts). The 🔬 marks are small files in output/score2screen_sync/.
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/intoComfyUI/custom_nodes/(not one folder deeper). Updating? Replace the old folders, and reload the page after restarting (Ctrl+F5)Install ComfyUI-Video-Saver via Git URL, and
pip install demucsin ComfyUI's Python. Restart ComfyUIDrag a workflow from
workflows/onto the canvas. Leave 🧠 LLM settings at the default (the first run downloads llama.cpp and the model once), or pick your own GGUF in models/LLMIn the scene 1 column write the scene AND the song (mood, genre, vocals or "Instrumental."). Later scenes: the scene only
Set the 🎬 scene count, then fill the columns left to right: image, seconds and text for scenes 1 → 4. Width / height are in ① Shared. Or open the 🎞 Timeline and drop your images onto the clips
Optional: a 🧑 character picture and ⛓ continue for the scenes that should go on from the one before (the group above the scene pictures, or the ⛓ under each cut on the Timeline)
Run. Want to read the prompts first? Set ✍ Prompt check to manual: the run pauses after the split so you can fix them. Check the 📺 previews afterwards: the scene cut, the detected start, the prompts H3 got, and Runs so far
Optional: open the 🎞 Timeline and press 🔬 Sync check. Step to where the singing or the drums really start and press 📍 Mark here to see how early or late H3 was
💡 TIPS
Prompts can be in any language the LLM reads (English, Japanese, Russian ...). Add "Lyrics in Russian." (or any language) to choose the lyric language; without it the lyrics follow the language of your description
For a band, always write who plays what
⛓ For a clean join, leave the continuing scene's picture at (none) (picture 1 is used as the look), or use a picture of the same people and place. A very different picture can pull against the frame handed over
⛓ alone can drift a little in the face over several scenes: add a 🧑 character picture with the face, hairstyle and clothes clearly visible
The 📺 join report tells you whether a 5-frame handoff really happened (it falls back to 1 frame when H3 made fewer frames past the cut)
Don't want someone (or a pet) to sing? Say so in the scene text ("the dog doesn't sing"): the LLM sometimes writes "... and singing" for everyone on screen
Guitar and bass have no audio check (the timeline says "no audio check (from the score)"): their cues come from the score. Drums, piano and violin are checked against the real song
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)
Violinist: H3 tends to start playing when the camera cuts to a close-up of the player. Put the close-up where the violin comes in
✍ Prompt check (manual) is also a quick way to compare LLMs: look at the prompts, then ✖ Cancel before H3 runs
A take looks wrong? Open the 🎞 Timeline first. If the 🔎 analysis is off (the singing, the strings or the drums at the wrong time), drag it right there (✎) and run again. If the analysis is right but H3 didn't follow it, try another seed, a picture in a waiting pose, or a shorter scene
🔬 Compare takes with numbers: mark the same moments (the first sung word, the first drum hit) on two runs, and the errors tell you which seed or setting followed the song better
🔬 To judge H3 itself, use the scene's "H3 only" video (no crossfade, frames past the cut included); to judge what a viewer gets, use the finished MV. A mark inside a crossfade gets ⚠: two scenes are mixed there
🔬 Every mark in the finished MV about the same amount late (say +0.1 s)? Then 🎚 A/V sync in 🔧 Details can go up by about that much. Videos made with v6.0 can be measured on their "H3 only" videos (the finished MV needs the scene borders v6.1 keeps)
Pre-made song: keep its .abc (and, from v5.9, its .s2s.json) next to it. Pick it, press "🔎 Analyse this song" once, fix the lanes by hand if needed, then run: the scenes use the saved analysis
Hand edits belong to their song: picking another song takes them off, picking the song again brings them back. ↺ clears them
Want to try a few songs first? Turn on 🎵 Song only (with 🎵 pre-made song on (none): with a song picked there, nothing new is made), then pick "(newest song in
output/)" and make the videoSinger starts too early or too late? Set 🎤 vocal_in (the second in the song where the singing starts), or press "🎤 Singing starts at the playhead" on the Timeline
Transitions: crossfade for a soft change, dip to black for a new chapter. Keep the seed fixed and only change the transition: it finishes in moments
Turbo LoRA ON for drafts, OFF for final renders (H3 follows detailed cues better with more steps)
Scene length: up to 15 s per scene by default; up to 24 s has worked. For a long song, 4 shorter scenes usually hold up better than 2 long ones
🔍 Super resolution and the join now work from the saved scene files 24 frames at a time, so long songs no longer need the whole video in RAM. The 📺 join report shows the RAM / VRAM peak, handy if you want to measure
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: v4.1 / v3.9 / v2.34
v4.1 (1–4 scenes) and v3.9 (2 scenes) use LM Studio for the prompt split; get them from the older versions on this page. The older "every option" v2.34 Full / Legacy workflow also still works with these custom nodes.
Version history
v6.1: 🔬 sync check on the timeline: step the finished MV or a scene's "H3 only" video frame by frame, mark where singing or playing really starts or stops, and see the error against the song in seconds and frames (as H3 was told and in the finished MV, A/V sync taken in); marks kept per video; the join keeps each run's scene borders
v6.0: ⛓ scenes 2–4 can continue from the scene before (1 or 5 frames handed over, ⛓ under each cut on the timeline); 🧑 one main character picture for every scene (<Picture 2>); 💾 low memory: each scene saved to a file and the video joined from the files (super resolution chunk by chunk); crossfade keeps the scene before moving; 📺 join report (frames, real handoff, memory peaks); fps must be 24
v5.9: 💾 the analysis is kept with the song (<song>.s2s.json) and used again (no STRUM / Demucs for the same song); a pre-made song's analysis shows on the timeline at once; 🔎 analyse only the song (no LLM, no H3, in ComfyUI's queue); hand edits saved with the song; each recording of a score kept apart; "not analysed" / "older analysis" marked on the timeline
v5.8.1: 🎞 timeline wheel zoom (down to 0.1 s), Space = play / stop
v5.8: ✎ fix the analysis by hand on the timeline (🎤 singing and 🎻 strings spans, 🥁 drums in, only where the scenes had an analysis, in seconds of the song); the H3 cues follow it, ↺ back to the analysis; the singer is found from more wordings; the timeline panel resizes at any height
v5.7: 🔎 the last run's analysis on the timeline (singing, drum hits, strings, piano, real cuts); auto start shown where the last run started the song; only the newest song's analysis, each scene in its place, real cut lengths on the clips ("7.1s → 8.0s")
v5.6.1: fixes: the singing start set by hand works in short scenes, the LLM's other actions (waving, dancing) are kept when a singer is set to wait, "vocalist" / "singer" / "lead vocals" are recognised
v5.6: 🌐 lyrics in the language you ask for; 🎤 waiting performers are shown waiting (lips closed / hands still until their cue), the LLM's too-early words are fixed, singing start by hand (vocal_in)
v5.5: 🎞 timeline editor (drag & drop images and songs), 🎞 scene transitions, drum sync fixes (backbeat, no made-up fills, kick-only parts)
v5.4: ✍ prompt check (auto / manual): pause after the prompt split and fix each scene's prompt by hand in a window
v5.3: ⏳ every scene's prompt is read before any scene is drawn (one model swap per run); inputs laid out scene 1 → 4
v5.2: 🔍 optional RTX video super resolution on the finished video
v5.0: 🧠 the prompt LLM runs inside ComfyUI (GGUF via llama-server, transformers, or LM Studio); load / unload handled automatically
v4.1 / v3.9 (update 2026-10-14): 🎻 violinist plays only while the violin is heard; prompt split with thinking off and a 600 s timeout
v4.1: choose 1–4 scenes with all the v3.9 features
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

