PromptFlow
Your ComfyUI prompts deserve better than a giant text box
- positive
- negative
- prompt_data
The default way to write a prompt in ComfyUI is a CLIP Text Encode node with one giant multiline box. You cram subject, style, camera, lighting, and quality into a single string, and when you want to try a variation you either edit the whole blob or lose track of what you changed. That works for one-offs. It's miserable when you're building a character library, swapping styles across a batch, or just trying to keep a base prompt intact while you fiddle with one element.
PromptFlow (the main node, class PromptFlowCore) replaces that text box with a structured prompt editor that lives inside a single node. It's two products in one: a form and a wildcard engine. The form has a Simple mode (3 fields: Main Prompt, Style, Quality) and an Extended mode with 11 granular fields - Subject, Character, Expression, Outfit, Pose, Location, Style, Camera, Lighting, Quality, Custom. You fill those in, optionally hit Auto-Sort to paste an existing prompt and have it distributed across the fields, and the node assembles the final positive and negative strings for you. Everything you'd normally juggle in your head as "remember to keep the film-camera bit, bump quality, don't forget the negative" becomes labeled fields and presets.
How it works
It's pure text processing - no models, no API calls, no key. The whole node state lives in one JSON widget (widget_data), and on every queue it assembles the positive prompt from your fields, expands any wildcards, and hands you ready-to-encode strings. It can't make your images better on its own; it makes the text you feed the sampler dramatically easier to control and repeat.
The wildcard engine is where it earns its keep. {option1|option2|option3} inline, plus __folder/file__ file wildcards loaded from ComfyUI/wildcards/ (one option per line in a .txt). Each field gets a mode: Fixed, Random, Increment, or Decrement. This is the old A1111 wildcard syntax - the bracket trick from the 2024/2025 era where people batch 32 runs and get the same character across different settings with no training involved. PromptFlow just packages it with a UI and seed control.
The inputs and outputs that matter
Because the node is UI-driven, only a few inputs actually show on the graph:
- seed - makes wildcard selection deterministic. Same seed, same picks, every time. Set it once; it's your reproducibility lever.
- trigger_words - the LoRA Manager integration. It auto-prepends your LoRA's trigger words to the positive prompt so you stop forgetting them (and yes, LoRA trigger words still matter - they're how the concept gets bound in).
- input_prompt - optional text prepended to the output, handy for a workflow-level override.
The three outputs are what you wire up:
positive→ CLIP Text Encode (positive)negative→ CLIP Text Encode (negative)prompt_data→ the packed prompt state, meant to feed the PromptFlow Variations node
Install
ComfyUI Manager is the easy path: search "PromptFlow", install, restart. Or clone it:
cd ComfyUI/custom_nodes
git clone https://github.com/maartenharms/comfyui-promptflow
Then restart ComfyUI. There are no model files to download and no heavy Python dependencies - it's a UI-and-strings node, so it's lightweight. It's MIT-licensed and free, from Maarten Harms ("Mern"), the same author as the FlowPath organization pack. It ships 22 built-in presets (10 style, 5 quality, 7 negative) and shares a 7-theme visual system with FlowPath.
Common gotchas
The one that actually bit people at launch: the node not showing in ComfyUI Manager. Manager's list is a registry, and right after release PromptFlow wasn't in it yet - two users hit this in the release thread. Fix: update ComfyUI and Manager, refresh the node list, and search again; the author confirmed it's since registered. If you cloned manually, double-check the folder is exactly ComfyUI/custom_nodes/comfyui-promptflow and restart fully.
Other than that: wildcards not expanding usually means a field is stuck on Fixed mode (switch to Random or Increment), or a __file__ wildcard pointing at a missing .txt. And Auto-Sort is keyword-based, so it occasionally miscategorizes - it shows you a preview precisely so you can catch that before hitting Apply. Give the thing one honest try on a workflow you already run; the structured-form habit is hard to shake once you have it.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| widget_data | STRING | {} | — |
| seedopt | INT | 00–18446744073709550000 | Seed for deterministic wildcard selection |
| trigger_wordsopt | STRING | Trigger words from LoRA Manager (auto-prepended to prompt) | |
| input_promptopt | STRING | Optional prompt to prepend to output |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| positive | STRING | — |
| negative | STRING | — |
| prompt_data | STRING | — |