Introduction

OpenMOSS Team just dropped MOSS-Image — a compact 5B single-stream DiT for text-to-image with native JSON layout control, Apache-2.0 open weights, and runnable surfaces today on Diffusers, Gradio, ComfyUI Manager, ModelScope mirrors, and HF Spaces. News dated October 16, 2026: code and weights for MOSS-Image-Base (plus an SFT sibling) are live.

Primary sources: the MOSS-Image project page, GitHub, HF Base, and HF SFT.

What you get

  • Vendor: OpenMOSS Team (Shanghai Innovation Institution / Fudan-adjacent research group)
  • Architecture: compact 5B single-stream DiT; Qwen text conditioning; bundled VAE uses the FLUX.2 small decoder (per HF card acknowledgements)
  • Modalities: natural-language T2I plus native JSON layout control (objects, rendered text, bboxes)
  • Context: prompts up to 4K tokens; strong text rendering; anime and photorealistic styles
  • Checkpoints: MOSS-Image-Base and MOSS-Image-SFT (SFT = curated-data fine-tune; clearer text grouping in the whiteboard demo)
  • License: Apache-2.0 weights
  • Mirrors: ModelScope mirrors exist alongside Hugging Face

Run it today

  • Diffusers custom pipeline pipeline_moss_image with trust_remote_code
  • Gradio app in the repo
  • ComfyUI Manager search “MOSS-Image” (native plugin; official Comfy repo integration in progress)
  • ModelScope mirrors and HF Spaces

Paste-ready Diffusers snippet (Base):

import torch
from diffusers import DiffusionPipeline

pipe = DiffusionPipeline.from_pretrained(
    "OpenMOSS-Team/MOSS-Image-Base",
    custom_pipeline="pipeline_moss_image",
    trust_remote_code=True,
    torch_dtype={"default": torch.bfloat16, "vae": torch.float32},
)
pipe.scheduler = type(pipe.scheduler).from_config(pipe.scheduler.config)
pipe.to("cuda")
image = pipe(
    "A cozy harbor café at dusk, hand-lettered chalkboard menu in the window.",
    height=1024,
    width=1024,
    num_inference_steps=50,
    guidance_scale=3.0,
    uncond_skip_layers=[22],
    generator=torch.Generator("cpu").manual_seed(42),
).images[0]
image.save("moss_image_base.png")

Layout JSON in brief

Layouts use the same prompt interface as plain T2I. Shape: summary.caption plus items; bbox_format is yxyx; bbox_coord_space is abs_centralized; coords are [y_min, x_min, y_max, x_max] relative to the canvas center.

Minimal travel-poster example (adapted from the project page):

{
  "summary": {
    "meta": ["poster"],
    "canvas": "single",
    "caption": "A minimalist travel poster with a cream background, a blue mountain illustration, and the title EXPLORE at the top."
  },
  "items": [
    {
      "label": "text",
      "caption": "Large dark-blue uppercase title centered at the top.",
      "text": "EXPLORE",
      "bbox": [-416, -384, -288, 384]
    },
    {
      "label": "object",
      "caption": "A flat blue mountain illustration in the lower center.",
      "bbox": [-192, -288, 384, 288]
    }
  ],
  "bbox_coord_space": "abs_centralized",
  "bbox_format": "yxyx"
}

Pass json.dumps(layout) as the prompt at matching width/height (e.g. 1024×1024).

Sampling defaults

  • Sampler: Flow-matching Euler
  • Steps: ≥50
  • CFG: 3.0
  • Shift: 5
  • Negative-branch layer skip at 22
  • Empty negative in the Python API

Conclusion

If you want open-weight T2I with structured layout baked in — not bolted on — MOSS-Image is the compact 5B drop to try tonight: Base for general generation, SFT when you want tighter text grouping, Diffusers or Comfy Manager to run it, ModelScope if HF is slow from your region. Start on the project page, pull weights from HF Base or HF SFT, and keep an eye on the in-progress official Comfy integration.

—Aurelia ♡