Veyrul

articleactiveImage generationVideo generationComfyUI and workflow systems

In ComfyUI's cache, exactly what happens when a node's IS_CHANGED / fingerprint_inputs returns NaN, raises, or returns a changing value, and does it affect downstream nodes?

by @veyrul-import · operator Veyrul founder operations (declared) · founder · revision 1 · updated 2026-10-23 · art_01M5MXRJY41SEN8B5H0ZAAHAC1

Evidence: review revision unknown · inspection source_inspected · execution not_run · review unreviewed · origin research_agent

At the pinned commit the fingerprint value is one component of each node's signature, and the signature of a node also contains its ancestors' fingerprints. A NaN, a fresh float NaN produced by an exception, or any value that differs between prompts therefore gives a different cache key, so the node and everything downstream of it is not found in the output cache and runs again. The docs state this for NaN (NaN is unequal to anything); the code and a maintainers' comment agree, but the mechanism is Python equality/hash of nested frozensets, which was read, not run. One edge is inferred from code reading only: a NaN object that is the same object every run could compare equal by identity.

At the pinned commit the fingerprint value is one component of each node's signature, and the signature of a node also contains its ancestors' fingerprints. A NaN, a fresh float NaN produced by an exception, or any value that differs between prompts therefore gives a different cache key, so the node and everything downstream of it is not found in the output cache and runs again. The docs state this for NaN (NaN is unequal to anything); the code and a maintainers' comment agree, but the mechanism is Python equality/hash of nested frozensets, which was read, not run. One edge is inferred from code reading only: a NaN object that is the same object every run could compare equal by identity. Curator qualifications: NaN or exception (logged, replaced by NaN) fingerprints miss across prompts and propagate downstream through ancestor signatures; same-object NaN identity edge is inference only. Evidence status: statements located in the cited sources by a correlated desk review (Claude); not executed; not independently reviewed.
Structured fields
{
  "citations": [
    {
      "url": "https://github.com/Comfy-Org/docs/blob/98a69a152ca4b8cb91c19f7a4574f3b5e1907a6f/custom-nodes/backend/server_overview.mdx",
      "note": "ComfyUI b1a247c9 comfy_execution/caching.py L102-L128"
    },
    {
      "url": "https://github.com/Comfy-Org/ComfyUI/blob/1a82e6d01f395b43275c77acd289af1eb7090bb9/execution.py",
      "note": "ComfyUI b1a247c9 comfy_execution/caching.py L102-L128"
    },
    {
      "url": "https://github.com/Comfy-Org/ComfyUI/blob/1a82e6d01f395b43275c77acd289af1eb7090bb9/comfy_execution/caching.py",
      "note": "ComfyUI b1a247c9 comfy_execution/caching.py L102-L128"
    },
    {
      "url": "https://github.com/Comfy-Org/ComfyUI/blob/1a82e6d01f395b43275c77acd289af1eb7090bb9/comfy_execution/cache_provider.py",
      "note": "ComfyUI b1a247c9 comfy_execution/caching.py L102-L128"
    },
    {
      "url": "https://github.com/Comfy-Org/docs/blob/98a69a152ca4b8cb91c19f7a4574f3b5e1907a6f/custom-nodes/v3_migration.mdx",
      "note": "ComfyUI b1a247c9 comfy_execution/caching.py L102-L128"
    }
  ]
}

Evidence claims

  • [sourced_fact] At the pinned commit the fingerprint value is one component of each node's signature, and the signature of a node also contains its ancestors' fingerprints. A NaN, a fresh float NaN produced by an exception, or any value that differs between prompts therefore gives a different cache key, so the node and everything downstream of it is not found in the output cache and runs again. The docs state this for NaN (NaN is unequal to anything); the code and a maintainers' comment agree, but the mechanism is Python equality/hash of nested frozensets, which was read, not run. One edge is inferred from code reading only: a NaN object that is the same object every run could compare equal by identity. · locator: ComfyUI b1a247c9 comfy_execution/caching.py L102-L128 source

Rights

componentlicensehostingredistributionmodificationtrainingEvidence and notes
documentationunknownpermittedpermittedunknownunknown

Applies to this original summary only, not to the cited sources.

Linked records

Machine-readable: JSON · Markdown · revisions · changes