Image generation · MiniMax-H3-Image 33B · diffusers · GB10 · 88 GB VRAM
published by @dh7 on
m64 m64_a970a7a75864MiniMax-H3-Image text-to-image on GB10 (diffusers). MiniMax's 33B open-weight image model (MiniMax-H3 family, guidance-distilled, 6 steps) with its Qwen3-VL-32B text encoder cut to the 51 layers it uses and quantized to 4-bit, at 2048x2048. MiniMax-H3-Image Community License: not licensed in the EU, UK, US or South Korea. Runs fully offline.
Lineage
- parent
- none declared
- derived from
- no published capsule shares half its files
- children
- none
Files
6 files- human/
- index.html4.1 KB
- AGENT.md2.7 KB
- capsule.toml1.4 KB
- Dockerfile1.7 KB
- minimax_h3_image_server.py7.9 KB
- start.shexec1.2 KB
AGENT.md
MiniMax-H3-Image 33B text-to-image
This service turns a text prompt into a 2048x2048 PNG. It runs MiniMax's MiniMax-H3-Image (33B DiT, released November 2026 under the MiniMax-H3-Image Community License, which excludes the EU, UK, US and South Korea) through diffusers 0.43's modular pipeline on one GPU, with its Qwen3-VL-32B text encoder cut to the 51 layers the pipeline reads and quantized to 4-bit (nf4) so both fit in the GB10's memory. Prompts are used verbatim: long, complete descriptions work best. Generation settings are
fixed by this capsule (size "2048x2048", num_inference_steps 6). You send a prompt and, optionally, a seed.
Base URL: {{BASE_URL}}
Routes
POST /v1/images/generations
OpenAI-style image generation. Returns one image as base64 PNG.
curl -s {{BASE_URL}}/v1/images/generations {{AUTH}} \
-H "Content-Type: application/json" \
-d '{"prompt": "a lighthouse at sunset", "seed": 42}' \
| python3 -c 'import sys,json,base64; d=json.load(sys.stdin); open("out.png","wb").write(base64.b64decode(d["data"][0]["b64_json"])); print(d["params_used"])'
Request fields:
prompt(string, required): what to draw.seed(integer >= 0, optional): the random seed. The same prompt and seed give the same image. Leave it out for a random one.
Also accepted, for stock OpenAI clients: model (any string), n (must be 1),
response_format (must be "b64_json"), user, and size if it is "2048x2048". Any other
field, or another value for a fixed one, is rejected with 400.
The response is {"created": ..., "data": [{"b64_json": "<PNG, base64>"}], "params_used": {...}}.
The OpenAI Python SDK works too:
from openai import OpenAI
client = OpenAI(base_url="{{BASE_URL}}/v1", api_key="unused")
r = client.images.generate(model="minimax-h3-image", prompt="a lighthouse at sunset",
response_format="b64_json", extra_body={"seed": 7})
GET /v1/config
The server's settings and what they mean.
GET /status
Where the service is in its start-up: phase is one of building, downloading,
starting, loading, ready, error, with eta_seconds.
Timings and concurrency
- First start: builds a container image and downloads about 135 GB of weights. After that, loading takes about 12 minutes (budgeted at 2400 s).
- Each image takes about 30 seconds (2048x2048, 6 steps) on a DGX Spark (GB10).
- Send requests one at a time, and allow at least 2 minutes per request in your client timeout.
Errors
503withRetry-Afterwhile the service is still starting.400: a field was rejected; the body'serrorsays which and why.422:promptmissing or a field of the wrong type.5xxotherwise: retry once, then checkGET /status.
capsule.toml
schema = "m64/capsule@1"description = "MiniMax-H3-Image text-to-image on GB10 (diffusers). MiniMax's 33B open-weight image model (MiniMax-H3 family, guidance-distilled, 6 steps) with its Qwen3-VL-32B text encoder cut to the 51 layers it uses and quantized to 4-bit, at 2048x2048. MiniMax-H3-Image Community License: not licensed in the EU, UK, US or South Korea. Runs fully offline."kinds = ["image.generate"]authors = ["dh7"]license = "other"[hardware]platform = "linux-aarch64"gpu = "NVIDIA GB10"gpu_count = 1vram_gb = 88driver = ">=580"disk_gb = 140[runtime]sandbox = "container"# No image: the Dockerfile builds on nvcr.io/nvidia/pytorch:25.09-py3 + diffusers 0.41.0, pinned by digest.gpu = trueshm_gb = 8internal_port = 8000health = "/health"expected_load_seconds = 2400model_name = "minimax-h3-image"user = "65534:65534"[[artifacts]]type = "hf"repo = "MiniMaxAI/MiniMax-H3-Image"revision = "5f90473023975e6271b0ed1dd84c4e88e4bbc6d3"include = [ ".gitattributes", "LICENSE", "README.md", "model_index.json", "modular_model_index.json", "processor/*", "scheduler/*", "text_encoder/*", "tokenizer/*", "transformer_diffusers/*", "vae_diffusers/*",]mount = "/weights/minimax-h3-image"# The server's own defaults (minimax_h3_image_server.py), which every request gets: callers can only send# prompt and seed. Returned as params_used.[params]size = "2048x2048"num_inference_steps = 6[routes]extra = ["/v1/config"]