Stable Manifold Recombine
The inverse of the split — and your 'detail back on top' knob
- low
- high
- mask
- base_image
- image
StableManifoldRecombine is the mirror of StableManifoldLowHighSplit. Give it a low band and a high band and it stacks them back into one image - with one extra knob that makes it worth having: high_strength, which scales how much detail comes back.
That single control is the reason you'd reach for it. In the affine workflow you often end up with a corrected low band (structure pulled back toward the anchor) and an untouched high band (detail). Recombining at strength 1 is a perfect round-trip - the exact inverse of the split. Drop it to 0.5 and you're softly dialing detail back, which is a subtle way to calm a noisy or overcooked correction; push past 1 and you're boosting texture. It's also the natural place for a sanity check: split → recombine with defaults should hand you back the original image. If it doesn't, something upstream is miswired.
The optional inputs give it a second life as a regional blend. Pass a mask and the recombined result is applied only where the mask is set; everywhere else shows base_image, which defaults to low if you don't supply one. So you can re-attach corrected detail inside a masked region - say a face crop - while the surrounding image stays untouched. That's the same idea the pack's crop workflow formalizes with SMC Composite Crop, just hand-rolled from two bands.
Inputs: low (IMAGE), high (IMAGE), high_strength (default 1, range 0–4), plus optional mask (MASK) and base_image (IMAGE). One output: image.
Installing
ComfyUI Manager - search "ComfyUI-StableManifoldCompander" - or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/xmarre/ComfyUI-StableManifoldCompander
Restart after cloning and keep the default folder name (the README's hyphenated variant doesn't match the module path). No model files, no extra Python dependencies - this is a few lines of tensor math. Only the pack's detailer hook additionally wants Impact Pack.
Gotchas
Three things to know. First, high_strength 0 with no mask just hands you the low band - that's by design, not a bug. Second, the high band from the split is a residual centered near zero, so feeding Recombine a "gray-looking" high image is expected; at strength 1 it reconstructs cleanly. Third, the node resizes high to match low before adding, so if your bands came from different resolutions it silently conforms rather than erroring - which is friendly, but means a size mismatch won't be flagged.
Like the split, this is a small pure-math utility in a young pack. There's not much that can break, and the main risk is wiring - which the round-trip sanity check catches in about ten seconds.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| low | IMAGE | — | |
| high | IMAGE | — | |
| high_strength | FLOAT | 1.000–4 | — |
| maskopt | MASK | — | |
| base_imageopt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |