External Text (ComfyDeploy)
The prompt slot for your ComfyUI-as-an-API
- text
External Text (ComfyDeploy) is the workhorse of the ihmily/comfy-deploy pack - the node that turns any string in your workflow into a parameter an outside app can send when it calls your deployed workflow. If you're going to expose a ComfyUI graph as an API, this is usually the first External node you add, and often the one you add the most of: one for the prompt, one for the negative, maybe another for a style suffix or a LoRA tag you want callers to be able to flip.
Here's the thing to understand up front: the node itself is dumb. It's the plumbing around it that's doing the work. The pack is a two-part system - the nodes live in ComfyUI, and a separate self-hosted backend (comfy-deploy-admin) manages, debugs, and publishes your deployed workflows. The "External" family is the input side of that system. In the editor, these nodes just pass their defaults through, so you can build and test the whole workflow locally with no API plumbing at all. When an API call hits your deployed workflow, the admin swaps in the request value keyed by the node's param_name.
How it works
Open the source and the entire node is one line doing anything: load_text returns str(default_value). The real mechanism is upstream. Set param_name to "input_text", wire the output into CLIPTextEncode, and when a caller posts {"input_text": "a red barn at sunset"} to your endpoint, that string is what flows into the text encoder. The default_value you set in the node is the fallback - used when the caller omits the parameter, and what runs while you're still testing locally.
Inputs and outputs that matter
- param_name (required, default
"input_text") - the JSON key callers must send. Keep it short and obvious; it becomes your API contract. - default_value (optional) - the offline/fallback value. For the main prompt this is your "sane by default" copy.
- display_name and description (optional) - pure labels for the admin UI. Set the description. In six months you won't remember what
input_textmeant, and neither will the person you hand the API to.
The single output is text (STRING), which wires into CLIPTextEncode's text port - or anywhere else a string goes.
Installing it
The pack installs like any custom node: ComfyUI Manager → search "comfy-deploy" (author: ihmily) → install → restart, or manually:
cd ComfyUI/custom_nodes/
git clone https://github.com/ihmily/comfy-deploy.git
cd comfy-deploy
pip install -r requirements.txt
No model files to download - this is pure code. One hard gate from the README: pack v1.0.1+ requires ComfyUI 0.3.67 or newer, so if the nodes never register, check your ComfyUI version first. And the step people genuinely skip: you also need the comfy-deploy-admin backend running, with its endpoint and API key entered in the ComfyDeploy panel (top menu bar or left sidebar). Without that second half, this node is a fancy string pass-through.
Gotchas
The request key must exactly match param_name - a mismatch silently falls back to the default and your caller gets confused output. Also be aware of the name collision: "Comfy Deploy" the cloud platform (comfydeploy.com) open-sourced its own platform in late 2025, and it's a different project entirely. If you googled your way here, make sure you're installing ihmily/comfy-deploy, not the other guy's repo.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| param_name | STRING | input_text | — |
| default_valueopt | STRING | — | |
| display_nameopt | STRING | — | |
| descriptionopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |