Addon Endpoint Plan
The config node that makes the network addons less scary
- endpoint_plan_json
- manifest_line
- summary_json
MKRShift Nodes has a whole lane of "host addons" - the pieces that let After Effects, Photoshop, Blender, TouchDesigner, and friends hand work to ComfyUI over HTTP and get results back. The part of that lane that scares beginners is the network plumbing. Addon Endpoint Plan is the node that removes the guesswork: it's a pure configuration node that turns a handful of URL and auth fields into one tidy JSON plan, which the actual network nodes then consume. It doesn't call anything itself - the name is the honest job description.
That plan-driven design is worth understanding before you reach for the runtime nodes. Every endpoint in this pack (submit, poll, stats, the transport plans for the DCC bridges) is fed by a *_plan_json string. Endpoint Plan is where those strings come from, and because it's just JSON, you can inspect, version, and hand-edit it - which is a lot easier to debug than a pile of raw connections in a graph.
How it works
You fill in the shape of an HTTP job endpoint: base_url (defaults to http://127.0.0.1:8188, your local ComfyUI), plus the three paths that define the job lifecycle - submit_path where you POST a job, status_path where you check it, result_path where you fetch the finished output. The {job_id} placeholder in the status/result paths is how the runtime nodes know where to slot the ID they get back.
Auth is where this gets practical. auth_mode offers none / bearer / header: bearer wraps your auth_value in an Authorization: Bearer ... header, header lets you pick any header name via auth_key (defaulting to Authorization). If your addon endpoint lives behind a reverse proxy or API gateway - which it will, the moment you stop running everything on localhost - this is the node that saves you from hand-rolling headers in a Python script. timeout_ms (1s to 10 minutes) guards against a hung job. default_headers_json is a free-form JSON object of extra headers, and workflow_hint is a plain-text note describing what this endpoint is for, which flows into the manifest and summary outputs.
Outputs
endpoint_plan_json- the full plan, wired into MKRAddonEndpointSubmit / Poll / Statsmanifest_line- a compact comma-joined line (base_url, submit_path, auth_mode, hint) for manifestssummary_json- a human-checkable recap including whether an auth value is set
Installation
cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes
Restart ComfyUI, or search "MKRShift Nodes" in ComfyUI Manager. No pip requirements; the pack's optional comfy_api extra is only for its V3-schema lane.
Common issues
The classic mistake is thinking this node does the HTTP call. It doesn't - it's the first step of a three-node chain (Plan → Submit → Poll), and wiring Plan's output into a save node will just give you text. Second: {job_id} must stay literally in the status/result paths; if you replace it with a real ID here, the poll node can't template it. And on auth: auth_mode: none with an empty auth_value is fine for local dev, but the moment you point this at anything off-box, the community's standard advice applies - don't expose an unauthenticated ComfyUI to the network, and don't paste real tokens into a workflow file you're going to share. Keep secrets out of the graph; the header/bearer fields are for local convenience, not production secrets.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| base_url | STRING | http://127.0.0.1:8188 | — |
| submit_path | STRING | /mkrshift/submit | — |
| status_path | STRING | /mkrshift/status/{job_id} | — |
| result_path | STRING | /mkrshift/result/{job_id} | — |
| auth_mode | COMBO | none | 3 options: none, bearer, header |
| auth_key | STRING | Authorization | — |
| auth_value | STRING | — | |
| timeout_ms | INT | 300001000–600000 | — |
| default_headers_jsonopt | STRING | {} | — |
| workflow_hintopt | STRING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| endpoint_plan_json | STRING | — |
| manifest_line | STRING | — |
| summary_json | STRING | — |