String Input (fal)
Turning a ComfyUI text field into an API parameter
- STRING
Here's the thing this node is actually for, and it's not what the name suggests. It looks like a plain "type some text here" primitive, and in a normal local ComfyUI graph that's basically all it is. The real job shows up only when you run your workflow on fal.ai: String Input declares a named text parameter that becomes a field in your workflow's HTTP API. The name you give it is the JSON key you POST to. The value is the default. That's the whole trick.
This is part of the ComfyUI-fal-Connector, fal's own bridge for running a ComfyUI workflow on their serverless GPUs instead of your machine. You build and test the graph locally, hit "Save as fal format," and POST the exported JSON to fal.run/fal-ai/comfy-server. Every String Input node in that graph turns into an overridable request field. So the workflow stops being a fixed thing you re-open in the editor and becomes an endpoint: {"prompt": "a red fox in snow"} in, image out.
Why you'd reach for it
Think about the gap the ComfyUI ecosystem keeps complaining about - paid cloud services are "open browser, click button, get result," while local ComfyUI is install-Python-manage-CUDA-fix-missing-nodes. This node is one of the pieces that closes that gap in the other direction: it lets you take a workflow you built and hand it to someone else as a click-a-button API, without them ever seeing the graph. The prompt field is the obvious candidate. Anything a caller should change at request time - a prompt, a negative prompt, a filename prefix, a style-tag string - gets a String Input with a sensible name.
If you're just running things locally and never touching fal, honestly you can use a regular primitive string or a text node; you gain nothing extra here. The value is entirely in the "this is a public parameter" declaration.
Inputs and outputs
Two inputs, both required, both plain text:
- name - the parameter's key in the API request. Default is
str_input. Rename it to something real likepromptornegative_prompt, because this string is what your API caller sends. Don't leave three nodes all namedstr_input; they collide into one ambiguous field. - value - the default text used when the caller doesn't override it. Locally, it's just the value the node emits.
The single output is a STRING. Wire it into any text input - the positive prompt on a CLIP Text Encode, a filename on a Save Image, a concat node, wherever a string belongs. It behaves like any other string wire from there.
Installing it
The connector ships as part of fal's bundle. The README's real path:
git clone --recursive https://github.com/badayvedat/ComfyUI-fal.git
cd ComfyUI-fal
pip install -r requirements.txt
That parent repo pulls in this connector (and its sibling extensions) as submodules. Then set up credentials: generate a fal API key from your fal dashboard, and drop it into fal-config.ini. Watch the path - the README flags this explicitly - that ini file goes in ComfyUI-fal/custom_nodes/ComfyUI-fal-Connector/, not the repo root. There's an optional Hugging Face token slot too, for pulling gated models at run time. Start the server with main.py.
If you only want the nodes to appear in an existing ComfyUI, search ComfyUI-fal-Connector in ComfyUI Manager, or cd ComfyUI/custom_nodes && git clone https://github.com/badayvedat/ComfyUI-fal-Connector, then restart. There are no model downloads and no heavy dependencies - it's a thin bridge, not a model pack.
Where people get burned
The big one is expecting local magic. Dropped into a plain ComfyUI with no fal-config.ini and no application_name = fal-ai/comfy-server/stream target, this is just a labelled constant - the API-parameter behavior only exists inside fal's pipeline. If your "Save as fal format" export doesn't expose the field you expected, check that the node's name is unique and that it actually reaches a node that consumes it; an orphaned String Input wired to nothing won't surface as anything useful. And if remote runs fail auth, it's almost always the config file in the wrong directory or a missing/expired fal key - not the node.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| name | STRING | str_input | — |
| value | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| STRING | STRING | — |