## Color rules
Edit `config/aov_color_rules.json`:
- `rules` are evaluated from top to bottom. Put more specific rules before broad rules.
- `match_compact_any` matches normalized substrings (useful for studio abbreviations).
- `match_any_tokens` matches whole name tokens.
- `match_all_tokens` can require a token conjunction; it can be combined with `match_any_tokens`.
- `color` is six-digit RGB hex without `#`.
- `modifiers.direct` and `modifiers.indirect` change brightness without changing the family hue.
- `default_color` is used for `rgba`/`rgb`/`alpha`; `unknown_color` is used for unmatched custom layers.
Examples covered by the default rules:
| Layer | Category |
|---|---|
| `sss_direct_sky` | SSS |
| `coat_direct_key` | Coat |
| `diffuse_direct_rim` | Diffuse / Direct variant |
| `diffuse_indirect_rim` | Diffuse / Indirect variant |
| `eyeAOV_eyeSpcR` | Eye Specular |
| `reflection` | Reflection |
The words `sky`, `key`, `rim`, and `fill` are intentionally treated as light identifiers, not as the primary AOV family.
## Compatibility and limitations
- Targeted at Nuke 15.2 and 16; the code uses standard Nuke node/knob callbacks and PySide2/PySide6 `QTimer` imports.
- `Shuffle2` selector knob: `in1`.
- Legacy `Shuffle` selector knob: `in`.
- `tile_color` is packed as `RRGGBBAA`.
- The delayed create callback is a best-effort way to let Nuke finish auto-connection and selector refresh. If a Shuffle is created unconnected and connected much later, the `inputChange` notification may apply the default while the selector is still `rgba` (manual non-default choices remain untouched).
- If the selector does not expose a populated `values()` list, the fallback uses `source.channels()` order. That order is returned by Nuke, but Foundry's API docs do not promise that it exactly matches the UI menu ordering. The selector's `values()` method is therefore the preferred source.
- This package does not alter the image-processing mappings, render output, or channel data.

Comments