Nodes/ComfyUI-SongLRC/Music Player (SongLRC)
ComfyUI Node

Music Player (SongLRC)

The fastest way to find out your lyrics are half a second late

By TheAwaken1·Created 22 days ago·Updated 17 days ago· 6
Music Player (SongLRC)
  • audio
  • audio
◄lrc—►

Here's the problem with timed lyrics: a 500ms drift is invisible in a text file and painfully obvious the moment you hear it. You can open the .lrc in a text editor and stare at [00:12.40]Hold the line all day and learn nothing. Play the song with the lines lit up in time and you know in four seconds whether the timing is right.

That's what Music Player (SongLRC) is for. It's a preview node that happens to be the most useful QA tool in the pack.

Two inputs, and what it does with them

  • audio - the finished song, any AUDIO output.
  • lrc - the timed text from Lyrics to LRC.

One output, audio, passed through untouched, so you can chain it after Save Matching LRC and still have the audio available downstream.

On run, the node writes the audio out to a temp FLAC and pushes that, plus the LRC text, to a custom browser widget. Nothing is saved to your output folder and nothing is cached - the node deliberately reports itself as always-changed, so every run hands the player a fresh file rather than showing you a stale render after you've tweaked timing_scale.

The interface is a wheel rather than a list: the current line sits centred and lit, neighbours tilt away above and below and fade toward the frame edges. Click a line to jump to it. An instrumental gap shows as three dots instead of leaving the last lyric stuck on screen. There's a play button, elapsed and total time either side of a draggable progress bar, and a volume control you can click to mute, drag, or scroll over.

Two tabs sit above the frame. Lyrics is the wheel. Visualizer swaps it for one of four styles - Ring, Bars, Tunnel, Warp - each with its own reaction to the kick drum, keeping the current line as a caption underneath. Tab, style and volume are remembered when you save the workflow. If the LRC carries word-level tags (WhisperX timing with word_timing on), the current line fills word by word as it's sung, karaoke style, in both views.

Export: a lyric video out of the same node

The Export button renders a 720p video in whatever style you've picked - visualizer, title, current line with its karaoke fill, the next line, a progress bar, elapsed and total time. It renders offline in the browser and comes out faster than real time: a three-minute song takes seconds.

The browser draws the frames and compresses them with WebCodecs, uploads them to ComfyUI in pieces (a single request is capped around 100 MB), and ComfyUI muxes in the song's own audio and writes a H.264 + AAC MP4 to output/video/SongLRC/<title>_00001.mp4. The button narrates itself: Rendering, Uploading, Encoding. Clicking during a render cancels it.

Browsers without WebCodecs fall back to recording playback in real time - the song plays once from the top, and clicking Export again stops early and keeps what was recorded. The pack re-muxes that fallback deliberately, because browser recorders write streaming-style files whose length many players misread as a second or two.

It never interferes with playback: you can hit Export and keep listening.

Fixing what you hear

The player is diagnostic, not corrective - but it tells you exactly which knob to turn.

Lines consistently early or late by the same amount → offset_seconds on Lyrics to LRC. Lines that start right and drift further out as the song goes on → timing_scale. Late entries everywhere with no drift → the words are fine, the timing method is weak; that's your cue to install WhisperX or wire the score's structure output, because even timing can only ever be an approximation of where a vocal starts.

Install and gotchas

Manager → search ComfyUI-SongLRC, or:

cd ComfyUI/custom_nodes
git clone https://github.com/TheAwaken1/ComfyUI-SongLRC
pip install -r ComfyUI-SongLRC/requirements.txt

The pack needs numpy and soundfile; the player itself is the part that needs a real browser, and the video export's fast path needs WebCodecs - recent Chrome, Edge or a Chromium-based ComfyUI front-end. The export HTTP routes load defensively: if that import fails you'll see a [SongLRC] video export route unavailable line at startup, the nodes will still work, and Export degrades to a plain download. That's your first thing to check if the button does nothing.

Because it's an output node with a UI, it plays the song through the ComfyUI page - it does not write an audio file for you. If you want the MP3, that's Save Audio (Advanced), with Song Filename feeding its prefix.

Categoryaudio/SongLRC

Inputs (2)

NameTypeDefaultDescription
audioAUDIO—
lrcSTRING—

Outputs (1)

NameTypeDescription
audioAUDIO—