Nodes/ComfyUI-Prompto/Prompto Snippet
ComfyUI Node

Prompto Snippet

The boring node that saves your best negative prompt

By EY4O·Created 7 days ago·Updated 3 days ago· 0
Prompto Snippet
    • text
    ◄snippet▾►
    ◄format▾►
    ◄roll1►

    The most valuable text in your ComfyUI install is probably a negative prompt you tuned over an evening and then lost. Not because it was clever - because it was local to a model, a LoRA stack and an aspect ratio, and you'll never reproduce it from memory.

    Prompto Snippet is a one-job node: it hands you one saved piece of prompt text from your library, as a string.

    What it is

    ComfyUI-Prompto's smallest node, and the one I'd argue earns its place first. Snippets in the Prompto Chrome extension are organised by category - Lighting · Golden hour, Camera · Heroic low angle, Style · Analog film, Negative · Hands fix, Wildcards · Hair color - and each one can carry both tags and a prose version. The pack ships seven as samples so the thing works out of the box.

    The pattern it's built for: stop keeping your lighting vocabulary inside a single 900-character positive prompt. Keep it in named blocks you can recombine.

    How it works

    snippet is the dropdown, labelled Category · Name. format picks which half of the snippet you get:

    • tags - the tags, comma-joined.
    • prose - the prose version, falling back to the joined tags if that snippet has no prose written.

    roll then expands any {a|b} choices and __snippet__ references inside whatever came out, using the rest of your snippet library as the vocabulary. Same roll, same text; randomize the widget and you get a new phrasing every queue. Like the other roll widgets in this pack it starts on fixed, so a saved workflow keeps the version that made the image you liked.

    Output is a single text STRING. That wires into a CLIP Text Encode's text input, any string primitive, or a Concatenate Text node if you're assembling a prompt from three snippets and a character.

    That last pattern is the one worth adopting: Snippet → Concatenate Text → CLIP Text Encode. Stack a lighting snippet, a camera snippet and a style snippet on one line, and now your "look" is four dropdowns instead of a paragraph you're afraid to edit.

    Why bother for one string

    Because the negative side is where it pays off. The negative prompt is not a filter - it replaces the empty string in the CFG pass, so the sampler pushes away from your text instead of away from nothing. It's free above CFG 1 and does nothing at CFG 1, which is why distilled models don't want one. Everything about that argues for a small, specific, tested negative rather than forty inherited keywords: name the defect you can actually see.

    A Negative · Hands fix snippet is exactly that shape, and it's the kind of thing you want identical across four workflows rather than retyped four times with a typo.

    Install

    cd ComfyUI/custom_nodes
    git clone https://github.com/EY4O/ComfyUI-Prompto.git
    

    Restart ComfyUI. No Python dependencies beyond ComfyUI itself, no models, no config - the pack's pyproject.toml lists an empty dependency set. ComfyUI Manager → search Prompto works too.

    The nodes appear under Prompto in the node menu. Your own snippets require the Prompto Chrome extension (currently unpublished - load it unpacked via chrome://extensions → Developer mode → Load unpacked), and after it syncs, press R in the ComfyUI tab so the dropdown rebuilds.

    Where people get burned

    Rename in Chrome, don't delete and recreate. A renamed snippet still resolves in workflows you saved under the old name, because the synced snapshot carries earlier labels. A deleted one doesn't - the node runs and then tells you Prompto has no snippet by that name, rather than refusing at validation time.

    format: prose isn't a rewrite. It's the prose field if the snippet has one and the tags if it doesn't. If your snippets are tag-only, prose and tags give you the same string and that's not a bug.

    It doesn't concatenate anything. One snippet, one output. Beginners reasonably expect the node to join several; it doesn't, and once you see the output is just a string you'll see why a Concatenate Text node is the better place for that.

    The wildcards run here, not upstream. Braces coming out of a Prompto Character node pass through that node untouched. If a snippet's text contains {a|b}, this node's roll is what resolves it.

    CategoryPrompto

    Inputs (3)

    NameTypeDefaultDescription
    snippetCOMBO7 options: Lighting · Golden hour, Lighting · Moody rim, Camera · Heroic low angle, Style · Painterly, Style · Analog film, Negative · Hands fix, +1
    formatCOMBO2 options: tags, prose
    rollINT10–4294967295Seed for {a|b} and __snippet__ wildcards in the snippet

    Outputs (1)

    NameTypeDescription
    textSTRING—