UNet loader with Name (Citron Image Saver)
Load a bare diffusion model and keep its filename on a wire
- model
- filename
Since Flux, the interesting models stopped shipping as all-in-one checkpoints. You get a diffusion model in diffusion_models/, a text encoder in text_encoders/, a VAE, and you wire them together yourself. ComfyUI's core UNETLoader handles the first part and gives you one output. This node does the same load and also hands you the filename, which is what your save node needs to write a truthful Model: and Model hash: without you typing anything.
How it works
Two inputs, both dropdowns. unet_name lists everything in your diffusion_models folder. weight_dtype picks the precision the weights are loaded in:
default- whatever the file is, no conversion.fp8_e4m3fn- cast to fp8 on load.fp8_e4m3fn_fast- fp8 plus the fp8 matmul optimisations on, faster if your card supports it.fp8_e5m2- the wider-range fp8 flavour, rarer in practice.
Then it calls ComfyUI's load_diffusion_model with those options and returns model plus filename (the exact string from the dropdown). The tooltips are honest about the split: model is "U-Net model (denoising latents)", filename is "model filename".
The practical bit is that filename feeds straight into the Citron saver's modelname input, and the saver already looks in diffusion_models when it goes hunting for a file to hash. So a Flux/Qwen/Wan-era workflow gets proper model identification in the embedded parameters block, same as an SDXL checkpoint would.
fp8_e4m3fn_fast is the option I'd start with on anything Flux-class if you're short on VRAM. It's a load-time cast, not a quantisation scheme - if the model is already fp8 in the file, default is fine and fp8_e4m3fn is a no-op. Where people get burned is .gguf: this node is not a GGUF loader. .gguf files appear in the list only if another pack registers the extension, and even then the load path here is ComfyUI's plain diffusion-model loader, not a dequantising one. Use the GGUF pack's own loader for those, and type the filename into the saver by hand - or accept that manual hash route.
Also remember what's not here: no CLIP output, no VAE output. You need separate text-encoder and VAE loaders downstream. That's normal for this class of model, but it surprises people coming from Load Checkpoint, where all three fell out of one node.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/citronlegacy/ComfyUI-CitronNodes
# restart ComfyUI
Manager search is unreliable for this pack - the README says Manager support is "coming soon" and the repo's package metadata is still placeholder - so clone it. piexif is the pack's only pip dependency, and it's required for the pack to import at all:
pip install piexif
No models are downloaded by the pack; it reads whatever you've put in ComfyUI/models/diffusion_models.
Common issues
- Empty dropdown. Nothing in
models/diffusion_models, or you're looking at files that live inmodels/checkpoints- those belong to the checkpoint loader variant. Model hash:blank in the saved image. The saver couldn't resolve the filename to a file it can hash. It checkscheckpointsfirst, thendiffusion_models, so a name that matches nothing gets no hash.- OOM the moment you load.
defaultdtype on a bf16 12B model is a lot of VRAM. Drop tofp8_e4m3fnbefore you start blaming the sampler. - Cast to fp8 and the image goes subtly mushy. fp8 loading is a real quality tradeoff on some models, not a free win. A/B one prompt at both settings before committing a whole workflow to it.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| unet_name | COMBO | 0 options: | |
| weight_dtype | COMBO | 4 options: default, fp8_e4m3fn, fp8_e4m3fn_fast, fp8_e5m2 |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| model | MODEL | U-Net model (denoising latents) |
| filename | STRING | model filename |