Olm Channel Mixer
The Photoshop-style color tool that previews without a rerun
- image
- IMAGE
ComfyUI's color-correction story is mostly sliders you can't see the result of until the whole graph re-runs. Olm Channel Mixer fixes the part that annoys you most: it gives you the classic Adobe-style channel mixer - the Photoshop effect, not a diffusion thing - with a live preview inside the node. Drag the image in, run once, and every slider tweak updates the thumbnail instantly. No re-run, no waiting on a KSampler to get a look at your grade.
It's the work of Olli Sorjonen (o-l-l-i, a.k.a. imlo2 on Reddit), who's been rolling out a series of minimal, realtime color nodes - Olm Curve Editor and Olm Image Adjust are the siblings, and they chain together nicely. The ChannelMixer was first released as a public test in July 2025 and is still marked experimental, so expect the occasional breaking change.
How it works
A channel mixer treats each of the three output channels as a weighted sum of the input channels. Red output = (amount of input red × red) + (amount of input green × green) + (amount of input blue × blue), and same for green and blue. That's your 3×3 matrix. The nine sliders on the node are the matrix entries, named <source>_in_<output> - so red_in_red is how much of the image's red feeds the red output, blue_in_red how much blue leaks into the red output, and so on. Turn blue_in_red up and shadows in the red channel pick up blue; set one channel to zero and you're effectively remapping.
Defaults are the identity matrix - red_in_red, green_in_green, blue_in_blue at 1, everything else 0 - so the node passes your image through unchanged until you move something. Each slider runs −2 to 2 in 0.01 steps; the mix is done in torch and clamped to 0–1, so you can push past 1 for a hot, saturated look without blowing out to garbage.
The live preview is the clever part and it's all local. When you run the graph, the node stashes a downscaled copy of the input image in a per-workflow cache. The frontend then POSTs your slider values to a small endpoint on ComfyUI's own server (/olm/api/channelmixer/update), which recomputes the mix on the cached thumbnail and returns a fresh PNG. Zero re-sampling of the graph. The catch, spelled out in the README: you have to run the graph once first - the node can't capture upstream image data until then. That's a LiteGraph limitation, not a bug.
The inputs that matter
Only one connection is truly yours to make: image in, and a single IMAGE out that wires into any image-accepting node downstream. The nine FLOAT sliders are the ones you'll live on - most of your time goes to red_in_red, green_in_green, blue_in_blue (tuning the balance) plus the off-diagonal entries for cross-processing. Ignore version (a hidden init string that's internal plumbing; leave it alone).
Real-world starting point: people use this to kill the yellow cast that LLM-image pipelines (ChatGPT/GPT images) love to add. The author's own demo just boosts blue-in-blue and nudges green, and the tint drops right out. It's also the tool for film-style looks - push blue into the red output, crush a channel, or go fully weird with channel remapping.
Install and gotchas
cd ComfyUI/custom_nodes
git clone https://github.com/o-l-l-i/ComfyUI-Olm-ChannelMixer.git
Then restart ComfyUI - or just search "Olm Channel Mixer" in ComfyUI Manager and let it handle it. No models, no extra dependencies: it leans on Pillow, torch, and numpy, all of which ComfyUI already ships. This is one of the rare custom nodes that adds nothing to your disk beyond the code.
Where people trip up:
- Preview not appearing? You haven't run the graph once. It's the documented first-run requirement.
- RGB only. No alpha, no mask input or pass-through. Feed it a masked region separately if you need selective grading.
- Big images are slower. The preview is downscaled, but the actual output mix scales with resolution.
- If you're on ComfyUI frontend 1.24.4+, keep the node updated - version 1.0.1.1 fixes subgraph header buttons breaking.
One more thing worth knowing before you build a workflow around it: this is source-available, not open-source under a standard license. You can use it and keep your outputs, but redistribution or rebranding the code is off-limits. Fine for personal and commercial image work; just don't fork-and-publish it.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| version | STRING | init | — |
| image | IMAGE | — | |
| red_in_red | FLOAT | 1.00-2–2 | — |
| green_in_red | FLOAT | 0.00-2–2 | — |
| blue_in_red | FLOAT | 0.00-2–2 | — |
| red_in_green | FLOAT | 0.00-2–2 | — |
| green_in_green | FLOAT | 1.00-2–2 | — |
| blue_in_green | FLOAT | 0.00-2–2 | — |
| red_in_blue | FLOAT | 0.00-2–2 | — |
| green_in_blue | FLOAT | 0.00-2–2 | — |
| blue_in_blue | FLOAT | 1.00-2–2 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |