Files
heyburns-PortraitUtils/docs/AutoAdjustNode.md
T

36 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AutoAdjustNode
## Overview
`AutoAdjustNode` performs a chained series of global tone corrections on an RGB image. It can optionally apply automatic levels, per-channel or monochrome tone stretching, neutral colour balancing in YCbCr, and a final horizontal flip. The implementation assumes floating-point tensors in `[0, 1]` and always returns RGB output.
## Inputs
- `image` (`IMAGE`): Source image tensor shaped `[B, H, W, C]` (C must be 3 or 4; the alpha channel is discarded).
- `precision` (`STRING`): Selects percentile estimation mode for level/tone calculations. `"Histogram (fast)"` approximates quantiles via 256-bin histograms, while `"Exact"` uses `torch.quantile`.
- `auto_levels` (`BOOLEAN`, default `True`): Enables global min/max remapping based on luma percentiles.
- `levels_shadow_clip_pct` (`FLOAT`, default `0.1`): Percentage of darkest pixels to clip when computing the low anchor for levels.
- `levels_highlight_clip_pct` (`FLOAT`, default `0.1`): Percentage of brightest pixels to clip when computing the high anchor.
- `levels_gamma_normalize` (`BOOLEAN`, default `False`): When enabled, nudges midtones toward 50% grey if the median luma falls between 35% and 65%.
- `auto_tone` (`BOOLEAN`, default `True`): Toggles the tone mapping stage.
- `tone_mode` (`STRING`, default `"Per-channel"`): `"Per-channel"` stretches each channel independently; `"Monochromatic"` applies a single stretch derived from luma.
- `tone_shadow_clip_pct` (`FLOAT`, default `0.1`): Shadow percentile used by the tone stage.
- `tone_highlight_clip_pct` (`FLOAT`, default `0.1`): Highlight percentile used by the tone stage.
- `auto_color` (`BOOLEAN`, default `True`): Enables neutral balance in YCbCr space (centres Cb/Cr components).
- `snap_neutral_midtones` (`BOOLEAN`, default `False`): When `True`, only midtone pixels (luma in 0.2–0.8) contribute to the Cb/Cr statistics, reducing highlight/shadow bias.
- `flip_horizontal` (`BOOLEAN`, default `False`): Horizontally mirrors the result.
## Outputs
- `IMAGE`: The processed RGB tensor with all three stages (levels, tone, colour) applied in order, plus any optional flip.
## Processing Notes
- All stages operate on float32 tensors in `[0, 1]`; the node casts incoming data accordingly and clamps the final output.
- Levels and tone stages guard against degenerate ranges (when high equals low) and fall back to minimal stretching.
- The colour balance stage works in YCbCr and uses either masked medians or simple means depending on `snap_neutral_midtones`.
- Alpha channels are intentionally dropped so downstream nodes always receive RGB tensors.
## Tips
- Theoretically, use `"Histogram (fast)"` when performance matters or when feeding large batches; switch to `"Exact"` for reproducibility-sensitive work. In actual practice, `"Exact"` is usually faster, so there's no reason not to use it.
- Keep `levels_shadow_clip_pct`/`levels_highlight_clip_pct` at zero when you need strict dynamic range preservation (e.g., HDR preparation).
- Combine this node with `AutoColorConfigNode` to share toggle states across multiple branches of a workflow.*** End Patch