GPT Image 2.5 Sunburst (BudgetPixel)
The 2× tier, and when the extra credits are worth it
- reference_images
- images
Sunburst is the premium GPT Image 2.5 node in the BudgetPixel pack, and the honest pitch is narrower than "better images." It's the one you reach for when the edit has to be scoped - change the jacket, keep the face, keep the composition, keep the background. Flare does the same job cheaper and faster; Sunburst is tuned for instruction-following precision on edits, and defaults to quality: high (80 credits at 1K) because that tuning is where the money goes.
If your workflow is "type a prompt, get a picture," you probably don't need this node. If it's "take this photograph and change exactly one thing," it's the one you want, and the 2× is easier to justify than it sounds.
Why this node looks identical to Flare
It is identical, structurally. Both schemas are generated from BudgetPixel's OpenAPI snapshots at import time, so the widgets are the API's typed parameters rather than hand-written node code: same 13 aspect ratios, same num_images 1–4, same png/jpeg, same 1K/2K/4K tiers, same 9-reference IMAGE socket. The only difference in the schema is the quality default - high here, medium on Flare - and the endpoint it posts to.
Under the hood: the node POSTs your payload, then polls the job every 2 seconds (statuses echoing into the ComfyUI progress bar as 10/25/60/90/100) until it reports succeeded, capped at 600 seconds. Outputs come back as signed URLs and land as one IMAGE batch on the images socket. You can wire that into Save Image, a preview, or your usual upscale pass and nothing downstream knows the difference.
One mechanic that catches people: IS_CHANGED returns an empty string unless force_rerun is true, which means ComfyUI's cache will happily return the previous image on a re-run with unchanged inputs and never touch the API. Good if you were idly re-queuing a big graph; confusing if you're sure you clicked the button twice. That's the same IS_CHANGED contract every "run it again" node in ComfyUI plays with.
What to set, and what it costs
prompt is the only required input. The rest are two decisions - how big and how good - and both are printed in the credit ladder: at 1K, low 30, medium 40, high 80, xhigh 130, max 250; 2K doubles, 4K triples. num_images multiplies the lot - four images at 4K on max is 3,000 credits, which is a real number you should look at before queueing. References: the first is free, each additional one costs 5 credits per generated image, and anything past 9 frames is dropped with a [BudgetPixel] ... extra frames dropped line in the console.
A useful habit with this node specifically: throw the pack's BudgetPixel Cost Estimate companion node next to it before a batch run, and pass the same field names your model node uses - {"resolution": "2K", "quality": "max", "num_images": 2} - rather than trusting the tooltip's older size example. Pre-flight the number, then commit.
reference_images is the socket that matters for the editing use case: wire a LoadImage (or a batch) into it, write the instruction as the prompt, leave the rest alone. Up to nine references compose into one generation, which is how you do multi-subject character work without a single LoRA in sight.
Install and key
Manager first: search BudgetPixel, install, restart ComfyUI. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/budgetpixel-ai/comfyui-budgetpixel.git
pip install -r comfyui-budgetpixel/requirements.txt
The whole dependency list is requests. No weights, no compiled CUDA, nothing that can break your torch install - which is rarer than it should be in this ecosystem. Then either export BUDGETPIXEL_API_KEY=bpx_live_... or create budgetpixel.json in the pack directory with {"api_key": "bpx_live_..."}. The redesign is deliberate: no key widget, so your workflow files stay shareable. BudgetPixel is a hosted aggregator, so the same key unlocks the pack's other 57 models; the API is part of every paid plan. Their marketing does lean on dropping links in Reddit comments, which has earned them an astroturfing accusation or two - that's about the company's manners, not the node. The code that ships here is thin, readable, and talks to nothing but api.budgetpixel.com and the signed result URLs.
Common issues
No BudgetPixel API key found and api_access_not_enabled are the two you'll meet first, and both are actionable in the message - fix the key, or upgrade the plan. At xhigh/max on 4K the 600-second poll can expire: the node raises a client timeout, while the job keeps running and billing server-side. Interrupting the graph behaves the same way. And the structural limit of every whole-frame editor applies here too: the model re-emits the picture, so untouched regions come back close but not bit-identical, and drift compounds across chained edits. When something in the frame must survive exactly, do the crop-edit-composite dance instead of asking the model nicely.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Text description of the image to generate. | |
| aspect_ratioopt | COMBO | 1:1 | Output aspect ratio. |
| num_imagesopt | INT | 11–4 | Number of images to generate. |
| output_formatopt | COMBO | png | Output image format. |
| qualityopt | COMBO | high | Rendering quality. Per image at 1K: low 30, medium 40, high 80, xhigh 130, max 250 credits (scaled by resolution). |
| reference_imagesopt | IMAGE | Optional reference images (up to 9) for image editing and composition. Each item is a public image URL, a data URI, raw base64, or an uploaded-file URL from POST /v1/uploads. Omit for text-to-image. The first reference is free; each additional one adds 5 credits per generated image. | |
| resolutionopt | COMBO | 1K | Output resolution tier. 2K bills 2× and 4K 3× the 1K price of the chosen quality. |
| force_rerunopt | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |