Cómo engañar al cache de ComfyUI para leer archivos entre ejecuciones

El problema del estado estático

Hice un workflow en ComfyUI que lee un valor numérico desde un archivo de texto, lo utiliza como índice para cargar una imagen y luego le suma uno antes de guardarlo nuevamente. El problema surgió rápidamente: a menos que borrara manualmente la caché de la aplicación, el número nunca volvía a leerse desde el archivo en las ejecuciones subsiguientes.

Ilustración técnica del motor de caché interno de ComfyUI
Diagrama del sistema de memoización basado en hash de ComfyUI y por qué ignora los cambios en el disco.

Al principio pensé que era un bug o una limitación del sistema de archivos, pero al investigar cómo funciona realmente ComfyUI, me di cuenta de que es una consecuencia lógica de su arquitectura. El sistema utiliza memoización por hash de los inputs de los nodos.

Por qué ‘Clear Cache’ no funcionaba

Entendí que para el motor de ComfyUI, el archivo en disco no es un input válido. El input real es el valor que salió del nodo la primera vez. En la segunda ejecución, aunque cambiara el archivo en el disco, el grafo se veía idéntico y el sistema reutilizaba el resultado cacheado.

También intenté usar el nodo ‘Clear Cache’, pero descubrí que no soluciona este problema específico. Ese comando solo limpia latents, imágenes y tensores; no invalida nodos Python que ya han devuelto un valor escalar ni fuerza la re-ejecución si el grafo es idéntico.

La solución: Romper el hash

Luego, exploré cómo forzar una re-ejecución. No podía depender de que el archivo cambiara solo; necesitaba algo externo. La solución funcional fue conectar un generador aleatorio directamente al campo dictionary del nodo Load Text File.

Aunque ese valor aleatorio no se usaba para nada en mi lógica, su presencia rompía el hash de la ejecución y obligaba a ComfyUI a volver a leer el archivo. Es una trampa elegante que funciona bien para este tipo de automatizaciones.

Representación visual de una solución para romper el hash de ComfyUI
La solución: un nodo aleatorio en el campo dictionary que rompe el hash y fuerza la lectura del archivo.

Alternativas más robustas

No obstante, hay métodos mucho más sólidos si se necesita algo persistente o que sobreviva a reinicios complejos:

  • Nodo custom con IS_CHANGED: Implementando un hook en Python para decirle al nodo que siempre cambie.
  • Estado externo (WAS/JSON): Guardar valores fuera del grafo determinista principal, como se hace con WAS o archivos JSON.

Por ahora, el truco del nodo aleatorio en el campo dictionary es perfecto. Funciona, no cruje y mantiene la simplicidad que buscaba.