Nodes/Tenser Tensor/TT SDXL Models Loader
ComfyUI Node

TT SDXL Models Loader

SDXL's loaders and a checkpoint merge in one node

By tenser-tensor·Created 7 months ago·Updated 5 months ago· 0
TT SDXL Models Loader
    • MODEL
    • CLIP
    • VAE
    primary_ckpt
    secondary_ckpt
    primary_weight1.00
    clip_l
    clip_g
    clip_device
    vae_name

    SDXL's normal loader story is three nodes minimum: a CheckpointLoader for the UNet, a DualCLIPLoader for CLIP-L and CLIP-G, and a VAELoader. TenserTensor's TT SDXL Models Loader collapses that into one box - and then does one thing the stock loaders can't: it merges a second checkpoint into the first on the fly. Pick a primary checkpoint, optionally pick a secondary one and set how much of each you want, and you get MODEL, CLIP, and VAE out the right side.

    The merge is the reason this node exists, honestly. primary_ckpt is your base model, secondary_ckpt defaults to "None" (skip the merge entirely), and primary_weight (0–1) controls the blend: at 1.0 you get 100% primary, at 0.5 a 50/50 mix, toward 0 you're mostly the secondary. Under the hood it loads both checkpoints, clones the primary, and applies the secondary's weights as patches weighted by primary_weight vs 1 - primary_weight - the same weighted-merge math you'd get from a dedicated model-merging tool, but done live in the graph so you can dial a style mix per render instead of baking one merged file.

    The rest is standard SDXL plumbing done well. clip_l and clip_g load the two text encoders as a proper SDXL CLIP pair (clip_device can push them to CPU to save VRAM - the T5-sized CLIP-G is the memory hog here, though nothing like Flux's), and vae_name pulls the VAE. The pixel_space VAE option you'll see in the dropdown is worth knowing: it's not a real VAE file, it's a passthrough that makes the pipeline skip VAE encoding/decoding, handy when you're feeding pixel-space images straight through without a latent round trip. In this plain version the VAE is loaded on CPU in bfloat16 to keep GPU memory for sampling.

    Inputs that matter:

    • primary_ckpt / secondary_ckpt - the models; both from models/checkpoints.
    • primary_weight - the blend knob when a secondary is set.
    • clip_l, clip_g, vae_name - your encoder and VAE picks.

    Outputs: MODEL, CLIP, VAE, all standard types - they plug into any native node, which makes this loader usable outside the pack's context system too.

    Install is the pack standard:

    cd ComfyUI/custom_nodes
    git clone https://github.com/tenser-tensor/ComfyUI-TenserTensor
    

    or search "TenserTensor" in ComfyUI Manager and restart. Declared deps are gguf and kornia; nothing heavy here, since SDXL loading is all core ComfyUI.

    Where people get caught:

    • primary_weight is not "secondary strength". It's the primary's share of the merge. Set it to 0.7 and you're getting 70% primary, 30% secondary. Misreading it as "secondary at 0.7" is the classic mix-up.
    • CLIP-G VRAM. If the graph OOMs right after loading, push clip_device to CPU. The CLIP stays on CPU and sampling runs on GPU; you lose a little prompt-encode speed, not sampling speed.
    • Merge happens at load, not at sample. Changing primary_weight mid-graph reloads the merge, so weight tuning on a big checkpoint set can stutter. Tune with a small preview batch.

    And the pack-wide caveat: this is the V1 class, marked deprecated as the author migrates to API V3 (TT_SdxlModelsLoaderNode is the maintained successor). It works fine today, and honestly the weighted live merge is a feature you'll miss in the stock loaders once you've used it.

    CategoryTenserTensor/Loaders/SDXL

    Inputs (7)

    NameTypeDefaultDescription
    primary_ckptCOMBO0 options:
    secondary_ckptCOMBO1 options: None
    primary_weightFLOAT1.000–1
    clip_lCOMBO0 options:
    clip_gCOMBO0 options:
    clip_deviceCOMBO2 options: default, cpu
    vae_nameCOMBO1 options: pixel_space

    Outputs (3)

    NameTypeDescription
    MODELMODEL
    CLIPCLIP
    VAEVAE