# AIKeyer

> Green/blue screen colour-difference keyer (screen colour auto or picked, balance, clip black/white) with float-correct despill (none, limit, or IBK-style subtract).

Green/blue screen colour-difference keyer (screen colour auto or picked, balance, clip black/white) with float-correct despill (none, limit, or IBK-style subtract). AI edge refine sends the core matte and screen difference to ViTMatte or BiRefNet for hair-level edges; Edge Width is the band around the core edge the AI may change, Strength mixes its result in, and AI Model Auto picks the best ViTMatte that fits the free GPU memory. Output: final (despilled colour plus alpha) or matte. Clip, despill and output changes reuse the AI result: the model does not run again.

| Node | AIKeyer |
|---|---|
| Menu | AI › AIKeyer |
| **Names in each format** | |
| .oink comp (JSON) | `"type": "OC_N_aikeyer"` |
| .nk script | none: written as an Oink node |
| Python | `nuke.createNode("OC_N_aikeyer")` |
| Assistant (MCP) | `create_node(type="AIKeyer")` |
| Tab search | `aikeyer`, or its initials `aik` |

![AIKeyer properties](/shots/nodes/aikeyer@2x.webp)

## Inputs and outputs

| Port | Name | Type |
|---|---|---|
| input 0 | Image | image |
| output 0 | Image | image |

## Knobs

Panel tab **Aikeyer**, in panel order.

| Knob | Label | Type | Default | Range / values | .nk knob | Description |
|---|---|---|---|---|---|---|
| `screen_type` | screen | menu | `GREEN` | GREEN (green), BLUE (blue) |  |  |
| `auto_screen` | auto screen colour | bool | `true` |  |  | Estimate the screen colour from the frame (off = use Screen Colour) |
| `screen_color` | screen colour | colour ×3 | `0.1, 0.5, 0.1` | 0 to 1 |  |  |
| `balance` | screen balance | float | `0.5` | 0 to 1 |  | Weight of red vs the other non-screen channel |
| `clip_black` | clip black | float | `0` | -0.5 to 1 |  |  |
| `clip_white` | clip white | float | `1` | 0 to 1.5 |  |  |
| `despill` | despill | menu | `LIMIT` | NONE (none), LIMIT (limit), SUBTRACT (subtract (IBK)) |  |  |
| `despill_amount` | despill amount | float | `1` | 0 to 1 |  |  |
| `premultiply` | premultiply | bool | `true` |  |  |  |
| `ai_refine` | AI edge refine | bool | `true` |  |  | Refine the core matte's edges with ViTMatte / BiRefNet (AI worker) |
| `ai_model` | AI model | menu | `AUTO` | AUTO (Auto (by free GPU memory)), VITMATTE_BASE (ViTMatte base), VITMATTE_SMALL (ViTMatte small), BIREFNET (BiRefNet HR) |  |  |
| `edge_width` | edge width | float | `20` | 1 to 200 |  | Band around the core matte edge the AI may change (px) |
| `strength` | strength | float | `1` | 0 to 1 |  |  |
| `tile_size` | tile size | float | `1024` | 0 to 4096 (integer) |  |  |
| `output` | output | menu | `final` | final, matte |  |  |

### Other knobs (Python, .nk and the assistant; not on the panel)

| Knob | Label | Type | Default | Range / values | .nk knob | Description |
|---|---|---|---|---|---|---|
| `gl_color` | Viewer Controls Color | float ×3 | `0, 0, 0` | 0 to 1 |  |  |
| `postage_stamp_frame` | Static Frame | int | `1` | -2147483648 to 2147483647 |  |  |
| `lifetimeStart` | Lifetime Start | int | `0` | -2147483648 to 2147483647 |  |  |
| `lifetimeEnd` | Lifetime End | int | `100` | -2147483648 to 2147483647 |  |  |
| `useLifetime` | Use Lifetime | boolean | `false` |  |  |  |
| `cached` | Cached | boolean | `false` |  |  |  |
| `bookmark` | Bookmark | boolean | `false` |  |  |  |
| `dope_sheet` | Dope Sheet | boolean | `false` |  |  |  |
| `clone_group` | Clone Group | string |  |  |  |  |
| `link_source` | Link Source | string |  |  |  |  |
| `link_overrides` | Link Overrides | string |  |  |  |  |
| `split_views` | Split Views | string |  |  |  |  |


---
Sources: opencomp_core/nodes/ai/aikeyer.py, opencomp_electron/src/components/properties/knobSchema.ts, opencomp_core/nodes/help/aikeyer.md
