From 9b4628815923e94db7287e7a9c0e5a751aa330c1 Mon Sep 17 00:00:00 2001 From: digital-garbage <133010426+digital-garbage@users.noreply.github.com> Date: Sun, 23 Aug 2026 03:55:58 +0300 Subject: [PATCH] feat(samplers): show a decoding phase and its duration A decode is one uninterruptible call with no progress of its own, so a slow decode looked identical to a hung one. Co-Authored-By: Claude Opus 5 --- samplers.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/samplers.py b/samplers.py index 7bfc6b07..0d49a0a3 100644 --- a/samplers.py +++ b/samplers.py @@ -7880,6 +7880,11 @@ class FunPackLTXAVSceneChainSampler: # is indistinguishable from any other sudden death. comfy's own OOM recovery is # spatial tiling; it does not shrink the full-size CPU output buffer, which is the # host-RAM allocation that a machine actually dies on. + # The decode is one uninterruptible call with no progress of its own, so without + # this the UI shows the last sampling phase and a frozen timer — and a decode that + # is merely SLOW (an fp32 VAE, a CPU fallback, a box that started swapping) is + # indistinguishable from one that is hung. + self._set_phase("decoding") self._log_decode_plan(vae, video_tensor) # Hand back everything sampling was holding first. The banks (dynashift negatives, # guide frames, per-scene wrappers) are dead by now but their blocks are still @@ -7901,6 +7906,8 @@ class FunPackLTXAVSceneChainSampler: decoded = decoded.reshape(b * t, h, w, c) images = self._apply_transitions_pixel(decoded, boundary_entries, transition_duration) _phase_decode = _time.perf_counter() - _t_dec0 + self._set_phase("") + print(f"[FunPackSceneChain] decoded in {_phase_decode:.1f}s") # cut_opening_frames, LTX path. Applied HERE, after a decode that saw every latent # frame in its sampled context, rather than on the latent inside the loop — a latent