MOSS-Image SFT Destripe LoRA Removes Vertical Stripes in ComfyUI
A 1.9 MB LoRA removes the faint vertical colour stripes MOSS-Image SFT draws in skies and flat backdrops, and it loads through the stock ComfyUI LoRA loader.
MOSS-Image SFT draws a regular pattern of faint vertical colour stripes across smooth areas: skies, fog, plain walls, studio backdrops. On 18 October, nynxz published a 1.9 MB LoRA, SFT Destripe, that removes them while leaving almost everything else about the SFT model in place. It is a weight patch, not a retrain: no custom nodes, no new checkpoints, one LoraLoaderModelOnly after the model the site covered at release.
Top: SFT output, plain and with brightness removed and colour boosted 5x. Bottom: the same prompt and seed with the Destripe LoRA at strength 1.5. The stripes are a colour shift, not a brightness shift, which is why they survive the plain image. Source: nynxz/MOSS-Image
What the stripes are
The artifact is easy to miss at normal viewing and impossible to unsee once colour is amplified. It sits on a fixed period: about 16 px at 768 px wide and 21.3 px at 1024 px wide, which works out to 48 cycles across the image width in both cases. Because the period scales with width, it does not look like sensor noise or a tiling seam. It behaves like a pattern the model learned to draw.
Users reported it on the SFT repository within days of release: the first report thread went up on 16 October with sample renders, and the guesses in it ranged from a wrong VAE to a distilled-teacher artifact. None of them was confirmed. The thread is still open and OpenMOSS has not published an explanation.
How a 1.9 MB LoRA removes it
The LoRA is extracted from the difference between Base and SFT rather than trained. In outline:
- For each of SFT's 252 linear layers, take the weight delta from Base and break it into rank-1 directions with an SVD. Every direction is one "input pattern to output pattern" rule that fine-tuning added.
- Score every direction by how much it feeds the stripe. The stripe is measured as the energy of the 48-cycle column pattern in the model's own prediction, over the early sampling steps where it forms (the file's header records steps 4 to 13 of a 25-step run, ER-SDE, CFG 2.5, 768 px, two seeds). One backward pass gives, for each direction, how fast that stripe energy grows when the direction is added.
- Subtract the 64 highest-scoring directions. They land in 25 matrices across layers 24 to 41, eleven of them the MLP
ffn_up_gate, the rest inffn_down, q, k, v and o. Ranks are 1 to 7, which is why the file is 1.9 MB: 945,152 stored numbers. MATLOWAI's weight analysis puts that at about 0.09 percent of the energy of SFT's total change from Base.
The direction scoring is what makes the file small without making it blunt. Two earlier fixes revert whole layers to Base and pay for it in drift; this one removes only the directions inside those layers that carry the stripe. As a causal check, applying the same directions with the opposite sign makes the stripes roughly 22 times stronger.
Using it in ComfyUI
Put moss_sft_destripe_top64_bf16.safetensors in ComfyUI/models/loras/, load MOSS-Image SFT (moss_image_sft_bf16 or moss_image_sft_int8_convrot from Comfy-Org/MOSS-Image), add LoraLoaderModelOnly, and set strength by width:
- 1.0 at 768 px
- 1.5 at 1024 px
At 1024 px, strength 1.0 clears the stripe in 6 of 12 test images and leaves a faint trace in the rest. Strength 1.5 takes it to 1 of 12, and 2.0 is no better than 1.5 while moving further from SFT. The LoRA is built from SFT's own changes, so it does nothing useful on Base. The keys use the diffusion_model. prefix and the stock loader maps them directly.
One loader caveat comes from the same repository: if you use Load LoRA (Bypass), q/k/v adapters are dropped on the fused Comfy-Org checkpoints, and this LoRA touches q, k and v in a few layers. Normal patching is fine on the fused files.
What the author's numbers show
The blind test uses four prompts with large smooth areas (sand dunes, a plain wall, open water, a portrait on a blurred backdrop) at three seeds each, none of them used to build the fix. The score is MATLOWAI's bandviz metric, where lower is less banding and about 16 or below reads as clean.
| Model | bandviz, 768 px | Stripe still the top peak | SSIM to SFT |
|---|---|---|---|
| SFT | 9.8 | 9 of 12 | 1.000 |
| SFT + Destripe @ 1.0 | 4.2 | 1 of 12 | 0.995 |
| Base, for reference | 4.2 | 5 of 12 | 0.876 |
At 1024 px, plain SFT scores 24.0 with the stripe as the top peak in 11 of 12 images; the LoRA at 1.5 scores 5.9 with 1 of 12, against 4.0 for Base. The image stays over 99 percent similar to what SFT produced.
Flat colour is where the artifact is easiest to see and hardest to remove, since a solid area gives the stripe nowhere to hide:
![]() | ![]() |
|---|---|
| Solid beige backdrop, plain SFT | Same prompt and seed, LoRA at 1.5 |
Faces are the other end of the trade-off, the part of an image a heavy-handed fix tends to soften:
![]() | ![]() |
|---|---|
| Portrait, plain SFT | Same prompt and seed, LoRA at 1.5 |
Third-party renders from MATLOWAI's benchmark, which measures identity with ArcFace: 0.94 under the standard preset settings and 0.96 with the LoRA's own sampler settings. Source: MOSS-Image-SFT-DeBand
Third-party check
The strongest outside evidence comes from MATLOWAI, who had already published an investigation into the same stripes and a set of layer-revert fixes before this LoRA existed. That benchmark now includes the Destripe LoRA head to head with the alternatives, and reports it as the gentle end of the range:
| Fix | Solids, median dB | Worst case | Face similarity |
|---|---|---|---|
| Destripe @ 1.0 | −3.2 | −1.9 | 0.94 |
| Destripe @ 1.5 | −3.9 | −1.8 | 0.94 |
| Destripe @ 1.5, at its own sampler settings | −4.6 | −3.0 | 0.96 |
| Base model, for reference | −16.6 | −10.4 | 0.45 |
The same write-up states the trade-off plainly: the LoRA only partly cleans flat colour areas, around −4 dB, so the stripes get fainter but can still be visible in a boosted colour view, where the layer-revert fixes reach further at the cost of moving the whole image. Its README now sends people who want the smallest possible change to this LoRA, and people who need the cleanest flat backgrounds to the heavier fix.
Limits
- The measurements cover 768 and 1024 px with ER-SDE, 25 steps and CFG 2.5. Other samplers, step counts and resolutions are untested, and banding varies a lot from seed to seed.
- The fix is partial by design: 64 directions, scored with a first-order estimate at one resolution. Wider images (1536 px and up) draw a different, wavier stripe that this LoRA was not scored against.
- There is no official word from OpenMOSS. The author's write-up on the SFT repository, posted on 19 October, asks whether the SFT data pipeline used position scaling, bucketing or resized images, and offers the per-direction scores; it has no reply as of writing.
Also in the repository
The same repo ships split q/k/v versions of both MOSS-Image checkpoints, with each attention layer's q, k and v stored as separate tensors instead of one fused qkv. The weights are the same numbers in a different layout, 463 tensors instead of 379. They exist for adapter work: trainers like AI Toolkit write separate q, k and v layers, and on fused files those adapters have to be mapped onto slices. They load with Load Diffusion Model in place of the Comfy-Org files.
Availability
Both artifacts are on Hugging Face. The text encoder and VAE are unchanged and come from Comfy-Org/MOSS-Image. The banding analysis and the bandviz metric the scoring is built on are MATLOWAI's, in MOSS-Image-SFT-DeBand, alongside an interactive comparison of every fix on the same prompts and seeds.




Comments
Sign in with GitHub to join the discussion.