Auto Universal Loader (MultiGPU - Safetensors & GGUF)
UNet, both CLIPs, and VAE in a single multi-GPU load
- MODEL
- CLIP
- VAE
This is the pack's flagship loader, the one that replaces the whole left side of your graph. AutoUniversalLoaderMultiGPU takes a diffusion model, up to two text encoders, and a VAE - safetensors or GGUF, mixed freely - and loads them all with one node, spreading them across your GPUs according to a distribution strategy. It's the "start here" node if you're building a workflow from scratch with this pack: one dropdown block instead of a loaders gallery.
The mechanism is honest and the README's "zero monkey-patching" claim holds: it's the pack's modular loaders (UNet, CLIP, VAE) wired into one front end, all using ComfyUI's native load calls with explicit device targeting. That's also why it's the most beginner-friendly entry point - the same machinery as the three engines, minus the strategy decision.
How it works
distribution_mode is the whole story. "Auto: UNet GPU0 / Encoders GPU1" (default) pins the model to GPU0 and CLIP/VAE to GPU1. "Auto: Balanced Free VRAM" checks live free memory and sends the heaviest piece to the card with the most headroom. Manual Override exposes manual_unet_device, manual_clip_device, and manual_vae_device for hand-tuning (they're otherwise ignored). On a single-GPU machine everything collapses to cuda:0, gracefully.
The model_type picker (37 architectures, auto default) resolves the correct CLIPType for your encoders - the pack guesses from filenames when you don't tell it, and you can always override when the filename lies. weight_dtype covers fp8 and fp16/bf16/fp32.
The inputs that matter
- unet_name - the diffusion model (safetensors or GGUF).
- clip_name1 / clip_name2 - text encoders; set to
nonewhen the architecture doesn't need two. - vae_name - VAE;
pixel_spaceis one of the options in this ecosystem. - model_type - architecture;
autounless it mis-guesses. - distribution_mode - the device map.
Outputs: MODEL, CLIP, VAE - everything your KSampler, encoders, and decoder need.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/nexusfinancial-dev/ComfyUI-AutoMultiGPU.git
cd ComfyUI-AutoMultiGPU
pip install -r requirements.txt
Or ComfyUI Manager (search ComfyUI-AutoMultiGPU). Pack deps are torch, accelerate, safetensors only - but GGUF files anywhere in the graph require ComfyUI-GGUF to be installed too, a dependency the README omits.
Where people get burned
For combined SD1.5/SDXL checkpoints this loader expects the three pieces as separate files - if your model is one bundled .safetensors checkpoint, use AutoCheckpointLoaderMultiGPU instead. And "zero configuration" is the aspiration, not the contract: when auto model-type guessing gets a file name wrong, you get CLIPType mismatches that surface as silent conditioning problems. If outputs look subtly off, set model_type explicitly. Finally, on a two-card rig this node distributes but doesn't shrink - if the UNet alone exceeds one card, this is DisTorch's job, not the Universal loader's.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| unet_name | COMBO | Select UNet / DiT model (.safetensors or .gguf) | |
| clip_name1 | COMBO | none | First Text Encoder (.safetensors or .gguf) |
| clip_name2 | COMBO | none | Optional Second Text Encoder (e.g. T5 / CLIP-G / Llama) |
| vae_name | COMBO | pixel_space | VAE model |
| model_type | COMBO | auto | Comprehensive Architecture Model Type |
| distribution_mode | COMBO | Auto: UNet GPU0 / Encoders GPU1 | 3 options: Auto: UNet GPU0 / Encoders GPU1, Auto: Balanced Free VRAM, Manual Override |
| weight_dtypeopt | COMBO | default | 7 options: default, fp8_e4m3fn, fp8_e4m3fn_fast, fp8_e5m2, float16, bfloat16, +1 |
| manual_unet_deviceopt | COMBO | cpu | 1 options: cpu |
| manual_clip_deviceopt | COMBO | cpu | 1 options: cpu |
| manual_vae_deviceopt | COMBO | cpu | 1 options: cpu |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |
| CLIP | CLIP | — |
| VAE | VAE | — |