Nodes/ComfyUI-PromptDrafter/Dual Prompts - PromptDrafter
ComfyUI Node

Dual Prompts - PromptDrafter

Dual Prompts - PromptDrafter

By Carasibana·Created 8 months ago·Updated 6 months ago· 2
Dual Prompts - PromptDrafter
    • positive_prompt
    • negative_prompt
    • positive_raw
    • negative_raw
    positive_prompt
    negative_prompt
    positive_prefix
    positive_suffix
    negative_prefix
    negative_suffix
    prompt_name
    load_prompt

    If you run SDXL-lineage models for any length of time, you've hit the moment where you're retyping the same forty tags into a fresh CLIP Text Encode for the third time this week. That's what Dual Prompts - PromptDrafter is for. It's a managed replacement for the plain text box upstream of your encoder: one green field for the positive prompt, one red field for the negative, and the ability to save the whole combination to a file and load it back later. The name undersells it - this is the node the pack is built around, and it quietly fixes several annoyances plain ComfyUI leaves you to deal with.

    How it works

    The node isn't a text encoder. It produces a STRING, which you then wire into a regular CLIP Text Encode (positive output into the positive CLIP box, negative into the negative one). What it adds on top of a bare text field is processing: it joins your prompt with optional positive_prefix/positive_suffix and their negative twins using smart comma handling (no double commas, no trailing ones), and it substitutes wildcards before anything reaches the encoder.

    Wildcards are the party trick. Type {wildcard_subject} anywhere in either prompt and the node sprouts an input port literally named wildcard_subject that you can feed from a Wildcard node. Drop {wildcard_lighting} in and you get a second port. Unmatched wildcards get replaced with an empty string, so forgetting to wire one silently removes it rather than erroring - useful to know before you wonder why a whole concept vanished.

    Everything is always-dirty (IS_CHANGED returns float("nan")), which means the node re-runs every generation. That's the whole point with wildcards: each queue hit re-rolls them instead of being cached into a stale prompt.

    The inputs and outputs that matter

    For a beginner, ignore almost everything except the two big text boxes and this trio:

    • prompt_name - type a name and hit save (or just type a name; entering one auto-saves in recent versions). It lands as a JSON file in saved/dual_prompts/.
    • load_prompt - a dropdown of everything you've saved. Pick one and the fields populate.
    • The positive_raw / negative_raw outputs - same text with wildcards applied but without prefix/suffix. Handy when you want the bare prompt elsewhere in the graph.

    The main outputs are positive_prompt and negative_prompt; that's what you feed the encoders.

    Installing it

    ComfyUI Manager, search "PromptDrafter" and install the ComfyUI-PromptDrafter pack, or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/Carasibana/ComfyUI-PromptDrafter
    

    Restart ComfyUI after. That's the whole install - the pack's requirements.txt explicitly lists no dependencies beyond ComfyUI itself, and there are no model downloads. Your saved prompts live in the pack's saved/ folder, which is gitignored, so git pull updates never eat your library.

    Where people get burned

    The one that trips everyone: this node doesn't call any API and it isn't a wildcard file system. The {wildcard_...} syntax is this pack's own in-graph thing - it's not Impact Pack's __wildcard__ and it's not the A1111 {a|b|c} bracket syntax, so a workflow that assumes those won't behave. And if you load an older workflow and see this node listed as DualPromptDrafter, that's just the pre-v1.3.3 name; the current key is Dual_PromptDrafter, kept as a silent alias for old saves. Search the new name and move on.

    CategoryPromptDrafter

    Inputs (8)

    NameTypeDefaultDescription
    positive_promptSTRING
    negative_promptSTRING
    positive_prefixoptSTRING
    positive_suffixoptSTRING
    negative_prefixoptSTRING
    negative_suffixoptSTRING
    prompt_nameoptSTRING
    load_promptoptCOMBO3 options: , anime_style, portrait_base

    Outputs (4)

    NameTypeDescription
    positive_promptSTRING
    negative_promptSTRING
    positive_rawSTRING
    negative_rawSTRING