Protoface Runway Gen-4 Image · Text to Image
When the turbo draft isn't good enough
- image
- mask
- files
- run id
Two nodes in this pack are called "Runway Gen-4 Image" and they have identical controls. One is turbo. This is the other one - the six-credit, full-quality pass, and the one I'd wire up as the second half of a two-stage image workflow: draft cheap in the turbo node, then re-roll the composition you liked through this one.
What you're buying
Runway's Gen-4 Image is one of the closed models with no open weights - there is no version of this you can download, quantise or abliterate. It lives behind an API, and the Protoface pack is the adapter that puts it on your canvas: prompt and settings go out, a finished still comes back on an IMAGE socket, and your graph continues as if a local sampler had made it. The catalog prices image.generate at six credits a job against turbo's four, which is the honest signal about which one is meant for iterating.
The reason to want Gen-4 specifically rather than a local Flux or SDXL graph is the familiar one from the KB's closed-model doc: it has a look people reach for, it needs no VRAM, and it handles reference-image conditioning without you training a LoRA. The reason to hesitate is also familiar - per-call cost, inputs leaving your machine, and a moderation layer you don't control.
How it works
The node is generated from the model's published request schema rather than hand-written, which is why its inputs read like a form: prompt, resolution, aspect_ratio are plain widgets because the API always wants a value, while reference_images and seed are mode dropdowns because the API treats them as optional. Behind the scenes it validates the payload before uploading anything or charging you, uploads any media, submits, polls with a progress bar, and downloads the results into the local cache.
The optimised part you benefit from: the submitted request carries a stable identity derived from the account, the node's request_scope, the generation_id, the model and the payload. Requeue the same thing and you get the same recorded job back instead of a second charge. That's not a ComfyUI cache - it survives restarts, which is why a crashed session can resume mid-generation.
The controls
prompt is the generation prompt. Long, specific, camera-and-light language works; Gen-4 Image is comfortable with art direction.
resolution is 1080p or 720p, defaulting to 1080p. Take the 720p when you're drafting - you're looking at composition, not detail.
aspect_ratio is 1:1, 16:9, 9:16, 4:3, 3:4, defaulting to 4:3. Note this is a ratio, not a size; resolution and ratio together define the frame.
reference_images is the one that changes what the node is for. It defaults to Default, meaning the field is omitted from the request and you get straight text-to-image. Switch it to Image to send native ComfyUI images, or References to send a Protoface Reuse Result Asset handle from elsewhere in the graph. The model's contract caps references at three, and a batch of images in one input counts against that cap - so three separate Load Images and one batch of three are the same three references. This is where you get character and product consistency without training anything.
seed is optional and Set-mode; leave it Default to omit it and get a fresh roll. It's unrelated to generation_id, which is the paid-job identity: fixed reuses, incremented re-buys. request_scope is the advanced, non-secret per-node scope the frontend assigns.
Outputs
image (a list - ComfyUI maps downstream nodes over it), mask (native inverted-alpha, genuinely handy for cutouts), files (the originals, including anything transparent - point Protoface Save File at it), and run id. The run id is your recovery ticket: paste it into Protoface Resume Run after a timeout and you retrieve the job without paying again.
Install
Manager → search Protoface → install protoface-nodes → restart → reload the browser. Manual:
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
ComfyUI 0.41.0+, Python 3.10+, and pip must be ComfyUI's interpreter - Windows portable users want python_embeded\python.exe -m pip. Then set the key from the Protoface button in the lower-right corner (or PROTOFACE_API_KEY / PROTOFACE_API_KEY_FILE). Billing goes to your Protoface account; Comfy credits are untouched.
Traps
The key is memory-only. Restart ComfyUI and you must enter it again, or every node fails auth. This is the number one false alarm in this pack.
Same prompts, same result, no charge - by design. If you tweak the prompt but don't increment generation_id, you may get the recorded job back. Increment when you mean a new generation; that's what the increment-after-generation option is for.
Switching to the turbo node buys a new job. Turbo is a different operation on the same model, so it's a different request - your generation_id doesn't carry across. Budget accordingly: draft in turbo, finish here.
Don't queue it in a loop. It's an output node, so it runs when you hit Queue; a queued batch of twenty is twenty paid calls. There's a template (Templates → the Protoface extension) if you want to see a working graph before you build your own.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | The positive prompt for the generation. | |
| resolution | COMBO | 1080p | The resolution of the generated media. |
| aspect_ratio | COMBO | 4:3 | The aspect ratio of the generated media. |
| reference_images | COMBO | Public URLs, data URIs, or asset ids. | |
| seed | COMBO | The seed to use for the image generation. | |
| 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 | — |