Shot Match Color
Make one shot's color feel like another's, in one node
- source_video
- reference_video
- video
- output_path
- summary
The moment your generated shot lands next to real footage in an edit, the color mismatch announces itself: your render looks like it came from another planet. MKRShotMatchColor is the pack's one-node answer - it shifts the color of a source video toward a reference video so the two read as belonging to the same scene. It's the "match this generated clip to my plate" move, automated.
What it's for
You'll reach for it when you have a source clip whose look you want to inherit from a reference - a hero shot, a plate, another render you've already graded. It's a global color match: overall tone, contrast feel, and channel balance get pulled toward the reference. It won't fix a fundamentally different white balance per region or relight a scene, but for getting a generated shot to sit naturally next to its neighbors, it's often exactly the 80%.
How it works
No ML, no training - this is classic moment-matching color transfer, run per frame. It samples reference_sample_frames (default 8) evenly from the reference video and computes each channel's mean and standard deviation across those frames. Then, for every source frame, it computes the frame's own per-channel mean/std, normalizes it, scales it to the reference's stats, and blends the result with the original using strength (0–1, default 1 = full match). Frame rate comes from the source or fallback_fps. Result gets re-encoded to output_format (auto keeps the source container).
Inputs and outputs
source_video- what gets recolored.reference_video- where the look comes from.reference_sample_frames- how many reference frames to average; 8 is a solid default, more smooths noisy footage.strength- your fader between original and matched. Start at 0.6–0.8 if full match feels too aggressive.fallback_fps,output_format,filename_prefix,subfolder,overwrite, optionalfilename_label.
Outputs: video (MKR_VIDEO payload), output_path, and summary (frames used, strength, warnings).
Installing it
Pack install as always:
cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes
restart ComfyUI, or Manager → MKRShift_Nodes. Container output wants ffmpeg on PATH; gif/webp fall back to PIL.
Common issues
Two expectations to manage. First, it's global - if your reference is a night exterior and your source is a day interior, moment-matching stretches things into a weird middle, so use it between shots that already share a scene. Second, memory: both videos decode fully into RAM, so very long sources want a proxy first (MKRProxyTranscode). And strength = 1 can crush highlights if the reference is much darker or brighter - blend down rather than trusting full match.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| source_video | * | — | |
| reference_video | * | — | |
| reference_sample_frames | INT | 81–256 | — |
| strength | FLOAT | 1.000–1 | — |
| fallback_fps | FLOAT | 24.01–240 | — |
| output_format | COMBO | auto | 6 options: auto, gif, webp, mp4, mov, webm |
| filename_prefix | STRING | MKR_shot_match_color | — |
| subfolder | STRING | — | |
| overwrite | BOOLEAN | false | — |
| filename_labelopt | STRING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| video | MKR_VIDEO | — |
| output_path | STRING | — |
| summary | STRING | — |