How it keeps itself up to date

There is no build button because the pass maintains itself. It re-resolves:

  • when you tick the checkbox
  • before every render
  • after a file loads
  • as you work, when the set of materials changes

The last one is deferred through a timer rather than done inside Blender's dependency graph, because mutating data from a depsgraph handler is not safe.

All of this is gated on a fingerprint of everything the pass depends on — material names, pins, exclusions, palette mode, seed, scope. If the fingerprint has not changed, nothing happens. That keeps the cost near zero and, more importantly, stops it looping: the add-on's own writes never change the fingerprint, so a sync cannot trigger another sync.

The handlers are registered as persistent, so they survive opening a file. Without that the pass would keep its checkbox ticked and quietly stop tracking the scene.