v.1.9.37b
1-Click SeedVR2.5 GUI — Changelog v1.8b → v1.9.37b
v1.9.37b
- Split video frame offset sync — The split-view widget now calculates the
frame count difference between source and upscaled videos and applies an
automatic offset. Source video frame N is displayed alongside upscaled video
frame N+offset, ensuring temporal alignment in the comparison view.
v1.9.36b
- Postprocess prepend_frames fix —
_process_frames_corewas passing
prepend_frames=0topostprocess_all_batches, causing 4 extra frames in
the output. Now passesargs.prepend_framesto correctly remove prepended
frames, ensuring output frame count matches input.
Export System Overhaul
v1.9.35b
- Reverted prepend removal — Temporarily reverted to diagnose frame sync
issues. Prepend frames are kept in the output for debugging.
Comprehensive Codec Support
- H264 / H265 (NVENC GPU encoding) — Hardware-accelerated encoding via
h264_nvenc/hevc_nvencwith automatic NVENC detection. Profiles: Baseline,
Main, High (H264); Main, Main10, Main12 (H265). Quality levels: Low / Mid / High
mapped to CQ values. - ProRes — Apple ProRes with 6 profiles: Proxy, LT, Standard, HQ, 4444,
4444 XQ. MOV container. - DNxHR — Avid DNxHR with 5 profiles: LB, SQ, HQ, HQX, 444. MOV/MXF container.
- FFV1 — Lossless FFV1 codec (MKV/AVI).
- FFV1 Intra RGBA-16bit — Intra-only FFV1 with
rgba64lepixel format for
maximum fidelity (MKV/AVI). Uses-coder 1 -context 1 -g 1. - AV1 (NVENC) — Hardware-accelerated AV1 encoding (
av1_nvenc). - VP9 — Software VP9 encoding (WebM/MKV).
- QuickTime V210 — Uncompressed YUV 10-bit 4:2:2 (MOV).
- QuickTime R210 — Uncompressed RGB 10-bit (MOV).
- QuickTime Animation — Run-length compressed RGB 8-bit with alpha (MOV).
v1.9.34b
- Initial prepend_frames investigation — Attempted fix for frame count
mismatch between input and output videos.
Image Sequence Export
- TIFF — 8-bit and 16-bit (deflate compression).
- PNG — 8-bit and 16-bit.
- JPEG — 8-bit.
- EXR — 16-bit (half) and 32-bit (float).
- DPX — 8-bit, 10-bit, and 16-bit.
v1.9.33b
- Pipeline mode attempt (reverted) — Implemented per-batch streaming
pipeline (_pipeline_process) with async frame prefetch. This was slower
than the original 4-phase serial approach and was fully reverted. The
original serial pipeline is retained. - Batch size override removal — Removed
chunk_args.batch_sizeoverride
that was forcing single-batch processing per chunk, causing OOM with large
frame counts. - Stream mode cleanup — Removed all pipeline/stream mode artifacts:
_pipeline_process,lightweight_cleanup,pipeline_mode, async prefetch
thread, and related code.
Export Dialog Features
- NVENC auto-detection — Automatically probes ffmpeg for NVENC encoder
availability and selects GPU encoding when present. - Quality presets — Low / Mid / High quality levels per codec, mapped to
appropriate CQ/QP values. - Spatial AQ —
-spatial_aq 1enabled for NVENC encoders for better quality. - 10-bit output — Optional 10-bit encoding (
-pix_fmt p010lefor H265,
yuv422p10lefor ProRes, etc.). - Smart container filtering — Only valid containers per codec are shown
(e.g., ProRes → MOV only). - FFmpeg argument builder —
build_ffmpeg_command()constructs optimal
ffmpeg arguments based on selected codec, profile, quality, and container.
v1.9.32b
- Channels-last memory format (ComfyUI
--force-channels-lastequivalent)
— The DiT model is now converted totorch.channels_lastmemory layout
after materialization. On Blackwell (RTX 50xx) this enables the faster NHWC
tensor core path for conv and linear ops. Backend-specific: only applied on
NVIDIA CUDA and AMD ROCm RDNA3+ viasupports_channels_last(). - RoPE bf16 (no float32 upcast) (ComfyUI
--dont-upcast-attention
equivalent) — Rotary position embeddings were upcasting q/k to float32 on
every attention layer, then casting back. Now RoPE runs in native bf16
throughout (viasupports_low_precision_rope()), eliminating the expensive
fp32 round-trip on every forward pass in both 3B and 7B models. - VAE attention upcast disabled — VAE attention used
upcast_softmax=True
andforce_upcast=True, forcing softmax to float32. Both disabled to keep
the entire VAE pipeline in bf16. Applied at runtime inmodel_loader.py
based on backend detection. - VAE tiled encode/decode off by default — Tiling was splitting 960x720
into 2 tiles, doubling the decode work. Now bothvae_encode_tiledand
vae_decode_tileddefault toFalse(matching ComfyUI node defaults). RTX
5070 Ti 16GB VRAM handles full-resolution VAE without tiling. - CUDA caching allocator (no
PYTORCH_ALLOC_CONF) — Previous attempts with
expandable_segments:True(unsupported on Windows, PyTorch #123548 conflict)
andbackend:cudaMallocAsync(reserved VRAM never reclaimed) both caused
fragmentation. The default PyTorch caching allocator works best on Windows. _parse_offload_deviceno longer forces CPU — Whenoffload_device="none",
the CLI previously auto-promoted to"cpu"if caching was enabled, silently
re-introducing model ping-pong. Now"none"always means GPU resident.- Performance parity fix — model ping-pong eliminated — GUI offload
defaults werevae_offload_device=cpuandtensor_offload_device=cpu,
forcing every model and all latent tensors to ping-pong GPU↔CPU between
phases. Defaults changed to GPU (none), matching ComfyUI's--gpu-only. - GUI offload labels — Dropdown options changed from cryptic "none"/"cpu"
to friendly "GPU"/"CPU" labels with bidirectional mapping.
v1.9.31b
- Lossless preview source frame — Preview now reads the source frame
directly from the original file via cv2 (preserving full bit depth) instead
of the 8-bit display pixmap. 16-bit sources keep their full 16-bit precision
in the comparison. - Stale preview cleanup — Old preview artifacts (
preview_source.tiff,
preview_fallback.tiff,preview_result.tiff) are deleted before each new
preview run and when a file is removed from the project list. - Synchronized video split view —
SplitViewWidgetrewritten with
dual-video synchronized playback via dualcv2.VideoCapture+QTimer.
Supports play/pause, seek slider, keyboard controls (Space/Left/Right/
Home/End), and click-to-toggle playback.
Settings Panel Enhancements
v1.9.30b
- Performance parity with ComfyUI — CLI now sets the same PyTorch
environment variables ComfyUI uses (TORCH_CUDNN_BENCHMARK,
TORCH_CUDNN_SDP_ENABLED,TRITON_INTERPRET=0,CUDA_CACHE_PATH,
CUDA_MODULE_LOADING=LAZY), pluscudnn.benchmark=Trueand TF32 matmul
(set_float32_matmul_precision("high")). Compile-free speedup. - EWA-Lanczos downscale — Pre-downscale now uses GPU
torch.interpolate
(Lanczos + antialias) instead of CPUcv2with uint8 quantization. - FFV1 Intra RGBA-16bit codec — Added lossless intra-only FFV1 codec
(ffv1 -pix_fmt rgba64le -coder 1 -context 1 -g 1, MKV/AVI). - Clear list button — Project panel now has a 🗑 Clear List button
(variant="danger") that clears all files and emitsfile_removedper file. - Sound fixes — Success = rising 3-note Beep chime (659→880→1319 Hz);
failure = descending two-tone (622→415 Hz). All viawinsound.Beep.
Resolution
- Resolution modes — Pixel (exact short-side), X-Times (multiplier), and
Presets (720p, 1080p, 1440p, 4K). - Max resolution — Hard cap on the longest edge (default: 3840px).
- Pre-downscale — Optional 2:1 or 3:1 pre-downscale before upscaling, with
EWA-Lanczos GPU interpolation.
v1.9.21b–v1.9.29b
- Auto-Tune OOM-retry system — When CUDA OOM occurs, the CLI automatically
reduces tile size (1024→512→256), increases BlockSwap (0→16→24→32→36),
reduces batch size, or enables pre-downscale — then retries without manual
intervention. - BlockSwap escalation — Automatic block swap escalation for low-VRAM GPUs.
- Conv3d memory bug workaround — Detects PyTorch 2.9+ with cuDNN ≥91002
Conv3d 3x memory bug and applies directtorch.cudnn_convolutionbypass. - Device manager backend detection — Unified
Backendenum (CUDA/ROCM/
XPU/MPS/CPU) withsupports_channels_last()andsupports_low_precision_rope()
for backend-specific optimizations. - VAE decode batch cleanup —
empty_cache()between decode batches to
prevent reserved-but-unallocated VRAM accumulation. retry_on_oomsleep removal — Removed hardcoded 0.5s sleep in OOM retry
path for faster recovery.release_model_memoryVRAM flush — Addedempty_cache()after model
parameter release to immediately return freed VRAM to the allocator.
Batch Processing
- Batch size — Configurable batch size (default: 81). Higher = better temporal
coherence but more VRAM. - Uniform batch size — Pads the final batch to match
batch_sizefor consistent
processing. - Temporal overlap — Overlapping frames between batches for smooth blending
(default: 4). - Prepend frames — Reversed frames prepended at the start to reduce start
artifacts (default: 4).
VAE Tiling
- Encode tiled — Optional spatial tiling during VAE encoding.
- Decode tiled — Optional spatial tiling during VAE decoding.
- Tile size / overlap — Configurable tile dimensions and overlap for both
encode and decode.
Color Correction
- Methods — LAB perceptual transfer, Wavelet adaptive, Wavelet reconstruction,
HSV, AdaIN, or None.
Noise
- Input noise scale — Adds subtle noise to input before encoding (0.0–1.0).
- Latent noise scale — Adds noise during diffusion conditioning (0.0–1.0).
Advanced
- Auto-Tune — Automatically reduces tile size, enables BlockSwap, and adjusts
batch size on OOM errors without manual intervention. - Offload devices — GPU/CPU selection for DiT, VAE, and intermediate tensors.
Friendly dropdown labels ("GPU"/"CPU") with automatic CLI token mapping. - BlockSwap — Configurable transformer block swapping (0–36) for low-VRAM GPUs.
- Swap I/O components — Additional I/O layer offloading for maximum VRAM savings.
- Chunked processing —
chunk_duration_minutesfor streaming large videos in
time-bounded chunks with temporal overlap blending. - Frame selection —
load_cap,skip_first_frames,only_framesfor
processing specific portions of a video. - Attention mode — SDPA, Flash Attention 2/3, SageAttention 2/3 selectable.
- Model caching —
cache_dit/cache_vaekeeps models in RAM between runs,
eliminating SSD re-reads for batch processing. - Debug mode — Detailed logging with VRAM/RAM statistics per phase.
- Tile debug — Visualizes encode/decode tile boundaries on output frames.
Project Panel
- Clear list button — 🗑 "Clear list" button (danger variant) removes all files
from the queue. Emitsfile_removedsignal per file for proper cleanup. - Drag & drop — Drag video files directly into the project list.
- Folder batch — Select a folder to batch-process all supported video files.
- Per-file remove — Each file has a ✕ button for individual removal.
Split View Widget
- Dual-video synchronized playback — Opens two
cv2.VideoCapturehandles and
plays source + upscaled videos in sync viaQTimer. - Automatic frame offset — Calculates frame count difference between source
and upscaled videos, applies temporal offset for correct alignment. - Seek slider — Embedded
QSliderfor frame-accurate scrubbing. - Keyboard controls — Space (play/pause), Left/Right (±1 frame), Home/End
(jump to start/end). - Click to toggle — Click anywhere on the video to toggle play/pause.
- Divider drag — Draggable split divider for adjustable left/right ratio.
- Zoom & pan — Mouse wheel to zoom, drag to pan.
- Static image mode — Falls back to
set_images()for single-frame preview
comparison.
Preview System
- Lossless source frame — Preview reads the source frame directly from the
original file via cv2 at native bit depth (16-bit TIFF preserved) instead of
the 8-bit display pixmap. - Stale preview cleanup — Old preview artifacts are deleted before each new
preview run and on file removal, preventing stale split-view images.
Performance Optimizations
Environment & Allocator
- ComfyUI-matching environment variables —
TORCH_CUDNN_BENCHMARK=1,
TORCH_CUDNN_SDP_ENABLED=1,TRITON_INTERPRET=0,CUDA_MODULE_LOADING=LAZY,
CUDA_CACHE_MAXSIZE=4GB, persistentCUDA_CACHE_PATH. - cuDNN benchmark + TF32 —
torch.backends.cudnn.benchmark = Trueand
set_float32_matmul_precision("high")for compile-free speedup. - Default CUDA caching allocator — No
PYTORCH_CUDA_ALLOC_CONFoverride.
expandable_segmentsis unsupported on Windows;cudaMallocAsynccauses VRAM
fragmentation;max_split_size_mbconflicts with expandable_segments (#123548).
The default allocator is the most stable on Windows.
Model Memory
- Channels-last (NVIDIA/AMD) — DiT model converted to
torch.channels_last
after materialization, enabling NHWC tensor core path on Blackwell/RDNA3+.
Backend-gated viasupports_channels_last(). - RoPE bf16 (no fp32 upcast) — Rotary position embeddings run in native bf16
on CUDA/ROCm/XPU, eliminating the per-attention-layer fp32 round-trip in both
3B and 7B models. Backend-gated viasupports_low_precision_rope(). - VAE attention upcast disabled —
upcast_softmax=Falseand
force_upcast=Falseto keep entire VAE in bf16. Applied at runtime based on
backend detection. - Model ping-pong eliminated — When
offload_device=none+ caching, models
stay resident on GPU (no CPU round-trip). Whenoffload_device=cpu+ caching,
models are kept in RAM (no SSD re-read). _parse_offload_devicefix —"none"always returnsNone(GPU resident),
no longer auto-promoted to"cpu"when caching is enabled.
VAE Decode
empty_cache()between decode batches — Prevents reserved-but-unallocated
VRAM accumulation that triggers OOM on later batches.release_model_memoryVRAM flush —empty_cache()after parameter release
to immediately return freed VRAM to the allocator.retry_on_oomsleep removal — Removed hardcoded 0.5s sleep for faster OOM
recovery.- Conv3d cuDNN benchmark —
benchmark=Truein the Conv3d memory bug workaround
for optimal kernel selection.
Backend Detection
- Unified
Backendenum — CUDA (NVIDIA), ROCM (AMD), XPU (Intel), MPS (Apple),
CPU. Automatic detection viatorch.version.hip,torch.xpu, etc. supports_channels_last()— Returns True for NVIDIA CUDA and AMD RDNA3+/MI300.supports_low_precision_rope()— Returns True for CUDA, ROCM, XPU, CPU.
Returns False for MPS (numerical stability).
Auto-Tune OOM System
- Automatic step-down — On CUDA OOM: tile size 1024→512→256, BlockSwap
0→16→24→32→36, batch size reduction, pre-downscale activation. - No manual intervention — Retries automatically with reduced settings.
Audio & UX
- Success chime — Rising 3-note Beep (659→880→1319 Hz) on successful export.
- Failure tone — Descending two-tone Beep (622→415 Hz) on error.
- Toast notifications — Non-intrusive popup messages with auto-dismiss.
- Button3D variants — default, danger, ghost styles for different actions.
ComfyUI Optimizations Applied
All CLI optimizations were also applied to the ComfyUI custom node at
C:\ComfyUI\ComfyUI\custom_nodes\seedvr2_videoupscaler\:
- RoPE bf16 (3B + 7B)
- VAE
upcast_softmax=False,force_upcast=False device_manager.pybackend detection- DiT/VAE cache RAM (none + cache_model = RAM resident)
- Cache validation removal (none + cache_model allowed)
sleep(0.5)removal inretry_on_oom- Conv3d
benchmark=True
Version History Summary
| Version | Key Changes |
|---|---|
| v1.9.18b–v1.9.21b | Export system, codecs, NVENC, settings panel, Auto-Tune |
| v1.9.22b–v1.9.29b | Project panel, Toast, Button3D, sound, performance env vars |
| v1.9.30b | EWA-Lanczos, FFV1, clear list, sound fixes, performance parity |
| v1.9.31b | Lossless preview, stale cleanup, synchronized video split |
| v1.9.32b | Channels-last, RoPE bf16, VAE upcast, offload GPU defaults |
| v1.9.33b | Pipeline attempt (reverted), batch override removal |
| v1.9.34b–v1.9.36b | Prepend frames / frame sync investigation |
| v1.9.37b | Split view frame offset sync |