IPAdapter Save Embeds
Bake a reference once, reuse it forever
- embeds
Every time IPAdapter conditions a generation, it first runs your reference image through a CLIP vision encoder to turn it into an embedding - a numeric fingerprint of what the image looks like. That encode step is cheap-ish but not free, and it's identical every single time for the same reference. Save Embeds lets you do it once and write the result to disk, so you never have to encode that image again. Load it back with IPAdapter Load Embeds and you skip straight to applying.
Why bother? A few real reasons. If you've dialed in a reference you'll reuse across dozens of runs, caching the embed shaves the encode off every one. If you want to share a "look" with someone without shipping the actual source image, an embed file is a tidy way to do it. And if you're running big animation batches, precomputing embeds keeps the encoder from re-chewing the same frames. It's a small quality-of-life node with a genuine payoff in the right workflow.
How it works
This is an output node - it's a terminal, not a pass-through, so it sits at the end of a branch and produces no wire you route onward. You feed it an EMBEDS object (the encoded reference, produced upstream by an IPAdapter encoder node), give it a filename, and it writes the embedding to disk in ComfyUI's output area. That saved file then shows up in the Load Embeds node's dropdown for reuse.
The inputs
embeds- the encoded reference to save, typeEMBEDS. This comes out of an IPAdapter encoder node (the one that turns an image into embeddings). If you don't have an encoder in your graph yet, that's the piece you're missing - Save Embeds doesn't encode anything itself, it only persists what's handed to it.filename_prefix- the name to save under, defaultIP_embeds. Give it something descriptive (watercolor_ref,client_style_A) so future-you can find it in the Load Embeds list.
There are no outputs - it's the end of the line. The file it writes is the deliverable.
Installing the pack
ComfyUI Manager: search ComfyUI IPAdapter plus, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/cubiq/ComfyUI_IPAdapter_plus
then restart, and keep ComfyUI current. To actually produce embeds you'll want the usual model files in place - CLIP vision encoders in ComfyUI/models/clip_vision and IPAdapter weights in ComfyUI/models/ipadapter - because something upstream has to do the encoding before this node can save it.
Where people get burned
The main confusion is expecting Save Embeds to make an embedding. It doesn't - it saves one. You need an encoder node upstream feeding the embeds input, and if that's missing the node has nothing to write. Get the encode → save chain straight and it just works.
The second thing: an embed is tied to the encoder and adapter that made it. A saved embed encoded for an SD 1.5 ViT-H setup won't magically work with an SDXL bigG adapter later - reload it into the same family it was born in, or you'll hit the same shape mismatch that plagues the rest of the pack. Label your files accordingly. And the standing caveat: this is an SD 1.5 / SDXL pack in maintenance mode, so any embeds you cache are for those bases only.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| embeds | EMBEDS | — | |
| filename_prefix | STRING | IP_embeds | — |
Outputs (0)
No outputs