On 2026-08-31, Ant Group's InclusionAI open-sourced LLaDA-Image, a 6B-parameter unified image generation and editing model family. It ships weights, inference code, and the training recipe together. The real win for technical teams is control: data stays on premises and the model deploys privately, which closed-source APIs cannot offer in finance and enterprise compliance scenarios.
This is a hands-on SOP: get LLaDA-Image running from scratch and push it to production. Every install command, model name, inference snippet, and parameter is taken verbatim from the official README (verified 2026-09-09); nothing is invented. Read it with the companion LLaDA-Image open-source resource page. Two more reads: ChatGPT Images 2.5 hotspot and open vs closed image model review.
Boundary first: the README gives no VRAM threshold, no minimum hardware spec, and no exact weight disk size. Such numbers are not invented here; they are marked "check the official repo" with a self-check. The license field is null (no LICENSE file), so verify manually before commercial use. This is in the pitfalls and FAQ.
Environment preparation: pin the dependencies
The README pins the verified environment: Python 3.11, PyTorch 2.8, Transformers 4.57.6, Diffusers 0.39.0. These are the tested combination; align to them, do not gamble on other versions.
Clone and isolate:
# Clone the official repository
git clone https://github.com/inclusionAI/LLaDA-Image.git
cd LLaDA-Image
# Create a clean conda environment to avoid polluting the system Python
conda create -n llada-image python=3.11 -y
conda activate llada-image
# Install dependencies; requirements.txt includes diffusers and related components
pip install -r requirements.txtThis gives you the src package (inference code under src, hence from src import LLaDAImagePipeline) and the pinned dependencies.
Domestic download (important): weights are on both HuggingFace and ModelScope under the same four names. ModelScope is the official domestic channel per the README, so prefer it. The README gives no mirror command for HuggingFace; the line below is community practice, NOT verbatim, so check official docs before use.
# Community practice, not from the README: accelerate HuggingFace downloads via a mirror endpoint
# Use whatever mirror is reachable on your network; the line below is an example only
export HF_ENDPOINT=https://hf-mirror.comDiscipline: align versions, isolate the environment, prefer ModelScope domestically. Skip the env variable if HuggingFace is reachable directly.
Acquiring weights: choose among four variants
Four variants from the README Model Zoo table map to your hardware and speed needs:
| Weight | Position | Steps | HuggingFace | ModelScope |
|---|---|---|---|---|
| LLaDA-Image | Base, high-fidelity text-to-image and instruction editing | 50 | inclusionAI/LLaDA-Image (BF16), LLaDA-Image-FP8 | same four names |
| LLaDA-Image-Turbo | Distilled, fast generation and editing | 4 | inclusionAI/LLaDA-Image-Turbo (BF16), LLaDA-Image-Turbo-FP8 | same four names |
Selection:
- Quality and editing fidelity: Base (LLaDA-Image), 50 steps.
- Speed and batch throughput: Turbo (LLaDA-Image-Turbo), 4 steps, Twin-DMD distilled.
- Tight VRAM: both tiers have FP8 variants (suffix -FP8) that cut memory, but FP8 needs hardware with FP8 inference support; the README lists no specific GPU, so check the official source.
- Domestic download: all four mirror on ModelScope under the same names; switch the
inclusionAI/prefix, no proxy needed.
Two reminders. The README does NOT state weight disk size, so confirm free disk before downloading and reserve more than intuition suggests. FP8 weights are not "just lower precision"; they depend on the framework and hardware FP8 path, and older cards may fail or fall back silently (pitfall three).
Generating the first image: minimal Base and Turbo
The inference code is built on Diffusers; the core class is LLaDAImagePipeline. Both snippets below are verbatim from the README. Change no parameter; run first, then tune.
Base, 50 steps (high fidelity):
import torch
from src import LLaDAImagePipeline
# Load the pipeline. The model is downloaded from Hugging Face on first use.
pipe = LLaDAImagePipeline.from_pretrained(
"inclusionAI/LLaDA-Image",
torch_dtype=torch.bfloat16,
device="cuda",
)
# Generate an image.
prompt = (
"A cinematic photograph of a red fox standing in fresh snow, "
"soft winter light, detailed fur, shallow depth of field"
)
negative_prompt = ""
image = pipe(
prompt=prompt,
negative_prompt=negative_prompt,
generation_mode="text",
height=1024,
width=1024,
num_inference_steps=50,
guidance_scale=5.0,
generator=torch.Generator("cuda").manual_seed(42),
).images[0]
image.save("llada-image-base.png")Turbo, 4 steps (fast output):
import torch
from src import LLaDAImagePipeline
# Load the distilled Turbo checkpoint.
pipe = LLaDAImagePipeline.from_pretrained(
"inclusionAI/LLaDA-Image-Turbo",
torch_dtype=torch.bfloat16,
device="cuda",
)
prompt = "A quiet observatory above a sea of clouds at sunrise, golden light, wide-angle photograph"
image = pipe(
prompt=prompt,
generation_mode="text",
height=1024,
width=1024,
num_inference_steps=4,
guidance_scale=1.0,
generator=torch.Generator("cuda").manual_seed(42),
).images[0]
image.save("llada-image-turbo.png")Size constraints: the README requires height and width divisible by 16 for text-to-image and VQ generation, and by 32 for editing. The commands use 1024x1024 (divisible by both). Check divisibility before changing resolution. The minimum usable resolution is not given; when VRAM is short, try 512x512 or 768x768 first, per the official source.
Turbo tip: set stochastic_sampling to false in scheduler/scheduler_config.json for possibly sharper details. Optional, tuning only.
Advanced: editing, text rendering, ComfyUI, VRAM
Running text-to-image is step one. The "unified" weight covers several tasks:
Reference-image editing (editing mode) needs a reference image and an edit instruction:
from diffusers.utils import load_image
reference_image = load_image("/path/to/input.png")
image = pipe(
prompt="Turn it into a watercolor painting",
image=reference_image,
generation_mode="editing",
height=1024,
width=1024,
num_inference_steps=50, # Use 4 for LLaDA-Image-Turbo.
guidance_scale=5.0, # Use 1.0 for few-step inference.
generator=torch.Generator("cuda").manual_seed(43),
).images[0]VQ-conditioned generation (vq mode) uses the LLaDA2 model to produce image VQ tokens, embedded by SigVQ before diffusion. Do not pass an input image in VQ mode:
image = pipe(
prompt="A quiet observatory above a sea of clouds at sunrise",
generation_mode="vq",
height=1024,
width=1024,
num_inference_steps=50, # Use 4 for LLaDA-Image-Turbo.
guidance_scale=5.0, # Use 1.0 for few-step inference.
generator=torch.Generator("cuda").manual_seed(42),
).images[0]Chinese and English text rendering: the README says the model supports Chinese-English text rendering (Qwen-Image-Bench 53.53 English, 53.38 Chinese), but gives no verbatim prompt format; the following is engineering experience. Write the text as a standalone phrase and state the image "contains text / a poster title"; do not bury it in a long scene. For Chinese, highlight with quotes or brackets, e.g. "the center shows Chinese text: AI Neican". Treat the effect as empirical.
ComfyUI: since 2026-09-07, community support is on HuggingFace at realrebelai/LLaDa-Image_ComfyUI and realrebelai/LLaDa-Image-Turbo_ComfyUI (Turbo includes an FB8 version). Suited to teams with node workflows; wire weights into nodes, no Python script needed.
Batch script idea: wrap single-image inference in a function, loop a prompt list, use generator=torch.Generator("cuda").manual_seed(i) for distinct seeds, name outputs by hash or index. For a service, keep the pipeline resident and feed a request queue instead of re-running from_pretrained.
VRAM-short strategy: the README offers two paths, FP8 weights (lower memory) or lower resolution (still divisible). How low is not stated; probe with the smallest divisible resolution, then scale up. Do not change parameters beyond torch_dtype just to save memory.
Productionizing: from demo to service
Three layers beyond a local image:
- Batch queue: a task queue (Redis plus worker) enqueues prompts; inference processes consume them. Load the pipeline once. Turbo's 4 steps suit high concurrency; Base's 50 steps suit quality jobs.
- Cost monitoring: local "cost" is GPU compute and power. Compute per-image cost as average time times GPU-hour price. Record
num_inference_steps, resolution, and elapsed time per image; build a daily cost curve so "free open source" does not hide real spend. - Result storage: write images to object storage or local disk; record metadata (prompt, seed, steps, resolution, tier, elapsed time) to a database for retrieval, review, and deduplication. Required for A/B testing and prompt-template accumulation.
Sizing concurrency before you buy hardware
A single pipeline instance is a poor unit of capacity planning, because throughput depends on three variables you control: the checkpoint tier, the step count, and the output resolution. Base at 50 steps and Turbo at 4 steps are not the same product at different speeds — they occupy different positions on the latency-versus-fidelity curve, so treat them as two separate services with separate queues rather than one service with a flag. Keep a warm process alive between jobs: loading a 6B checkpoint costs far more wall-clock time than a Turbo inference run, so a serverless pattern that reloads weights per request will spend most of its life downloading its own model.
Run one worker per accelerator where memory allows, then scale by adding workers rather than by raising per-worker concurrency, since batched diffusion requests compete for the same VRAM and fail late instead of fast. Put a queue depth limit in front of the workers and reject with a retry-after hint instead of accepting unbounded backlog; image jobs are bursty by nature, and a queue that never rejects will simply convert a traffic spike into a latency incident.
Failure modes and graceful degradation
Design for partial failure. When memory pressure appears, degrade in this order: drop resolution to the next supported step, switch the job from Base to Turbo, then defer to a retry queue. Do not silently change the seed, because that breaks reproducibility for anyone comparing prompts across runs. Log the tier and step count actually used, not the tier requested, otherwise your cost data will describe a service you never ran.
Finally, keep an escape hatch. If a self-hosted tier cannot meet a deadline or a quality bar, routing the same job to a hosted API should be a configuration change, not a rewrite. The point of self-hosting is leverage, not lock-in to your own GPU rack, and the ability to fail over to a paid endpoint is what makes an open-weights deployment safe to promise to a customer.
Pitfalls
- License not declared: the GitHub license field is null, no LICENSE in root. Before commercial use, redistribution, or shipping a fine-tune, verify the license on the HuggingFace and ModelScope model pages and archive it. See FAQ Q1.
- Weight size and disk: the README states no disk footprint, so confirm free disk before downloading; FP8 is smaller but BF16 is not light.
- FP8 needs matching hardware: FP8 weights depend on the framework and hardware FP8 path; older cards may fail or fall back, hurting quality and memory. Supported GPUs are not listed; check the official source.
- Steps versus quality: Base 50 steps and Turbo 4 steps trade quality for speed, not just time. Use Turbo for drafts and watermarks; Base for retouching and publication. Do not default everything to Turbo.
- Chinese text prompt format: the model supports Chinese rendering, but the text must be a standalone phrase; burying it causes dropped or wrong characters. Empirical; see the advanced section.
- Domestic download via ModelScope: when HuggingFace is unstable, the four variants mirror on ModelScope under the same names; switch first instead of retrying HuggingFace.
Launch self-check list (10 items)
- Python 3.11, PyTorch 2.8, Transformers 4.57.6, Diffusers 0.39.0 aligned.
- Isolated conda env
llada-imageactivated; deps fromrequirements.txt. - Weight tier chosen by quality or speed (Base or Turbo, BF16 or FP8).
- Domestic download switched to ModelScope same-name repo, or a reachable mirror set.
- Free disk confirmed for the chosen weights (size not in README, self-checked).
- Resolution satisfies divisibility (text/VQ by 16, editing by 32).
- First image saved (llada-image-base.png or llada-image-turbo.png).
- VRAM measured (smallest divisible resolution tried, FP8 evaluated).
- License verified and archived on HuggingFace and ModelScope model pages.
- Three production layers (queue, cost, storage) in place or scheduled.
FAQ
Q1: What is the license of LLaDA-Image? Can I use it commercially? A1: As of 2026-09-09 the GitHub license field is null and no LICENSE file is in root; the README gives no terms. Before commercial use, redistribution, or shipping a fine-tune, verify the license on the HuggingFace (inclusionAI/LLaDA-Image and others) and ModelScope pages, confirm commercial permission, attribution, and scale thresholds, and archive it. Do not assume open source means free commercial use.
Q2: What GPU is the minimum for local deployment? What is the VRAM threshold? A2: The README gives no minimum spec or VRAM baseline, so this article does not estimate. Run the smallest loop at 1024x1024, Base 50 steps, to measure VRAM, then try Turbo 4 steps and FP8 in turn under real load. FP8 cuts VRAM but needs hardware support; specific GPUs are per the official source.
Q3: How do I choose between Base and Turbo?
A3: For quality, editing fidelity, and publication, choose Base (50 steps). For speed, batch drafts, and low cost, choose Turbo (4 steps, Twin-DMD distilled). Both share the inference code; switching only changes the model name in from_pretrained and the steps and guidance parameters.
Q4: How do I use the FP8 version? What hardware does it need?
A4: Change the model name in from_pretrained to inclusionAI/LLaDA-Image-FP8 or inclusionAI/LLaDA-Image-Turbo-FP8; other parameters stay. FP8 depends on the hardware and framework FP8 path; older cards may fail or fall back. Supported GPUs are not listed; check the official source. Memory gain is per your measurement.
Q5: How do I write prompts for Chinese text rendering? Is there ComfyUI support?
A5: Write the text as a standalone phrase and state the image contains text or a poster title; for Chinese, highlight with quotes or brackets, e.g. "the center shows Chinese text: AI Neican". The format is empirical. ComfyUI support has been on HuggingFace since 2026-09-07 at realrebelai/LLaDa-Image_ComfyUI and realrebelai/LLaDa-Image-Turbo_ComfyUI (Turbo includes FB8).
References
- Official repo (verified 2026-09-09): https://github.com/inclusionAI/LLaDA-Image -- environment, four weights, Base/Turbo code, VQ and editing modes, divisibility, Turbo stochastic_sampling tip
- HuggingFace weights: https://huggingface.co/inclusionAI/LLaDA-Image and -FP8 / -Turbo / -Turbo-FP8
- ModelScope weights: https://modelscope.cn/models/inclusionAI/LLaDA-Image and three same-name variants (domestic channel)
- ComfyUI community: https://huggingface.co/realrebelai/LLaDa-Image_ComfyUI and https://huggingface.co/realrebelai/LLaDa-Image-Turbo_ComfyUI
- Technical report arXiv:2609.03796 -- training recipe and architecture
- Related reads: LLaDA-Image open-source resource page, ChatGPT Images 2.5 hotspot, open vs closed image model review
All commands and parameters are taken verbatim from the official README (2026-09-09 snapshot) and were not stress-tested on hardware. VRAM thresholds, minimum hardware, weight disk size, FP8 supported GPUs, and the Chinese text prompt format are marked not collected or from engineering experience; check the official repo and your measurements. The license must be verified manually. Not an official promotion, not investment advice.