Stable Manifold Profile
One object to hold every correction knob — tune the drift fix in one place
- profile
- profile_json
StableManifoldProfile is the settings-as-data node in this pack. It never touches a pixel. Feed it numbers and it hands you a single SMC_PROFILE object plus a JSON dump of the same values; you wire that profile into the correction nodes, and tune everything in one place instead of resetting twenty sliders per call. It's the hand-tunable sibling of SMC Config in the pack's main anchor-guided path.
Why it exists: the affine path is the pack's explicit, diagnostic route, and the point of a profile is reuse and A/B testing. Build two profiles, run the same compand with each, and you can diff exactly what changed because every value is visible in profile_json.
All 20 inputs are marked "required" in the schema but ship with sane defaults, so a beginner can hit run and get a working profile immediately. When you actually start tuning, these are the ones to touch first:
stable_sigma(default 8) - how much blur defines the "stable" structure band the drift estimate compares. Too low and it gets twitchy; too high and the correction turns vague.boundary_feather_px(default 18) - softness at the mask edge. Too small and you'll see a seam where the corrected region meets untouched image.max_shrink(default 0.05) andmax_expand(default 0) - safety caps on how far geometry can pull inward or outward. The pack is deliberately anti-expansion: drift tends to zoom out, somax_expandstarts at zero.anchor_pull(default 0.18) - how hard the result is dragged toward the anchor's low-frequency structure.blend_back_to_target(default on) - mixes some of the original target back so the correction doesn't flatten everything into the anchor.
The rest - contrast_strength, chroma_strength, detail_retain, anisotropy and friends - are the fine dials for restoring color and tonal punch after the geometric pull and keeping detail from collapsing. Leave them alone until the geometry looks right.
Outputs: profile (SMC_PROFILE, wire into StableManifoldCompand or StableManifoldSelfAnchorDetailerHookProvider) and profile_json (STRING, pipe to a text-view node or save it to snapshot your settings).
Installing
ComfyUI Manager - search "ComfyUI-StableManifoldCompander" - or:
cd ComfyUI/custom_nodes
git clone https://github.com/xmarre/ComfyUI-StableManifoldCompander
Restart after cloning, and keep the default folder name. No model files, no extra Python deps; this node is pure config, so it can't crash or eat VRAM. (Only the detailer hook in this pack needs an extra install, Impact Pack.)
Gotchas
Since it's pure config, the failure mode is "I tuned it wrong," not "the node crashed." The drift this pack corrects is a real, well-documented FLUX.2 annoyance - identity drift, relighting, chroma flattening on crops and edits - but the exact knob settings depend on your image. Use the JSON output to track what changed, and remember a profile is just data: you can rebuild it from a saved string, and StableManifoldRecombine will happily verify whether the result is actually better.
One take: 20 sliders is a lot of surface, which is exactly why the pack pushes the anchor-guided path as the daily driver. Reach for this node when you want explicit control, or when you're debugging and need to know precisely what the correction is doing.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| stable_sigma | FLOAT | 8.00–64 | — |
| detail_sigma | FLOAT | 8.00–64 | — |
| boundary_feather_px | FLOAT | 18.00–256 | — |
| interior_power | FLOAT | 1.350.1–8 | — |
| geometry_strength | FLOAT | 1.000–2 | — |
| translate_strength | FLOAT | 1.000–2 | — |
| max_shrink | FLOAT | 0.0500–0.25 | — |
| max_expand | FLOAT | 0.0000–0.25 | — |
| anisotropy | FLOAT | 0.200–1 | — |
| mean_strength | FLOAT | 1.000–2 | — |
| contrast_strength | FLOAT | 0.850–2 | — |
| chroma_strength | FLOAT | 0.950–2 | — |
| anchor_pull | FLOAT | 0.180–1 | — |
| compaction_to_chroma | FLOAT | 0.220–1 | — |
| detail_retain | FLOAT | 1.000–2 | — |
| mask_global_strength | FLOAT | 1.000–1 | — |
| boundary_tether | FLOAT | 0.350–1 | — |
| assume_srgb | BOOLEAN | true | — |
| blend_back_to_target | BOOLEAN | true | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| profile | SMC_PROFILE | — |
| profile_json | STRING | — |