Nodes/PromptMasterLD/🎬 Music Video - LD
ComfyUI Node

🎬 Music Video - LD

H3 Music Video Writes Each Segment to the Song

By Lora-DaddyΒ·Created 6 days agoΒ·Updated 2 days agoΒ· 5
🎬 Music Video - LD
  • clip
  • vae
  • audio_vae
  • audio
  • positive
  • latent
  • prompt
  • segments
  • plan_json
  • mp3
  • width
  • height
  • script
β—„mp3β–Ί
β—„seconds10.0β–Ί
β—„segment0β–Ί
β—„width832β–Ί
β—„height480β–Ί
β—„fps24β–Ί
β—„batch6β–Ί
β—„povoffβ–Ί
β—„main_speakerautoβ–Ί
β—„accentoffβ–Ί
β—„accent_partneroffβ–Ί
β—„accent_strengthnaturalβ–Ί
β—„accent_languageenglishβ–Ί
β—„dialogue20β–Ί
β—„artistoffβ–Ί
β—„celebrityoffβ–Ί
β—„wardrobeautoβ–Ί
β—„undressfalseβ–Ί
β—„extra_skin_detailfalseβ–Ί
β—„cameraoffβ–Ί
β—„transitionoffβ–Ί
β—„speedoffβ–Ί
β—„fmtbracketβ–Ί
β—„detailh3β–Ί
β—„styleoffβ–Ί
β—„style_lookoffβ–Ί
β—„time_of_dayoffβ–Ί
β—„weatheroffβ–Ί
β—„musicautoβ–Ί
β—„music_bgfalseβ–Ί
β—„intentβ–Ί
β—„lexiconβ–Ί
β—„seed7β–Ί
β—„plan_json[]β–Ί
β—„song_seconds0.0β–Ί
β—„emotionoffβ–Ί

The part of video gen everyone fakes, done properly

Most "music video" workflows are a video with a song laid over it afterwards, and the picture has no idea the song exists. H3 Music Video (🎬 Music Video - LD, in PromptMasterLD) does the version you actually want: MP3 in, a video whose pictures land on the song. It cuts the track into segments, transcribes each window so the writer knows what the song is about, writes a continuing prompt for each segment, and feeds the real audio in as <Audio 1> - so the model hears the actual music and can put the drum hit on the beat, the swell on the chorus.

That "transcribe" bit matters more than it sounds. Whisper runs over the attached MP3 and hands the writer what the track is about - a song about a jungle gets shot in a jungle instead of the generic neon alley that a text-to-video prompt would default to. The lyrics are subject matter only; they're never spoken or quoted back. This is a music-video writer that actually listens to the music, which is rarer in the toolchain than it should be.

How the queue works

One of the nicer design decisions: the node is one segment per queue. Required seconds sets the segment length (and since H3 caps an audio reference at 15s, that's the whole legal range), and the segment input picks which segment this queue renders. The panel writes all of them at once - you queue segment 1, 2, 3... and each render gets a prompt that knows the segment before it. Because H3 chaining carries the previous shot's tail, later segments continue the scene rather than restarting it.

The dials are the full Studio-style surface: mp3, seconds, segment, width/height/fps, pov, main_speaker, accent and accent_partner, dialogue, artist, celebrity, wardrobe, camera, transition, style, time_of_day, music, intent, seed... - all feeding one writer call. Two to care about early:

  • batch - shots written per LLM call. At 6, a 12-segment song is two calls instead of twelve, and the writer can shape an arc across the batch. Drop to 1 for strict one-at-a-time writing - slower, tightest continuity.
  • plan_json - a required input that's really an output in disguise: the beat sheet as [{start,end,prompt}]. Feed it back from a previous run and the prompts become the shots, in order.

Optional audio lets you pass the song in directly (an AUDIO, if you have it loaded) instead of relying on the mp3 filename; song_seconds overrides a measured length; emotion steers the writing.

What comes out

positive (CONDITIONING) and latent (LATENT) wire straight into your H3 sampler - that's the node's whole output contract. Plus the planning strings: prompt, script (the full --- script), plan_json, segments (INT count), mp3 (the resolved filename) and width/height. The plan_json/script pair is what you'd feed to H3 Master or the Music Video path if you want to render on the pack's own rail instead of your sampler.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/Lora-Daddy/PromptMasterLD
cd PromptMasterLD
pip install -r requirements.txt

Restart ComfyUI, or ComfyUI Manager β†’ search "PromptMasterLD". The transcription uses Whisper through ComfyUI's existing transformers - the pack downloads openai/whisper-small (~1GB) in the background on first use, which is worth knowing because your first queue may take a while to start. No API key anywhere: the writer is a local LLM over LM Studio.

The trap

The 15-second audio-reference cap is the whole constraint of this node's design: seconds per segment can't exceed it, so a four-minute song is 16+ queues by construction. That's not a bug - it's H3's limit on how much real audio a clip can hear. Respect it, let the segment queue do its thing, and join the rendered segments with H3 Join or H3 Master when you want one file.

CategoryLD/PromptMaster

Inputs (40)

NameTypeDefaultDescription
clipCLIPβ€”
vaeVAEβ€”
audio_vaeVAEβ€”
mp3STRINGβ€”
secondsFLOAT10.02–15Seconds per segment. H3 caps an audio reference at 15s, so this is the whole legal range.
segmentINT00–999Which segment this queue renders. The panel writes all of them at once; this picks the one to sample.
widthINT83264–4096β€”
heightINT48064–4096β€”
fpsINT248–60β€”
batchINT61–8Shots written per LLM call. At 6, a 12-segment song is TWO calls instead of twelve, and the writer can shape an arc across the batch. Drop to 1 for strict one-at-a-time writing β€” slower, tightest continuity.
povCOMBOoff3 options: off, male, female
main_speakerCOMBOauto4 options: auto, her, him, viewer
accentCOMBOoff50 options: off, korean, japanese, mandarin, thai, vietnamese, +44
accent_partnerCOMBOoff50 options: off, korean, japanese, mandarin, thai, vietnamese, +44
accent_strengthCOMBOnatural3 options: natural, strong, thick
accent_languageCOMBOenglish2 options: english, own
dialogueINT200–100β€”
artistCOMBOoff172 options: off, pink_floyd, fleetwood_mac, beatles, iron_maiden, wu_tang, +166
celebrityCOMBOoff638 options: off, h3k_abby_sciuto_pauley_perrette, h3k_ace_ventura_jim_carrey, h3k_achilles_brad_pitt, h3k_adam_driver_adam_driver, h3k_adam_maitland_alec_baldwin, +632
wardrobeCOMBOauto4 options: auto, off, her, him
undressBOOLEANfalseβ€”
extra_skin_detailBOOLEANfalseβ€”
cameraCOMBOoff78 options: off, static, handheld_restless, shoulder_follow, float, rack_focus, +72
transitionCOMBOoff11 options: off, morph, hard_cut, whip_pan, match_cut, push_through, +5
speedCOMBOoff7 options: off, subtle, slow, very_slow, ramp_in, ramp_out, +1
fmtCOMBObracket5 options: bracket, timed, flowing, shotscript, fullref
detailCOMBOh34 options: short, medium, long, h3
styleCOMBOoff570 options: off, harry_potter, lord_of_the_rings, the_matrix, john_wick, star_wars, +564
style_lookCOMBOoff177 options: off, pixar_3d, anime_cel, ghibli_paint, cartoon_bold, flat_vector, +171
time_of_dayCOMBOoff25 options: off, muted, desaturated, flat_low, cine_neutral, natural_true, +19
weatherCOMBOoff11 options: off, rain, downpour, drizzle, snow, fog, +5
musicCOMBOauto52 options: auto, off, club_house, hip_hop, trap, techno, +46
music_bgBOOLEANfalseβ€”
intentSTRINGβ€”
lexiconSTRINGβ€”
seedINT70–2147483647β€”
plan_jsonSTRING[]β€”
song_secondsoptFLOAT0.00–3600β€”
audiooptAUDIOβ€”
emotionoptCOMBOoff27 options: off, auto, joy_laughter, shock, terror, rage, +21

Outputs (9)

NameTypeDescription
positiveCONDITIONINGβ€”
latentLATENTβ€”
promptSTRINGβ€”
segmentsINTβ€”
plan_jsonSTRINGβ€”
mp3STRINGβ€”
widthINTβ€”
heightINTβ€”
scriptSTRINGβ€”