Nodes/ComfyUI-PixlStash/PixlStash ControlNet Loader
ComfyUI Node

PixlStash ControlNet Loader

Pick your ControlNet by its picture, not by a filename you half remember

By Pikselkroken·Created 5 months ago·Updated about 22 hours ago· 13
PixlStash ControlNet Loader
    • control_net
    ◄control_net_sha256►

    Your ControlNet dropdown is a memory test. Every one you've downloaded sits in models/controlnet as a filename, and Load Control Net Model asks you to pick from a list of strings. Survivable in 2023, when there were eight models and you used two. Worse now: the modern answer is one union file per architecture - SDXL, FLUX, Qwen-Image, Z-Image - and they all look like controlnet-union-something-v1_1.safetensors. Which one matches the checkpoint in your graph is knowledge you're meant to carry in your head.

    The PixlStash ControlNet Loader replaces that dropdown with a thumbnail grid from a PixlStash model shelf. Click Browse ControlNets…, pick the file you meant, queue. Caveat up front: this is a filing improvement, not a ControlNet improvement, and it needs PixlStash - a self-hosted image manager by the same author. If your ControlNet folder is three files you know by heart, the built-in is better. Don't install a server to pick a file.

    What it does under the hood

    The node has one widget, control_net_sha256, and you're not meant to type in it: Browse writes the SHA-256 of the ControlNet on the shelf. The hash is the whole addressing scheme, so renaming folders on the server breaks nothing.

    On queue, the node asks the server for the shelf record of that digest. If PixlStash and ComfyUI share a filesystem and the shelf's copy is there at the recorded byte size, the file loads where it lies - no copying gigabytes around. Otherwise it streams the bytes once into models/controlnet/pixlstash/<sha256>.safetensors, hashing as it writes, and renames the partial file only after the digest matches. A truncated download can't become a cached "valid" file.

    Then it hands the path to comfy.controlnet.load_controlnet, the public call every ControlNet pack uses. One nicety: a file it can't parse raises immediately, with the path in the message, where the built-in would hand back None and leave the explosion to the Apply node. The loader also stamps what it loaded onto the run as a pixlstash_lock entry, so PixlStash can record which ControlNet made a picture.

    The field, and where the wire goes

    control_net_sha256 is the only input, and the author's tooltip says it plainly: written by the Browse button. Empty means a RuntimeError telling you to click Browse and pick a file; anything that isn't 64 lowercase hex gets told that instead.

    The one output is control_net (CONTROL_NET), and it goes into Apply Control Net alongside your conditioning and the preprocessor image - Canny, depth, pose, whatever you're conditioning on. The interesting knobs live on that Apply node. Start at 1.0 for structure-heavy work, drop to 0.3–0.7 when you want the prompt to win, and try releasing the condition before the final steps so the model adds its own detail rather than tracing your edge map to the end. Since it mirrors the built-in's shape, swapping it into an existing graph is drag-and-drop.

    Installing it

    ComfyUI Manager → search ComfyUI-PixlStash → Install → restart. Or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/Pikselkroken/ComfyUI-PixlStash.git
    # restart ComfyUI, then set Settings > PixlStash
    

    Deps are requests and Pillow, which any working ComfyUI already has; the pack wants ComfyUI 0.20.0 or newer. Nothing to download - your ControlNets live on the server.

    Then fill in URL and API token under Settings › PixlStash - read at runtime, never written into workflow JSON, so sharing a workflow doesn't leak your token. You need an owner token: the shelf is owner-only, so a read-scoped share token that loads pictures fine gets a 403 here. And this loader wants PixlStash 1.12 or newer, where ControlNets became their own shelf kind - it checks the server version first and names both numbers if yours is older.

    Where it goes wrong

    You picked a .pth or .gguf. This loader takes .safetensors only, and it says so by filename rather than failing inside torch.

    "No usable copy of this file is on this machine, and fetching one failed." Usually a server too old for the route that serves model bytes. If the log says "is not the file the shelf describes (N bytes here, M on the shelf)", that's the different-machines case: the shelf's paths are its own host's, so it refused a same-named file that could be anything, and re-downloaded.

    Hash-named copies appear in your stock dropdown. They land in models/controlnet/pixlstash/ as 64 hex characters and nothing evicts them. Clear that folder when the disk gets tight; the next run refetches.

    Multi-user. The nodes refuse to run rather than guess whose token to use. One single-user ComfyUI per PixlStash user.

    And a bit of realism: this is a one-person MIT pack holding an API token to your own server. Run it because you wanted PixlStash, not because a grid looked nice.

    CategoryPixlStash

    Inputs (1)

    NameTypeDefaultDescription
    control_net_sha256STRINGWritten by the Browse button — the SHA-256 of the ControlNet on the shelf.

    Outputs (1)

    NameTypeDescription
    control_netCONTROL_NETThe ControlNet, for an Apply ControlNet node.