Nodes/MAGICMATCH/MagicMatch (one-shot)
ComfyUI Node

MagicMatch (one-shot)

The color-match node that learns the look, not just the stats

By lookuters22·Created 3 months ago·Updated 3 months ago· 0
MagicMatch (one-shot)
  • source
  • reference
  • image
strength1.00
lut_encodingsrgb_srgb
render_modeprobe_export
profile_stagecurrent_profile_stages

Two images in, one graded image out. That's the whole pitch, and if you've ever spent ten minutes nudging curves to make an outpainted region sit in a scene's light, you know why that's worth a download. MagicMatch (one-shot) is the all-in-one node from the MAGICMATCH pack: feed it your source and a reference, and it recolors the source so it reads like it was lit and graded like the reference - skin tones, shadow warmth, the whole palette at once.

The clever part is what's under the hood. This isn't the classic Reinhard mean/std transfer you get from a statistics color-match node. MAGICMATCH ships a trained ONNX model (models/color_match.onnx, included in the repo - no API, no key) that reproduces Polarr Next's auto color-match. The pipeline is deliberately "probe parity" with that product: it renders your source through an auto-light/develop pass at 1600px, runs a face-aware white-balance estimate using the bundled face-detect and face-parse ONNX models, downscales both images to 256×256, and feeds them to the network. The net returns a 25³ 3D LUT plus a 1D LUT, which get merged and applied back at full resolution. Net result: a match that reacts to what's actually in the frame - a portrait under warm tungsten behaves differently than a landscape in overcast light.

Inputs are the same four knobs the pack reuses everywhere, and only a couple matter on day one. source and reference are IMAGE tensors, and batch size must be 1 - the node throws if you feed it a batch, so don't shove video frames in one shot. strength (0–1, default 1) blends between the original and the graded result; leave it at 1 for the full look and back it off when the match is too aggressive. The enums you can safely ignore until you're chasing a specific look: lut_encoding defaults to srgb_srgb (the LUT expects and returns sRGB-encoded values), render_mode defaults to probe_export (the full in-Comfy develop stack plus LUT, matching the Polarr probe export; polarr_probe is a LUT-only slice, numpy_legacy the old CPU cube), and profile_stage keeps the auto color-look enabled by default. Output is one IMAGE, ready for Save Image or a composite.

Install is as easy as this pack gets. ComfyUI Manager → search "MAGICMATCH", or:

cd ComfyUI/custom_nodes
git clone https://github.com/lookuters22/MAGICMATCH.git
pip install -r MAGICMATCH/requirements.txt

The clone pulls the ONNX models along with it, so there's no separate Hugging Face download to forget. Restart ComfyUI and the nodes appear under MAGICMATCH.

The one trap worth knowing: this is a one-shot, so every time you change strength the node re-runs the ONNX build - a few seconds on CPU. Fine for a final pass, but if you're hunting the exact slider value, use MagicMatch Build LUT + MagicMatch Preview instead, where the LUT is built once and re-applied cheaply. Also, this pack is brand new with essentially no community track record yet (nothing in the usual forums as of writing), so the README's parity scripts are your best friend if a result ever looks off - and if a reinstall is ever needed, deleting the venv and reinstalling the deps is the standard reset.

CategoryMAGICMATCH

Inputs (6)

NameTypeDefaultDescription
sourceIMAGE
referenceIMAGE
strengthFLOAT1.000–1
lut_encodingCOMBOsrgb_srgb7 options: srgb_srgb, srgb_none, linear_srgb, linear_none, none_none, srgb_adobe, +1
render_modeCOMBOprobe_export6 options: probe_export, polarr_probe, numpy_legacy, polarr, numpy, probe_export
profile_stageCOMBOcurrent_profile_stages4 options: current_profile_stages, force_color_look, disable_profile_look, force_color_look_disable_profile_look

Outputs (1)

NameTypeDescription
imageIMAGE