Nodes/PG Nodes/Unified Loader
ComfyUI Node

Unified Loader

Every model in one node, with a VRAM escape hatch

By GizmoR13·Created about a year ago·Updated about a year ago· 15
Unified Loader
    • MODEL
    • CLIP
    • VAE
    • CLIP_VISION
    • CONTROLNET
    • IPADAPTER
    • UPSCALE_MODEL
    ◄device_cpufalse►
    ◄checkpointnone►
    ◄diffusionnone►
    ◄vaenone►
    ◄clip_1none►
    ◄clip_2none►
    ◄clip_3none►
    ◄clip_4none►
    ◄clip_visionnone►
    ◄controlnetnone►
    ◄ipadapternone►
    ◄upscalenone►
    ◄_►
    ◄diffusion_typedefault►
    ◄clip_typeauto►

    ComfyUI's stock loaders are one-model-per-node: a checkpoint loader here, a CLIP loader there, a separate ControlNet loader, an IPAdapter loader, an upscale model loader... A busy workflow ends up with five or six loading nodes sprawled across the canvas before you've drawn a single image. PgUnifiedLoader collapses that into one node that loads everything - checkpoint, diffusion UNet, VAE, up to four CLIP files, CLIP-Vision, ControlNet, IP-Adapter, and an upscale model - and hands you a single output bundle.

    The headline feature is the device_cpu toggle. Flip it and the loader attempts to offload the non-sampling parts of the stack (the CLIP encoders, the VAE, ControlNet, the upscale model - the pieces that aren't the denoising engine) onto CPU, freeing VRAM for the actual sampler. The README is honest about this being best-effort: not everything can be moved off-GPU on every setup, but when it works, it's the difference between OOM-ing and squeezing out a bigger resolution or a higher-res upscale pass on a 6GB card.

    How it works

    Every selector defaults to none, and the node only loads what you actually set - this is a build-your-own-stack loader, not a "load all four clip slots" machine. Internally it uses ComfyUI's standard loading paths (load_checkpoint, load_unet with your chosen diffusion_type, load_vae with TAESD shortcuts like taesd/taef1, load_clip, load_clip_vision, load_controlnet, load_ipadapter, load_upscale_model), so files are read from the same model folders you already populate. Each sub-load is wrapped in its own try/except - one bad file prints an error and the rest of your stack still loads.

    The two type dropdowns matter more than they look: diffusion_type picks the weight dtype for UNet loads (default, or the fp8_e4m3fn/fp8_e4m3fn_fast/fp8_e5m2 quantized variants - FP8 is the usual "fits at lower VRAM" choice for new models), and clip_type defaults to auto, which picks the right CLIP architecture per family (SD 1.x, SDXL, SD3, Flux, Qwen, and the rest). Leave both alone until you hit a real constraint.

    Inputs and outputs

    • device_cpu - the offload toggle. Start with it off; switch on when the sampler is OOMing.
    • checkpoint → MODEL/CLIP/VAE; diffusion → MODEL; vae → VAE; clip_1–clip_4 → CLIP (for dual/triple text encoders); clip_vision → CLIP_VISION; controlnet → CONTROLNET; ipadapter → IPADAPTER; upscale → UPSCALE_MODEL.
    • The _ dropdown is a UI divider, marked inactive - ignore it.

    The seven outputs (MODEL, CLIP, VAE, CLIP_VISION, CONTROLNET, IPADAPTER, UPSCALE_MODEL) are what make this one node replace a row of loaders.

    Install

    Part of PG Nodes: ComfyUI Manager → "PG Nodes" → install → restart, or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/GizmoR13/PG-Nodes
    

    No model downloads - it reads your existing model folders.

    Common issues

    The dropdowns are populated at startup, so a freshly downloaded model won't appear until you restart ComfyUI. If device_cpu seems to change nothing, that's the best-effort reality - check which piece is actually eating VRAM with a monitor rather than assuming the toggle worked. And the classic: picking both a checkpoint and a diffusion in one graph means whichever loads second overwrites MODEL; pick one path per graph.

    CategoryPG

    Inputs (15)

    NameTypeDefaultDescription
    device_cpuBOOLEANfalse—
    checkpointCOMBOnone1 options: none
    diffusionCOMBOnone1 options: none
    vaeCOMBOnone1 options: none
    clip_1COMBOnone1 options: none
    clip_2COMBOnone1 options: none
    clip_3COMBOnone1 options: none
    clip_4COMBOnone1 options: none
    clip_visionCOMBOnone1 options: none
    controlnetCOMBOnone1 options: none
    ipadapterCOMBOnone1 options: none
    upscaleCOMBOnone1 options: none
    _COMBOUI divider — inactive
    diffusion_typeCOMBOdefault4 options: default, fp8_e4m3fn, fp8_e4m3fn_fast, fp8_e5m2
    clip_typeCOMBOauto16 options: auto, SD 1.x/2.x, SDXL, SD3, Stable Cascade, FLUX, +10

    Outputs (7)

    NameTypeDescription
    MODELMODEL—
    CLIPCLIP—
    VAEVAE—
    CLIP_VISIONCLIP_VISION—
    CONTROLNETCONTROL_NET—
    IPADAPTERIPADAPTER—
    UPSCALE_MODELUPSCALE_MODEL—