Pictures from the same card
The card that runs your coding agent can also draw. ignis serves
Qwen-Image-2.1-Turbo on POST /v1/images/generations and
POST /v1/images/edits, the routes OpenAI’s SDKs already speak, so a client that
makes pictures needs no second server. A 2048x2048 image takes 7.87 s end to
end on the 5090, streamed through the Playground’s own calls.
How it works
Section titled “How it works”The image model makes pixels, so lanes, KV and generation caps do not apply to
it. It is reached by a switch from a text model: the card holds one model at a
time, so the 27B unloads and the image model loads (see
Models that come and go). The kernels are ignis’s
own for the 5090: an FP8 W8A8 GEMM and an 8-bit attention for the 8-step
denoising loop, a VAE decode, and a condition encoder for edit inputs. An edit
takes one to ten PNG, JPEG or WebP images, and stream: true sends progress
events by phase (enhancing, switching, loading, encoding, denoising,
decoding).
After the weights, the VRAM that is left sets a condition budget of prompt
and input-image tokens; larger inputs are scaled down, not refused.
prompt_enhancement has the 27B rewrite the prompt first with Qwen’s own system
prompts; with the 27B already loaded, the rewrite runs first and the server
switches once. The Playground’s Image studio
adds image sessions, marks drawn on a picture, and a make_image tool the chat
can call: it switches to the image model, makes the pictures and switches back.
The pictures it makes land in the chat’s workspace as files, and the model
reads them back with read_file when the loaded model has vision
(tools and agents).

The numbers
Section titled “The numbers”| Figure | Measured on | Source |
|---|---|---|
| The denoising loop: 1.20 s at 1024x1024 (145-152 ms a step) and 6.11 s at 2048x2048 (747-802 ms a step); whole jobs 1.37 s and 6.79 s | in-process, 8 steps, RTX 5090 | Image model on the 5090 |
| Edit at 2048x2048: 7.62 s from one image, 10.72 s from four | in-process | same |
| The FP8 GEMM runs at 67-73% of the literature’s FP8 bar (498-507 TFLOPS against 690-740); the 8-bit attention at 88-93% of its bar | RTX 5090 | same, and Image model kernels |
| Served end to end, streamed: a 2048x2048 generation 7.87 s (denoising 5.91 s of it); a 2-image edit 9.48 s | the Playground’s own calls, RTX 5090 | Image serving spec, as built, the live run of 2026-10-14 |
| Switching 27B to the image model 10.0 s, and back 11.3 s | same run | same |
See it, control it
Section titled “See it, control it”- Routes:
POST /v1/images/generationsandPOST /v1/images/edits, model idignis-image-2.1-turbo, fetched withignis-server model download ignis-image-2.1-turbo. - Sizes:
image.sizes, every side a multiple of 32. - Queue and inputs:
image.queue_depth,image.max_nandimage.max_condition_images. - Prompt rewrite:
image.prompt_enhancement. - Metrics:
ignis_image_jobs_total(by outcome),ignis_image_images_total,ignis_image_job_duration_seconds,ignis_image_job_phase_seconds_totalandignis_image_queue_jobs, in the metrics. - Playground: the Image studio; image sessions are stored in the browser.
Limits
Section titled “Limits”- One image job runs at a time;
nimages are made one after another. - The response is an RGBA 8-bit PNG as
b64_json.response_format: urland otheroutput_formatvalues are a400. - The image model is never co-resident with a text model: a chat while it is loaded pays a switch of 10-11 s, and the switch drops the old load’s retained state.
Read more
Section titled “Read more”- Images: routes, sizes, the licence, streaming and the condition budget.
- Models that come and go: the switch an image job rides on.
- Image studio: the Playground’s image sessions.
