Model File Checker
Did your 6GB download actually finish?
- exists
- full_path
- size
- size_mb
- status
Every ComfyUI user has had this: the download looked like it worked, the loader dropdown lists the file, and then the load fails - or worse, half-loads something and the sampler produces mush. A truncated safetensors file is a genuinely nasty failure because it looks like a model-quality problem, not a file problem.
Model File Checker answers one question in one node: is this exact file present in this ComfyUI model folder, and how big is it?
Inputs
model_type- dropdown over nine ComfyUI folder categories:checkpoints,diffusion_models,text_encoders,vae,loras,controlnet,clip_vision,upscale_models,embeddings.filename(STRING) - a path relative to that model folder.flux-2-klein-base-9b-fp8.safetensorsorSDXL/style/whatever.safetensors. Subfolders work.
Outputs
- exists (BOOLEAN) - true only for a real, non-empty file.
- full_path (STRING) - where it resolved. If the file is missing, this is the path it expected, which is often the more useful half: you can immediately see whether it's looking in the folder you think it is.
- size (STRING) - human-readable,
1.83 GiB,412.5 MiB,0 B. - size_mb (FLOAT) - the same number in MiB, for arithmetic or a filename.
- status (STRING) -
Found ✅,Missing ❌, orFound but empty ❌.
That last status is the whole point. A zero-byte file - the classic symptom of an interrupted Hugging Face download that left a placeholder behind - reports exists = false and Found but empty ❌ rather than cheerfully confirming the file is there. That's a check most people never think to write by hand, and it's the difference between five minutes of confusion and an evening of it.
Why a node for this
The ecosystem's most durable complaint is that setups don't match: you get a workflow, you get a list of missing models, and the loop of downloading and re-running is the actual job. A pre-flight node that runs before the expensive part of the graph is a cheap way to cut that loop short.
Wire exists into a branch, or just drop the node and read status from a preview - either way you find out at the top of the run rather than after four minutes of sampling.
Pair it with this pack's Dependency Checker for the reverse view: DependencyChecker tells you what's missing from a known list; Model File Checker tells you about one specific file you named.
Security, done right
The node refuses absolute paths and any .. segment, and refuses path components that start with a dot. Then it resolves the candidate path and verifies it's still inside the registered model root before touching it. If it isn't, you get an error rather than a read.
That's not paranoia for its own sake. A node that accepts arbitrary filesystem paths from a workflow file is a node that lets a shared workflow probe your disk. The refusal is the feature.
Install
Manager → search Orel's Nodes → Install → restart → hard-refresh the browser.
cd ComfyUI/custom_nodes
git clone https://github.com/DarkOrel/Orels-Nodes.git orels-nodes
python -m pip install -r orels-nodes/requirements.txt
Restart and hard-refresh. Nothing here needs the requirements file; that's for the pack's Hugging Face download nodes.
Gotchas
Exact filenames only. There's no fuzzy match and no folder scan. flux2-klein-base-9b-fp8.safetensors when the file is flux-2-klein-base-9b-fp8.safetensors reports missing. Copy the name from the loader dropdown or from the directory listing.
It doesn't enumerate. If you don't know the filename, this node can't help you find it - it checks a claim, it doesn't explore.
Case sensitivity depends on your OS. On Linux the paths are case-sensitive; on Windows they aren't. A workflow that checks fine on your desktop can report missing on a rented Linux box for no better reason than a capital letter.
Multiple folders are supported, first match wins. If you have two loras roots configured, it checks both and reports the first hit. A file present in both places is reported from whichever root is registered first.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| model_type | COMBO | diffusion_models | 9 options: checkpoints, diffusion_models, text_encoders, vae, loras, controlnet, +3 |
| filename | STRING | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| exists | BOOLEAN | — |
| full_path | STRING | — |
| size | STRING | — |
| size_mb | FLOAT | — |
| status | STRING | — |