ComfyUI Node

Remote Workflow

Send a workflow to another machine's ComfyUI — without leaving your graph

By kapakahi·Created 5 months ago·Updated 5 months ago· 0
Remote Workflow
  • image
  • mask
  • image
workflow
remote_address192.168.1.50:8188
prompt
noise_seed0
poll_interval1.00
timeout180
image_index0

You've got the workflow, but the GPU lives in another room - a homelab box, a second rig, a rented cloud instance. ComfyUI's usual answer to that problem is ComfyUI-Distributed and friends, which split a single graph across machines. Karga (display name "Remote Workflow") is the opposite move and much simpler: the whole workflow runs on the remote, and this one node is your front door to it. Pick a workflow from a dropdown, type a prompt, hit go, and the finished image comes back onto your local canvas.

Don't confuse it with the API-wrapper nodes everyone's wary of (see the KB's external-api-nodes doc). Those call a paid cloud with your key baked in. Karga calls your own remote ComfyUI over plain HTTP - no API key, no per-image bill, no data going to a third party. The only thing that leaves your machine is the prompt and image you send to a box you control.

How it works

The node runs the standard ComfyUI remote dance, all with Python's urllib: it uploads any input image/mask to the remote via /upload/image, queues your workflow with POST /prompt, polls /history/<prompt_id> until the job shows up, then pulls the result through /view and hands it back to your graph as an IMAGE tensor. It even normalizes the address for you - type 192.168.1.50:8188 and it slaps the http:// on itself.

The clever part is how it knows where to inject your prompt, seed, and images. When you build the remote workflow, you tag the nodes you want to drive by renaming their titles. Suffix style for standard nodes - Load Image [ui], CLIP Text Encode (Positive Prompt) [ui], RandomNoise [ui] - maps them to the image, prompt, and noise_seed inputs automatically. Prefix style for anything else: [ui] steps:steps, [ui] cfg:cfg. Any tag that isn't reserved pops up as its own input widget on the node, with the type guessed from the value already in the workflow. That dynamic-field trick is the whole pitch: add a [ui] steps:steps tag to the remote graph, and the local node sprouts a steps box.

The inputs that matter

The workflow must be exported from the remote as Save (API Format) (enable Dev Mode in settings) and dropped into the pack's workflows/ folder. Then you mostly touch four things:

  • workflow - dropdown of every JSON in that folder.
  • remote_address - your remote box, e.g. 192.168.1.50:8188. Defaults to a LAN address, so if you're renting a VPS, change it.
  • prompt - the text injected into the [ui] CLIP node.
  • noise_seed - with ComfyUI's native randomize/fixed/increment control_after_generate on the widget.

poll_interval (how often to check) and timeout (default 180s, max 600s) govern the wait. image_index picks which output to return if the remote produces several. The optional image and mask sockets feed img2img and inpainting workflows - leave them unplugged and you're doing text-to-image. Output is one IMAGE, wired straight into your Preview/Save node.

Install

It's a featherweight pack: no requirements.txt, no model downloads, nothing but stdlib plus numpy/PIL/torch that ComfyUI already ships. Try Manager first (search "Karga RemoteWorkflow"); if it's too obscure to show up there, the clone is reliable:

cd ComfyUI/custom_nodes
git clone https://github.com/kapakahi/comfyui-Karga_RemoteWorkflows

Restart ComfyUI and you'll find "Remote Workflow" under the Karga category. One snag: the README's clone command literally says YOUR_USERNAME/KargaRemoteWorkflow - the author left a placeholder in there, so use the URL above, not the README's.

Where people get burned

  • (no workflows found) in the dropdown - that's the literal choice string when your workflows/ folder is empty. Put a workflow_api.json in there and reload.
  • "Could not reach" ConnectionError - the remote isn't listening. It must be started with --listen, and it must be reachable from your machine.
  • Remote rejects the prompt - the error comes straight from the remote server, and it's almost always a missing node or model on that box. Your remote needs the same custom nodes as the workflow.
  • A no [ui] node for: X warning in the console - your prompt or seed isn't being injected because you forgot to tag that node's title.
  • The real gotcha, from the source: dynamic [ui] fields are discovered from the first workflow JSON in the folder only. Switch the dropdown to a second workflow and its extra tags may not surface as inputs. Keep one tagged template per folder, or expect to babysit.

And a security note that applies to every --listen box: ComfyUI's API is unauthenticated by default. Expose it to the internet and anyone can queue jobs on your GPU. Keep it LAN-only or put auth in front.

It's a niche utility with a thin footprint - a single MIT-licensed node from the author's "Karga" ecosystem, zero community chatter. For a two-machine setup where you want to keep editing locally and render remotely, it's genuinely the one-node path. Just mind the tag convention and the first-workflow quirk.

CategoryKarga

Inputs (9)

NameTypeDefaultDescription
workflowCOMBO1 options: (no workflows found)
remote_addressSTRING192.168.1.50:8188
promptSTRING
noise_seedINT00–18446744073709550000
poll_intervalFLOAT1.000.25–10
timeoutINT18010–600
image_indexINT00–99
imageoptIMAGE
maskoptMASK

Outputs (1)

NameTypeDescription
imageIMAGE