Nodes/ComfyUI-ZeroCLIP-nodes/ZeroClip Seed Pack
ComfyUI Node

ZeroClip Seed Pack

Your prompt is now four numbers — ZeroClip Seed Pack

By MushroomFleet·Created 5 months ago·Updated 5 months ago· 0
ZeroClip Seed Pack
    • seed
    concept_id1000
    style_id500
    mood_salt0
    world_seed42

    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.
    CategoryZeroClip

    Inputs (4)

    NameTypeDefaultDescription
    concept_idINT10000–65535Primary semantic axis (u16, 0-65535)
    style_idINT5000–65535Secondary style axis (u16, 0-65535)
    mood_saltINT00–65535Mood channel salt (u16, 0-65535)
    world_seedINT420–18446744073709550000Universe identifier (u64)

    Outputs (1)

    NameTypeDescription
    seedZEROCLIP_SEED