FL Runway Image API
Runway's Gen4 Image API, with tagged reference images
- image1
- image2
- image3
- image
- status_text
Fill-Nodes is a genuinely huge pack - image tools, PDF handling, GPT wrappers, and a whole "AI Nodes" section that's basically a switchboard for other companies' paid APIs (Fal, Gemini, Runway, Hedra, PixVerse). FL_RunwayImageAPI is the entry for RunwayML's Gen4 Image endpoint: text-to-image generation that can also take up to three reference images, each individually tagged so your prompt can address them by name.
This isn't a local model - there's no download, no VRAM cost on your end. It's an HTTP client wrapped in a ComfyUI node, and you need a paid Runway account and API key to make it do anything.
How it works
You give it a prompt and (optionally) up to three reference images, each with its own tag string. Runway's Gen4 Image API lets you reference those tagged images inside your prompt text - instead of a generic "match this style," you can address image1 and image2 by their tag names and tell the model how each one should influence the result. The node submits the job, then polls Runway's task endpoint until it's done or it runs out of attempts, and pulls the finished image back down.
The inputs and outputs that matter
api_key- your Runway key, pasted directly into the node (there's no environment-variable fallback here - you type it in, or wire it from somewhere your workflow controls).prompt- your text prompt.ratio(default1024:1024) - output aspect ratio, picked from Runway's fixed list of supported ratios (a mix of square, widescreen, and portrait presets).image1/image2/image3with matchingtag1/tag2/tag3- optional reference images and the names your prompt uses to address them.seed,public_figure_threshold(auto/low/NOT_GIVEN) - the latter maps to Runway's own content-moderation setting for real-person likeness; leave it atNOT_GIVENunless you specifically need to loosen or tighten that check.polling_interval/max_polling_attempts/timeout_sdk/timeout_download- how patient the node is while waiting on Runway's servers. The defaults (poll every 5s, up to 36 attempts - 3 minutes total) are reasonable; bumpmax_polling_attemptsif you're hitting Runway during a busy period and jobs are taking longer than that.
Outputs are image (the generated result) and status_text, a log string worth wiring into FL_ShowText while you're debugging a failed call - it carries the actual API response detail, which is far more useful than a bare ComfyUI error.
How to install it
ComfyUI Manager: search "Fill-Nodes", install, restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/filliptm/ComfyUI_Fill-Nodes
pip install -r ComfyUI_Fill-Nodes/requirements.txt
This is a big pack - installing it for one API node pulls in everything else's dependencies too, including SDKs for OpenAI, Google, Fal, and Runway itself. Worth knowing going in rather than being surprised by it mid-install.
Common issues & troubleshooting
Nothing happens, or it errors immediately. Almost always a bad or missing api_key, or a Runway account without billing set up - this API isn't free, and Runway won't queue a job for an account that can't pay for it.
It times out waiting. Runway's queue depth varies a lot with load. Raise max_polling_attempts or polling_interval before assuming something's broken - read status_text first, since it'll usually tell you if the job is still queued versus actually failed.
A person's likeness gets flagged/rejected. That's public_figure_threshold doing its job - Runway moderates real-person generation. Adjusting it to low loosens the check, but only do that if you actually have rights to generate that likeness.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | — | |
| prompt | STRING | A stunning photograph of a majestic wolf howling at a full moon. | — |
| ratio | COMBO | 1024:1024 | 10 options: 1920:1080, 1080:1920, 1024:1024, 1360:768, 1080:1080, 1168:880, +4 |
| runway_api_version | STRING | 2024-11-06 | — |
| image1opt | IMAGE | — | |
| image2opt | IMAGE | — | |
| image3opt | IMAGE | — | |
| tag1opt | STRING | — | |
| tag2opt | STRING | — | |
| tag3opt | STRING | — | |
| seedopt | INT | 00–4294967295 | — |
| public_figure_thresholdopt | COMBO | NOT_GIVEN | 3 options: auto, low, NOT_GIVEN |
| polling_intervalopt | INT | 51–60 | — |
| max_polling_attemptsopt | INT | 361–120 | — |
| timeout_sdkopt | FLOAT | 605–300 | — |
| timeout_downloadopt | FLOAT | 605–300 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| status_text | STRING | — |