Nodes/ComfyUI_SkipperNodes/Skipper EmbeddingStack
ComfyUI Node

Skipper EmbeddingStack

Three embedding slots that write the syntax for you

By Xkipper·Created about a year ago·Updated about a year ago· 0
Skipper EmbeddingStack
    • textOut
    embedding_1false
    file_1
    weight_11.00
    embedding_2false
    file_2
    weight_21.00
    embedding_3false
    file_3
    weight_31.00
    STRING

    If you still run SD 1.5 or SDXL-lineage checkpoints, you've been there: you want easynegative, bad-hands-5 and one more in your negative prompt, and every time you retype (embedding:bad-hands-5:0.8) you drop a colon or misspell the filename. Skipper EmbeddingStack is the "stop typing it by hand" answer. It gives you three toggleable slots, each holding an embedding from your folder plus a weight, and it assembles the whole prompt fragment for you.

    It's a text node, not a loader. There's no model inside - the pack is pure string manipulation with zero dependencies. The dropdowns are populated live from your ComfyUI/models/embeddings folder (folder_paths.get_filename_list("embeddings")), so anything you drop in there appears by filename without the extension.

    The three slots, and what each field does

    Each of the three rows is independent, and all three fields matter:

    • embedding_1/2/3 - the on/off toggle. A slot contributes nothing while it's off.
    • file_1/2/3 - the embedding to use, picked from the dropdown. None means unused, even if the toggle is on.
    • weight_1/2/3 - a float from -10 to 10, default 1.0. This is the :0.8 part of the syntax.

    There's also an optional STRING text input - wire your prompt (or the output of another text node) into it and the fragment gets appended onto it. The single output, textOut, is a plain string you feed into a CLIPTextEncode's text input, or into whatever text-concat chain your workflow already has.

    For each enabled slot with a real file, the node emits , (embedding:<file>:<weight>), and joins them onto the input. So a typical build comes out looking like my prompt, (embedding:easynegative:1.0), (embedding:bad-hands-5:0.8), . The stray commas and double spaces are cosmetic - ComfyUI's prompt parser shrugs at them.

    Installing it

    The README is two lines and asks for nothing. No requirements.txt, no model downloads, nothing to pip install - just the code.

    cd ComfyUI/custom_nodes
    git clone https://github.com/Xkipper/ComfyUI_SkipperNodes
    

    Then restart ComfyUI. Or, easier, use ComfyUI Manager → Custom Nodes → search "Skipper" and hit install. Your embeddings themselves still live in ComfyUI/models/embeddings; the dropdown reads them on startup.

    Where people get burned

    The (embedding:name:weight) syntax is AUTOMATIC1111 heritage. ComfyUI's sd1_clip.py does parse the embedding: prefix and the weight on CLIP text encoders, so this works fine on SD 1.5, SDXL, Illustrious, Pony - the CLIP-era models. It does not work on 2026's LLM-encoded models (Flux 2, Z-Image, Anima, anything on a Qwen3 or Mistral encoder): an embedding is a vector at one specific encoder's dimensionality, so there's nothing for it to bind to. Worse, the failure is silent - ComfyUI just ignores the embedding and the filename floats by as plain text, which is why people report it "works" on models where it does nothing.

    The sanity test is quick: rename the file to gibberish and regenerate on a fixed seed. If the image doesn't change, the embedding was never being applied.

    And keep weights sane. The node lets you dial to ±10, but the useful range is roughly 0.5–1.5 - past ~1.3 you oversaturate and get distortion. There's a reason the defaults sit at 1.0.

    Honest verdict: for SD 1.5/SDXL users who juggle a small fixed set of embeddings, this is a genuinely handy quality-of-life node - toggleable, no retyping. If you've moved to modern LLM-encoder models, the entire concept is inert and you can skip it.

    CategorySkipper-Nodes

    Inputs (10)

    NameTypeDefaultDescription
    embedding_1BOOLEANfalse
    file_1COMBO1 options: None
    weight_1FLOAT1.00-10–10
    embedding_2BOOLEANfalse
    file_2COMBO1 options: None
    weight_2FLOAT1.00-10–10
    embedding_3BOOLEANfalse
    file_3COMBO1 options: None
    weight_3FLOAT1.00-10–10
    STRINGoptSTRING

    Outputs (1)

    NameTypeDescription
    textOutSTRING