A module-level context tells attention consumers what is running: the
component role (transformer, text encoder, vae), the index of the
denoiser forward about to run, the pass length, and the model. It is
opened and closed around process_images, reset per denoising pass beside
the callback setup, and advanced by both step sources: the classic
callback passes the completed step plus one, the modular pre-forward
hook counts forwards. Roles come from the existing text encoder and vae
hijacks and the modular phase hooks. The step also lives in a device
scalar updated in place, so a compiled reader keeps its graph across
steps.
Tiny decode lost its call site when the video vae hijack was replaced by the
shared one, which has no tiny branch, so selecting it on the video tab quietly
decoded through the full vae for every engine. The decode hijack now takes the
tiny path when the run asked for it, falling back to the full vae whenever
there is no tiny counterpart to use.
The class test also spelled Wan in capitals and matched none of the four Wan
pipeline classes. Alongside that:
- the requested type travels on the pipe rather than a module global, so the
hijack reads the same value the run set
- a latent whose channel count taehv cannot take is reported and falls back
instead of failing inside the first convolution
- decode_video already returns the range the pipelines expect, so the second
normalization that followed it is gone