YuE2 Field Report 2: One Retraction, Three Confirmations
Replication kills the style-prompt-length claim; score duration predicts audio duration within 2%; score edits measure local to the hertz; decoder choice is inert.
TL;DR — Second field report on local YuE2: one prior finding retracted on a 20-run replication, three capabilities confirmed including sample-accurate score editing, two expected levers measured as inert.
Forty-nine generations, ten experiments, one RTX 5080, official yue2-infer runtime. Reporting date: 16 September 2026. Findings ordered by what changes an operator's behaviour.
Retraction: style-prompt length is not a lever
Prior claim, published three days ago: a long prose style prompt outperforms the documentation's compact comma-separated form, 47% vs 25% lyric fidelity. Sample size: one pair. Replication: four prompt lengths, five seeds each, everything else held.
- 27 words — 32 / 34 / 39 / 43 / 65 → mean 42.6%, 128.0 s
- 65 words — 20 / 33 / 42 / 47 / 65 → mean 41.4%, 136.8 s
- 124 words — 26 / 39 / 46 / 49 / 84 → mean 48.8%, 145.0 s
- 233 words — 26 / 39 / 49 / 61 / 78 → mean 50.6%, 138.8 s
Between-cell spread of the means: 9.2 points. Mean within-cell standard deviation: 17.9 points.
Noise exceeds signal by roughly 2:1. No demonstrable effect. The original claim was seed variance. Length of the generated song trends upward from 27 to 124 words but within-group spread is 9-19 seconds; not claimed.
Confirmed: score duration predicts audio duration
nominal_duration_seconds from score inspection, against measured audio, 16 songs: all inside 2%. Samples — 107.8 vs 105.6 s; 139.7 vs 139.5 s; 127.3 vs 126.8 s; 156.4 vs 155.8 s.
Operational consequence: planning costs ~20 s, rendering ~120 s. Plan first, filter on predicted duration, render survivors only. Implemented as a four-candidate picker that also discards takes returning an empty transcript.
Confirmed: score edits are local and exact
Method: export score from a completed generation, transpose 32 vocal notes in the final chorus, resubmit as the composition. Source-separated vocal, pitch measured per window.
| Window | Original | Edited | Delta |
|---|---|---|---|
| 125-138 s (edited) | 417 Hz | 463 Hz | +1.8 st |
| 100-120 s | 415 Hz | 415 Hz | 0.0 |
| 0-60 s | 415 Hz | 415 Hz | 0.0 |
32 of 276 notes changed, indices 214-245. Control windows identical to the hertz.
Caveat on our side: intended delta was a uniform +2 st; realised +1.8 because our transposition script did not implement the native accidental-propagation rule (an accidental carries across octaves by letter within the bar). Documented behaviour; our reader was non-conformant.
Confirmed: notes-per-syllable predicts cover failure
Covers rerun correctly — chords stripped with the project tool, cot="melody". Still failing, now with an attributable cause.
- Song A: 643 melody notes / 185 supplied syllables = 3.5 → fidelity 5%
- Song B: 440 / 185 = 2.4 → fidelity 14%
- Normal generation, same lyrics: 1.0-1.3 → fidelity 50-84%
Transcript of the 5% case returns English-sounding filler against a Korean lyric input. Released pop melodies are denser than a section-tagged lyric sheet; the model fills the surplus. Covers require a lyric written to the source syllable count.
Negative results
Decoder selection — inert. Same cached latents decoded through both shipped VAEs. Band energy delta ≤0.4 pp, dynamics identical to one decimal, waveform correlation 0.954-0.991, spectral centroid +2-3% on the benchmark decoder. Benchmark decoder identity does not affect interpretation of local output.
Score validity — no defects. 18/18 of our scores pass the project validator. A structural concern raised in the prior report (compressed multi-bar rests carrying a chord symbol) is not flagged; that concern was overstated.
FAQ
What is the cheapest way to reject a bad YuE2 generation?
Read the planned score's nominal duration before rendering. It predicted final audio length within 2% on 16 of 16 songs, and the planning stage costs roughly one sixth of a full render.
How precise is YuE2 score editing in practice?
Sample-accurate in the tested case: 32 of 276 notes altered, the edited 13-second window moved +1.8 semitones, and control windows measured identical frequencies.
How many seeds are needed before a YuE2 A/B is meaningful?
More than five. At n=5 per cell, within-cell standard deviation of lyric fidelity was 17.9 points against a 9.2-point spread between conditions.
What is the correct notes-per-syllable ratio for YuE2?
Between roughly 1.0 and 1.3. At 3.5 the model abandoned the supplied lyric entirely; at 2.0 it filled surplus notes with vocalisations.
Reference: request schema and the 16 GB patches
Operator-facing extracts. Full prompt set and score tooling: Axortex.
The request
{
"id": "kongkong",
"style": "Korean, K-pop girl group dance, bright confident female vocals, 126 BPM, punchy kick, deep synth bass, crisp claps, glossy synth plucks, catchy repeated hook, no electric guitar",
"lyrics": "[Intro]\n\n[Verse]\n...",
"cot": "full",
"seed": 831001
}
cot is full (melody and chords), melody (melody only) or off (no score). There is no bpm,
negative_prompt or reference_audio field. Put the tempo in the style as a single number, never a range:
a range breaks it, a number is followed to within about 3.5 BPM.
Running a 24 GB pipeline on a 16 GB card
# 1. Windows torch wheels ship without a FlashAttention kernel, but the auto-detection only
# checks that the operator exists - so it picks flash and dies at execution.
from yue2 import cuda_graph, nar
_g = cuda_graph.GraphAR.__init__
cuda_graph.GraphAR.__init__ = lambda s, *a, **k: _g(s, *a, **dict(k, attention_backend="cudnn"))
# 2. NAR attention hands the whole query sequence to SDPA at once (3.77 GiB in one allocation).
_n = nar.CachedNAR.__init__
nar.CachedNAR.__init__ = lambda s, m, c, a="sdpa", q=None: _n(s, m, c, a, q or 2048)
pipe = YuE2Pipeline.from_pretrained(MODEL, vae=VAE, device="cuda", local_files_only=True,
memory_budget_gib=15, offload_ar=True)
References: benchmarks · generation · abc-editing · repo.
Image: Klaus-Dieter Keller, Galton box, Public domain, via Wikimedia Commons.
← Back to all posts