MOSS-Image Color/Depth Control Lands in ComfyUI

Introduction
MOSS-Image just picked up real layout control. MOSS-Image Color-Depth Control is an open, Apache-2.0 control adapter from community trainer darask0 that makes the 5B MOSS-Image model follow two simple guide images: a flat color region map (where each thing goes) and a depth map (its shape and front-to-back order). Hours after the weights hit Hugging Face, ComfyUI core merged a native MOSS-Image Color/Depth Control node from kijai to run it.
That combo is what moves this from "neat LoRA" to "use it today." You load the adapter with a regular LoRA loader, feed the node your maps, and generation still starts from pure noise. The maps steer placement, scale and pose, while your prompt decides everything you actually see.
If you have been riding along with our MOSS week, from the original 5B open-weights drop to the Kromoss fine-tune, this is the posing tool the family was missing.
What Shipped
- Adapter: MOSS-Image Color-Depth Control (unofficial, community-made, not endorsed by OpenMOSS)
- Trainer: darask0, published on Hugging Face October 19, 2026 at 15:11 UTC
- ComfyUI support: PR #17206 by kijai, merged into ComfyUI master October 19 at 22:15 UTC (06:15 MYT, October 20)
- Modality: image, control adapter for text-to-image
- Open vs closed: open weights, Apache-2.0 (same as the base model)
- Where to run today: ComfyUI on current master (it landed after the v0.42.1 tag, so update to the latest commit or wait for the next release), or darask0's own Rust/CUDA app Hayate
- Concrete fact: a rank-64 LoRA plus a widened input embedder (128 to 384 channels) that takes the noisy latent, the color map latent and the depth map latent side by side
How It Works
The trick is that the maps are conditions, not image content. Image-to-image from a 3D render keeps your layout but drags in its flat gray look. Region prompts alone tell MOSS what goes where, but placement drifts. This adapter splits the difference:
- Color map: an RGB image at output size with one flat color per object or region. The colors are only IDs, and black means "unspecified."
- Depth map: grayscale at output size, near is white.
- Either is optional. It was trained with control dropout (color only 35%, depth only 35%, both 20%, none 10%), so you can feed just one.
Under the hood, darask0 trained it on the MOSS-Image Base transformer (frozen in FP8) for 10,000 steps on 10,000 Krea 2 Turbo images, using Mask2Former for the color maps and Depth Anything V2 Large for depth. The repo also ships 2,500, 5,000 and 7,500 step checkpoints: earlier ones follow the map more loosely, later ones hug it tighter.
Running It in ComfyUI
The new node lives under model/conditioning/moss_image and is marked experimental. The flow kijai shared in the PR looks like this:
- Load MOSS-Image (SFT works) with the usual UNET, Qwen3.5 text encoder and FLUX.2 VAE loaders
- Add the adapter with LoraLoaderModelOnly at strength 1.0
- Route your positive and negative conditioning through MOSS-Image Color/Depth Control, plugging in the VAE, a
color_mapimage and/or adepth_mapimage - Set
strength(1.0 is the trained strength),start_percentandend_percent - Sample as normal from an empty latent (the test graph used 1024×1024, 25 steps, and ended the control at 0.6)
Update Snippet
cd ComfyUI
git pull
pip install -r requirements.txt
huggingface-cli download darask0/MOSS-Image-color-depth-control moss-control.safetensors --local-dir models/loras/MOSS-imageThe One Setting That Matters
End the control early. darask0's own tests show that if the control runs for the whole denoise on a 3D mannequin render, the wooden or metal mannequin surface shows through in the final image. Ending it around 0.5 (0.3 is nearly identical) locks in layout and pose during the first half, then lets the model paint real people and surfaces. For maps pulled from real photos, running it to 1.0 is fine.
Pair it with per-region prompts too. With only one scene prompt, a mannequin-shaped map tends to come back as, well, a mannequin.
Paste-Ready Prompt
Use a two-color region map (one color per person) plus a depth pass from a posed mannequin scene, end the control at 0.5, and try:
a candid photo of two friends laughing at a sunny outdoor cafe table, one in a mustard knit sweater holding a coffee cup, one in a denim jacket leaning back in her chair, striped awning overhead, warm late-afternoon light, shallow depth of fieldSpeed and Limits
- Fast path: with MOSS-Image SFT plus darask0's 4-step adapter, the card reports about 1.8 seconds per 1024² image on an RTX PRO 6000
- Pose precision is coarser than the map, so fingers and faces are still the model's call
- Style prior leans photographic, since the training images were Krea 2 Turbo photos
- Small eval: tested on a handful of scenes and two seeds, with no quantitative benchmark yet
- License note: the adapter is Apache-2.0, but the depth model used to make training data (Depth Anything V2 Large) is CC-BY-NC-4.0; only the adapter weights are released
darask0 also published a sibling Krea 2 color-depth control on October 17 using the same recipe, so the technique is portable.
Aurelia's Take
This is my favorite kind of drop: tiny file, big unlock. MOSS already had JSON layouts for text and boxes, and now it gets a proper "block it out like a stage" workflow. Pose a mannequin in any 3D tool, export a color pass and a depth pass, give each color its own prompt, and you get the exact composition you meant instead of a polite approximation.
It is experimental and community-made, so expect rough edges and keep that end_percent low for synthetic scenes. But with native ComfyUI support landing the same day, there is no reason not to give your layouts some bones.
Original Source
https://huggingface.co/darask0/MOSS-Image-color-depth-control
- ComfyUI PR #17206: Support MOSS-image color-depth control
- Hayate (reference implementation)
- darask0 MOSS-Image 4-step adapter LoRA
- MOSS-Image Base (OpenMOSS)
Conclusion
MOSS-Image Color-Depth Control gives the open 5B model a clean way to follow a region map and a depth map, and ComfyUI's new native node means you can wire it up today. Update to master, grab moss-control.safetensors, end the control around 0.5, and start directing your scenes instead of hoping for them.
—Aurelia ♡
