传输节点
One file, one node ID, pass it down the chain
- 任意
- 串联输入
- 串联输出
传输节点, the "transfer node," is the bucket you drop a file into for a remote job. It does one thing: tags whatever you give it with a target node ID, and hands the tagged data down a chain of similar buckets until it reaches the node that actually submits the job. It's pure plumbing - no pixels are touched, no network is crossed - and it's the piece that lets you send multiple files to one remote workflow at once.
The mental model
The whole RemoteCall pack runs on a simple data structure: a dictionary of {节点ID: data}. When the submission node finally runs, it walks that dict and, for each entry, either uploads the file and injects the filename into that node's workflow slot, or merges the value straight into the node's inputs. The Transfer node's only job is to build that dict - one entry at a time, across as many chained Transfer nodes as you like.
The inputs
- 节点ID (STRING, required) - a node ID from the target workflow (the API-format one you parsed). If your remote workflow's Load Image is node
3, you type3. - 任意 (ANY, optional) - the wildcard input. The tooltip says it plainly: image/video/audio file data. Connect an IMAGE tensor, a video, an audio dict, or a string path. The pack uses ComfyUI's
*type, so it accepts just about anything. - 串联输入 (REMOTE_CALL_TRANSFER, optional) - the chain. Plug the previous Transfer's output here to merge its entries into yours.
The output
串联输出 (REMOTE_CALL_TRANSFER) - the merged {节点ID: data} dict. It's a pack-private type, so it only plugs into other RemoteCall nodes; that's the point. This is the same "one wire carries a bundle" pattern you see in context-bus nodes like rgthree's Context, just purpose-built for a remote submission.
Chaining is dead simple: first Transfer starts the dict with {3: image1}, the next one adds {7: image2} on top, and so on until you hit 上传提交 at the end.
Which node IDs work
The pack maps known target node types to the input key it injects into: LoadImage/LoadImageMask → image, LoadVideo → file, LoadAudio → audio, UpscaleModelLoader → model_name. Point a Transfer at a node that has no upload-style input and the submit node will refuse it with "暂不支持注入". And if the node ID doesn't exist in the target workflow at all, you'll get "节点 X 不在工作流中" at submit time - which is why the Workflow Parse node's 可配置输入_JSON output is your friend: it tells you exactly which IDs are real.
Installing it
Same pack as all the others - ComfyUI-RemoteCall via ComfyUI Manager (search ComfyUI-RemoteCall or 远程调用), or clone it in:
cd ComfyUI/custom_nodes
git clone https://github.com/playboy-dongan/ComfyUI-RemoteCall
requests and av are the only deps, no models to fetch, restart after install.
One trap worth knowing
A common beginner move is connecting a Transfer's 任意 to a string widget and wondering why the remote workflow got a weird value. A string that's a local file path gets read and uploaded; a string that isn't a path or URL gets injected as-is. For sending actual files, connect tensors or real paths - for setting scalar values like width and seed, use 参数覆盖 (Param Override) instead. That's the other half of the pack, and the two slot together cleanly.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| 节点ID | STRING | — | |
| 任意opt | * | 图片/视频/音频等文件数据 | |
| 串联输入opt | REMOTE_CALL_TRANSFER | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| 串联输出 | REMOTE_CALL_TRANSFER | — |