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.