π·οΈ Hash Vault Label Builder
Stop typing cache labels. Wire them instead.
- in_1
- in_2
- in_3
- in_4
- label
This is the little glue node at the end of the Hash Vault suite, and its job is embarrassingly simple: take up to four inputs of any type, join the non-empty ones with a separator, and hand you back one STRING. That's it. Its only real purpose is feeding a human-readable label into Hash Vault (Save API Result)'s label input, so the Hash Vault Browser shows you "Alec Soth / Niagara / full" instead of a 64-character hash when you're hunting for a past run.
Why bother? Because labels are the difference between a cache you can actually use and a pile of hex. The sidecar system (v1.3.0+) stores your label in a {hash_key}.json file that's decoupled from the hash itself, so a label never invalidates a cache entry - but typing them by hand, on every workflow, forever, is exactly the kind of busywork that makes you stop labeling at all. This node is the "wire it once, never think about it" fix.
How it works
Nothing clever. Each input is stringified at join time. None and empty strings are skipped, so partially-wired workflows stay clean - leave three slots empty and you just get the one value. The remaining parts are joined with the separator string, which defaults to " / " and is exactly right for the "style / variant / intensity" pattern this pack is built around.
Inputs and outputs
separator(required) - the glue, default" / ".in_1throughin_4(all optional, any type) - the pieces. Wire whatever your workflow knows about: a Settings node'sstyleoutput, avariant, anintensity, a prompt line.label(output, STRING) - wire this into Hash Vault (Save API Result)'slabelinput. Done.
Concrete example from the pack's docs: in_1 gets a Settings node's style ("Alec Soth"), in_2 its variant ("Niagara"), in_3 its intensity ("full"), and you get "Alec Soth / Niagara / full" out - searchable later in the Hash Vault Browser.
The one trap
It's a dumb string joiner, so garbage in, garbage label out. Stringifying a tensor prints its shape (torch.Size([...])), and a bare prompt with line breaks makes a label that wraps badly. Keep it fed with short settings strings, not payloads. Also remember this node has no memory of its own - it's pure composition; if you want the same label to survive an editing session, that's the sidecar's job, not this node's.
Install
Ships in the ComfyUI-API-Optimizer pack, so the other vault nodes come with it. ComfyUI Manager: search "ComfyUI API Optimizer". Or:
cd ComfyUI/custom_nodes/
git clone https://github.com/jeremieLouvaert/ComfyUI-API-Optimizer.git
pip install -r ComfyUI-API-Optimizer/requirements.txt
Restart ComfyUI. It's one filelock dependency on top of your existing PyTorch - the whole pack is model-free and lightweight.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| separator | STRING | / | Separator placed between each non-empty input. Defaults to ' / '. |
| in_1opt | * | First input. Any type β stringified at join time. None or empty strings are skipped. | |
| in_2opt | * | Second input. | |
| in_3opt | * | Third input. | |
| in_4opt | * | Fourth input. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| label | STRING | β |