Nodes/Comfyui-MMH3-UltimateUpscale/MMH3 Fun Controlnet Inpaint
ComfyUI Node

MMH3 Fun Controlnet Inpaint

Kill the seams in tiled MiniMax H3 upscales — without leaving latent space

By bbaudio-2025·Created 8 days ago·Updated a day ago· 131
MMH3 Fun Controlnet Inpaint
  • control_net
  • inpaint_param
inpaint_strength1.00

Tile-based upscaling has one guaranteed tell: the seam. Each tile gets sampled independently, and when denoise is high, the boundaries between tiles disagree - you get a grid of subtly different lighting and detail. The MMH3 Ultimate Upscale node already blends overlap bands (overlap_blend, frozen overlap masks), but at high denoise blending alone stops cutting it. MMH3SpatialInpaintParams is the pack's answer: it turns the seam region into an inpainting problem and pins each tile to what its neighbor already produced, directly in latent space.

No pixel round-trip, no decode → inpaint → re-encode, which is exactly what you don't want to pay for on a 33B video model. The whole trick rides on the MiniMax H3 Fun ControlNet's inpaint mode.

How it works

This node is a param bundle for the main node's spatial split - it packages a ControlNet plus a strength into one inpaint_param handle. What actually happens is in the main node: on every non-first tile, the already-sampled neighbor content that lives in the accumulated latent gets fed into the controlnet's masked_latent channel, and the spatial fade mask doubles as the visibility channel (1 = keep the neighbor, 0 = regenerate). The inpainted strips are then chained under the Fun ControlNet (set_previous_controlnet), so the two guides stack rather than fight.

The neat bit is why this works in latent space at all: the H3 VAE encoder is linear, so encode(source × visibility) equals source_latent × visibility_latent. You can pin those strips straight from the accumulated latent without ever decoding a tile back to pixels. The result is that each tile is forced to keep the content its neighbors already committed to - no visible seam, because the seam content is never overwritten.

Inputs and outputs

It's a small node:

  • control_net - the MiniMax H3 Fun ControlNet, loaded via ControlNet Loader / DiffControlNet Loader. Same hard requirement as the sibling node: the code raises a ValueError unless it's a MiniMaxH3ControlNet.
  • inpaint_strength (default 1.0, range 0–10) - how strongly the inpaint strips pin the tile to the neighbor content. Start at 1.0; if the seams soften but the tile content feels frozen, back it off. If seams still show, raise it.

Output is a single inpaint_param, wired into the inpaint_param input on MMH3 Ultimate Upscale. It stacks with MMH3FunControlnetParams - wire both in and the inpaint guidance rides underneath the general control.

Installing it

Same pack as the rest: ComfyUI Manager → search "Comfyui-MMH3-UltimateUpscale", or

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

then restart. No extra Python dependencies. Two prerequisites that will bite you silently if they're missing: ComfyUI needs kijai's PR #15860 merged (that's what adds MiniMax H3 Fun ControlNet support to core - on an older ComfyUI the node fails on load), and you need the H3 Fun ControlNet-Union weights plus the H3 checkpoint and VAE. Also, the MiniMax H3 Community License excludes the US, EU, UK and Korea - worth checking before you build your workflow around it.

Where people get burned

The biggest trap is that this node silently does nothing if the spatial split isn't active. It needs a MMH3SpatialSplitParams connected to the main node's spatial_split_param - without it there are no tiles to pin, and no error tells you. Second trap: the inpaint only kicks in on non-first tiles (i > 0 or j > 0), which is correct (the first tile has no neighbor yet) but means a single-tile setup gets nothing from this node. And since this pack is openly vibe-coded and iterating fast, expect the wiring to shift between versions - pin a ComfyUI snapshot that works and update deliberately.

Categorymodel/latent/minimax

Inputs (2)

NameTypeDefaultDescription
control_netCONTROL_NETThe MiniMax H3 Fun ControlNet used to apply the inpaint guidance.
inpaint_strengthFLOAT1.000–10How strongly the inpaint strips pin the tile to the neighbour content.

Outputs (1)

NameTypeDescription
inpaint_paramH3_INPAINT_PARAMSpatial seam inpaint settings consumed by 'MMH3 Ultimate Upscale'.