MOSS SFT DeBand: candidate fixes side by side

Generated 2026-10-19 22:26. Same prompt and seed in every column. Add, remove or change columns freely (your layout is kept in the page link). Drag to pan, wheel or buttons to zoom; all columns move together. Click a leaderboard row to put it in the selected column (outlined); shift-click adds it as a new column. What each fix changes inside the model →
What the arms are (exact revert vs Gram solve, what ρ means)

Exact revert 21–41: copy MOSS-Image Base's weights into SFT for transformer layers 21–41 (every attention and MLP matrix). It removes most of the stripes (median −12.7 dB; Base −16.6), but it also undoes SFT's fine-tuning in half the network, so faces and style drift a lot (ArcFace ≈ 0.59).

Gram solve: instead of copying Base's weights, each layer gets a weight change D chosen so that its output matches Base only for the kinds of input the layer actually sees while SFT draws a solid colour. Those inputs were recorded from 36 solid-colour SFT renders (the "flat Gram" G). For inputs that look unlike those, the layer keeps SFT's behaviour. Formula: D = (WBase − WSFT) · G (G + εI)−1.

ρ sets ε (ε = ρ × the average eigenvalue of G). It controls how narrow the edit is. ρ → 0 makes D the full Base−SFT difference, the same as the exact revert. Larger ρ keeps only the strongest solid-colour input directions, so the edit gets smaller and the result looks more like SFT: ρ=0.1 keeps most of the revert (solids −6.6 dB median, faces ≈ 0.72), ρ=1 keeps less (faces ≈ 0.83, solids only −3 dB), and ρ=10 barely changes anything.

Kijai LoRA @ −1 / −0.5: subtracts Kijai's LoRA (or half of it). It is a rank-512 compressed approximation of the SFT↔Base difference covering layers 3, 4 and 21–41 plus the norms, so even at −1 it is only part of a full revert. It is not the same as our plain revert.

Plain revert ×0.55: the control, our own exact blend W = SFT + 0.55·(Base − SFT) on layers 21–41, using the full difference with no compression. It moves every weight 55% of the way to Base, an edit about as big as ρ=0.1's. It only reaches −5.6 dB at about the same face drift, so the solve really is choosing where to edit, not just editing less.

Centred-only / DC-only solves: the activations are split into two parts. One is each token row's average along the width: the overall colour and brightness, plus the timestep modulation shift ("DC"). The other is the horizontal variation around that average, which is where the stripes live. Centred-only makes the layers match Base on the horizontal variation and keeps SFT on the DC part. DC-only does the reverse. Centred-only does nothing for solids, DC-only gets about −5 dB with faces ≈ 0.86, and the full solve needs both parts together.

Protect general-prompt detail (μ): the ρ=0.1 solve plus a second term that keeps SFT's behaviour on the horizontal detail of 36 general prompts (faces, texture), with the colour/brightness part removed so it doesn't block the fix. Larger μ protects more. Keep SFT on late-step detail: Base everywhere the ρ=0.1 solve acts, except on horizontal variation in the last ~9 steps, where fine detail forms.

Steps 13–25 only: the ρ=0.1 solve applied only during the last 13 of 25 sampling steps (a ComfyUI hook). Split 21–31 / 32–41: the ρ=0.1 solve on one half of the layers, to see which half fixes solids and which half moves faces. Shipped arms are the HF DeBand LoRA and Quality+ preset.

Solids: HF colour power vs SFT in dB (orientation-free; lower = cleaner; Base ≈ −25). People: ArcFace identity vs SFT (higher = closer to SFT's face). SSIM / DINO: drift vs SFT on non-solid items. Banding: vertical-only fingerprint on the 768×1024 bench (1.0 = clean). Per-colour values are means over the seeds each arm has (11, and 14 for the main arms); "n" = images. Single images swing by 10–30 dB (one grey can hit −70), so sort by the median, not the mean.
Zoom Keys: ←/→ item, 1–4 zoom, C color view