ComfyUI Node

Vibe Music Engine

Turn a song into a shot list, subtitles, and lyric prompts

By lazniak·Created 2 years ago·Updated 11 months ago· 7
Vibe Music Engine
  • audio
  • beats_audio
  • Lyrics
  • frame_based_text
  • Frame_long
  • frame_numbers
  • text_lines
  • start_frame_numbers
  • end_frame_numbers
  • num_of_elements
  • durations
  • Start_ms
  • Duration_ms
choose_modelbase
source_languageauto
target_languagesource
continuation_text<LOGICAL CONTINUATION OF PREVIOUS VIDEO SHOOT>
fps25.0
words_per_line3
prev_context_words0
next_context_words0
context_bracketstrue
max_shot_length_frames125
min_shot_length_frames25
filename_prefixsc
files_in_edlmp4
beat_detectionfalse
beat_sensitivity0.5
beat_brutality0.50
save_edloverwrite
save_srtoverwrite
srt_moderaw
frame_gap1.0
buy_me_a_coffeefalse
usage_counterUsage count: 0

This is the node the pack is named after, and it's genuinely clever. Vibe Music Engine takes an AUDIO input - a song, a voiceover, anything with a vocal - and turns it into a complete plan for a lyric/music video: the transcribed lyrics, frame-accurate per-frame text you can use to prompt image generation, shot boundary timings, and written-out EDL and SRT files. It's Whisper-based speech-to-text bolted onto a music-video production pipeline, and it's the most interesting thing in lazniak's suite by a wide margin.

Under the hood: it dumps your audio to a temp WAV, runs OpenAI's Whisper with word-level timestamps, groups the words into lyric lines (words_per_line, default 3), converts timestamps to frames at your fps, enforces shot lengths between min_shot_length_frames (default 25) and max_shot_length_frames (default 125) so cuts feel deliberate instead of frantic, and writes the results to ComfyUI/output/<prefix>/ as an EDL (CMX3600 format, readable by NLEs) and SRT subtitles. There's also optional numba-accelerated beat detection that can align your cuts to the music. That's a lot of pipeline for one node.

Inputs worth caring about

  • audio (AUDIO) - wire this from any node that outputs ComfyUI's AUDIO type. The tooltip's advice is the actual requirement: clear vocal content transcribes dramatically better.
  • choose_model - Whisper size, default base. This is where the whole thing can bite you: the model downloads on first run, and it's not tiny. base ≈ 142 MB, medium ≈ 1.5 GB, large-v3 ≈ 3 GB+. The .en variants are faster if you only work in English. It loads for the run and frees VRAM after, so it won't sit in memory, but budget the download and the run time.
  • source_language (default auto) / target_language (default source) - auto-detect, or force a language; set a different target to get a translated transcription.
  • fps (default 25) - the master clock. Every frame number and EDL timecode derives from this, so match it to your video workflow or nothing lines up.
  • words_per_line, min_shot_length_frames, max_shot_length_frames - the editorial controls. Short lines = more cuts; min shot length stops seizure-inducing staccato.
  • filename_prefix (default sc) and files_in_edl (default mp4) - name the output clips and tell the EDL what files to reference.
  • beat_detection, beat_sensitivity, beat_brutality - the music-sync layer. Sensitivity finds beats (higher = more, plus false positives), brutality is how hard cuts snap to them.
  • save_edl / save_srt (overwrite/no/iterate) and srt_mode (raw/clean/word/original/all) - raw keeps system markers, clean is dialogue only, word is karaoke-style word-by-word timing.

What comes out

Eleven outputs. The ones you'll actually use: Lyrics (the full transcription as a string), text_lines plus frame_numbers/start_frame_numbers/end_frame_numbers (lists that let you drive per-shot image generation - feed each line's frame range into an image-gen pass with the lyric as its prompt), Frame_long (total frames), num_of_elements (how many shots/lines), and the Start_ms/Duration_ms/durations lists for finer timing work. frame_based_text is the assembled per-frame text stream.

Install & first-run reality

Same pack: Manager search "videoclipgenerator", or

cd ComfyUI/custom_nodes
git clone https://github.com/lazniak/videoclipgenerator
cd videoclipgenerator
pip install -r requirements.txt   # pulls openai-whisper + numba

Restart. First real run downloads the Whisper model - give it time and bandwidth. Troubleshooting-wise: missing whisper or numba imports mean the requirements didn't fully install (re-run the pip install against the ComfyUI Python, not your system one); a garbled transcription usually means the audio's too quiet or buried in music - the tooltip's "clear vocal content" isn't a suggestion; and the buy_me_a_coffee checkbox opens a browser tab, as it does everywhere in this pack. Expect the README's grander claims (99-language dialect handling, cross-lingual pivot translation) to be flattered marketing - the real code is Whisper + careful bookkeeping, and that's plenty.

CategoryVibeMusicEngine

Inputs (24)

NameTypeDefaultDescription
audioAUDIOMain audio input for speech-to-text processing. Should contain clear vocal content for optimal transcription.
choose_modelCOMBObaseSelect Whisper model size: tiny: Fastest, lowest accuracy base: Good balance of speed/accuracy small: Better accuracy, slower medium: High accuracy, slower large/large-v2: Best accuracy, slowest *.en models: Optimized for English
source_languageCOMBOautoSelect the source language of the audio: auto: Automatically detect language en: English pl: Polish de: German etc.
target_languageCOMBOsourceSelect the target language for transcription: source: Keep detected/specified source language en: English pl: Polish de: German etc.
continuation_textSTRING<LOGICAL CONTINUATION OF PREVIOUS VIDEO SHOOT>Text to be used for logical continuation of scenes. This text will be inserted when a scene is split into multiple parts.
fpsFLOAT25.00.1–120Frames per second for video output. Common values: 24fps: Film 25fps: PAL 29.97fps: NTSC 30fps: Digital 60fps: High frame rate
words_per_lineINT31–20Number of words to group per subtitle line. Lower values create shorter, more readable lines but more frequent cuts.
prev_context_wordsINT00–20Number of previous words to add as context before the main text line. Helps with context understanding and prompt generation.
next_context_wordsINT00–20Number of next words to add as context after the main text line. Helps with context understanding and prompt generation.
context_bracketsBOOLEANtrueIf enabled, adds [PREV: ...] and [NEXT: ...] brackets around context words. If disabled, adds context words without brackets.
max_shot_length_framesINT125Maximum length of a single shot in frames. Longer shots will be split. At 25fps, 125 frames = 5 seconds.
min_shot_length_framesINT251–100Minimum length of a single shot in frames. Prevents too rapid cuts. At 25fps, 25 frames = 1 second.
filename_prefixSTRINGscPrefix for output files. Will be used for both EDL and SRT files. Example: 'sc' will create 'sc_00001.mp4', 'sc.edl', etc.
files_in_edlSTRINGmp4File extension for video files referenced in EDL. Common formats: mp4, mov, avi, mxf. Must match your video workflow.
beat_detectionBOOLEANfalseEnable automatic beat detection for music-synchronized cuts. Uses advanced audio analysis to find rhythmic patterns.
beat_sensitivityFLOAT0.50.1–1Sensitivity of beat detection: 0.1: Only strongest beats 0.5: Balanced detection 1.0: Detect subtle beats Higher values may create false positives
beat_brutalityFLOAT0.500–1How strictly to align cuts to beats: 0.0: Subtle alignment 0.5: Balanced 1.0: Exact beat alignment Higher values may create jarring cuts
save_edlCOMBOoverwriteEDL save mode: overwrite: Replace existing file no: Don't save EDL iterate: Create numbered versions (sc_001.edl, sc_002.edl, etc.)
save_srtCOMBOoverwriteSRT subtitle save mode: no: Don't save SRT overwrite: Replace existing file iterate: Create numbered versions
srt_modeCOMBOrawSubtitle format mode: raw: Include all system messages clean: Only text content word: Word-by-word timing (karaoke style) original: Raw Whisper output all: Save all formats (raw, clean, word, and original)
frame_gapFLOAT1.00.5–5Gap between words in frames when using word mode. Affects readability and timing precision.
buy_me_a_coffeeBOOLEANfalseSupport the development! ☕ By enabling this option, you'll be directed to a page where you can show your appreciation for this tool. Your support helps maintain and improve these nodes!
usage_counterSTRINGUsage count: 0Tracks the total number of times this node has been used. This helps us understand how the tool is being utilized and guides future development. The counter updates automatically with each use.
beats_audiooptAUDIOOptional separate audio input for beat detection. Useful when vocal track and music track are separate. If not provided, main audio will be used for beat detection.

Outputs (11)

NameTypeDescription
LyricsSTRING
frame_based_textSTRING
Frame_longINT
frame_numbersSTRING
text_linesSTRING
start_frame_numbersSTRING
end_frame_numbersSTRING
num_of_elementsINT
durationsSTRING
Start_msSTRING
Duration_msSTRING