INT8 quantization moves YuE2's output about as much as changing the seed

Status: smoke-tested, N=1. One 30-second prompt through YuE2 3B at BF16 and at INT8 ConvRot, against a same-model seed-change control: the quantization changes the log-spectral distance by 13.45 dB where merely moving from seed 42 to seed 43 changes it by 12.29 dB — a ratio of 1.09×, which is not a distinguishable quality effect at this sample size.

The question

Comfy-Org publishes YuE2 3B in two checkpoints: yue2_3b_bf16 at 7.8 GB and yue2_3b_int8_convrot at 4.0 GB. The ComfyUI blueprint that ships with the model — Text to Music (YuE2).json — defaults to the INT8 ConvRot build, with no note on what the smaller file costs in audio quality.

On a single 24 GB card that default matters. 3.8 GB of headroom is the difference between a music model that coexists with a video model and one that does not. The question is whether the cheaper checkpoint sounds worse.

The trap is that "sounds worse" has a floor nobody quotes. YuE2 is an autoregressive sampler: change the seed and you get different music from the same prompt. Any comparison of two checkpoints that does not measure that ordinary seed-to-seed variation first will report a large number and call it quantization damage.

Method

Four arms, one prompt, one 30-second duration, one 3B model, on one RTX 3090 under GPU lock.

Arm Checkpoint Seed Role
arm0 yue2_3b_bf16 42 ground-truth reference
arm1 yue2_3b_int8_convrot 42 claim under test
null yue2_3b_bf16 42 reproducibility floor — repeat of arm0
seed floor yue2_3b_bf16 43 ordinary seed variation

Every arm holds style prompt, lyrics, duration, sampler (dpm_2 / sgm_uniform, 32 steps, cfg 1.0), and max_duration identical. Only the checkpoint and the seed vary, and never both at once.

The two controls are the design. Comparing arm0 to arm1 alone produces a distance with nothing to compare it against. The seed-floor arm supplies the scale: it changes the seed while holding the model, so it measures what this metric reads when the output differs for a reason that is not quantization. The reproducibility arm re-runs arm0 unchanged, establishing what the metric reads when nothing differs at all.

The measure is mean L1 distance between per-frame log-magnitude STFT spectra, in dB, on 48 kHz mono decodes of both clips — plus waveform correlation and RMS difference. Log-spectral L1 is the right instrument here because two autoregressive samples of the same prompt are never sample-aligned: waveform correlation between any two different generations is approximately zero by construction, which the results confirm and which is why correlation alone cannot answer this.

The decision rule, fixed before rendering. Let R = (arm0↔arm1 distance) / (arm0↔seed-floor distance).

Results

Pair Identical Waveform corr Log-spec L1 (dB) ΔRMS (dB)
arm0 ↔ null (same model, same seed) yes 1.0000 0.000 0.00
arm0 ↔ seed floor (same model, seed 42 vs 43) no −0.0009 12.287 0.25
arm0 ↔ arm1 (BF16 vs INT8 ConvRot) no 0.0884 13.445 0.05
arm1 ↔ seed floor no 0.0005 12.960 0.20

R = 13.445 / 12.287 = 1.09×. That falls in the ≤ 1.25 branch: the quantization difference is not distinguishable from ordinary seed-to-seed variation.

All four arms render 30.00 s at an RMS within 0.25 dB of each other (−18.96, −18.92, −18.96, −18.71 dBFS). The quantization does not shift level, and it does not truncate or pad duration.

Four spectrograms in a 2x2 grid, each 30 seconds of audio to 16 kHz. Top left, BF16 seed 42. Top right, the BF16 seed 42 repeat, visually indistinguishable from it. Bottom left, INT8 ConvRot seed 42: the same kind of harmonic stack and onset pattern but a different arrangement. Bottom right, BF16 seed 43, likewise different in the same way. All four show dense harmonic structure with clear note onsets and a sustained band below 16 kHz.

The figure is the check on the numbers. All four panels carry real musical structure — harmonic stacks, distinct onsets, a populated band below 16 kHz — so no arm collapsed to noise or silence. The INT8 panel does not look degraded next to the BF16 panel; it looks like a different take, in the same way the seed-43 panel looks like a different take.

What this does and does not say

The INT8 ConvRot checkpoint is not measurably worse than BF16 on this prompt. It is different, by an amount that this instrument cannot separate from the difference you get by nudging the seed. For a workflow that already accepts whatever the seed gives it, the 3.8 GB is available at no detectable cost.

That is a much weaker claim than "the quantization is lossless", and the distinction matters. A 1.09× ratio does not prove the two checkpoints are equivalent — it proves this experiment cannot tell them apart.

What this does not settle

Cost

Files

Graphs are ComfyUI API format and name local checkpoints; they will not drag-and-drop into a stock install, and they require ComfyUI ≥ v0.36.0 for the YuE2 nodes.

Pipeline, pre-registration and decision rules live in genops-pipelines under concourse/yue-exp-001-pipeline.yml and docs/experiments/yue-exp-001-bf16-vs-convrot-audio-quality.md. Rendered audio is in the Immich album yue-exp-001 YuE2 BF16 vs ConvRot.