Prompt Preset Manager
Your prompt collection, finally out of the workflow file
- text
If you came from A1111, you know the pain: that tool had a style-picker that applied a saved positive and negative pair with one click, and ComfyUI made you copy-paste the same block of tags into every new workflow. Prompt Preset Manager is the fix - a shared, searchable prompt library that lives in one node, works across all your workflows, and quietly saves you from building yet another wall of text nodes.
It's a pure plumbing node, the kind that touches no pixels. You slot it into the text layer of your graph and wire its text output into your CLIP Text Encode (or any prompt input that takes a STRING). The whole point is de-duplication: one prompt defined once, edited in one place, fanned out anywhere.
How it works
The clever part is that the library isn't stored in the workflow at all. Presets live in data/presets.json inside the plugin's own folder, with automatic backups rotated into backups/ (it keeps the last 12). The frontend - a small web UI the plugin serves and talks to over /promptpreset routes - handles searching, nested folders, tags, favorites, sorting, and import/export. The node widget is a native editable STRING box; the selected preset and any local edits are serialized into the node itself, so duplicated nodes and reopened workflows keep your draft. That "shared library + serialized draft" split is what makes it feel safe: your collection is global, but your per-workflow tweaks don't clobber it.
Under the hood it's honest about the plumbing. The node hashes its inputs in IS_CHANGED so the text stays in sync when you edit mid-workflow, and it's an output node - it always runs, so it never gets skipped by ComfyUI's execution caching.
Inputs and outputs
Three fields total, and only two you'll actually touch:
prompt_text- the editable box with your current prompt. It supports ComfyUI's native dynamic prompts, so{cat|dog} in a gardenalternates on every run.text(optional) - a capture input. Connect any upstreamSTRINGoutput here (a prompt-refiner, an LLM node); if it arrives non-empty, it replaces the box contents and flows through. Empty upstream leaves your local text alone.- Output
text- one plainSTRING. Wire it to your positive/negative prompt input, or leave it unconnected and run the node as a text-capture endpoint.
The text input is forced to be a socket, so you can't type into it - that's by design; it's for capture, not for hand-typing.
Installing it
ComfyUI Manager is the easy route: search for Prompt Preset Manager and install, then restart. Manual is equally painless:
cd ComfyUI/custom_nodes
git clone https://github.com/yurishk/ComfyUI-PromptPresetManager.git
Restart ComfyUI after cloning. The README's "no third-party Python dependencies" claim checks out - pyproject.toml lists an empty dependencies list, so there's no heavy install step and no model files to download. Find it under text/presets in the node menu.
Where people get burned
The one real trap: your library lives inside the plugin directory, not in your workflows. If you delete or re-clone the custom node folder without exporting first, your presets go with it. The plugin does keep automatic backups in backups/, and you can export the whole library (or a folder, or a single preset) as a version-1 bundle - but if you're on a fresh machine or a Docker reset, grab data/ and backups/ along with the export.
Second, don't expect this to replace wildcards or a full prompt-engineering stack. It's a library and an editor, not a combinator. If you want randomized prompt assembly, keep a wildcard node around; use this for your curated, hand-tuned base prompts and style blocks.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt_text | STRING | Editable prompt content with native ComfyUI dynamic prompt support. | |
| textopt | STRING | Optional external text. Non-empty input replaces the editable prompt after execution. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | External text when non-empty; otherwise the editable local prompt. |