ApoStudio User Prompt
Stop retyping prompts — ApoStudio User Prompt is a dropdown over a folder of files
- user_prompt
Every workflow like this ends the same way: you type the same user message into the Chat node over and over. ApoStudio User Prompt exists to make that a dropdown instead of a text box. It reads .txt, .md, and .json files from the prompts/user/ folder inside the pack, and hands you the contents as a string.
How it works. The node lists the files in prompts/user/ on every run and rebuilds its dropdown - drop a new file in, hit run, and it's there without restarting ComfyUI. That "refresh every run" behavior is deliberate (the node forces itself to rerun), which is a small cost but the right trade for a file picker. For .json files it's smart: it extracts the value of the first key it finds among prompt, user_prompt, content, text, and message; if none match, you get the whole JSON as a string.
Inputs and output. One input: file (the dropdown). One output: user_prompt, a STRING. Wire it to the Chat node's user_prompt_in - a connected input automatically overrides the typed box, so leave Chat's user_prompt text area empty and let the file win. The pack ships two examples: describe_image.txt (an image-description prompt) and enhance_prompt.txt (a diffusion prompt expander).
Install. Standard ApoStudio setup - ComfyUI Manager (search "ApoStudio") or:
cd ComfyUI/custom_nodes
git clone https://github.com/apoloniart/ApoStudio
pip install -r custom_nodes/ApoStudio/requirements.txt
No models, no heavy dependencies (just requests and Pillow). Restart, then the node is under the ApoStudio category - search "apo" to find it.
Where people get burned. The files live in the pack's folder - ComfyUI/custom_nodes/ApoStudio/prompts/user/ - not in ComfyUI's input/ directory, and people drop files in the wrong place all the time. If the dropdown shows (no files found), that's what happened. One more thing: this node reads a file at run time, so it's for static messages and saved variations. For a message you want to type fresh each run, just use Chat's own text box - this node earns its place when you've got a library of prompts you reuse.
It's a small node, and it's not trying to be more. But a dropdown full of your saved prompts beats typing, and it composes cleanly with the System Prompt node to give Chat a full "role + request" input with zero retyping.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| file | COMBO | 2 options: describe_image.txt, enhance_prompt.txt |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| user_prompt | STRING | — |