MOSS-Image ComfyUI: Which Workflow and Prompt?
The MOSS-Image page still points at a ComfyUI Manager plugin. The repo README points at native loaders on ComfyUI master. A prompt is a sentence or JSON, and the two graphs do not share a shift node.
MOSS-Image in ComfyUI is two graphs, and the prompt is either a sentence or a JSON note of where each word and object sits. MOSS-Image is OpenMOSS's open image model. This page did not install ComfyUI or generate a picture.
Two install notes, and they disagree
The project page still says to search for MOSS-Image in ComfyUI Manager, and that folding the support into the official ComfyUI repository is in progress. The ComfyUI README in the same repository tells you to skip that plugin.
That README says pull request 17095, titled "feat: Add MOSS-image support," was merged on October 16, 2026. It tells you to use ComfyUI master or nightly at commit e087d8f6 or later, then install that checkout's requirements. It also says that as of October 19, 2026, release v0.41.3 does not include the support. On that path, no MOSS-Image plugin is required.
The native weights are the files on Comfy-Org/MOSS-Image. Put a diffusion file in models/diffusion_models/, a text encoder in models/text_encoders/, and a VAE in models/vae/. The loaders named there are Load Diffusion Model, CLIP Loader with type moss_image, and Load VAE. The README says the built-in model defaults to shift 5 and includes a MOSS-Image Layout Prompt node.
On that listing, the bf16 diffusion file is about 10.2 GB and the bf16 text encoder, qwen3.5_9b_bf16.safetensors, is about 19.3 GB. Int8 copies and a 4-bit text encoder are listed too. Those figures are file sizes, not a video-memory requirement, and the card does not say the smaller files match the bf16 pictures. The VAE files are named flux2-vae.safetensors and flux2-vae_small.safetensors.
Do not keep an old plugin graph and only swap the model loader. The README says the native model uses a different timestep multiplier, so the plugin's ModelSamplingSD3 node should not come across unchanged. To change shift on the native model, it says to use ModelSamplingAuraFlow with multiplier 1.
The plugin graph, if you still open that file
The repository plugin remains for a local Hugging Face folder, or for a workflow you already saved. Copy comfyui/moss-image/ into ComfyUI/custom_nodes/moss-image/ and restart, or run the repo's comfyui/install.py with the path to your ComfyUI checkout. Drag in moss-image.json. The loader does not download from a Hub id. Point MOSS-Image HF Loader at a local directory that contains transformer/, text_encoder/, tokenizer/, and vae/.
The graph in that file, as read on October 22, 2026, is set like this:
| Node | Setting in the file |
|---|---|
| MOSS-Image HF Loader | Path placeholder /path/to/MOSS-Image-Base. Weight dtype and text device stay on default. It outputs the model, the CLIP, and the VAE |
| Positive text encode | The refrigerator note quoted below |
| Negative text encode | Empty |
| Empty Flux 2 latent | 1024 by 1024, batch 1 |
| ModelSamplingSD3 | Shift 5. The node title in the file is "Official Flow sigma shift" |
| Simple skip-layer guidance | Single layer 22, double layers empty, from the start of sampling to the end |
| KSampler | Seed 42, 50 steps, CFG 3, Euler, scheduler sgm_uniform, denoise 1 |
| VAE decode, then save | Filename prefix moss-image |
The README says to keep ModelSamplingSD3 before the skip-layer node in this plugin graph, so the schedule and the skip thresholds share one shift. That is the opposite of the native instruction above. Clearing the single-layer box turns the skip off.
Text encoding in this plugin stops at 4,096 tokens. The same README says matching seeds and settings still do not guarantee the same picture as the standalone Python pipeline, because ComfyUI's scheduler does not snap to that pipeline's training grid.
How the prompt is written
The user guide says the base model takes a sentence, a tag list, or a JSON layout. It recommends English, because that is where most of the training text sits, and it also accepts Chinese.
For tags, it wants this order: quality, score, meta, year, character, series, artist, then general tags. The example it prints starts best quality, highres, hatsune miku, vocaloid.
For words that have to appear in the picture, the guide says the model can break lines by itself and often will not break them where you wanted. Put \n, or a real line break, in the prompt. The positive box in the plugin graph is their refrigerator note: a wide view of a refrigerator beside a kitchen counter with a fruit bowl, and a handwritten Chinese sticky note that lists milk, eggs, and bread, with the line breaks already inside the quoted note.
The negative box in that same file is empty. The project page also says the Python API leaves the negative prompt empty. The user guide, from the authors' own tests, recommends nsfw, worst quality, bad anatomy, watermark, jpeg artifact. The file you drag in follows the empty negative, not that tag list.
The figure above is OpenMOSS's layout diagram, from the project page. The left half is a boxed document. The right half walks from a sentence, to labeled boxes, to a small scene the figure itself calls a layout-guided image. That scene is theirs. It is not a picture made for this page, and it is not the travel-poster JSON below.
A layout prompt is JSON in the same text box as a sentence. Their travel-poster example asks for a cream poster, the word EXPLORE, and a blue mountain. Boxes are pixels measured from the center of the canvas, in the order top, left, bottom, right. The guide names that yxyx and abs_centralized. On a 1024 canvas, each edge sits at -512 or 512. The box drawing on the project page is the input specification. It is not the picture the model returned.
The plugin graph's latent is 1024 by 1024. The project page's Python call for the refrigerator note uses 1456 by 1456. The prompt-enhancer note says to generate at the same width and height you used when you drafted the boxes. Pasting the 1024 poster boxes into a 1456 latent is a different instruction from the one in the example.
Sampling sits next to the wording. The guide wants at least 50 steps. CFG defaults to 3, which it calls enough for a long prompt. For a short prompt it says to raise CFG, inside a range of 3 to 6. Shift defaults to 5. Euler is the sampler it recommends. Width and height should be positive multiples of 16. It prefers canvases around 1 million, 1.5 million, or 2 million pixels, and says the model can be pushed from a 512 square toward about 4 million pixels. Turning skip-layer guidance off, it says, makes the picture look very realistic and can also collapse some details. The layers it names are 22, 24, and 26. The plugin file uses 22.
The collage above is their announcement image. The sentence printed on it, that the whole picture including that sentence was generated in one pass, is their caption.
The skill that writes the prompt, and then stops
The prompt enhancer on the project page is a skill for an agent. It turns an idea into a caption or a layout JSON. The page says the bundled script converts a pixel draft into compact JSON, and that it does not call an image service. You paste the result into the positive prompt. The page says the skill is meant for GPT-6-family agents that can use local files and Python. The user guide calls this the training-free helper, and says a second helper, a fine-tuned open model, is still to come. That fine-tune is not a node in either graph above.
The Comfy-Org listing also includes moss_image_color_depth_control.safetensors under loras. The card points that file at a darask0 repository, not at the example graph. This page did not load it.
MOSS-Image is the listing for the weights, the Base and SFT checkpoints, and the license notes. The two ComfyUI graphs and the prompt rules above are the part that listing does not walk through node by node.