37 lines
3.2 KiB
Markdown
37 lines
3.2 KiB
Markdown
# AutoAdjustNode
|
||
<div align="center"><img src="screenshots/auto_adjust_node.png" alt="Screenshot" width="300" /></div>
|
||
|
||
|
||
|
||
## 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
|