Instructions to use MATLOWAI/MOSS-Image-SFT-DeBand with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Diffusion Single File
How to use MATLOWAI/MOSS-Image-SFT-DeBand with Diffusion Single File:
# No code snippets available yet for this library. # To use this model, check the repository files and the library's documentation. # Want to help? PRs adding snippets are welcome at: # https://github.com/huggingface/huggingface.js
- Notebooks
- Google Colab
- Kaggle
MOSS-Image SFT DeBand
The MOSS-Image SFT model often draws faint, evenly spaced vertical color stripes across smooth areas like skies, fog, backdrops and walls. This repo has two banding-fix LoRAs that remove them while keeping the image close to what SFT would have made, plus preset workflows that pair the fix with community speed LoRAs for 10β14 step (or 4β8 step) generation.
TL;DR
Just want one file that works? MOSS-Image-SFT-DeBand-int8 has the fix (and the Fast preset) merged into ready-to-run 5.4 GB int8 models. No LoRAs or custom nodes.
- Download the main fix,
moss_image_sft_banding_fix_L37-41_bf16.safetensors, intoComfyUI/models/loras/. - In your MOSS-Image workflow, add LoraLoaderModelOnly after the SFT model (
moss_image_sft_bf16.safetensorsfrom Comfy-Org/MOSS-Image) and set it to 1.0. No custom nodes needed. - Still seeing stripes? That happens most on smooth skies and gradients, and on wide images (1536 px and up). Add a second LoraLoaderModelOnly with the extra fix,
moss_image_sft_banding_fix_L32-36_extra_bf16.safetensors, also at 1.0. That's the Quality+ preset. - Or drag
workflows/moss_banding_fix_presets.jsoninto ComfyUI and pick a preset: Quality (25 steps), Quality+ (both fixes), Balanced (14 steps), Fast / Fast alt (10 steps). The files each preset needs are listed below. - Want 4β8 steps?
workflows/moss_banding_fix_presets_rapid_moss.jsonadds the Turbo presets. It needs two custom nodes; see the setup below. Keep Turbo near 1 MP (e.g. 1024Γ1024); bigger sizes tile.
How it works: each LoRA is an exact weight difference that turns some of SFT's transformer layers back into the Base model's weights. The main fix covers the last five layers (37β41), the extra fix covers 32β36, and everything else is untouched. How those layers were found is further down, with the full write-up in ANALYSIS.md.
Examples
Before / after: same prompt and seed, 768Γ1024. The bottom row removes brightness and boosts color 5Γ, which makes the stripes easy to see.
Every preset on the five test prompts: the exact output of the preset workflow at 768Γ1024, seed 11. Each label gives the banding score (about 1.0 = clean) and how close the image stays to plain SFT. The color view shows the stripes.
The workflow's default prompt: a cozy anime illustration of a woman in a penguin sweater with a penguin mug, on a window seat over an icy bay. This is what the preset workflows produce out of the box (1024Γ1024, every preset). This scene doesn't band much even on plain SFT, so it shows the look and speed of each preset.
A busy cinematic scene, 1280Γ720: text, crowds, reflections, steam and neon hold up with the fix and with the speed LoRAs.
More scenes: ballroom, viking ship, anime pier, and a layout check
These were made while tuning the presets, so some speed-LoRA strengths and step counts differ from the final presets. Every label names the exact setup.
Layout check: the prompt places four objects in four boxes, plus a card reading "LAYOUT OK". Every setup put all four objects in their boxes and got the text right, so the fix and speed LoRAs don't hurt prompt following.
Results
Same prompt, seed (11) and settings in every column, 768Γ1024. Each cell is banding Β· SFT similarity.
- Banding measures the stripe at the exact width SFT draws it, relative to nearby patterns. About 1.0 means no stripe; plain SFT scores about 2. Fine grain and real vertical patterns (pleats, tree trunks) also raise it, so compare within a column.
- SFT similarity is SSIM against the plain SFT image. Higher keeps more of the SFT look.
| Setup | Fog forest | Fjord sky | Goose | Oil still life | Perfume bottle | Mean |
|---|---|---|---|---|---|---|
| Off (plain SFT) | 2.33 | 2.21 | 2.16 | 1.96 | 1.53 | 2.04 |
| Quality | 1.28 Β· 86% | 1.74 Β· 90% | 1.21 Β· 69% | 1.43 Β· 89% | 1.29 Β· 93% | 1.39 Β· 86% |
| Quality+ | 1.10 Β· 74% | 0.93 Β· 84% | 1.28 Β· 54% | 1.17 Β· 80% | 1.00 Β· 88% | 1.09 Β· 76% |
| Balanced | 1.22 Β· 62% | 1.42 Β· 82% | 1.00 Β· 45% | 1.09 Β· 64% | 1.53 Β· 80% | 1.25 Β· 66% |
| Fast | 1.26 Β· 58% | 1.29 Β· 77% | 1.05 Β· 38% | 0.91 Β· 58% | 1.18 Β· 81% | 1.14 Β· 62% |
| Fast alt | 1.22 Β· 57% | 1.49 Β· 78% | 1.00 Β· 39% | 0.95 Β· 57% | 1.21 Β· 81% | 1.17 Β· 62% |
| Turbo | 1.04 Β· 42% | 1.30 Β· 44% | 1.59 Β· 32% | 1.15 Β· 31% | 1.29 Β· 73% | 1.27 Β· 45% |
| Turbo max | 1.17 Β· 32% | 2.41 Β· 65% | 2.15 Β· 30% | 1.27 Β· 23% | 0.99 Β· 71% | 1.60 Β· 44% |
| Kijai 21β49 @ β0.5 | 1.70 Β· 81% | 1.74 Β· 88% | 1.24 Β· 51% | 1.46 Β· 85% | 1.32 Β· 91% | 1.49 Β· 79% |
| Base model | 1.13 Β· 59% | 1.19 Β· 78% | 1.17 Β· 45% | 0.92 Β· 61% | 1.20 Β· 82% | 1.12 Β· 65% |
How to read it:
- Quality keeps the most of SFT (86%) and removes most of the banding. Quality+ is the cleanest (about as clean as Base) but changes the image more.
- Balanced / Fast / Fast alt are clean too, but at 10β14 steps they change more of the image.
- Turbo / Turbo max redraw the scene (30β70% similarity). Turbo max's high scores on the fjord and goose come mostly from fine grain the 4-step adapter adds, not SFT's stripes; check its color views above.
Settings: ER-SDE, CFG 3, Temporal Score Rescaling and skip-layer guidance (layers 22, 24) on, int8 Qwen3.5-9B text encoder. These are the preset workflow's own settings; the Turbo presets use the rapid-moss sampler.
Image size: when does banding go away?
It doesn't, really. SFT draws fine stripes at 768 and 1024 px wide. At 1536 and 2048 px wide it draws wider, wavy stripes instead. These are center crops of the color view at 1:1 pixels, height 1024, seed 11:
| Width | Plain SFT | Quality | Quality+ |
|---|---|---|---|
| 768 | strong stripes | fainter; still visible on the fjord sky | clean |
| 1024 | strong stripes | faint | clean |
| 1280 | clean on both prompts | clean | clean |
| 1536 | wide wavy stripes | fog clean; fjord sky still striped | fog clean; fjord sky very faint |
| 2048 | wide wavy stripes | fog clean; faint waves on the fjord sky | clean |
So: use Quality+ for wide images or big smooth skies. 1280 wide was clean for every setup here, but that's two prompts and one seed. The wavy stripes at 1536+ are wider than the ones the banding score looks for, so this table is by eye.
Preset workflows in detail
Two ready-made ComfyUI workflows are in workflows/. Pick a Preset from the dropdown at the top; it sets every LoRA strength and the step count for you.
| Preset | What it does | Steps |
|---|---|---|
| Quality | SFT + main banding fix (layers 37β41) | 25 |
| Quality+ | SFT + main fix + extra fix (layers 32β36). Cleanest, slightly different look | 25 |
| Balanced | main fix + lodestones 8-step DMD LoRA at 0.28 | 14 |
| Fast | main fix + lodestones 8-step DMD LoRA at 0.35 | 10 |
| Fast alt | main fix + darask0 4-step LoRA at 0.35 | 10 |
| Off | plain SFT, to compare | 25 |
| Turbo (rapid-moss workflow only) | lodestones 8-step adapter + main fix, its own sampler | 8 |
| Turbo max (rapid-moss workflow only) | darask0 4-step adapter + main fix, its own sampler (about 3 s per image on an RTX 5090) | 4 |
| Turbo hi-res (experimental) (rapid-moss workflow only) | Turbo max at ~1 MP, latent upscale to your size, then 3 Fast steps at 0.5 denoise | 4 + 3 |
The speed and Turbo presets use only the main fix. For wide images with smooth skies, Quality+ is the safe choice.
Turbo presets need a size near 1 MP (1024Γ1024, 1216Γ832, 832Γ1216, 1344Γ768, 768Γ1344): the rapid-moss adapters were trained there and step through fixed timesteps. At bigger sizes the image breaks into a grid of repeated tiny subjects, and short prompts make it worse, so write detailed prompts. For bigger images use Fast or Balanced: at 1664Γ1136 they take about 11 s and 16 s on an RTX 5090 and hold up fine.
Turbo hi-res is experimental. It is about twice as fast as Fast at big sizes (about 6 s at 1664Γ1136), but these settings don't hold up every time: detailed photo areas such as foliage get a canvas-like texture, and Turbo's odd choices (extra props, sloppy distant figures, misspelled text) carry over into the final image. It's usually not worth it, but it isn't fully tuned either; the stage-2 steps, denoise and upscale method are a starting point if you want to experiment.
moss_banding_fix_presets.json: stock ComfyUI, no custom nodes
Put these files in your ComfyUI models folder (each link downloads the file directly):
| Save as | Into folder | Download |
|---|---|---|
moss_image_sft_bf16.safetensors |
diffusion_models |
Comfy-Org |
qwen3.5_9b_int8_convrot.safetensors |
text_encoders |
Comfy-Org |
flux2-vae.safetensors |
vae |
Comfy-Org |
moss_image_sft_banding_fix_L37-41_bf16.safetensors |
loras |
this repo |
moss_image_sft_banding_fix_L32-36_extra_bf16.safetensors |
loras |
this repo |
lodestones_moss_sft_8step_dmd_lora_latest.safetensors |
loras |
lora_latest.safetensors from lodestones, renamed |
darask0_moss_sft_4step_dmad_lora.safetensors |
loras |
lora.safetensors from darask0, renamed |
The two speed LoRAs are both called lora.safetensors upstream, so rename them as shown. A LoRA at strength 0 is skipped, but ComfyUI still checks that every file exists. If you don't want a speed LoRA, delete its node and don't pick its preset.
moss_banding_fix_presets_rapid_moss.json: adds the Turbo presets
Everything above, plus:
- Custom nodes, each folder copied into
ComfyUI/custom_nodes/:- OpenMOSS's
moss-image(thecomfyui/moss-imagefolder of their GitHub repo); - darask0's
rapid-moss(thecomfyui/rapid-mossfolder of their Hugging Face repo).
- OpenMOSS's
moss_image_sft_bf16_split_qkv.safetensors(10.2 GB, this repo) βmodels/diffusion_models. The rapid-moss adapters patch q, k and v separately, so they need the SFT model with q/k/v stored apart. This file is the official OpenMOSS-Team/MOSS-Image-SFT transformer as a single file, with the same 463 tensors. The Comfy-Org file fuses q/k/v; with it, the rapid-moss adapters produce noise or a black image without raising an error.moss_image_sft_banding_fix_L37-41_bf16_splitqkv.safetensors(this repo) βmodels/loras. The same main fix, laid out for the split model.- Adapter folders, each holding three files with exactly these names:
| Folder | lora.safetensors |
time_embedding.safetensors |
dataspace.safetensors |
|---|---|---|---|
models/rapid_moss/lodestones-8step-latest/ |
lodestones' lora_latest.safetensors, renamed to lora.safetensors |
download | download |
models/rapid_moss/rapid-moss-4step/ |
darask0's lora.safetensors |
download | download |
Only the branch for the chosen preset runs, so the normal presets don't load the split model.
Compared with Kijai's LoRA and the Base model
Kijai/MOSS-image_experimental has the SFT-difference LoRAs this work builds on, and its README has the original β0.5 banding recipe:
moss_image_sft_lora_blocks_21_to_49_rank_512_bf16: Kijai's banding fix, applied to SFT at β0.5. It's the "Kijai 21β49 @ β0.5" row in the results table and the bottom-right image in the grids below.moss_image_sft_lora_rank_256_bf16andmoss_image_sft_lora_rank_512_bf16: the full SFT difference as a LoRA, for applying the SFT look to the Base model at whatever strength you want. At +1 the rank-512 version reproduces SFT's banding as well.
The two fixes take different routes. Kijai's subtracts half of the SFT change across layers 3, 4 and 21β41; the main fix here fully reverts only layers 37β41. On these images the main fix bands less or the same and keeps more of the SFT image every time. Pick by eye: each grid shows Full SFT (top left), Base (top right), the main fix (bottom left) and Kijai's LoRA (bottom right).
How the layers were found
- Block swaps with exact weights. Copying the Base model's weights into SFT for one block range at a time showed that removing SFT's changes in layers 21β41 fixes the banding, while reverting layers 0β20 alone does not. Within that range, attention (qkv, o) and MLP (ffn_up_gate, ffn_down) weights all contribute; the norms don't.
- An activation probe. Running the residual stream at every layer and step through the model's own output head showed the stripe frequency. In SFT it starts in the top layers (37β41) and then builds up across sampling steps, because each step's striped output feeds the next.
- Bakeoff. Reverting layers 37β41 for every step was the best trade-off across five prompts. It removed more banding than a late-step-only revert and changed the image less than Kijai's LoRA. Adding 32β36 cleans the stubborn cases (the fjord sky, wide images) at the cost of more change, so it ships as the separate extra fix.
The stripe frequency inside the model, by layer (vertical) and sampling step (horizontal). In Full SFT (left) it builds up from about step 7 and spreads through every layer; it never starts with the fix or in Base.
The full write-up, with the ablation charts, probe figures, step-window tests, open questions and the tools to reproduce it all, is in ANALYSIS.md. It uses an earlier banding score with a different scale (plain SFT about 20β120, lower is better); the ordering of setups is the same.
Limitations
- Image size matters. At 768 px wide the main fix still leaves faint stripes on smooth skies, and at 1536 px and up SFT switches to wider stripes the main fix doesn't always catch. Quality+ handled every size tested. See Image size.
- Small test set. Five prompts at one seed for the presets, two prompts for the size sweep. Seeds swing the banding score a lot, so treat small differences in the table as noise.
- The banding score is a guide, not ground truth. Fine grain and real vertical patterns raise it. When in doubt, check the color views.
- Not pixel-identical to an exact layer swap. ComfyUI's LoRA loader rounds the merged weights slightly differently, which changes fine details the way a nearby seed would. On average it scores the same.
- ComfyUI format. The files use ComfyUI's full-difference (
.diff) LoRA keys and have only been tested in ComfyUI.
Files
| File | Size | Contents |
|---|---|---|
moss_image_sft_banding_fix_L37-41_bf16.safetensors |
1.13 GB | Main fix: Base minus SFT weights for layers 37β41 (40 tensors, bf16, full rank) |
moss_image_sft_banding_fix_L32-36_extra_bf16.safetensors |
1.13 GB | Extra fix for layers 32β36; stack it with the main fix for Quality+ |
moss_image_sft_banding_fix_L37-41_bf16_splitqkv.safetensors |
1.13 GB | The main fix with q/k/v split, for the split model (rapid-moss workflow) |
split_qkv/moss_image_sft_bf16_split_qkv.safetensors |
10.2 GB | The official MOSS-Image-SFT transformer as one file with q/k/v separate (rapid-moss workflow only) |
workflows/*.json |
The two preset workflows; *_api.json are API-format copies for scripting |
SHA-256:
- main fix
01329abd340dd9cf55677381a11558fe5307c7fd648f1988b441172fbbd86fd5 - extra 32β36
7f6e43c7566b0c04ad9772cf3efdf9da973b65e242d1a384b17e8db91a6337cd - main fix, split q/k/v
34b29f56c168f33a50624a5b9728cae4026db43b88b46b381a739926921bc882 - split SFT model
0e5803a087c07cb4c7d8010a2d44153494a053706337edc7f76b455e9900b3a6
Credits
- OpenMOSS for MOSS-Image Base and SFT (Apache-2.0), and Comfy-Org for the ComfyUI repack.
- lodestones and darask0 for the 8-step DMD and 4-step adapters used in the speed and Turbo presets.
- Kijai for the SFT-difference LoRAs, and a big thanks for pointing me in the right direction: Kijai's note that the SFT causes the banding in the later blocks, fixable with negative strength, is where this investigation started.
- Downloads last month
- -
Model tree for MATLOWAI/MOSS-Image-SFT-DeBand
Base model
OpenMOSS-Team/MOSS-Image-Base
































