ComfyUI Error Messages: What Each One Means
Want to go deeper than this article?
Free account unlocks the first chapter of all 25 courses — RAG, agents, MCP, voice AI, MLOps, real GitHub repos.
Generating images locally? Take it further. From FLUX and ComfyUI setup to building real image pipelines and apps. First chapter free, no card.
Search this page for your exact string — but read one line of your own log first. "Node threw an error during execution." is not an error message. It is a fixed label from ComfyUI's frontend locale file, printed above every runtime failure, and the real message is the Exception Message field in the ComfyUI Error Report underneath it. Once you have that string, the fix is decided by which of four stages produced it: validation (nothing ran yet), model loading, sampling, or the memory and quantisation layer.
Most ComfyUI errors are too small to deserve their own article, but there are a lot of them, and the wording is specific enough that you can identify the failing subsystem from the string alone. That is what this page is for: a lookup table you can Ctrl+F, one line per string, linking out to the deep pages where a cause genuinely needs a thousand words.
How every row here is sourced. Each string is either quoted from the ComfyUI source line that raises it, or from a numbered issue on the tracker where somebody reported it verbatim. Source lines were read from the repository at commit 924743a (23 August 2026), which reports __version__ = "0.33.0" in comfyui_version.py. Nothing on this page is a reconstruction from memory, and where a string comes from a bug report rather than the source, the row says so and links the issue so you can check whether it has been closed since.
Error text drifts between releases. ComfyUI rewords its messages fairly often, so if your string is close to a row here but not identical, you are almost certainly in the right place with a different version. The find-it-yourself section at the bottom shows how to locate the exact line in your own install in about ten seconds.
Read the Error Report Before the Table
When a node fails at runtime, ComfyUI shows a red banner and a structured block that begins # ComfyUI Error Report. The banner text is generic. The block is the diagnosis.
# ComfyUI Error Report
## Error Details
- **Node ID:** 433
- **Node Type:** CLIPTextEncode
- **Exception Type:** ValueError
- **Exception Message:** ValueError: not enough values to unpack (expected 4, got 1)
That is quoted from issue #15797, whose title is — inevitably — "Node threw an error during execution." The reporter pasted the banner as the problem. The actual problem is four lines lower, in a completely different node than the banner suggests to most readers.
The banner string lives in ComfyUI_frontend's English locale file, alongside its longer sibling, "This node threw an error during execution. Check its inputs or try a different configuration." Both are static UI copy. Neither is produced by the code that failed.
So the reading order is: Exception Type and Exception Message first, Node Type second, stack trace third. The tables below are keyed on that Exception Message.
Reading articles is good. Building is better.
Free account = the first chapter of all 25 courses, with a per-chapter AI tutor. No card.
Errors That Fire Before Anything Runs
These are validation failures. ComfyUI rejects the graph before executing a single node, which is why they appear instantly with no progress bar and no VRAM movement. Every one of them is raised in execution.py, and they arrive wrapped in a single umbrella message.
| Error string | What it means | What to do | Raised at |
|---|---|---|---|
Prompt outputs failed validation | The umbrella message for the whole group. It never appears alone. | Read the indented line beneath it — that line is one of the rows below. | execution.py:1240 |
Node 'ID #98:17' has no class_type. The workflow may be corrupted or a custom node is missing. | A node in the saved JSON carries no node type at all, so ComfyUI cannot even look it up. | Re-export the workflow from its original source rather than repairing the JSON by hand. | execution.py:1136, #15118 |
Node 'NAME' not found. The custom node may not be installed. | The type is named in your JSON but nothing registered it at startup. | Either the pack is not installed, or it is installed and failed to import — see the IMPORT FAILED triage. | execution.py:1153 |
Required input is missing | A required socket has neither a link nor a widget value. | Connect the named input. Frequently caused by deleting a node upstream. | execution.py:906 |
Return type mismatch between linked nodes | An output of one type is wired into an input expecting another. | Follow the link colour; usually a LATENT into an IMAGE socket or vice versa. | execution.py:941 |
Value not in list: ckpt_name: 'v1-5-pruned-emaonly-fp16.safetensors' not in [] | The dropdown value in the workflow is not among the files ComfyUI found. | Empty brackets are the tell — they mean ComfyUI found zero files in that folder, so this is a path problem, not a missing model. | execution.py:1071, #11452 |
Failed to convert an input value to a INT value | A widget holds something that will not parse as the declared type. | Check for a stray character in a numeric field, or a primitive node feeding a string. | execution.py:1007 |
Value 0 smaller than min of 1 | A widget is below the node's declared minimum. | Raise it. Common after a node update tightens its bounds. | execution.py:1023 |
Value 4096 bigger than max of 2048 | The mirror of the above, above the declared maximum. | Lower it, or use a node built for the larger range. | execution.py:1036 |
Dependency cycle detected | The graph contains a loop, so no execution order exists. | Find the link that feeds a node's own ancestor; usually an accidental drag. | execution.py:861 |
Bad linked input, must be a length-2 list of [node_id, slot_index] | A link in API-format JSON is malformed. | You are almost certainly generating the prompt from a script — fix the emitter, not the graph. | execution.py:921 |
Prompt has no outputs | Nothing in the graph terminates in an output node. | Add a SaveImage or PreviewImage. Common when driving ComfyUI over the API. | execution.py:1170 |
Custom validation failed for node | The node's own VALIDATE_INPUTS method rejected the inputs. | The reason is node-specific; read the details field and the pack's documentation. | execution.py:1102 |
Exception when validating node | The node's VALIDATE_INPUTS method itself crashed. | This is a bug in the custom node, not in your graph. Report it upstream. | execution.py:1193 |
The practical shortcut for this whole table: if the failure is instant and your GPU never spun up, it is a validation error, and the fix is in the workflow or the folder layout rather than in your hardware or flags.
Errors From Loading a Model File
These fire after validation passes, while a loader node reads a file off disk. The distinguishing feature is that they name a path.
| Error string | What it means | What to do | Raised at |
|---|---|---|---|
ERROR: Could not detect model type of: PATH | ComfyUI parsed the file but no architecture matched its tensor keys. | Usually the right file in the wrong folder — a LoRA, VAE or text encoder sitting in checkpoints. | comfy/sd.py:2092 for checkpoints, :2360 for diffusion models, #8438 |
HINT: This seems to be a Lora file and Lora files should be put in the lora folder and loaded with a lora loader node.. | Not a separate error — an extra line ComfyUI appends to the message above when the filename contains "lora". | Move the file to models/loras and use a LoRA loader. | comfy/sd.py:2058 |
Error while deserializing header: MetadataIncompleteBuffer followed by The safetensors file is corrupt/incomplete. Check the file size and make sure you have copied/downloaded it correctly. | Usually a truncated download — but the message overstates its case. | Check the byte size against the source first. #15599 (closed) documents an intact file with a few trailing bytes failing only when DynamicVRAM is active, because that path uses a stricter parser. | comfy/utils.py:91 |
The safetensors file is corrupt or invalid. Make sure this is actually a safetensors file and not a ckpt or pt or other filetype. | The file does not have a safetensors header at all. | Frequently an HTML error page saved under a .safetensors name by a failed download. Open it in a text editor. | comfy/utils.py:87 |
Cannot import PATH module for custom nodes: ... | A custom node package raised during import at startup; its nodes will be missing from the graph. | This is the console line behind the red IMPORT FAILED tile — how to read the real traceback. | nodes.py:2336 |
UnicodeDecodeError: 'utf-32-be' codec can't decode byte 0x00 in position 28: truncated data | Not a corrupt file. An all-zero comfy_quant placeholder tensor is fed to json.loads, which guesses the encoding from leading NUL bytes and picks utf-32-be. | Reported against the official MiniMax H3 nvfp4-awq text encoder; wait for the fix rather than re-downloading. | #15400 |
Two of these six are worded as though your file is broken when it is not, which is why "re-download the model" is such a common piece of bad advice in this category. Check the file size before you spend an hour on a 15GB download.
Errors Raised While Sampling
These appear after the progress bar starts moving. The Node Type field in the error report tells you which node stopped, but with sampling failures the cause is usually a mismatch introduced several nodes upstream.
| Error string | What it means | What to do | Reported in |
|---|---|---|---|
Node threw an error during execution. | Static frontend copy, not an error. | Read the Exception Message underneath it. | ComfyUI_frontend locale, #15797 |
mat1 and mat2 shapes cannot be multiplied (512x2560 and 12288x4096) | Two tensors met with incompatible inner dimensions — nearly always a text encoder or CLIP that does not belong to the diffusion model. | Reload the encoder the model shipped with. Reported on Z-Image GGUF, Qwen-Image and Qwen-Image-Edit graphs. | #12132, #12648, #9423 |
DoubleStreamBlock.forward() got an unexpected keyword argument 'attn_mask' | Something patched the FLUX attention path with a signature the running core no longer matches. | Almost always a stale custom node overriding attention. Disable node packs to find it. | #6476, #6414 |
The size of tensor a (49) must match the size of tensor b (16) at non-singleton dimension 1 | A conditioning or latent tensor arrived with an unexpected shape. | Check batch sizes and any node that concatenates conditioning. | #7177, #9318 |
AttributeError: 'VAE' object has no attribute 'patcher' | A VAE object built by an older loader lacks an attribute newer core code expects. Note the timing: it crashes after sampling finishes, during execution cache cleanup. | Reported as ComfyUI 0.27.0 with ComfyUI-GGUF 1.1.10; both issues are closed, so update both. | #14806, #14829 |
'VAE' object has no attribute 'vae_dtype' | The same class of version skew, surfacing on VAEDecode instead. | Update the node pack that supplied the VAE loader. | #5508 |
Input type (torch.cuda.FloatTensor) and weight type (torch.FloatTensor) should be the same | Half the operation is on the GPU and half on the CPU, because offloading split a model mid-node. | Reported on ImageUpscaleWithModel on a 4GB card; reduce tile size or free VRAM before the node runs. | #15433 |
AssertionError: Torch not compiled with CUDA enabled | Your PyTorch is a CPU-only build. Nothing about the workflow is wrong. | Reinstall PyTorch with the CUDA index URL for your version. | #3377, #7433 |
If your sampler completes with no error at all and hands you a pure black frame, that is a different failure with its own diagnosis — see why ComfyUI generates black images.
Run this on your own machine and stop paying every month
Pay once and keep it. No renewal, no per-token bill, and nothing you feed it ever leaves your hardware.
Errors From Memory Management and Quantised Weights
This is the newest and fastest-moving group, because ComfyUI's DynamicVRAM streaming layer and its quantisation kernels are both under active development. Expect these strings in particular to change.
| Error string | What it means | What to do | Raised at |
|---|---|---|---|
RuntimeError: HostBuffer.read_file_slice failed | The pinned-memory streaming path failed to read weights from disk, and the failure cascades into a CUDA out-of-memory error that hides the cause. | #14250 reports --disable-pinned-memory restoring a Wan 2.2 workflow with unchanged iteration speed. On #15255 a maintainer note says the underlying CUDA error was reported to NVIDIA and suggests --cuda-device 0 or --disable-pinned-memory. | comfy/memory_management.py:70 |
ValueError: Unknown quantization format for layer model.layers.0.self_attn.q_proj | The per-layer quantisation config resolved to None, so ComfyUI has no algorithm to apply. | Means the file uses a format this build does not map. Try the vendor's other precision builds. | comfy/ops.py:1156, #15400 |
ValueError: Unsupported quantization format: FORMAT | The format was named and recognised, but this code path does not implement it. | Distinct from the row above: there the name was missing, here it is present but unhandled. | comfy/ops.py:1225 |
torch.OutOfMemoryError: Allocation on device 0 would exceed allowed memory. (out of memory) | A plain allocation failure, though after the DynamicVRAM default changed it often appears on workflows that used to fit. | If this started after an update rather than after a workflow change, see ComfyUI out of memory after an update. | #13954, #10891 |
Note the shape of the first row: a disk-read failure that presents as an out-of-memory error. If you are chasing OOM on a machine that has obvious free VRAM, search your log upward for read_file_slice before you start lowering resolution.
Warnings People Paste as Errors
These are logging.warning calls, not exceptions. They print in yellow, scroll past during a normal successful load, and get pasted into bug reports as the cause of unrelated problems.
| Log line | What it means | Is it your problem |
|---|---|---|
clip missing: ['clip_l.logit_scale', 'clip_l.transformer.text_projection.weight'] | Keys the text encoder expected were absent from the state dict, so they keep their initialised values. | Usually harmless and present on many working setups. Raised at comfy/sd.py:279; see #3161 and #10266. |
lora key not loaded: KEY | A key in the LoRA did not map onto any weight in the loaded model. | A handful of lines is normal. Hundreds of lines means the LoRA was trained for a different base model, and it will have no visible effect. Raised at comfy/lora.py:93. |
RuntimeWarning: invalid value encountered in cast | NumPy was handed NaN and cast it to an integer. | This one matters. It is the single reliable tell for a black output. See the black image diagnosis. |
The distinction is worth internalising, because two of the three above are noise and the third is the only clue you will get for a failure that produces no error at all.
How Do You Find Where Your Own Error Comes From
If your string is not on this page, you can find its origin faster than you can search for it. From your ComfyUI root:
grep -rn "shapes cannot be multiplied" --include="*.py" .
Three outcomes, and each one is informative:
- A hit under
comfy/or inexecution.pyornodes.py. It is a core message, and the surrounding lines usually tell you the condition that triggered it. - A hit under
custom_nodes/. A node pack raised it. Take it to that pack's tracker, not ComfyUI's. - No hit at all. The message came from PyTorch, NumPy, safetensors or transformers.
mat1 and mat2 shapes cannot be multipliedandTorch not compiled with CUDA enabledare both in this category — they are PyTorch strings that ComfyUI merely surfaces.
That third case explains why so much ComfyUI troubleshooting advice misses: people search the ComfyUI tracker for an error PyTorch raised, and the top results are twenty unrelated workflows that happened to hit the same shape mismatch.
Before filing anything, do the triage the issue template asks for and disable custom nodes. Every bug report quoted on this page opens with that checkbox, and it is the fastest way to split "ComfyUI is broken" from "one of my forty node packs is broken". If you are still assembling a working install, the complete ComfyUI guide covers the layout these errors keep referring to, and the general local-AI troubleshooting guide covers the driver and environment failures that sit underneath all of it.
Which ComfyUI Version Do These Strings Come From
Source line numbers and message text on this page were read from the ComfyUI repository at commit 924743a, dated 23 August 2026, with comfyui_version.py reporting 0.33.0. The permalinks in every table are pinned to that commit, so they will keep pointing at the right line even after the file changes.
Three caveats that will save you time:
- Line numbers move constantly. Treat them as a starting point and grep for the string itself.
- Wording changes between releases. Several of the validation messages here were reworded during the v0.3x series. If yours differs slightly, the row still applies.
- Issue state changes. Issues linked above were open or closed as noted at the time of writing. Click through before you build a workaround into your workflow — several of these have already been fixed once.
Where a single string needed more than one sentence, it has its own page: IMPORT FAILED and missing nodes, out-of-memory after an update, black image output, and, for the quantisation rows, how GGUF, fp8 and Nunchaku builds differ.
Sources
- ComfyUI source at commit 924743a (v0.33.0, 23 August 2026):
execution.py,nodes.py,comfy/sd.py,comfy/utils.py,comfy/ops.py,comfy/lora.py,comfy/memory_management.py - ComfyUI_frontend English locale (the "Node threw an error during execution." banner text)
- ComfyUI docs — custom node troubleshooting (the disable-custom-nodes procedure every issue template links)
- Comfy-Org/ComfyUI issues #3161, #3377, #5508, #6414, #6476, #7177, #7433, #8438, #9318, #9423, #10266, #10891, #11452, #12132, #12648, #13954, #14250, #14806, #14829, #15118, #15255, #15400, #15433, #15599, #15797
Generating images locally? Take it further.
From FLUX and ComfyUI setup to building real image pipelines and apps. First chapter free, no card.
Go from one-off images to a real workflow
The Local Image Generation course covers ComfyUI, SDXL and FLUX properly — plus 24 more courses on running AI on your own hardware.
Liked this? 25 full AI courses are waiting.
From fundamentals to RAG, agents, MCP servers, voice AI, and production deployment with real GitHub repos. First chapter free, every course.
Build Real AI on Your Machine
RAG, agents, NLP, vision, and MLOps - chapters across 25 courses that take you from reading about AI to building AI.
Want the structured version?
Hands-on courses on local AI, from $8.99 a month. The first chapter of each is free.
Keep going
- PILLARRun FLUX.1 Locally in 2026: VRAM Needs + 5-Minute Setup
- AI-Toolkit LoRA Training: FLUX.2, Z-Image & Qwen-Image
- Best GPU for Local AI Image Generation (2026): Ranked
- Best Local AI Image Models 2026: FLUX vs SDXL vs Qwen
- blog/flux-vram-requirements-by-gpu
- Chroma Local Guide: The Apache-2.0 Uncensored FLUX Model
- ComfyUI Black Image Fix: NaN, VAE and fp8 by Model
- ComfyUI FLUX Workflow (2026): JSON Nodes Explained
- ComfyUI IMPORT FAILED: Find the Real Error Fast
- ComfyUI LoRA Not Working: Key Not Loaded Fixes
Comments (0)
No comments yet. Be the first to share your thoughts!