Custom Workflow - 1 Image
Hand any image to a Roboflow workflow and get four images and four strings back
- input_image1
- output_image1
- output_string1
- output_image2
- output_string2
- output_image3
- output_string3
- output_image4
- output_string4
This is the bring-your-own-workflow node in the ComfyUI-Roboflow pack. Where its siblings (Label Emotions, Remove Background) are hard-wired to one hosted workflow each, Custom Workflow - 1 Image is the generic transport: you build whatever you like in Roboflow's visual workflow builder, then this node drops one image in and pulls out up to four images and four strings. It's what you reach for when you want a Roboflow Universe model - there are hundreds of thousands of open object-detection, classification and segmentation models up there - running inside your graph without ever touching your GPU.
Nothing runs locally. On execution the node flattens your image to a base64 JPEG and POSTs it to https://detect.roboflow.com/infer/workflows/{workspace_name}/{workflow_id} with your API key, then unpacks the response by the key names you configured. Whatever the workflow's Response node names its outputs, you tell this node to grab. The pack is sponsored by Roboflow, so the hosted side is first-class; the ComfyUI side is a thin client over their HTTP API.
The inputs that matter:
- workspace_name, workflow_id, api_key - the three required fields, and they all come from the same place. In Roboflow, open your workflow, click Deploy Workflow (top right), and copy them out of the Python snippet. The API key displays masked but copies as the real key.
- input_image1 + input_image1_key - wire your Load Image output in here. The key is
"image"unless you renamed the input inside the workflow builder. - output_image1_key through output_string4_key - each optional. Set one to the exact output name from your workflow's Response node and that output wakes up; leave it blank and it stays off.
Outputs are output_image1 through output_image4 (IMAGE) and output_string1 through output_string4 (STRING). Images feed Preview Image or Save Image; strings feed any text node, which makes this handy for things like feeding a detection result back into a prompt. The tutorial pattern is: build workflow → add a Response node → copy the output names → paste them as keys here → Deploy → run.
Install is the easy part. Clone it into custom_nodes and restart, or grab it from ComfyUI Manager by searching for the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/DareFail/ComfyUI-Roboflow
Then restart ComfyUI and look under Roboflow in the Add Node menu. No models to download, no extra pip dependencies - the pyproject declares zero, and the code only uses requests, numpy, Pillow and torch, all of which ComfyUI already ships. The only real prerequisite is a free Roboflow API key and a deployed workflow.
Where people get burned: the node never checks the HTTP status code. If a call fails - wrong key, workflow not actually deployed, a typo'd output key - you don't get an error, you get None back and whatever was wired downstream dies silently. Triple-check your output keys against the Response node. Second, your image is re-encoded as JPEG on the way out, so alpha is dropped and you take a small quality hit every round trip. Third, it's a cloud call: it needs internet, adds a network-latency pause per run, and spends API credits - don't batch a thousand generations through it.
Honest take: the repo hasn't been touched since September 2024, and this node is fundamentally a bridge to a hosted service. It's a great bridge - and free for light use - but treat it as a transport layer, not a foundation to build your whole workflow on.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| workspace_name | STRING | — | |
| workflow_id | STRING | — | |
| api_key | STRING | — | |
| input_image1opt | IMAGE | — | |
| input_image1_keyopt | STRING | — | |
| output_image1_keyopt | STRING | — | |
| output_string1_keyopt | STRING | — | |
| output_image2_keyopt | STRING | — | |
| output_string2_keyopt | STRING | — | |
| output_image3_keyopt | STRING | — | |
| output_string3_keyopt | STRING | — | |
| output_image4_keyopt | STRING | — | |
| output_string4_keyopt | STRING | — |
Outputs (8)
| Name | Type | Description |
|---|---|---|
| output_image1 | IMAGE | — |
| output_string1 | STRING | — |
| output_image2 | IMAGE | — |
| output_string2 | STRING | — |
| output_image3 | IMAGE | — |
| output_string3 | STRING | — |
| output_image4 | IMAGE | — |
| output_string4 | STRING | — |