ComfyUI Node

Load Embedding

A dropdown for a prompt trick most models can't use anymore

By jax-explorer·Created 2 years ago·Updated about a year ago· 1
Load Embedding
    • string
    embedding_name
    strength_embedding1.00

    Here's a thing that trips people up: this node doesn't output a MODEL, a CONDITIONING, or anything you'd normally think of as "the embedding applied." It outputs a STRING. That's not a bug - it's an accurate reflection of how embeddings actually work in ComfyUI, and once you know that, the node makes complete sense.

    What an embedding actually is

    An embedding (also called textual inversion) isn't a patch to your model's weights the way a LoRA is. It's a handful of learned vectors living in your text encoder's own space, bound to a trigger word - which is why the files are tiny, 10 to 80 KB, versus tens or hundreds of megabytes for a LoRA. Under the hood, ComfyUI doesn't apply an embedding through a special node at all; you invoke it with plain text, an embedding:name token dropped directly into your prompt string. This node exists purely so you don't have to remember that syntax or your embedding's exact filename - pick it from a dropdown, set a strength, and it hands you back the formatted snippet as a string, which you then feed into whatever builds your prompt text before it reaches CLIPTextEncode.

    The one thing you need to know before you use one

    Embeddings are locked to the text encoder they were trained against, and that lock is the whole story of why the technique has faded. SD 2.0's encoder swap broke every SD 1.x embedding overnight, and the current generation of models - Z-Image, Flux, Qwen Image, anything running an LLM-style text encoder instead of CLIP - has nothing for a CLIP-trained vector to bind to. The dangerous part is that nothing tells you when this happens. ComfyUI, Forge and A1111 all silently ignore an embedding that doesn't apply rather than erroring, so if you drop an old embedding into a modern workflow and the output looks like it changed, that's very likely the descriptive filename acting as ordinary prompt text, not the embedding doing anything. If you want to check for yourself: rename the file to something meaningless and regenerate on a fixed seed - if the image doesn't change, it wasn't the embedding.

    What's left of the format in practice, as of 2026, is concentrated almost entirely on the SDXL lineage - Illustrious especially - for named poses, characters and styles, not the negative-prompt embeddings (EasyNegative and friends) the technique used to be known for.

    The inputs and outputs that matter

    • embedding_name (enum) - a dropdown populated from whatever's sitting in your models/embeddings folder. If it's empty, that's not broken, it just means you haven't put a .safetensors, .pt or .bin embedding file there yet - drop one in and restart.
    • strength_embedding (FLOAT, default 1, range -100 to 100) - per the node's own tooltip, "how strongly to modify the diffusion model," and it can go negative. Keep it modest; a value far from 1 tends to fight the rest of your prompt rather than blend with it.
    • Output: string (STRING) - the formatted embedding reference, ready to be concatenated into your positive or negative prompt text before it hits CLIPTextEncode.

    How to install it

    • ComfyUI Manager - search "comfyui-model-dynamic-loader," install, restart.
    • Manual -
      cd ComfyUI/custom_nodes
      git clone https://github.com/jax-explorer/comfyui-model-dynamic-loader
      
      then restart. No dependencies beyond the pack itself - this node just scans a local folder and formats a string, nothing downloads at run time.

    Common issues & troubleshooting

    Dropdown is empty. You need at least one embedding file already sitting in models/embeddings for the enum to populate - this node doesn't fetch embeddings from anywhere, unlike its CivitAI/HuggingFace-sourced siblings elsewhere in this pack.

    Applied it, nothing changed. Almost always an architecture mismatch. Check what base model the embedding was trained for - if it's SD 1.5 or SDXL and you're running anything with an LLM text encoder, it will not error, it will just do nothing, and the UI won't warn you either way.

    Style shifted more than expected. Even a working, compatible embedding is opaque - a packaged bundle of vectors you can't inspect - and community reports consistently note that popular ones like EasyNegative can flatten style variety and bias faces if left in every generation. If you're debugging a prompt or trying to learn what's actually driving your output, pull embeddings out first.

    Categoryembeddings

    Inputs (2)

    NameTypeDefaultDescription
    embedding_nameCOMBOThe name of the embeddings.
    strength_embeddingFLOAT1.00-100–100How strongly to modify the diffusion model. This value can be negative.

    Outputs (1)

    NameTypeDescription
    stringSTRING