Comfyui_Minimax_h3_latent_Upscaler README

The project's README from github.com/LBH-123-AI/Comfyui_Minimax_h3_latent_Upscaler. As one markdown file: README.md.

English · 中文

ComfyUI Minimax H3 Latent Upscaler

Neural Latent Upscaler for Minimax H3 Video Generation Learned · High-fidelity · 2D & 3D Variants

📰 News

A custom ComfyUI node that upscales Minimax H3 VAE latents (24 channels) with a trained neural network instead of naive interpolation. Its main purpose is to accelerate high-resolution video generation and improve quality:

It also avoids the ghosting / double-image artifacts that naive latent interpolation (bilinear/bicubic) introduces, and plays a role similar to the latent upscaler in LTX2.3.

⚠️ This saves time, not VRAM — the refinement pass still runs at the target resolution, so peak memory is comparable to generating high-res directly. The win is purely speed.

Two node variants are provided, both registered under the video/MinimaxH3 category:

The 3D node computes the equivalent scale internally for the size-based modes and feeds it to the same trained model, so any target between 1.0×–4.0× works.

Both nodes support upscaling only (effective scale >= 1.0). scale = 1.0 returns the input unchanged; an effective scale below 1.0 raises an error.

MMH3 Split Upscale (combo)

Origin: this combo is a decomposed and re-optimized version of the Comfyui-MMH3-UltimateUpscale project. The original monolithic node was broken into three composable nodes (temporal split / spatial split / main upscaler), and the enhancements below were layered on top of the original tiling logic to improve seam stability, color consistency, temporal coherence, usability, and footprint.

A separate three-node combo that does a tiled, hires-fix style re-sampling upscale directly inside the diffusion sampler — instead of a pre-trained upscaler network. It takes the H3 AV latent (nested video 24ch + audio 32ch), splits it into temporal chunks and spatial tiles, runs the sampler on each piece, then stitches them back seamlessly with seam-denoise, two-level color matching and temporal anchors so seams and ghosting don't appear. The two * Split Params nodes configure the splitting and feed the main MMH3 Split Upscale node (both optional — leave them unconnected for a single full-frame pass). It requires a model + conditioning + sampler/sigmas, i.e. it re-runs sampling at the higher resolution.

Key enhancements vs. the original project:

Modules added / optimized (relative to the original project):

Module What it adds / optimizes
Prevention (预防) Freeze-prefill overlap band + triple temporal anchors (frame-0 anchor + motion anchor + identity anchor) + cross-fade stitching — stops seams and forks from forming in the first place.
Correction (校正) Two-level (spatial + temporal) color matching + first-block source reference + per-chunk global pin-source (grade_pin) — keeps color & brightness consistent across tiles and chunks, killing inter-tile flicker and localized cyan/green tint.
Anti-forking (抗分叉) seam_denoise cap — under high denoise + fast motion, the seam neighborhood is re-sampled at medium denoise so moving objects aren't sliced ("broken limbs"); combined with the probe-gated second-pass seam polish, seams and ghosting are both eliminated (suggested 0.5–0.8; 1.0 = off).
Fixes (修复) Per-tile independent Guider + cropped keyframes, and a fixed probe-gated seam polish (seam_polish) — each tile gets correctly-scoped conditioning/keyframes, and the polish gating no longer over/under-applies.
Simplification (简化) overlap / fade are now percentage parameters (overlap ratio / fade ratio, resolution-independent) instead of absolute pixels, and auto-snap to the latent grid; negative sits next to conditioning for a more intuitive layout.

📸 Examples

Video upscale comparison

Image upscale comparison


📁 Project Structure

Comfyui_Minimax_h3_latent_Upscaler/
├── examples/
│   ├── Minimax_h3_latent_Upscaler_001.mp4
│   └── Minimax_h3_latent_Upscaler_002.jpg
├── workflow_templates/
│   └── minimax_h3_r2v_Latent Upscaler example workflow.json  # example workflow for ComfyUI templates
├── nodes/
│   ├── __init__.py                       # merges 2D/3D/Split node mappings
│   ├── minimax_h3_latent_upscaler_2d.py  # 2D backbone + Temporal 3D Conv (scale mode)
│   ├── minimax_h3_latent_upscaler_3d.py  # pure 3D convolution with 3 resize modes
│   └── MMH3_Split_Upscale.py             # MMH3 Split Upscale combo (decomposed from Comfyui-MMH3-UltimateUpscale)
├── README.md
├── README_zh.md
└── __init__.py

The model weights are not included in this repo. Place them in your ComfyUI models folder (see Model Placement below).


🚀 Key Features

Inference forces attention off (attn=False) for speed and stability. Loaded models are cached by (name, device, precision) so repeated runs stay cheap.


📦 Installation

  1. Clone this repository into ComfyUI's custom_nodes folder:

    cd ComfyUI/custom_nodes
    git clone https://github.com/LBH-123-AI/Comfyui_Minimax_h3_latent_Upscaler.git
    
  2. Required dependencies (torch, einops, safetensors) are already present in a standard ComfyUI environment — no extra install needed.

  3. Restart ComfyUI.


🤖 Model Placement

The nodes scan and load weights from:

ComfyUI/models/latent_upscale_models/

Put your Minimax H3 latent upscaler checkpoint (.safetensors or .pth) there. It will appear automatically in the node's model_name dropdown.

Pre-trained checkpoints are available at: huggingface.co/LBH-123-AI/Minimax_h3_latent_Upscaler

The loader auto-detects the architecture, so a single checkpoint works for both the 2D and 3D nodes as long as the stored structure matches.


🧩 Usage

Add the node you need from the video/MinimaxH3 menu, connect a LATENT, pick the model, set the resize mode / scale, and decode.

Typical workflow:

Compared to the naive approach [Latent] → [VAE Decode] → [Pixel Upscaler] → [VAE Encode] → …, upscaling directly in latent space skips the expensive VAE decode/encode round-trip. Minimax H3's ~5B-parameter VAE makes decode and re-encode notably slow, so this is where most of the time is saved. It also avoids the ghosting / double-image artifacts that direct latent interpolation (bilinear/bicubic) causes.

⚠️ Saves time, not VRAM: the refinement still runs at the target resolution, so peak memory is roughly the same as generating high-res directly. The benefit is purely faster turnaround.

Node Reference — 2D

Parameter Type Default Range / Options Description
latent LATENT — — Input Minimax H3 latent (B,C,T,H,W) or (B,C,H,W)
model_name dropdown auto scanned files Checkpoint in latent_upscale_models/
scale FLOAT 2.0 1.0 – 4.0 (step 0.1) Spatial upscale factor
device dropdown cuda cuda / cpu Inference device
precision dropdown fp32 fp32 / fp16 / bf16 Inference precision

Output: LATENT — the upscaled latent, ready for VAE decode.

Node Reference — 3D

Parameter Type Default Range / Options Description
latent LATENT — — Input Minimax H3 latent (B,C,T,H,W) or (B,C,H,W)
model_name dropdown auto scanned files Checkpoint in latent_upscale_models/
mode dropdown scale by multiplier scale by multiplier / target dimensions / megapixels How the output size is chosen
scale FLOAT 2.0 1.0 – 4.0 (step 0.05) Used when mode is scale by multiplier
width INT 1280 64 – 8192 (step 8) Target pixel width (used by target dimensions)
height INT 704 64 – 8192 (step 8) Target pixel height (used by target dimensions)
megapixels FLOAT 1.0 0.1 – 16.0 (step 0.1) Target total megapixels (used by megapixels); keeps aspect ratio
align INT 32 1 – 512 Pixel-grid alignment: output W/H are independently rounded to multiples of this value (e.g. 16/32/64)
enable_temporal_chunking BOOLEAN True True / False Split long videos into temporal chunks to cap VRAM; disable for short clips for full-context inference
force_unload BOOLEAN True True / False Unload model to CPU after inference to free VRAM for subsequent nodes; disable if you reuse this node repeatedly to avoid reload overhead
device dropdown cuda cuda / rocm / cpu Inference backend (ROCm needs a HIP-enabled PyTorch build)
precision dropdown fp32 fp32 / fp16 / bf16 Inference precision

Output: LATENT — the upscaled latent.

Which node to pick? Use 2D for speed and when frames are already temporally stable; use 3D when you need stronger motion/temporal coherence or prefer specifying output size by target dimensions / megapixels.

Node Reference — MMH3 Split Upscale (combo)

A tiled, hires-fix style re-sampling upscaler for H3 video, decomposed and optimized from the Comfyui-MMH3-UltimateUpscale project. Unlike the 2D/3D nodes (which use a pre-trained upscaler network), this combo re-runs the diffusion sampler on a higher-resolution version of the latent, split into pieces so it fits in VRAM. It operates on the H3 AV latent (nested video 24ch + audio 32ch) and requires model + conditioning + sampler/sigmas.

MMH3 Temporal Split Params — how to cut the clip along time (H3's native 5+17·m frame/token grid):

Parameter Type Default Range / Options Description
chunk_frames INT 73 5 – 100000 Chunk length in frames (snapped to H3 token grid)
temporal_overlap_frames INT 22 0 – 100000 Overlap between consecutive chunks
anchor_strength FLOAT 0.999 0.0 – 1.0 Temporal anchor strength
motion_anchor_frames dropdown 22 0 / 5 / 22 / 39 Motion anchor length in frames
identity_anchor_frames INT 24 0 – 240 Spacing of identity anchors

Output: temporal_split_param (custom type, feeds the main node).

MMH3 Spatial Split Params — how to cut each frame into tiles:

Parameter Type Default Range / Options Description
tile_width INT 512 64 – 16384 (step 32) Tile width in pixels
tile_height INT 512 64 – 16384 (step 32) Tile height in pixels
overlap_ratio FLOAT 0.25 0.0 – 0.90 Overlap as a fraction of the tile
fade_ratio FLOAT 0.50 0.0 – 1.0 Fade band width within the overlap
min_tile_size INT 256 0 – 16384 (step 32) Minimum tile edge; avoids tiny edge tiles
seam_denoise FLOAT 1.0 0.1 – 1.0 Seam-neighborhood denoise cap; <1 prevents fast objects being cut at seams (suggest 0.5–0.8)

Outputs: spatial_split_param (custom type) + grid_preview (string, shows the computed tile/overlap grid).

MMH3 Split Upscale — the main orchestrator:

Parameter Type Default Range / Options Description
model MODEL — — Diffusion model used for re-sampling
conditioning CONDITIONING — — Positive conditioning
negative CONDITIONING — optional Negative conditioning
latent LATENT — — Input H3 AV latent (nested video 24ch + audio 32ch); batch 1 only
noise NOISE — — Noise source for the sampler
sampler SAMPLER — — Sampler
sigmas SIGMAS — — Sigma schedule
cfg FLOAT 1.0 0.0 – 100.0 Classifier-free guidance scale
temporal_split_param custom — optional From MMH3 Temporal Split Params
spatial_split_param custom — optional From MMH3 Spatial Split Params
seam_polish dropdown off off / auto / all Extra de-seam pass on detected seams
color_match BOOLEAN True True / False Two-level color matching across tiles/chunks

Output: LATENT — the upscaled H3 AV latent, ready for VAE decode.

Notes: Both * Split Params nodes are optional — leave them unconnected for a single full-frame pass (no temporal/spatial splitting). The combo re-runs the sampler at the higher resolution, so it trades extra compute for VRAM headroom on long / high-res clips.


🧪 Model / Architecture

Comfyui_Minimax_h3_latent_Upscaler (LBH-123-AI/Comfyui_Minimax_h3_latent_Upscaler)

Searching Database…

Что это?Кастомная нода для ComfyUI, которая апскейлит видеолатенты Minimax H3 (24 канала) обученной нейросетью вместо наивной билинейной/бикубической интерполяции, чтобы можно было генерировать в низком разрешении и увеличивать в латентном пространстве перед уточнением.
Это отдельное приложение или нода для ComfyUI?Это пакет кастомных нод для ComfyUI, а не отдельное приложение. Вы устанавливаете его в папку custom_nodes ComfyUI и используете внутри существующих воркфлоу.
Как его установить и настроить?Склонируйте репозиторий в папку custom_nodes ComfyUI, перезапустите ComfyUI, затем скачайте с Hugging Face чекпоинт латентного апскейлера Minimax H3 (.safetensors или .pth) и положите его в папку models, чтобы он появился в выпадающем списке моделей ноды.
Нужно ли ставить дополнительные Python-пакеты?Нет — torch, einops и safetensors уже есть в стандартном окружении ComfyUI, так что сверх клонирования ноды и скачивания чекпоинта ничего ставить не нужно.
Это экономит и видеопамять, или только время?Только время. Проход уточнения всё равно выполняется в целевом разрешении, так что пиковое потребление памяти примерно такое же, как при генерации сразу в высоком — выигрыш чисто в скорости за счёт пропуска затратного цикла декодирования/кодирования VAE.
Веса модели нужно скачивать отдельно?Да — веса не идут в комплекте с репозиторием; предобученные чекпоинты размещены отдельно на Hugging Face, и их нужно положить в папку models вашего ComfyUI.
Какие GPU-бэкенды он поддерживает?Работает на CUDA или CPU с вариантами точности fp32/fp16/bf16, а в 3D-ноду также добавлена поддержка бэкенда ROCm (AMD GPU).
В чём разница между 2D- и 3D-нодами апскейлера?2D-нода использует более лёгкий бэкбон из ResBlock со вставленными слоями Temporal 3D-Conv ради скорости: апскейл по пространству с сохранением временной размерности; 3D-нода — полностью 3D-свёрточный бэкбон, обрабатывающий всё пространственно-временное объединённо, что даёт более сильную временную согласованность, но выше вычислительную цену.
Что такое комбо MMH3 Split Upscale?Отдельное комбо из трёх нод, которое выполняет тайловый ресемплинг в стиле hires-fix прямо в диффузионном сэмплере: латент делится на временные куски и пространственные тайлы, затем сшивается обратно с denoise по швам, подгонкой цвета и временными якорями, чтобы избежать швов и «призраков».
Подойдёт ли любой чекпоинт для обоих нод?Да, загрузчик автоматически определяет архитектуру (входные каналы, число блоков, временную конфигурацию, размер ядра) из чекпоинта, поэтому один чекпоинт может работать и с 2D-, и с 3D-нодой, если его структура совпадает.
Какой диапазон увеличения поддерживает апскейлер?Поддерживается только увеличение (эффективный масштаб >= 1.0) в диапазоне 1.0x–4.0x; при масштабе 1.0 вход возвращается без изменений, а всё ниже 1.0 вызывает ошибку.
Creator
LBH-123-AI
Size
8.5 MB
Stars
750
Updated
CommitSep 17
Age
2mo
Commits · 90 Days