# CurveTool

> Analyse frames into keyed knobs.

| Node | CurveTool |
|---|---|
| Menu | Other › CurveTool |
| **Names in each format** | |
| .oink comp (JSON) | `"type": "OC_N_curvetool"` |
| .nk script | `CurveTool` ([how .nk import works](/docs/nuke-users/nk-import)) |
| Python | `nuke.createNode("CurveTool")` |
| Assistant (MCP) | `create_node(type="CurveTool")` |
| Tab search | `curvetool`, or its initials `ct` |

![CurveTool properties](/shots/nodes/curvetool@2x.webp)

## Inputs and outputs

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

## Knobs

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

| Knob | Label | Type | Default | Range / values | .nk knob | Description |
|---|---|---|---|---|---|---|
| `go_first` | first frame (0 = comp) | float | `0` | 0 to 100000 (integer) |  | Go!: first frame (0 with last 0 = the comp's range) |
| `go_last` | last frame | float | `0` | 0 to 100000 (integer) |  |  |
| `operation` | Curve Type | menu | `Avg_Intensities` | Auto_Crop (Auto Crop), Avg_Intensities (Avg Intensities), Exposure_Difference (Exposure Difference), Max_Luma_Pixel (Max Luma Pixel) | `operation` |  |
| `channels` | channels | text | `rgba` |  | `channels` |  |
| `ROI` | ROI | vector ×4 | `0, 0, 0, 0` | -10000 to 10000 | `ROI` |  |
| `autocropdata` | autocropdata | vector ×4 | `0, 0, 0, 0` | -10000 to 10000 | `autocropdata` |  |
| `intensitydata` | intensitydata | colour ×4 | `0, 0, 0, 0` | 0 to 1 | `intensitydata` |  |
| `maxlumapixdata` | maxlumapixdata | vector ×2 | `0, 0` | -10000 to 10000 | `maxlumapixdata` |  |
| `maxlumapixvalue` | maxlumapixvalue | colour ×3 | `0, 0, 0` | 0 to 1 | `maxlumapixvalue` |  |
| `minlumapixdata` | minlumapixdata | vector ×2 | `0, 0` | -10000 to 10000 | `minlumapixdata` |  |
| `minlumapixvalue` | minlumapixvalue | colour ×3 | `0, 0, 0` | 0 to 1 | `minlumapixvalue` |  |

### 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 |  |  |  |  |
| `avgframes` | Frames to Average | int | `2` | 0 to 2147483647 | `avgframes` |  |


---
Sources: opencomp_core/nodes/utility/analysis.py, opencomp_electron/src/components/properties/knobSchema.ts, opencomp_core/nk/mapping.py
