Z-Image-Turbo (BudgetPixel)
The hosted shortcut
- images
This is Z-Image-Turbo - the model that killed Flux 2's launch hype by being a 6B model that runs in ~30 seconds on a 3060 - with one crucial difference: you're not running it at all. This node is a hosted-API wrapper. Tongyi-MAI's distilled Turbo lives on BudgetPixel's servers, and this node hands your prompt over, waits, and downloads the finished image back into your graph as a normal IMAGE. No model download, no VRAM, no sampler tuning. The name is not a lie exactly, but it's the whole local workflow, outsourced.
Why reach for it? Because you want the speed of Turbo's 9 inference steps without the 6B checkpoint, the quantized text encoder, and the shift-7 ModelSamplingAuraFlow rabbit hole sitting in your node list. It's the same Z-Image-Turbo that's become the community's fast-photorealism default, rendered as a one-node graph. The catch: it bills 15 BudgetPixel credits per generation, it needs an API key from a paid plan, and you give up every knob the local workflow has - no sampler, no CFG, no free resolution, no LoRAs. If you already run Turbo locally, this is a convenience, not an upgrade.
How it works
Under the hood this is the same "one node per model, built from a schema snapshot" pattern as Replicate's official pack. The node POSTs your prompt to /images/z-image-turbo, then polls the status endpoint every two seconds until the server reports succeeded, then downloads the output(s) into an IMAGE batch you can wire straight into Save Image. Progress shows on the ComfyUI progress bar while it polls. It's fully async server-side, which has a trap worth internalizing: if you interrupt the queue, ComfyUI stops waiting, but the job is already submitted - it keeps running and still bills your credits.
The inputs that matter
- prompt - the only required field, a multiline string. This is the Turbo you know: natural-language prose works better than tags, and since the encoder is Qwen3-4B, a Chinese prompt gives a real adherence boost if you're stuck with a prompt that keeps coming out wrong.
- aspect_ratio - a fixed dropdown, not a free resolution. Your choices are
1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9, 9:21. Note you can't punch in 1216x832 or 1600x1088 like local Turbo; the API decides the exact pixels. - seed - defaults to
-1, which means "omit and let the server pick." Pin a number to reproduce a result; leave it at -1 for fresh rolls. - num_images - 1 to 4 images per generation. Remember the math: each one is 15 credits.
- force_rerun - tick this when you keep the same prompt but want a new result anyway. ComfyUI caches node outputs when nothing changed, so without it, re-running with an identical prompt just returns the cached image.
Outputs
images (IMAGE) - the one output. It's a real core tensor, so anything that takes an IMAGE works: Save Image, a preview, upscalers, img2img, whatever. BudgetPixel's other nodes are wired for this too.
Install
ComfyUI Manager, search BudgetPixel, install, restart. Or the manual way:
cd ComfyUI/custom_nodes
git clone https://github.com/budgetpixel-ai/comfyui-budgetpixel.git
pip install -r comfyui-budgetpixel/requirements.txt
The only Python dependency is requests - there are no model files to fetch, which is the whole point. What you do need is an API key, and deliberately not in the node: a key widget would serialize bpx_live_... secrets into workflow JSON you might share. Set BUDGETPIXEL_API_KEY as an environment variable, or drop a budgetpixel.json with {"api_key": "bpx_live_..."} inside the pack folder. The API is included in every paid plan.
Where people get burned
The negative_prompt field exists, but temper your expectations: Turbo is guidance-distilled (CFG 1), and locally a negative prompt is famously inert on this model. Treat it as a hint, not a control. And don't expect much seed variety - "basically all the generations are the same" has been the Turbo complaint since day one, and a hosted wrapper doesn't change that. On the practical side, a 401 means check your key, api_access_not_enabled means the API isn't in your plan tier, and insufficient_credits means the obvious. The one that surprises people: an interrupted run still bills. Fine for quick ideation when you're out of VRAM headroom; budget it like the metered service it is.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Text description of the image to generate. | |
| aspect_ratioopt | COMBO | 1:1 | Output aspect ratio. |
| negative_promptopt | STRING | What to avoid in the generated image. | |
| num_imagesopt | INT | 11–4 | Number of images to generate. |
| seedopt | INT | -1-1–2147483647 | Seed for reproducible generation. Omit for random. |
| force_rerunopt | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |