Load Embeddings by Name
` by Hand — This Node Prefixes It for You
- STRING
The whole job, in one sentence: you feed it a block of prompt text and it rewrites every embedding filename it finds into the embedding:name form, so you can type easynegative and get embedding:easynegative without ever touching the prefix yourself.
ComfyUI reads embeddings from your prompt text by a special embedding: prefix - that's the mechanism the built-in tokenizer keys off when it hits SDTokenizer._try_get_embedding (it still ships the loader even as the format itself fades; more on that below). The catch is that you have to type the prefix right, every time, or the whole phrase quietly becomes ordinary prompt text. Load Embeddings by Name exists purely to remove that footgun: it's a text-rewriter, not a model loader, and it doesn't call any API or need a key. Honestly, its real audience is people who keep a long negative-prompt block with several embeddings in it and are tired of remembering which names need the prefix.
How it works
Under the hood it's almost embarrassingly simple, and the source is worth reading if you've never peeked at a custom node. It calls folder_paths.get_filename_list("embeddings") to get every file in ComfyUI/models/embeddings, strips each down to its base name (path removed, extension removed), then runs a case-insensitive regex over your text replacing every match with embedding: plus that name. That's it - the pack has zero Python dependencies and no requirements.txt; the whole thing is this node, a sibling list node, and the standard library.
The inputs and outputs that matter
There's exactly one input and one output, and they're both a multiline text string.
- text (STRING, multiline) - your prompt. Positive or negative, doesn't matter; it's just text in, text out.
- STRING output - the rewritten prompt, ready to wire into a CLIP Text Encode node (positive or negative) exactly where you'd normally type the prompt.
So the flow is: text input → Load Embeddings by Name → CLIP Text Encode. If the name you typed isn't an installed embedding file, nothing changes and the word passes through untouched, which is fine and predictable.
Where people get burned
Two traps, both real, both visible in the code. First, it rewrites every case-insensitive occurrence of the filename anywhere in the text, with no word boundaries. An embedding named art will mangle party into pembedding:art. Keep your embedding filenames distinctive - real trigger words are usually one long token anyway. Second, and sneakier: don't feed it text that already has the prefix. embedding:easynegative contains easynegative, so the regex fires and you get embedding:embedding:easynegative. ComfyUI's loader will silently ignore that, and your embedding does nothing while you swear at the seed.
And the bigger honesty note, which no amount of prefixing fixes: an embedding is a vector for one specific text encoder. Drop an SDXL-era embedding into a Qwen3-encoded model and it silently does nothing - the filename just reads as prompt text and it looks like it "works." ComfyUI won't warn you. This node only fixes the prefix problem, not the encoder-compatibility problem.
Installing it
Drop the ComfyUI-Embeddings-Tools folder into ComfyUI/custom_nodes and restart, or let ComfyUI Manager do it - search "ComfyUI-Embeddings-Tools" (it's registered on the Comfy registry). No dependencies to pip, no models to download. It only reads the embeddings folder you already maintain.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| STRING | STRING | — |