Nodes/GPTImageComfyUI/GPT Image Generate Image (Ace Data Cloud)
ComfyUI Node

GPT Image Generate Image (Ace Data Cloud)

The Generate Node That Never Touches Your GPU

By AceDataCloud·Created 3 days ago·Updated 2 days ago· 0
GPT Image Generate Image (Ace Data Cloud)
    • status
    • task_id
    • media_urls_json
    • first_media_url
    • result_json
    • trace_id
    ◄parameters_json{}►
    ◄model(from JSON/default)►
    ◄prompt►
    ◄background►
    ◄moderation►
    ◄count►
    ◄output_compression►
    ◄output_format►
    ◄partial_images►
    ◄size►
    ◄quality►
    ◄style►
    ◄callback_url►

    There is nothing to download. GPT Image has no checkpoint, no fp8 build, no GGUF - the model sits behind an API and always will, so "run it locally" was never on the table. This node is the door: type a prompt, hand over credits, get a signed HTTPS URL back, and drop that URL into the rest of your graph as if a local sampler had produced it.

    What it's for

    The honest use case is a model you cannot run, not a model you don't feel like running. If you have a 3060 and Krea 2, you don't need this. If you want GPT Image's text rendering or Nano Banana's edit-in-a-conversation behaviour inside a workflow that also does your upscaling and masking, you do - and the alternative is ComfyUI's own Partner Nodes, which route you through a Comfy account and prepaid credits. This pack instead takes one vendor key and fronts a roster of models from OpenAI and Google through a single node. That's the trade: one more key, one less UI.

    Keep the local-vs-cloud argument in view, because it doesn't go away. Your prompt leaves the machine, the model's filter applies and cannot be patched out, and every call is metered.

    How it actually works

    The node validates your parameters against a copy of the published GPTImageDify API contract, then POSTs to the Ace Data Cloud endpoint for image generation. It submits with async: true - always - which is the single most useful thing to understand here. You will usually get back status of pending and a task_id, not an image. That isn't a failure; it's the design, and it's why the pack also ships two task-retrieval nodes. Submit, then poll.

    On the way back the client scrubs the response before you see it - request bodies, credentials, supplier/upstream internals and similar fields are stripped out of result_json, and it harvests every media URL it can find. Errors are deliberately vague: on a failed task you get "inspect the request using its task or trace ID," not the raw payload. Fine for privacy, mildly annoying when you're debugging a refusal.

    The inputs that matter

    prompt is the one you'll actually type. model is the big one - fifteen choices plus (from JSON/default), and not a single family despite the node's name: dall-e-2, dall-e-3, the gpt-image-1–gpt-image-2 line with its :official and flavoured variants, and the whole Google range (nano-banana through nano-banana-pro). Leave it on the sentinel and the service's own default applies (gpt-image-2) - which may not be the cheap one.

    size takes auto or an explicit WIDTHxHEIGHT (1024x1024 is the service default); anything else fails contract validation before a request goes out. quality accepts auto, low, medium, high, plus the older standard and hd. count maps to the API's n (1–10) - and yes, ten images is ten times the bill. background is transparent/opaque/auto, output_format is png/jpeg/webp with output_compression for the lossy ones, and moderation is low or auto. style is the vivid/natural knob inherited from DALL·E 3; don't expect it to do anything on a gpt-image model. partial_images (0–3) is in the contract, but the node asks for URLs with no stream, so treat it as decoration. callback_url is a webhook you almost certainly don't want.

    parameters_json is the escape hatch: any field the API accepts as a JSON object, with the named widgets overriding it when non-empty. Every widget here is a plain string - leave it blank and it's omitted from the request.

    The outputs are status, task_id, media_urls_json (all URLs, as JSON), first_media_url, result_json, and trace_id. For getting pixels moving, first_media_url is the one you want: feed it into GPT Image Load Image to get a real IMAGE. result_json into a PreviewAny when you want to see what the service actually said.

    Install

    Search GPT Image in ComfyUI Manager; the publisher is acedatacloud, the package is GPT Image by Ace Data Cloud, registry ID gpt-image. The README is noticeably careful about whether that listing is actually live, so if Manager comes up empty, don't fight it:

    cd ComfyUI/custom_nodes
    git clone https://github.com/AceDataCloud/GPTImageComfyUI
    python -m pip install -r GPTImageComfyUI/requirements.txt
    

    That's requests and jsonschema - both usually already installed. Then set the key in the process environment and restart, because a running ComfyUI won't see it otherwise:

    export ACEDATACLOUD_API_KEY="your-key"   # ACEDATACLOUD_API_TOKEN also works
    python main.py
    

    The key must not go in workflow JSON, and the pack never writes it to disk. Also worth knowing: the README states 0.39.0+ for the native media loaders.

    Where people get burned

    Two that actually matter. First, muting. These nodes declare themselves output nodes, so they execute whenever they're in the graph and unmuted - leaving one parked in a workflow is leaving a live charge. Bypass or mute it, don't just leave the outputs dangling. Second, if you queue the same graph twice with identical inputs, ComfyUI's cache can skip the node entirely, so "nothing happened on the second run" is often the cache doing its job.

    Failed tasks raise rather than returning a failed status, and a connection failure during a paid submit is never retried - preserve the task_id and look the job up before paying again. A prompt the model refuses will look like a generic error, because it is one. Before a paid run, check what the model actually costs; that table lives on the vendor's site, not in this pack.

    CategoryAce Data Cloud/GPT Image

    Inputs (13)

    NameTypeDefaultDescription
    parameters_jsonSTRING{}—
    modelCOMBO(from JSON/default)16 options: (from JSON/default), dall-e-2, dall-e-3, gpt-image-1, gpt-image-1.5, gpt-image-2, +10
    promptSTRING—
    backgroundSTRING—
    moderationSTRING—
    countSTRING—
    output_compressionSTRING—
    output_formatSTRING—
    partial_imagesSTRING—
    sizeSTRING—
    qualitySTRING—
    styleSTRING—
    callback_urlSTRING—

    Outputs (6)

    NameTypeDescription
    statusSTRING—
    task_idSTRING—
    media_urls_jsonSTRING—
    first_media_urlSTRING—
    result_jsonSTRING—
    trace_idSTRING—