Embedding selector
With a preview and CivitAI info
- ui_widget
- combo
- prompt
- string
- path
- image
Most of ComfyUI's resource pickers treat your models folder like a dropdown list of filenames. LF_EmbeddingSelector treats it like a storefront: it scans your embeddings directory, shows you the available files, fetches metadata from CivitAI when it can, and hands you a ready-to-use prompt token plus the embedding's path and preview image. It's the same UX treatment this pack gives checkpoints and LoRAs, applied to the smallest and easiest-to-overlook model type.
Embeddings are the 10–80 KB textual-inversion files that bind a trigger word to a direction in the text encoder's space - no model weights involved. They're locked to whichever encoder they were trained against, so don't expect a SDXL embedding to mean anything on a 2026 LLM-encoder model. If you're running an SDXL-lineage base (Illustrious, Pony, and friends), they still work the way they always did. This node makes the "pick one and use it" part frictionless.
How it works
The required inputs tell the story. embedding is the combo box of everything in your embeddings folder (a "None" default if you haven't added any). weight is the embedding's strength, -3 to 3. get_civitai_info (default on) tries to pull the model's card from CivitAI so you see a description and image preview instead of a filename - handy when you have a folder full of cryptic triggers.
Then there's the randomize block: randomize picks an embedding at random from your directory, seed controls the pick, and filter narrows it with wildcards - so *neg* gets you only your negative embeddings. That's a genuinely nice touch for batch testing.
Outputs are the useful part:
prompt- the token you paste into your prompt text (wire this into a text concat or straight to CLIP).stringandpath- the name and the file path, for downstream logic.image- the embedding's preview image if CivitAI had one.combo- the raw embedding value for nodes that want the object directly.
The embedding_stack input is worth a mention: it's a string you can thread through several selector nodes to concatenate them, so a multi-embedding workflow stays one wire instead of a rat's nest.
Installing it
It's part of LF Nodes, so install the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/lucafoscili/comfyui-lf
Restart ComfyUI. Or search LF Nodes in ComfyUI Manager. No downloads at install - the pack's deps are just numpy, Pillow, opencv-python, requests and torch.
Gotchas
The CivitAI fetch needs internet and fails silently if it can't reach the API or the model isn't on CivitAI - you'll just get filenames, which is fine. And the randomize + filter pair is the feature to remember: you can iterate a batch where each run grabs a different negative embedding from your library, which is a great way to find which one actually helps.
One last thing, and it's the pack-wide one: comfyui-lf is legacy, frozen since Feb 2025, and active development moved to lucafoscili/lf-nodes. The frozen build is stable; the selector widgets got rebuilt with the LF Widgets library in the new repo.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| get_civitai_info | BOOLEAN | true | Attempts to retrieve more info about the model from CivitAI. |
| weight | FLOAT | 1.00-3–3 | Embedding's weight. |
| randomize | BOOLEAN | false | Selects an embedding randomly from your embeddings directory. |
| seed | INT | 420–18446744073709550000 | Seed value for when randomization is active. |
| filter | STRING | When randomization is active, this field can be used to filter embedding file names. Supports wildcards (*). | |
| embeddingopt | COMBO | None | Embedding to use. |
| embedding_stackopt | STRING | Optional string usable to concatenate subsequent selector nodes. | |
| ui_widgetopt | KUL_CARD | [object Object] | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| combo | — | |
| prompt | STRING | — |
| string | STRING | — |
| path | STRING | — |
| image | IMAGE | — |