MossImage in ComfyUI: Complete Workflow Setup Guide
Run MOSS-Image locally with the official native nodes. This guide covers the node install, the local model directory the loader expects, the official sampler settings, and the fixes documented in the repository.
Verified against the official repository
Before you start
Prerequisites
A working ComfyUI install, the native node, and a local copy of the weights. No third-party sampler nodes are required.
ComfyUI
A recent ComfyUI install. The native plugin uses ComfyUI's own dependencies and can be installed independently of the MOSS-Image repository.
Python
Use the Python environment that ComfyUI already uses. The official local launch scripts create a separate environment if you prefer isolation.
Model weights
MOSS-Image-Base or MOSS-Image-SFT. The loader expects a local directory containing transformer/, text_encoder/, tokenizer/ and vae/.
Memory
No official minimum VRAM table is published. BF16 weights are about 27.2 GB derived from published file sizes; the official Gradio app enables offload below 40 GiB.
“Derived” means calculated from the published weight file sizes, not copied from an official requirement. The repository does not publish a minimum-VRAM table.
Step by step
Install the node and load the graph
- 1. Install the node. Copy
comfyui/moss-image/intoComfyUI/custom_nodes/moss-image/and restart ComfyUI. You can also search for MOSS-Image in ComfyUI Manager, or link an existing checkout withpython comfyui/install.py --comfy-root /path/to/ComfyUI. - 2. Download the weights. Get MOSS-Image-Base or MOSS-Image-SFT from Hugging Face. The loader reads local single-file or sharded safetensors weights; it does not download from a repository ID.
- 3. Set model_path. Open the MOSS-Image HF Loader node and point
model_pathat the directory that containstransformer/,text_encoder/,tokenizer/andvae/. Leaveweight_dtypeandtext_deviceon default unless you are tuning memory use. - 4. Load the JSON. Drag either download below into the ComfyUI canvas. Existing workflows are not overwritten.
- 5. Prompt and run. Edit the positive and negative CLIPTextEncode nodes. Put the literal words to render in quotes or separate them with real line breaks, then queue the prompt.
Downloads
Workflow JSON
The first file is the official graph, downloaded unchanged. The second is the same graph with the loader pointed at SFT weights, so you can keep both variants side by side.
MOSS-Image workflow
moss-image-workflow.json
14 KB · official graph · Base model_path
Downloaded from OpenMOSS/MOSS-Image. Drag into ComfyUI, then set model_path to your Base weights.
Download JSONMOSS-Image SFT variant
moss-image-workflow-sft.json
14 KB · same official graph · SFT model_path
Not a separate official file. It is the official graph with model_path preset to /path/to/MOSS-Image-SFT; change it to your local path.
Download JSONNeed to submit the graph programmatically? The repository also publishes an official API-format workflow with the same nodes. The official copies live under comfyui/moss-image/example_workflows.
{
"id": "602a9b4a-8b28-4c64-a19e-fb35024af9c8",
"revision": 2,
"last_node_id": 19,
"last_link_id": 26,
"nodes": [
{
"id": 1,
"type": "MOSSImageHFLoader",
"pos": [
196.06797287994917,
841.2778976539247
],
"size": [
460,
150
],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [
{
"localized_name": "model_path",
"name": "model_path",
"type": "STRING",
"widget": {
"name": "model_path"
},
"link": null
},Official defaults
Sampler settings
These are the values shipped in the official workflow and documented in the ComfyUI README.
| Setting | Official value | Notes |
|---|---|---|
| Canvas | 1024 × 1024 | Use positive multiples of 16 in either direction. |
| Steps | 50 | The user guide recommends at least 50 for best results. |
| CFG | 3 | Official recommended range is 3.0–6.0; short prompts may need more. |
| Sampler | Euler | Recommended default for the flow-matching scheduler. |
| Scheduler | sgm_uniform | Set in the KSampler node of the official graph. |
| Shift | 5 | ModelSamplingSD3 node, titled “Official Flow sigma shift”. |
| SLG | Uncond skip at layer 22 | Simple SLG node; clear single_layers to disable. |
| Negative prompt | Empty | The Python API default is an empty negative prompt. |
| Text encoder cap | 4096 tokens | Text encoding is capped; longer prompts are truncated. |
| Suggested pixels | 0.25M–4M | The user guide recommends 1M, 1.5M or 2M total pixels. |
The 20 official example images use the same model but vary CFG (3–5), steps (30–50) and shift (5–6). Use the workflow defaults above when you want to reproduce the documented setup.
Models
Switching between Base and SFT
Base is the model intended for fine-tuning. SFT is fine-tuned from Base on curated data and produces cleaner text grouping and a more organized layout.
The node graph does not change. Duplicate the workflow, then edit one value in MOSS-Image HF Loader:
- Base: set
model_pathto the MOSS-Image-Base directory. - SFT: set
model_pathto the MOSS-Image-SFT directory.
The official repository does not publish a second SFT workflow file, so the SFT download on this page is explicitly a path-adjusted copy of the official graph. Keep the sampler settings identical; if you compare outputs, use the same seed and prompt.
Weights: MOSS-Image-Base · MOSS-Image-SFT
Troubleshooting
Documented errors and fixes
Each fix below is sourced from the official ComfyUI README or user guide. Where the repository does not document a cause, we say so instead of guessing.
The loader cannot find the model
Symptom: You point model_path at a Hugging Face repository name or a parent folder and the node fails to load.
Fix: Use a local directory that contains transformer/, text_encoder/, tokenizer/ and vae/, or local single-file / sharded safetensors. The loader does not download from a Hub repository ID.
Text looks wrong or the text encoder is the wrong one
Symptom: Latin letters render, Chinese collapses, or the prompt seems ignored past a certain length.
Fix: Keep the Qwen3.5-9B text encoder that ships with the model; do not substitute a CLIP encoder from another graph. Text encoding is capped at 4096 tokens, so shorten the prompt or split the copy. Put exact words in quotes or explicit line breaks.
SLG is too strong or the image collapses
Symptom: Over-sharpened details, repeated structure, or an image that looks worse than the preview.
Fix: Clear Simple SLG's single_layers to disable negative-branch skipping. The default is layer 22. For standard SLG, replace Simple SLG with SkipLayerGuidanceDiT, choose single_layers, set scale 3, start 0.01, end 1 and rescaling 0, and keep double_layers empty. Keep ModelSamplingSD3 before SLG so scheduling and thresholds share the same shift.
Output differs from the standalone pipeline
Symptom: The same prompt and seed produce a different image than the Python or Gradio app.
Fix: The official README states that ComfyUI's native scheduler does not apply the standalone pipeline's training-grid snapping, so matching seeds and parameters do not guarantee identical images. Prompt expansion, safety filtering and resizing on a hosted service add more differences.
Out of memory
Symptom: The load fails, or sampling stops partway through.
Fix: There is no official minimum VRAM table. Try the component or sequential memory mode in the Gradio app, reduce the image size toward 0.25M pixels, set text_device to move the text encoder, or use the hosted generator. BF16 weights are about 27.2 GB derived from published file sizes; the official Gradio app enables offload below 40 GiB.
LoRA or patching errors
Symptom: The LoRA loads but has no effect, or compilation fails after patching.
Fix: Use the built-in ComfyUI LoRA loader for LoRAs with matching model keys. For SLG or block patches, use eager execution: TorchCompileModel filters transformer-option guards. The official guide does not publish a LoRA training script or hyperparameters; it does recommend freezing the text encoder if you train.
Next
Related MossImage guides
FAQ
ComfyUI questions
The five issues that come up most often.
Does this workflow work with MOSS-Image-SFT?
Yes. The graph is the same. Point the MOSS-Image HF Loader model_path at the downloaded SFT directory instead of the Base directory. The model_path must be a local folder that contains transformer/, text_encoder/, tokenizer/ and vae/.
Why does my ComfyUI output differ from the web generator?
ComfyUI uses native sampling and its own scheduler. The official ComfyUI README says its scheduler does not use the standalone pipeline training-grid snapping, so identical seeds and parameters do not guarantee identical images. Prompt expansion, safety filtering and image resizing on a hosted service can also change the result.
How much VRAM does MOSS-Image need?
There is no official minimum VRAM table. The BF16 weights are roughly 27.2 GB derived from the published file sizes, and the official Gradio app enables offload below 40 GiB. On a smaller card, use the component or sequential memory mode, reduce the image size, or run the hosted generator instead.
Can I use a LoRA with this workflow?
Yes, for LoRAs whose model keys match. Use the built-in ComfyUI LoRA loader. The official guide says MOSS-Image-Base is intended for LoRA training and recommends freezing the text encoder, but it does not publish a training script or hyperparameters. For SLG or block patches, use eager execution because TorchCompileModel filters transformer-option guards.
Where do I download the model weights?
MOSS-Image-Base and MOSS-Image-SFT are published by the OpenMOSS Team on Hugging Face and ModelScope. The ComfyUI loader reads a local Hugging Face or Diffusers directory; it does not download from a Hub repository ID.