# DeepRead

> Reads a deep EXR (per-pixel sample lists); a flat file is read as one sample per pixel.

Reads a deep EXR (per-pixel sample lists); a flat file is read as one sample per pixel. Frame numbers use #### or %04d in the file name.

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

![DeepRead properties](/shots/nodes/deepread@2x.webp)

## Localization

Like the Read node, DeepRead can read a local copy of its files: set **localization policy** and use
**Update** for on demand files. See [Localization](/docs/concepts/localization).

## Inputs and outputs

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

## Knobs

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

| Knob | Label | Type | Default | Range / values | .nk knob | Description |
|---|---|---|---|---|---|---|
| `filepath` | file | file |  |  | `file` |  |
| `localization_policy` | localization policy | menu | `fromAutoLocalizePath` | on, fromAutoLocalizePath (from auto-localize path), onDemand (on demand), off | `localizationPolicy` | when the deep files are copied to the local cache (.nk `localizationPolicy`). |
| `updateLocalization` | Update | button (panel only) |  |  |  | Update: copy the files now, or copy again the ones whose source changed. |
| `first` | first | float | `1` | 0 to 100000 (integer) | `first` |  |
| `last` | last | float | `1` | 0 to 100000 (integer) | `last` |  |

### 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 |
|---|---|
| `file` | `filepath` |
| `localizationPolicy` | `localization_policy` |
| `cacheLocal` | `localization_policy` |

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.

- **DeepMerge four deep passes** (`examples/deep/deep_merge.oink`): Weta's forest scene as four deep passes (Balls, Ground, Leaves, Trunks). DeepMerge combines the samples by depth, so the passes hold each other out with no mattes; DeepToImage flattens the result. Compare with LowResLeftView/composited.exr, the flat reference.
- **Read a deep EXR** (`examples/io/read_deep.oink`): One deep pass (Weta's Balls, 1024x576 left view) read with DeepRead and flattened with DeepToImage. Each pixel holds many samples with their own depth; DeepToImage composites them front to back.


---
Sources: opencomp_core/nodes/deep/deep_nodes.py, opencomp_electron/src/components/properties/knobSchema.ts, opencomp_core/nodes/help/deepread.md, opencomp_core/nk/mapping.py
