# FrameHold

> Shows one frame of the input at every frame (increment 0), or every Nth frame from the first frame.

Shows one frame of the input at every frame (increment 0), or every Nth frame from the first frame. A new node takes the frame on the timeline; Set to Current Frame takes it again. The first frame can be animated or an expression. Only the held frame is read, and its result is cached. rounding mode: whole frames rounds the time down; fractional time uses the nearest frame.

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

![FrameHold properties](/shots/nodes/framehold@2x.webp)

## Inputs and outputs

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

## Knobs

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

| Knob | Label | Type | Default | Range / values | .nk knob | Description |
|---|---|---|---|---|---|---|
| `rounding_mode` | Mode | menu | `Whole frames` | Whole frames, Fractional time | `rounding_mode` |  |
| `first_frame` | first frame | float | `1` | 0 to 2000 | `firstFrame` | Frame to hold (increment 0) or the first of every Nth |
| `set_to_current` | Set to Current Frame | button (panel only) |  |  |  |  |
| `increment` | increment | float | `0` | 0 to 100 (integer) | `increment` | 0 = hold one frame; N = every Nth frame |

### 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 |  |  |  |  |

## Knob names in .nk scripts

| .nk knob | Knob here |
|---|---|
| `firstFrame` | `first_frame` |

Other .nk knobs use the same name here. See [.nk import](/docs/nuke-users/nk-import).

## Examples

Open these from **Help › Examples…**, or from the **?** menu in this node's Properties panel.

- **FrameHold** (`examples/time/framehold.oink`): FrameHold freezes its input on one frame (here frame 3 of the Beachball sequence) whatever the current frame is — the usual way to make a clean plate or a reference frame.


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