Nodes/Plenio Music Production System/Best Take · lyrics fidelity
ComfyUI Node

Best Take · lyrics fidelity

YuE2 Skipped a Verse? Best Take Renders Twice and Keeps the One That Actually Sings

By jplenio·Created about a month ago·Updated about 14 hours ago· 90
Best Take · lyrics fidelity
  • take
  • brief
  • second
  • third
  • audio
  • report
◄lyrics—►

You gave the model eight lines of lyrics and got six of them plus a repeat, and a word that isn't in your text at all. That isn't a broken workflow. Music models drift off their lyrics, and the numbers behind this node are refreshingly honest: across 37 sung YuE2 takes, the median take sang 89% of its lyrics' words as written, one in six came in under 75%, and one verse was sung with 8 of its 65 words in one take and 64 of 65 in the next. Same brief, same score, same settings. Different seed.

So the fix is rarely a better prompt. It's a second take, plus a way to pick between them without listening to both at 2 a.m. Best Take is that second half.

What it actually does

It renders a second take and keeps the one that sings more of your lyrics, judged by machine not ear. Three levels, set on the brief's last field - lyrics fidelity - not on this node:

  • standard - one take, exactly as before.
  • high - best of 2 takes - a second take with the next seed; the take that sings more of the lyrics as written is kept.
  • highest - best of 3 takes - as high, and a third take only when neither of the first two sang at least 95% of the words.

The neat part is underneath. second and third are lazy inputs: ComfyUI renders them only when this node asks. Standard never asks, so a one-take run costs nothing extra; high asks for the second; highest hears the first two and asks for a third only if they fell short of 95%. In the shipped templates both are already cabled - two more render blocks at take seed +1 and +2, idle until called.

Each take is heard by the lyrics ASR (Qwen3-ASR 1.7B with Qwen3-ForcedAligner timing the words; faster-whisper large-v3 fills in for languages the aligner doesn't know) and scored as the share of the lyrics' words heard as written. It's the same measurement Export writes into the release record as as sung. Highest share wins; a tie goes to the earlier take.

The inputs that matter

Only two are required:

  • take - the first rendered take, as AUDIO. Wire the render block's decode output.

  • lyrics - the final lyrics from Song Sheet · Text. This is the ruler everything is measured against, so wire the edited text you actually approved, not a stale text node upstream of it.

  • brief - optional, but it's where the setting lives. No brief connected means no fidelity to read, and you silently get the first take.

  • second / third - optional, lazy, one render each.

Outputs are audio, which goes on to the Master block, and report (a PLENIO_REPORT) that surfaces in the Song Sheet and the release record with the shape of take 2 of 2 kept - 94% of the lyrics heard as written (take 1: 81%, take 2: 94%).

Turning it on

ComfyUI Manager → Custom Nodes Manager → search Plenio Music Production System → install → restart. Or:

cd ComfyUI/custom_nodes
git clone https://github.com/jplenio/Plenio-Music-Production-System

Requires ComfyUI 0.37.0 or newer (tested against 0.41.0): it builds on ComfyUI's own YuE2 and text-generation nodes. No Python packages. Set lyrics fidelity on the brief, then run.

High is about twice the render, highest up to three times - every extra take is a whole generation, and every take gets a hearing on top.

Where it bites

Instrumentals and songs without sung lines always take one take, whatever the brief says. Set high on an instrumental and you still get a one-take summary - designed, not a failure.

The ASR shows up as a download. The first hearing pulls Qwen3-ASR 1.7B (4.1 GB) and Qwen3-ForcedAligner 0.6B (1.8 GB) into ComfyUI/models/plenio/asr. Outside the aligner's languages, faster-whisper is the fallback and wants python -m pip install faster-whisper - the pack's only optional dependency.

It's a measurement, not a judge. A mumbly vocal scores lower than it sings, and a word the ASR mishears counts as not sung. If both takes land at 70%, you have a delivery problem: a voice that doesn't fit the melody's range, or too many syllables per note. Fix the score, not the seed.

The seed shown is take 1's. The kept take's seed is in the report, as +1 or +2. If you're chasing a specific take, read it there rather than trusting the widget.

If the hearing throws, the node warns and hands you the first take rather than killing the run - small thing, right call.

One caveat on support: at the time of writing, "Plenio" appears in exactly zero threads of our reddit corpus, and "YuE" hasn't moved since February 2026. You won't find a forum post with your error. The repo's docs/user/concepts/lyrics-fidelity.md is unusually specific - word shares, timings, measured numbers - so start there.

CategoryPlenio/Audio analysis

Inputs (5)

NameTypeDefaultDescription
takeAUDIOThe first take.
lyricsSTRINGThe lyrics the takes sing (the final lyrics of the Song Sheet).
briefoptPLENIO_BRIEFSong Brief or Cover Brief: its lyrics fidelity (without one: the first take).
secondoptAUDIOA second take (the next seed): rendered only when asked for.
thirdoptAUDIOA third take: rendered only with highest fidelity, when neither take sang 95 % of the lyrics.

Outputs (2)

NameTypeDescription
audioAUDIOThe take that sings most of its lyrics.
reportPLENIO_REPORTEach take's share of the lyrics heard, and the one kept.