ZeroClip Seed Pack
Your prompt is now four numbers — ZeroClip Seed Pack
- seed
The whole pitch of the ZeroCLIP pack is that you never type a prompt again - you type four integers instead. ZeroClip Seed Pack is the widget you type them into. It's the node every A/B/D workflow starts from, and it's worth understanding first because everything downstream (concept, style, "world") is defined here, not in a text box.
ComfyUI normally gets its CONDITIONING from a CLIP Text Encode node, which runs your prompt through a text encoder. ZeroCLIP swaps that for a pure function: seed numbers in, a deterministic conditioning vector out. Same seed, same vector, same image - on any machine, any session. That's the whole appeal if you're doing reproducible grid sweeps or want a prompt path that can't drift between ComfyUI versions. Seed Pack is just the data holder for that function.
The four inputs that are your "prompt"
- concept_id (default 1000, 0–65535) - the primary semantic axis. This is the main dial: nearby values produce related outputs, so sweeping it is like sweeping a concept.
- style_id (default 500, 0–65535) - the secondary axis, aimed at visual aesthetic. Concept × style is your 2D coordinate space.
- mood_salt (default 0, 0–65535) - variation that doesn't move the core concept. Think of it as "same thing, different vibe."
- world_seed (default 42, u64) - the universe identifier. Same concept/style coordinates but a different world gives you entirely unrelated results.
That's it. The node outputs a single seed socket of the custom ZEROCLIP_SEED type, which you wire into a ZeroClip-A, -B, or -D Conditioning node (C takes a plain integer instead, so it doesn't use this).
How it actually works
Under the hood Seed Pack is embarrassingly simple: it packs the four values into a tuple. The magic happens later - the conditioner hashes the tuple with FNV-1a and feeds it through coherent noise so that nearby coordinates produce nearby conditioning vectors. That's why the README's claim that "nearby values produce related outputs" isn't marketing fluff; the weight distribution over the anchor library is a smooth function of concept_id and style_id. It only works if you treat the four fields as semantic axes, not as a random number.
Install
It ships in the ComfyUI-ZeroCLIP-nodes pack. Easiest route is ComfyUI Manager (search "ZeroCLIP"), or:
cd ComfyUI/custom_nodes
git clone https://github.com/MushroomFleet/ComfyUI-ZeroCLIP-nodes
Restart ComfyUI and you'll find Seed Pack under ZeroClip/ in the node menu. No pip install - the pack only needs torch and numpy, which ComfyUI already provides. The author (MushroomFleet, who also maintains the DJZ-Nodes video pack) keeps an explainer site at scuffedepoch.com/zeroclip-edu if you want the theory.
Where people get burned
- It does nothing by itself. Seed Pack only feeds a conditioner; if you wire it to a KSampler you'll get a type error. The real pipeline is SeedPack → Conditioning → KSampler.
- Nothing to randomize here. If you want ComfyUI's standard randomize-seed workflow, use the sibling ZeroClip Seed From Random node instead - Seed Pack's widgets are meant to be nudged deliberately.
- Field ranges are hard caps, not suggestions. concept/style/mood are u16; feed in something huge and it gets masked down to whatever fits, which is rarely what you intended. Keep them in 0–65535.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| concept_id | INT | 10000–65535 | Primary semantic axis (u16, 0-65535) |
| style_id | INT | 5000–65535 | Secondary style axis (u16, 0-65535) |
| mood_salt | INT | 00–65535 | Mood channel salt (u16, 0-65535) |
| world_seed | INT | 420–18446744073709550000 | Universe identifier (u64) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| seed | ZEROCLIP_SEED | — |