SD1.5 Folder To SDXL Embedding Batch Converter
Convert a whole folder of SD1.5 embeddings to SDXL in one run
- output_directory
- converted_count
- skipped_count
- failed_count
- fit_token_cosine
- validation_hidden_cosine
- validation_pooled_cosine
- report
If you kept a 2022–2024 SD1.5 embedding library - style embeddings, negative-prompt helpers, a few character tokens you swore by - you already know your two options: convert them one at a time, or leave them dead on SDXL. This node is the one-at-a-time answer with the tedious part automated. Point it at a folder, pick an SDXL checkpoint, and it converts every SD1.5 embedding it finds into models/embeddings/converted_sd15-SDXL, mirroring your subfolder structure on the way out.
It's the batch sibling of the pack's single-file SD1.5 To SDXL Embedding Converter, and it shares all the same machinery. The clever part is that the expensive step - fitting the CLIP-L-to-CLIP-G alignment against your chosen checkpoint - happens exactly once and gets reused for the whole folder. Same with validation: one run against the bundled CLIP Interrogator phrase lists, one set of cosine scores for the entire batch. Then each file is loaded, sanity-checked (768-wide CLIP-L, no existing CLIP-G), projected through the fitted transform, and saved with its source vectors intact. The result is a proper SDXL .safetensors embedding per input file.
The inputs that matter: input_folder_path (defaults to your embeddings folder), sdxl_checkpoint, and name_suffix - default _sdxl, so easyneg.pt becomes easyneg_sdxl.safetensors and never collides with the original. recursive pulls in nested folders and preserves their relative structure. overwrite controls whether an existing output gets replaced. Everything else - the validation toggle, validation_phrase_count, validation_batch_size - you can leave at defaults.
Outputs: output_directory (where things landed), converted_count, skipped_count, failed_count, the same fit and validation cosine scores, and a report string that lists up to 100 entries per section, one line per file. Don't read a skip as a dead end - the report says why each file was skipped, and the usual causes are benign (already converted, not a standard 1.5 embedding, output exists with overwrite off). The node also excludes its own converted_sd15-SDXL output directory from a recursive scan, so you can't accidentally feed it its own output.
Install is the pack's standard path: ComfyUI Manager (search "ComfyUI-BridgeLab"), or clone into custom_nodes and restart. No dependencies beyond what ComfyUI ships, no model downloads. It sits under "embed_converter" in the menu.
Where people get burned: pointing input_folder_path at the wrong directory and running a recursive conversion that sweeps up things that aren't embeddings. You'll get a wall of skips in the report, which is harmless but confusing the first time. And if run_ci_validation is on but the bundled phrase files are missing (a stripped install), validation fails up front - flip it off and the conversion still runs, you just lose the quality scores. Individual bad files are recorded and skipped rather than killing the whole run, so a folder with a few oddballs still converts cleanly.
This is the one I'd reach for if you have a real library. The single-file converter is fine for testing one embedding; once you're at ten, the batch node is the whole point. ComfyUI refreshes its embedding list after the run, so the converted files are immediately usable as embedding:name triggers.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| input_folder_path | STRING | /tmp/ComfyUI/models/embeddings | — |
| sdxl_checkpoint | COMBO | 0 options: | |
| name_suffix | STRING | _sdxl | — |
| recursive | BOOLEAN | false | — |
| overwrite | BOOLEAN | false | — |
| run_ci_validation | BOOLEAN | true | — |
| validation_phrase_count | INT | 12816–4096 | — |
| validation_batch_size | INT | 321–256 | — |
Outputs (8)
| Name | Type | Description |
|---|---|---|
| output_directory | STRING | — |
| converted_count | INT | — |
| skipped_count | INT | — |
| failed_count | INT | — |
| fit_token_cosine | FLOAT | — |
| validation_hidden_cosine | FLOAT | — |
| validation_pooled_cosine | FLOAT | — |
| report | STRING | — |