LC MOSS Control ๐น๏ธ
A ControlNet for the Model Nobody Wrote One For
- model
- vae
- color_map
- depth_map
- MODEL
Every idea in your prompt is global. That's the whole reason regional prompting and ControlNet exist: a sentence describes a scene but can't place anything, and two subjects in one prompt smear their attributes together. LC MOSS Control is the placement tool for MOSS Image - hand it a flat-colour region map and/or a depth map and the picture follows them.
It's not a union ControlNet. It's darask0's community-trained Color-Depth Control adapter for MOSS, wrapped so ComfyUI can run it - one person's answer to a model that shipped with no conditioning at all.
What the adapter gives you that a prompt can't
The 2026 unions - Z-Image, Flux 2, Qwen - landed within about a week of their bases, and all got narrower on the way: canny, depth, pose, a few line variants. Segmentation-style conditions never made the jump, and a flat-colour region map is that condition. Pair each colour with a region prompt and you get regional prompting baked into the model instead of bolted onto the canvas.
The depth half is the more immediately useful bit. Feed it a photo's depth pass and MOSS will rebuild a completely different subject in that pose. Depth Anything V2 (the pack's own LC Depth Anything V2 outputs near-as-white, which is what this wants) means any reference photo becomes a pose reference without a pose skeleton.
How it works
The mechanism explains every setting. MOSS's input layer - video_embedder, a Linear(128, 3072) expecting only the noisy latent - is widened to Linear(384, 3072) so it takes [noisy latent | colour latent | depth latent], all plain Flux.2 VAE latents. The adapter ships that wider layer plus a rank-64 LoRA on the blocks and the text embedder. A zero latent means "no control", which is why either map can be omitted.
The node installs the wide input layer as an object patch, patches the LoRA through ComfyUI's own LoRA machinery at strength, and wraps the diffusion model so the two control latents are added to the noisy latent on every step - positive and negative pass, like the adapter was trained - then zeroed once you're past color_end / depth_end. That's an A1111-style end-percent, and it's the dial that makes this feel controllable rather than slammed on.
Both maps get a real VAE encode at full and half size; resizing a packed Flux.2 latent instead would smear the control and lose the pose.
The inputs that matter
model wants MOSS Image SFT or Base (the 8-step turbo LoRA works fine). vae must be the Flux.2 VAE - flux2-vae or the small one - because the maps are encoded with it and the node checks for 128-channel latents. control_file is a dropdown that reads models/model_patches; pick darask0's moss-control.safetensors from there.
Then the two optional inputs, which are the whole point: color_map (flat colours, one per object or region, black = unspecified, same size as the picture, each colour paired with a region prompt) and depth_map (grayscale, near = white). Either alone works. Leave both unplugged and the node hands your model straight back untouched - no error, no effect, the most confusing way to break a workflow.
The three numbers are where beginners get burned:
strengthis the adapter's LoRA strength. 1.0 is as trained. The 384-wide input layer always applies in full regardless, so 0 isn't "off".color_end/depth_enddefault to 0.5 and stop each map after that fraction of the steps. Maps derived from a real photo: push both to 1.0. 3D mannequins and hand-painted maps are the opposite - colour 0.4โ0.5 and depth 0.15 (0.25 with the turbo LoRA), or leave depth out entirely. Run a mannequin at 1.0 and it shows through the render.
Output is a single MODEL. This is a patcher, not a conditioner - wire it between your model loader and the sampler, and note that a KSampler downstream is where positive/negative go as usual.
Installing it
Manager โ ComfyUI LC MaskMaker Nodes, or:
cd ComfyUI/custom_nodes
git clone https://github.com/lonecatone23/ComfyUI_LC_MaskMaker_nodes
Restart, then put moss-control.safetensors from darask0/MOSS-Image-color-depth-control into ComfyUI/models/model_patches - the pack never downloads this one for you. It's Apache-2.0 and community-made, and its training depth maps came from Depth Anything V2 Large (non-commercial weights; only the adapter's own weights are in this file). The pack's install.py only adds transformers, huggingface_hub and timm if they're missing.
Where it goes wrong
An empty control_file dropdown means exactly one thing: nothing's in models/model_patches (or you haven't refreshed). A file that isn't the right adapter gets caught on load with a clear complaint about a missing video_embedder / control_channels - which is reassuring, given how many packs fail with a shape mismatch stack trace instead.
Wiring it to anything other than MOSS gives you "needs a MOSS Image model". Wrong VAE gives you a channel-count error naming the Flux.2 VAE. And if a render looks like your prompt was ignored, check that a map is actually plugged in and that you didn't set both end values to 0.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | MOSS Image SFT (or Base). Works with the 8-step turbo LoRA. | |
| vae | VAE | The Flux.2 VAE: the maps are encoded with it. | |
| control_file | COMBO | darask0's moss-control.safetensors, in models/model_patches. | |
| strength | FLOAT | 1.000โ2 | Strength of the adapter's LoRA. The input layer always applies in full. |
| color_end | FLOAT | 0.500โ1 | Stop the color map after this part of the steps: layout first, then the model finishes the surfaces. Maps made from a real photo: 1.0. Mannequins and painted maps: 0.4 - 0.5. |
| depth_end | FLOAT | 0.500โ1 | Stop the depth map after this part of the steps. Real photo: 1.0. Mannequins: 0.15 (0.25 with the 8-step turbo LoRA), or leave depth out. Later and the mannequin shows through. |
| color_mapopt | IMAGE | Flat colors, one per object or region (the colors are only IDs). Black = unspecified. Same size as the picture. Pair each color with a region prompt. | |
| depth_mapopt | IMAGE | Grayscale depth, near = white (LC Depth Anything V2 gives that). Same size as the picture. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | โ |