Protoface GPT Image 2 · Text to Image
Quality tiers, no seed, no undo
- image
- mask
- files
- run id
The short version
Prompt in, still out, billed per call. This is GPT Image 2's generation task with the pack's standard wrapper: prompt, quality, resolution, aspect_ratio, output_format, plus generation_id and request_scope.
Anyone who has used ChatGPT's image generation already knows the feel - descriptive sentences work, tag soup doesn't, and it's unusually good at laying out text and multi-object scenes without collapsing. What the API route buys you is placement in a graph: generate the frame, then hand it to your local upscaler, your ControlNet pass, your compositor, your video model. That's the workflow argument, and it's a real one. Local-only purists will point out you can't iterate free and can't strip the filter, and they're not wrong either.
How it behaves
Every Protoface node is generated from a public schema by one shared adapter, and the same booking machinery runs underneath: your payload is validated locally first, then the request's identity is journaled before submission so an ambiguous failure reuses the same idempotency key instead of buying a second image. Polling, download, and conversion to native IMAGE/MASK follow.
quality is the cost dial, defaulting to medium, with the tooltip saying the quiet part out loud: higher quality costs more. resolution defaults to 1k. Between the two, you have a cheap draft mode and a delivery mode, and it's worth being disciplined about which one you're in.
aspect_ratio has no default value - the picker will let you set one, and on this generate node nothing is auto-detected because there's no input image to detect from. Set it deliberately; a square default when you wanted 3:2 is a re-roll you paid for.
output_format defaults to png.
generation_id is not a seed. There is no seed. Keep the ID fixed and requeueing the identical node reuses or resumes the same paid job; increment it and you've bought a new generation, which will look different even with the same prompt because the model's randomness isn't exposed. Practically: if you get a keeper, save it immediately, because you cannot get it back.
request_scope is stamped automatically per node. In a headless workflow you have to supply a stable unique workflow/node ID and keep it stable across resumes, or the adapter stops and complains.
Outputs
image (IMAGE, a list - downstream nodes map over multiple results), mask (MASK list), files (the original downloads as PROTOFACE_FILE, for Protoface Save File), and run id (a plain string; the thing to paste in a support thread, or to feed Protoface Resume Run).
Install
Two minutes if your ComfyUI isn't ancient:
cd ComfyUI/custom_nodes
git clone --branch v0.1.0 --depth 1 https://github.com/protoface-ai/protoface-comfyui.git protoface
python -m pip install -r protoface/requirements.txt
Needs ComfyUI 0.41.0 or newer and Python 3.10+; the only packages are httpx, jsonschema, Pillow and av>=14. No checkpoints, no GPU load - the model isn't on your disk. Manager route: search Protoface, install protoface-nodes, restart, reload.
Then click Protoface in the lower-right and paste your account key. It's kept in server memory only, so the key vanishes on restart; headless installs should set PROTOFACE_API_KEY_FILE instead.
Where people get bitten
The key is the big one, purely because a memory-only credential means a perfectly good setup looks broken the next morning.
Then the money. A polling timeout is not a failed generation - the job is recoverable, so keep generation_id and requeue or resume with the run id. Bumping the generation ID to "try again" is how one image becomes two charges, and interrupting a run sends a best-effort cancel with no refund promise. One more real one: archived nodes. If a saved workflow suddenly refuses to submit because its model contract is archived, that's an upstream schema change - use the current model node, or resume the earlier run for its result. Rebuilding the node and queueing blindly just bills you for a lookalike.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | The positive prompt for the generation. | |
| quality | COMBO | medium | The quality of the generated image. Higher quality costs more. |
| resolution | COMBO | 1k | The resolution of the output image. |
| aspect_ratio | COMBO | The aspect ratio of the generated image. | |
| output_format | COMBO | png | The format of the output image. |
| generation_id | INT | 00–9007199254740991 | Keep fixed to reuse/resume this paid job. Increment for a fresh paid generation; independent of the model seed. |
| request_scope | STRING | Automatically assigned per node. Headless clients must supply a stable unique workflow/node ID. This is not a secret. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| mask | MASK | — |
| files | PROTOFACE_FILE | — |
| run id | STRING | — |