Ultra Tools Model Viewer (All)
Ultra Tools Model Viewer (All)
What this actually is
Every ComfyUI install ends up with a models/ tree nobody has looked at in a year. A checkpoint here, four GGUF quants of the same UNET there, an ultralytics/bbox folder you don't remember creating. Model Viewer (All) is the audit: point it at a category, it lists every file in that category by size and shows you the top N plus a total.
That's the whole node. It reads your disk, prints a report, and touches nothing - no move, no delete, no prune. If that sounds too small to bother with: people routinely discover 30–80 GB of duplicate or abandoned models this way, and the alternative is digging through folder properties by hand.
It's one half of a two-node pair. The other one, Ultra Tools Model Viewer, answers "what does this workflow need." This one answers "what's on this machine."
How it works
The node itself does almost nothing - execute() literally returns nothing, because it has no outputs. The work happens in the frontend: the JavaScript widget calls the pack's HTTP route /Ultra-model-viewer/scan/<category>, and the Python side asks ComfyUI's own folder_paths registry where that category lives, walks it, sums file sizes, sorts descending, and hands back JSON.
Two details in the source are worth knowing because they're the difference between a useful report and a wrong one:
All Modelsde-duplicates by real path. Recent ComfyUI versions remap legacy folder keys, soclipandtext_encoderscan resolve to overlapping directories. Naively scanning every registered folder would count those files twice and inflate your total. The node collects by path and skips repeats.- The category list is the author's, not ComfyUI's. 41 entries:
UNET,Checkpoints,Text_Encoders,CLIP,VAE,LORA,Upscale,ControlNet,LLM, plusultralytics/bbox,sams,grounding-dino,audio_encoders,frame_interpolation… andCustom, which walkscustom_nodesinstead of models. That last one is my favourite: it tells you how much disk your node packs are burning, which is usually a lot more than you expect.
The inputs you touch
Three widgets, one of which you never set.
category - default All Models. Pick the folder you're suspicious of, or leave it alone for the grand total.
show_top - default 20, choices from 5 to 100. How many of the largest files to list. The frontend rebuilds this list based on how many files were found, and the node accepts any non-negative number in VALIDATE_INPUTS, so don't be alarmed if you see a value like 37 sitting there that isn't in the dropdown.
info - the multiline text box that the report gets written into. You don't fill it; it's the node's display surface. That's how this "viewer" renders at all: the node is declared an output node with zero return values, so it stays in the execution path and its widget can be updated.
There are no outputs and nothing to wire. Drop it on the canvas, run the graph, read the box.
Install
ComfyUI Manager → search Ultra Tools → install. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/Yamoon-jjang/comfyui-Ultra-Tools
Restart ComfyUI fully and hard-refresh the browser (Ctrl+F5). requirements.txt in this pack installs nothing - it's torch, numpy, Pillow, aiohttp and the standard library, all of which you already have.
One caveat if you're coming from the earlier standalone packs: delete comfyui-Ultra-model-viewer (and the textbox, translator and wildcard-browser ones) before installing this. The unified pack registers the same node class names, and duplicates are how you get mystery "node not found" errors.
When it doesn't show anything
If info stays empty, it's almost always the browser, not the models. The report is rendered by web/model_viewer.js, and a stale cached JS bundle after an update will leave you with a node that queues fine and displays nothing. Ctrl+F5, then restart if that fails.
If a category reports zero files while you know the folder has content, check where that category actually points - the node reads ComfyUI's folder registry, so an extra_model_paths.yaml mapping that didn't load means the folder simply isn't registered. And if the whole node is missing from the menu, look at the console on startup: every module in this pack is imported inside a try/except that logs a warning and skips it, so a partial failure shows up as a missing node rather than a crash.
Finally: it only counts files it recognizes. The scan filters on model extensions (.safetensors, .ckpt, .gguf, .onnx, .sft, .engine and friends), so a folder full of leaf images or .txt sidecars will look suspiciously small. That's not a bug, but it is a number you should read twice before deciding what to delete - and delete you'll have to do yourself, since this node can't.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| category | COMBO | All Models | 41 options: All Models, UNET, Checkpoints, Text_Encoders, CLIP, CLIP_Vision, +35 |
| show_top | COMBO | 20 | 10 options: 5, 10, 15, 20, 25, 30, +4 |
| info | STRING | — |
Outputs (0)
No outputs