Send Point (TJ)
The receiver that lets you run one workflow section without rerunning the rest
- value
The receiver end of the no-wire bridge
Send Point (TJ) is the receiving half of the Send Bridge: where Send (TJ) parks a value in a session cache, Send Point reads back the value that was delivered to itself and passes it on as a normal value output. Nothing connects the two nodes on the graph, which is exactly the point - because Send Point only ever reads what was handed to it, you can queue-run the section of the workflow after it without rerunning whatever produced the data on the far side.
If that sounds like splitting hairs, think about the actual workflow shape it enables: generation on one side, upscale/compare/save on the other, all on one canvas, with full control over which half executes. That's the "large scale workflow architecture" the whole TJ_NODE pack is pitching, and this node is where the split becomes real.
How it works
The node has a point_name - a unique name that becomes the transfer button on the matching Send node. Name it something meaningful (UPSCALE_IN, not test) because that name is your routing map. The received value is resolved by type:
- IMAGE → loaded back from a cached file reference and output as a real image tensor.
- VIDEO → output as a file path string (the node only references the video, never copies it).
- STRING → passed through as text.
- LATENT and friends → session-only, since they can't be serialized into the workflow JSON.
That persistence detail is the one that surprises people pleasantly: received IMAGE/VIDEO/STRING values are stored in the workflow itself, so they survive a ComfyUI restart and even a reopen. Fire up the same workflow a week later and the preview is still there.
The controls that matter
Only two real inputs are yours to set:
point_name- the transfer's unique name. Blank = no button gets created on the Send node. Set it, and the Send node sprouts a button with that label.output_enabled- the kill switch. Off means the node outputs nothing and blocks all graph execution downstream of it (values are kept, and it errors on nothing). It's a clean way to hold a branch while you iterate on the other side.
The four received_* inputs are hidden internal storage slots the frontend fills in - you shouldn't touch them.
Install and use it
Same pack, same install as everything else here:
cd ComfyUI/custom_nodes
git clone https://github.com/designloves2/ComfyUI-TJ_NODE.git
Or via ComfyUI Manager → search TJ_NODE, restart, and find it under ✨ TJ_Node/Wireless. No Python dependencies beyond the pack itself.
Where people get burned
The big one: run the workflow and the Send Point throws "아직 전달받은 값이 없습니다" (no value received). That means nobody clicked Send yet - click the button on the Send node, and if no value is cached it will run just the upstream chain feeding that Send, then transfer. Second: forgetting point_name means the button never appears at all, so nothing ever gets sent and the error looks mysterious. Third: don't treat output_enabled as a mute - it's a hard stop for the branch below it, which is powerful but easy to forget is on. Keep names stable, and the pair is one of the handiest workflow-structure tools in the pack.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| point_name | STRING | 이 Send Point 의 고유 이름. Send (TJ) 노드에 이 이름으로 버튼이 생깁니다. 비워두면 버튼이 만들어지지 않습니다. | |
| output_enabled | BOOLEAN | true | OFF 로 두면 값을 내보내지 않고 이 노드 이후 그래프의 실행을 막습니다. 전달받은 값은 그대로 유지되며, 값이 없어도 에러가 나지 않습니다. |
| received_refopt | STRING | — | |
| received_textopt | STRING | — | |
| received_kindopt | STRING | — | |
| received_infoopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| value | * | — |