MschA2V Beat Prompt Sequencer
The node that turns a song into a beat-snapped shot list
- prompt_schedule
- total_frames
- audio
- bpm
This is where every msch-a2v workflow starts, and it's the node that makes the whole pack make sense. MschA2V Beat Prompt Sequencer is the authoring tool for MiniMax H3 music videos: you give it a song, it detects the beats and BPM, and you lay prompt blocks down on a beat-snapped timeline in the browser. When you're done it hands the rest of the chain a compiled schedule, the song itself, and the total frame count - everything downstream needs to render cuts that land on the beat.
The genuinely unusual part is the frontend. Drop this node onto the canvas, point audio_path at a song, and a button that says Open Sequencer appears on the node (it's added by the pack's web/ extension, so you'll need to refresh the browser after install to see it). Click it and you get a full modal editor: the audio is analyzed with librosa under the hood - beat, onset and downbeat detection, BPM extraction - and you drag prompt blocks onto a grid that snaps to where the beats actually are. Real music drifts in tempo, so the pack maps block boundaries onto the detected beat timestamps rather than trusting bpm * seconds, which is the difference between cuts that feel synced and cuts that are merely close.
The inputs that matter
audio_path(STRING, required) - a path to an audio file on the machine running ComfyUI, not your laptop. The frontend tries to fill the dropdown from ComfyUI'sinput/directory, so dropping the file there is the path of least resistance; an absolute path works too.schedule_json- required, but don't panic. It's a hidden widget (kept in the serialized workflow, hidden on the canvas) that stores your whole timeline as JSON. The sequencer modal writes it when you hit Done. Its practical meaning: your shot list travels inside the workflow file, so share the JSON and you share the timing.audio_start_secondsandaudio_duration_seconds(both default -1) - the only optional inputs, and you can normally ignore them. At -1 the node derives the audio window straight from the schedule so the AUDIO output is frame-accurate to the assembled video. Override them only when you want a different window - a few seconds of lead-in silence, or a source track much longer than your authored blocks. Anything you'd rather not hand-trim, honestly.
What comes out
Four outputs, and they split cleanly down two paths:
prompt_schedule(MSCHA2V_SCHEDULE) → into MschA2V Shot Planner. This is the compiled, drift-corrected timeline: shots, blocks, per-shot prompts, timings.audio(AUDIO) → this is the decode of your song, windowed and zero-padded to be exactly the length the video expects. It's meant to go straight into your Video Combine node - msch-a2v deliberately never rebuilds audio from decoded per-shot output, so the finished video keeps the original track. No seams, no VAE audio artifacts.total_frames(INT) andbpm(FLOAT) → mostly for your own sanity and for confirming the beat detection agreed with the track.
Installing it
Shared with every MschA2V node, and the one prerequisite that surprises people: this pack is an orchestration layer for MiniMax H3, so it does nothing until you also install the comfyui-minimax-h3-audio-T8 pack and load an H3 model plus text encoder and VAEs. The repo's own requirements are just numpy, librosa and soundfile.
cd ComfyUI/custom_nodes
git clone https://github.com/mariobilly/msch-a2v.git
cd msch-a2v
python -m pip install -r requirements.txt # the same Python ComfyUI uses
Restart ComfyUI and hard-refresh the browser or the sequencer button won't show up. Two install notes: the standalone msch-a2v repo is now superseded by the unified MSCH Nodes pack (migrate via its guide to avoid duplicates), and Manager availability was still pending verification when the author last documented it, so git clone is the reliable route.
Where people get stuck
Three things trip up beginners here. First, the file-not-found wall: audio_path must exist on the ComfyUI host - a path that works on your desktop does nothing if ComfyUI runs on another machine or a container. Second, ambient or beatless audio: the BPM output will be 0 and your grid will be empty if librosa can't find a steady pulse, and no amount of prompt writing fixes that - pick a track with a real drum or percussion layer. And third, the drift trap: the frontend computes an estimate of frame counts, then the node recompiles the schedule on the Python side so everything agrees with what actually renders. That's a feature - trust the recompiled total_frames over whatever the modal preview showed if they ever disagree by a frame.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| audio_path | STRING | — | |
| schedule_json | STRING | {} | — |
| audio_start_secondsopt | FLOAT | -1.00-1–100000 | — |
| audio_duration_secondsopt | FLOAT | -1.00-1–100000 | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| prompt_schedule | MSCHA2V_SCHEDULE | — |
| total_frames | INT | — |
| audio | AUDIO | — |
| bpm | FLOAT | — |