Embedding Helper π§·
Pick from what's actually installed
- text
- summary
Textual-inversion embeddings are a dying breed - LoRA ate their lunch years ago - but the ones that survive are still worth using, and the failure mode that kills them is almost always the same: you type the name wrong, or you type the right name and the file isn't where ComfyUI looks, and you get a silent "embedding not found, ignoring" warning. Nothing tells you. The embedding just doesn't apply and the image quietly comes out without it.
Embedding Helper exists to make that class of failure impossible. It reads whatever embeddings are actually installed in any embeddings/ folder ComfyUI knows about and gives you a dropdown - embedding_name - populated from real filenames. You can't mistype a name that doesn't exist because you can't type it at all.
Pick the embedding, set a weight (1.0 for the plain tag, anything else wraps it with a weight), and the node inserts the correct ComfyUI syntax into your prompt. The tokenizer expects embedding:name, with an optional (embedding:name:weight) weighted form - this node produces exactly that, stripping any .pt/.safetensors/.bin extension from the tag for you, since ComfyUI resolves by base name.
Where it inserts is the small wrinkle. Give insert_at a marker substring and it splices the tag right after the first occurrence of that text in your prompt - handy when you want the embedding near a specific phrase rather than dumped at the end. Leave it blank (or give it text that isn't in the prompt) and the tag gets appended. Outputs are the modified text string and a summary confirming what was inserted and where.
So when do you actually use it? Two cases. First, any workflow where an embedding is load-bearing - you want the tag correct, period. Second, prompt-builder pipelines where you're assembling text dynamically and want the embedding name as a guaranteed-valid building block rather than a hand-typed string. If you never use embeddings, skip this node; it's solving a very specific (very real) annoyance, not adding capability.
The honesty note: it's a convenience layer, not a loader. The embedding is still resolved at tokenize time by CLIP Text Encode - this node just guarantees the syntax and the spelling ahead of time. And one caveat from the wider picture: embeddings are bound to the text encoder they were trained against. SD 1.x embeddings don't load on SDXL, SDXL's don't transfer to Pony, and the LLM-encoder models of 2026 have nothing a CLIP-trained vector can bind to. A "works on paper" embedding on a mismatched base is just your filename being read as ordinary prompt text - this node can't fix that part, it can only fix the name.
Install
Part of OmniNodes:
cd ComfyUI/custom_nodes
git clone https://github.com/TensorVizion/OmniNodes
Restart ComfyUI (or ComfyUI Manager β "OmniNodes"). No extra dependencies.
Troubleshooting
- Dropdown shows "(no embeddings found)" - the pack can't see any files, and the node passes your text through unchanged with a note in
summary. Your embeddings belong inComfyUI/models/embeddings/. - Embedding has no effect - check the base model / text encoder pairing (see above), not the node. If the name resolved, this node did its job.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | β | |
| embedding_name | COMBO | 1 options: (no embeddings found) | |
| weight | FLOAT | 1.000β3 | β |
| insert_at | STRING | β |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| text | STRING | β |
| summary | STRING | β |