Nodes/Prompt Preset Manager/Prompt Preset Manager
ComfyUI Node

Prompt Preset Manager

Your prompt collection, finally out of the workflow file

By yurishk·Created about a month ago·Updated about a month ago· 2
Prompt Preset Manager
    • text
    prompt_text
    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 garden alternates on every run.
    • text (optional) - a capture input. Connect any upstream STRING output 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 plain STRING. 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.

    Categorytext/presets

    Inputs (2)

    NameTypeDefaultDescription
    prompt_textSTRINGEditable prompt content with native ComfyUI dynamic prompt support.
    textoptSTRINGOptional external text. Non-empty input replaces the editable prompt after execution.

    Outputs (1)

    NameTypeDescription
    textSTRINGExternal text when non-empty; otherwise the editable local prompt.