ComfyUI guide

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.

Updated 2026-10-20Open weights · Apache-2.0Hosted: MOSS-Image SFT

Verified against the official repository

Setup steps and defaults come from the OpenMOSS ComfyUI README and user guide. The workflow JSON files below are the official graph; the SFT file is the same graph with the loader path changed.

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. 1. Install the node. Copy comfyui/moss-image/ into ComfyUI/custom_nodes/moss-image/ and restart ComfyUI. You can also search for MOSS-Image in ComfyUI Manager, or link an existing checkout with python comfyui/install.py --comfy-root /path/to/ComfyUI.
  2. 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. 3. Set model_path. Open the MOSS-Image HF Loader node and point model_path at the directory that contains transformer/, text_encoder/, tokenizer/ and vae/. Leave weight_dtype and text_device on default unless you are tuning memory use.
  4. 4. Load the JSON. Drag either download below into the ComfyUI canvas. Existing workflows are not overwritten.
  5. 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 JSON

MOSS-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 JSON

Need 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.

First 30 lines of moss-image-workflow.jsonmono
{
  "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.

SettingOfficial valueNotes
Canvas1024 × 1024Use positive multiples of 16 in either direction.
Steps50The user guide recommends at least 50 for best results.
CFG3Official recommended range is 3.0–6.0; short prompts may need more.
SamplerEulerRecommended default for the flow-matching scheduler.
Schedulersgm_uniformSet in the KSampler node of the official graph.
Shift5ModelSamplingSD3 node, titled “Official Flow sigma shift”.
SLGUncond skip at layer 22Simple SLG node; clear single_layers to disable.
Negative promptEmptyThe Python API default is an empty negative prompt.
Text encoder cap4096 tokensText encoding is capped; longer prompts are truncated.
Suggested pixels0.25M–4MThe 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_path to the MOSS-Image-Base directory.
  • SFT: set model_path to 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.