Nodes/RunningHub/RH Execute Workflow
ComfyUI Node

RH Execute Workflow

RH Execute Workflow runs a whole RunningHub job and drags the results home

By liangzheng1128·Created 3 months ago·Updated 3 months ago· 0
RH Execute Workflow
  • api_config
  • node_info_list
  • images
  • video_frames
  • text
  • audio
  • output_url1
  • output_url2
  • output_url3
  • output_url4
  • output_url5
  • task_id
run_timeout600
poll_interval3
use_rtx4090false

This is the workhorse - the node the whole pack exists for. RH Execute Workflow takes a workflow that lives on RunningHub's cloud (identified by the workflow ID you set in RH Settings), submits it as a task, waits for the GPUs to finish, downloads the results, and converts them back into native ComfyUI types. From the canvas it looks like a generator node. Underneath it's an HTTP client doing a full cloud run - submit, poll, download. If you've ever wished you could run a heavy workflow without touching your own GPU, this is the button.

How it works

It only needs one input: api_config, the STRUCT output of RH Settings (key + base URL + workflow ID bundled). You can add an optional node_info_list from chained RH Node Info nodes to override parameters in the cloud workflow - prompt, seed, image. Then:

  1. The node POSTs to /task/openapi/create and gets back a taskId plus, often, a WebSocket URL.
  2. If a WSS URL came back, it opens a live connection and shows real-time progress in ComfyUI's progress bar. If WebSocket fails, it falls back to plain HTTP polling - which is why this still works in environments where WebSockets are blocked.
  3. It polls /task/openapi/outputs every poll_interval seconds until the task finishes, fails, times out, or returns nothing.
  4. Results get downloaded and converted: images become IMAGE tensors, audio is loaded into ComfyUI's AUDIO dict via torchaudio, and everything else lands as text.

The knobs that matter

  • run_timeout (600s default) - how long it will wait before giving up. Long video jobs can exceed this; raise it.
  • poll_interval (3s default) - seconds between status polls. Leave it alone unless you're rate-limit-frugal.
  • use_rtx4090 (false default) - request the 4090 GPU tier. The tooltip says it plainly: higher cost. Only flip it when you actually need the faster card.
  • node_info_list - your chained parameter overrides.

The outputs, and one honest trap

Ten outputs: images, video_frames, text, audio, output_url1output_url5, and task_id.

Here's the trap nobody warns you about: videos do not come back as video_frames. Read the source - the node deliberately skips downloading videos and leaves the video_frames output as a placeholder black 64×64 tensor. The video comes back as one of the output_url strings instead, which you then feed to RH Download Video. So wire videos via the URL outputs, not video_frames, or you'll be staring at a tiny black square and wondering what went wrong. Same story when nothing is produced: failure paths return a black 64×64 tensor with the error message stuffed into text. So text is worth checking when results look empty.

Install

cd ComfyUI/custom_nodes/
git clone https://github.com/liangzheng1128/ComfyUI-RunningHub
cd ComfyUI-RunningHub
pip install -r requirements.txt

or ComfyUI Manager → search "RunningHub". Restart. Requirements are light - requests, websocket-client, Pillow, numpy. Remember this is a paid cloud platform: every run costs credits, your images and prompts leave the machine, and on shared GPU pools the "20–30 second" job sometimes takes over a minute. Budget accordingly and it's a genuinely great way to keep heavy workflows off your rig.

CategoryRunningHub

Inputs (5)

NameTypeDefaultDescription
api_configSTRUCTConnect RH_Settings output here
node_info_listoptARRAYConnect RH_NodeInfo output(s) here
run_timeoutoptINT6001–9999999Maximum execution time in seconds
poll_intervaloptINT31–60Seconds between status polls
use_rtx4090optBOOLEANfalseUse RTX 4090 GPU (higher cost)

Outputs (10)

NameTypeDescription
imagesIMAGE
video_framesIMAGE
textSTRING
audioAUDIO
output_url1STRING
output_url2STRING
output_url3STRING
output_url4STRING
output_url5STRING
task_idSTRING