# Three things that cost me an evening installing MOSS-Image in ComfyUI, and none of them was the model

> Source: <https://dev.to/nichetools/three-things-that-cost-me-an-evening-installing-moss-image-in-comfyui-and-none-of-them-was-the-5bm2>
> Published: 2026-10-30 04:41:17+00:00

MOSS-Image is a 5B-parameter text-to-image model from OpenMOSS, released 16 October 2026 under Apache 2.0. It's a single-stream diffusion transformer, and the reason to care about it is layout control: you can tell it where things go, with bounding boxes or a JSON layout, instead of describing the composition in prose and hoping.

Everyone's writeup covers the interesting part — the layout control. Nobody covers the part that actually eats your evening, which is file placement. Here is what cost me the time, in the order it cost me.

That sentence is the whole reason this post exists. When a tool fails loudly you fix it in two minutes. When it fails by producing plausible-looking garbage, you start suspecting your prompt, then your sampler, then your step count, and you've burned an hour before you go back and check whether the files are actually where you think they are.

Folder layout, for reference:

ComfyUI/models/

├── diffusion_models/ ← MOSS-Image checkpoint

├── text_encoders/ ← text encoder files

└── vae/ ← VAE, if distributed separately

Comfy-Org publishes a repack of the same weights already arranged in this structure. If you'd rather not think about placement at all, use the repack. The official OpenMOSS repo is the source of truth and is what you want if you care about getting the newest unmodified files, but you place them yourself.

It is a DiT, not a UNet, so your SDXL workflow does not transfer

I assumed I could take an SDXL graph, swap the loader, and be most of the way there. You can't. A single-stream transformer doesn't split work between separate text and image streams the way SD 1.5 or SDXL do, so the graph expects the model's own loader. Pair it with an SDXL checkpoint loader and you get an error that doesn't explain itself.

The node pack needs a restart, and "the node does not exist" usually isn't about the node

Install the node pack from the manager or clone it into custom_nodes/, then restart ComfyUI. A pack that hasn't been picked up on restart produces exactly the same error as a pack that isn't installed, which sends you looking in the wrong place.

Two more that bit me later, in descending order of wasted time

Variant mismatch. There are two: SFT (base) and Turbo (a LoRA, far fewer steps). The sampler settings differ. A Turbo workflow run against SFT weights gives you noise, not an image — and it looks the same as a broken install. SFT is better fidelity at 20–30 steps; Turbo is usable at roughly 4–8. I started with Turbo because I wanted fast iteration and then forgot which one I'd installed.

Starting with the layout graph. The layout workflow is the reason to use this model, so it's tempting to start there. Don't. Build the minimal text-to-image graph first — checkpoint, encoder, short prompt, 1024×1024 — and confirm you get a picture. When a complex graph breaks you cannot tell whether the fault is installation or prompt structure, and you end up debugging both at once.

What's actually good about it, once it runs

Layout control is real and it changes how you write prompts. Plan the arrangement first, then describe what goes in each region. If you write the descriptive prompt first and then try to force positions onto it, the two fight each other and the result looks like neither.

The 5B parameter count is modest, and that's the point at this resolution — it's fast enough to iterate rather than queue and wait.

I keep the fuller version of this — the exact file tree, both variants' step counts, and the layout workflow notes — at AI Handbook, linked here: aihandbook.app/tutorials/moss-image-comfyui-setup/ , updated in place when I get something wrong.
