# 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. ```bash 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": ""}], "params_used": {...}}`. The OpenAI Python SDK works too: ```python 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 - `503` with `Retry-After` while the service is still starting. - `400`: a field was rejected; the body's `error` says which and why. - `422`: `prompt` missing or a field of the wrong type. - `5xx` otherwise: retry once, then check `GET /status`.