From e5ffacc625519a8d28c5347120ce8cf1a18ca17c Mon Sep 17 00:00:00 2001 From: Daniel Maddern Date: Wed, 12 Aug 2026 21:39:31 +0700 Subject: [PATCH] Report direct sampling progress --- src/h3_blackwell_runtime/sampler.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/h3_blackwell_runtime/sampler.py b/src/h3_blackwell_runtime/sampler.py index d802200..1a3755e 100644 --- a/src/h3_blackwell_runtime/sampler.py +++ b/src/h3_blackwell_runtime/sampler.py @@ -1,5 +1,7 @@ """Minimal direct prompt-only H3 video sampler for visual smoke previews.""" +import time + import torch from .packing import H3PromptPacker, unpatchify_video @@ -52,8 +54,12 @@ def sample_video_res_multistep(model, packer: H3PromptPacker, text: torch.Tensor audio_carried = audio * 4.0 video_history = audio_history = None video_history_sigma = audio_history_sigma = None - for index, sigma in enumerate(sigmas[:-1]): - sigma_down = sigmas[index + 1] + total_steps = len(sigmas) - 1 + started = time.perf_counter() + for index, sigma in enumerate(sigmas[:-1], start=1): + step_started = time.perf_counter() + previous_index = index - 1 + sigma_down = sigmas[index] sigma_audio = _audio_sigma(sigma) native_audio = audio_carried * (sigma_audio / sigma) hidden, times, segments, positions, video_segment, audio_segment = packer(text, video, native_audio, float(sigma)) @@ -64,11 +70,18 @@ def sample_video_res_multistep(model, packer: H3PromptPacker, text: torch.Tensor velocity_audio = (1.0 - 4.0) * (audio_carried * carry) + (1.0 + 3.0 * sigma_audio) * velocity_audio_native video_denoised = video - sigma * velocity_video audio_denoised = audio_carried - sigma * velocity_audio - previous_sigma = sigmas[index - 1] if index else None + previous_sigma = sigmas[previous_index - 1] if previous_index else None video = res_multistep_update(video, video_denoised, sigma, sigma_down, video_history, video_history_sigma, previous_sigma) audio_carried = res_multistep_update(audio_carried, audio_denoised, sigma, sigma_down, audio_history, audio_history_sigma, previous_sigma) video_history, audio_history = video_denoised, audio_denoised video_history_sigma = audio_history_sigma = sigma_down + elapsed = time.perf_counter() - started + eta = elapsed / index * (total_steps - index) + print( + f"sampling step {index}/{total_steps}: " + f"{time.perf_counter() - step_started:.1f}s, elapsed {elapsed:.1f}s, eta {eta:.1f}s", + flush=True, + ) return video