Nodes/Comfyui-MMH3-UltimateUpscale/MMH3 Tiled Diffusion (Experimental)
ComfyUI Node

MMH3 Tiled Diffusion (Experimental)

MMH3 Tiled Diffusion Won't Save You VRAM — It Saves Your Seams

By bbaudio-2025·Created 2 months ago·Updated 7 days ago· 234
MMH3 Tiled Diffusion (Experimental)
  • model
  • model
◄methodgaussian►
◄tile_width1024►
◄tile_height1024►
◄tile_overlap256►

Get the expectation straight first: tiled diffusion almost everywhere else means "big output on a small card". This node doesn't do that, and the author says so in the tooltip - it "does not save VRAM/time... it is an experiment in seam quality". If you're hunting for a MiniMax H3 out-of-memory fix, you want the other path in this pack, the spatial split params.

What it actually is: a model patch. Split a latent into tiles, diffuse each to completion and stitch afterwards, and the tiles never see each other - each resolves its own content and the stitch has to hide the disagreement with frozen overlap masks and fades. This node attacks the disagreement.

How it works

MMH3 Tiled Diffusion is a MultiDiffusion / Mixture-of-Diffusers port from shiimizu's Tiled Diffusion, wired in as a model-function wrapper. It patches the H3 model rather than the sampling loop: every denoising step slices the packed video latent into overlapping spatial windows, runs the DiT once per window, and blends the predictions back into a shared full-frame buffer.

Because all tiles advance through the same sigmas on the same noise field, there's nothing to mask - no freeze/fade bands, no denoise-mask juggling. Overlapping tiles are predicting the same timestep of the same frame, so blending them averages a consensus instead of papering over strangers.

The detail you'd never guess from a screenshot: tile windows carry global frame positions. The first version restarted the DiT's rotary position grid at each tile's origin, so H3 treated every tile as a standalone frame and the tiles decoupled into unrelated content. The current version derives each window's layout from the full-frame layout - which is what makes overlap blending meaningful, and why overlap size still matters.

Audio is never split: every tile is packed with the full audio stream, and the per-tile audio predictions get averaged at the end.

The inputs you touch

Four inputs matter.

  • tile_width / tile_height are in video pixels, snapped to a multiple of 32 (the H3 2x2 latent patch grid). One latent unit is 16 px, so a 1024 px tile is 64 units - the defaults will split a 1280-wide frame and leave a 720-high one as a single row. Match them roughly to your frame size; tiles bigger than the latent give you one tile, a pass-through with nothing to gain.
  • tile_overlap, also pixels. Keep it at at least ~25% of the tile size - 256 px on 1024 px tiles is about what the default gives you. Too small and the tiles decouple into unrelated content; zero gives hard tile edges. The node errors out if the overlap lands as large as the tile, since tiles could never advance.
  • method picks the blend weight. gaussian (default) is Mixture of Diffusers: each tile dominates its centre and fades out. uniform is plain MultiDiffusion averaging - every pixel in an overlap counts equally. I'd leave it on gaussian.
  • model is the H3 model you're patching; the single output is that patched MODEL, which goes into the main upscale node.

Wiring it up

Put it inline between the H3 model and the main node, then deliberately leave one input empty:

H3 model ──▶ MMH3 Tiled Diffusion ──▶ MMH3 Ultimate Upscale (model)
                                       spatial_split_param: LEFT UNCONNECTED

With spatial_split_param unconnected, each temporal chunk is sampled whole through the patched model and tiling happens inside the denoiser, per step. Temporal split and the latent-upscale params keep working unchanged. Watch the name collision: "tiled diffusion" replaces the spatial split here, not the temporal one.

Install

A plain custom-node drop-in - no pip dependencies at all (pyproject.toml declares an empty dependency list, and there's no requirements.txt):

cd ComfyUI/custom_nodes
git clone https://github.com/bbaudio-2025/Comfyui-MMH3-UltimateUpscale
# restart ComfyUI

ComfyUI Manager also works: search Comfyui-MMH3-UltimateUpscale (registry-published under publisher bbaudio). There are no model downloads for this node - it patches a model you already have. You do need a recent ComfyUI, though: it imports comfy_api.latest (the V3 node API) and comfy.ldm.minimax.model.PackedLayout, so a build from before H3 day-zero support won't load it.

The H3 weights are the real cost - 33B, ~42.5GB reported at full precision, with quantizations doing the actual VRAM work. One legal gotcha: the MiniMax H3 Community License excludes the US, EU, UK and South Korea from its Applicable Territory, outputs included.

Where it bites

It refuses controlnet, inpaint and denoise masks. Wire in a fun-ControNet chain or a mask and it raises before sampling rather than producing something subtly wrong: "MMH3 Tiled Diffusion (experimental) does not support 'control' / 'denoise_mask'". If your graph needs those, use the spatial split path and its frozen-overlap-mask machinery.

It isn't free. Tiles run sequentially inside each step (H3 wants batch size 1), so you pay roughly one DiT forward per tile per step. The console prints the tile grid it settled on.

It's brand new. The node landed 2026-09-23, the author calls it experimental, and the README admits the project "was vibe-coded by AI" and suggests asking an AI if it breaks. The changelog's own claim is the honest summary: it replaces spatial split "basically without any seam defects". That's a seam-quality experiment, not a production upscaler - A/B it against the spatial split path on a clip with moving fine texture before rewiring anything you care about.

Categorymodel/latent/minimax

Inputs (5)

NameTypeDefaultDescription
modelMODELThe MiniMax H3 diffusion model to patch.
methodCOMBOgaussianOverlap blending weight per tile: gaussian (Mixture of Diffusers, default - tiles dominate their center) or uniform (MultiDiffusion - plain averaging in overlaps).
tile_widthINT102464–8192Tile width in PIXELS, snapped to a multiple of 32 (the H3 2x2 latent patch grid).
tile_heightINT102464–8192Tile height in PIXELS, snapped to a multiple of 32 (the H3 2x2 latent patch grid).
tile_overlapINT2560–8192Overlap between neighbouring tiles in PIXELS, snapped to a multiple of 32. Keep at least ~25% of the tile size or the tiles decouple into unrelated content. 0 gives hard tile edges.

Outputs (1)

NameTypeDescription
modelMODELThe patched model; feed it into 'MMH3 Ultimate Upscale' (spatial_split_param unconnected) or any H3 sampler.