Hard Unload All Models [LP]
Hard Unload All Models [LP] — ComfyUI Node Guide
- source
- *
If you've run a heavy checkpoint, then tried to load a second one right after and watched your VRAM refuse to free up, you already know why nodes like this exist. ComfyUI keeps models cached in memory between runs by design - it's what makes back-to-back generations fast - but that same caching is exactly what bites you in multi-model pipelines where you genuinely need the memory back before the next step can run.
What it does
This is the "nuke everything" option in LevelPixel's model-unloader family: it forces a complete unload of every model currently sitting in memory. The README is explicit that "Hard" here means complete unloading, as opposed to the pack's Soft variants elsewhere (not covered by this article) which do a lighter garbage-collection pass without fully dropping models. If you need the memory back and don't care about re-paying the load cost on the next model, this is the blunt instrument for it.
It's not alone in dealing with this - the wider ComfyUI ecosystem has more than one answer to "models won't leave VRAM," including standalone packs built for exactly this problem, which tells you it's a genuinely common pain point rather than a niche one.
Inputs and outputs
source(any type,*) - this is the trick that makes it work. Wire literally any node's output intosource; the value passes through unchanged as this node's own output. The point isn't the data, it's forcing ComfyUI's execution graph to run this node at a specific point in the sequence.- Output:
*(matchessource) - pass-through, so you can keep chaining the rest of your workflow after it without breaking the graph.
It's also flagged as an output node, which matters practically: normally a node with nothing wired downstream of it gets skipped by ComfyUI's execution planner, because nothing depends on its result. Output nodes are the exception - they run regardless of whether anything reads their output, which is exactly what you want from a cleanup step that has no "real" output data of its own.
How to actually use it
The README is direct about this: "it must be added to a sequential chain of nodes in the workflow." Don't just drop it in the graph unconnected - wire source from whatever step should finish right before the unload happens (say, the end of your first model's sampling pass), so ComfyUI's dependency graph knows to run this after that step and before whatever comes next.
Installing it
ComfyUI Manager: search "ComfyUI-LevelPixel," listed as "Level Pixel," install, restart. Manual: cd ComfyUI/custom_nodes && git clone https://github.com/LevelPixel/ComfyUI-LevelPixel.git into your custom_nodes folder, restart ComfyUI. No models to download for this one - it's pure memory-management logic, no extra Python dependencies beyond what ComfyUI itself already needs.
Common issues
The single most common way this "doesn't work" is leaving source unwired or wired to something that isn't actually positioned where you need the unload to happen - since this node's execution order is entirely determined by what feeds source, an unconnected or wrongly-placed input means the unload can fire earlier or later in the sequence than you intended, or not meaningfully participate in the graph at all.
Also worth knowing: this unloads everything, not one specific model. If you've got a pipeline where you want to keep one model resident (say, a shared CLIP or VAE) while dropping another, this is the wrong node - that's what the pack's Unload Model node (targeting one specific model) is for instead.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| source | * | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| * | * | — |