# ReadVFX

> ReadVFX node.

| Node | ReadVFX |
|---|---|
| Menu | 3D › ReadVFX |
| **Names in each format** | |
| .oink comp (JSON) | `"type": "OC_N_readvfx"` |
| .nk script | none: written as an Oink node |
| Python | `nuke.createNode("OC_N_readvfx")` |
| Assistant (MCP) | `create_node(type="ReadVFX")` |
| Tab search | `readvfx`, or its initials `rvfx` |

![ReadVFX properties](/shots/nodes/readvfx@2x.webp)

## Inputs and outputs

| Port | Name | Type |
|---|---|---|
| input 0 | scene | scene |
| input 1 | mat | image |
| output 0 | scene | scene |

## Knobs

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

| Knob | Label | Type | Default | Range / values | .nk knob | Description |
|---|---|---|---|---|---|---|
| `file` | file | file |  |  |  |  |
| `mesh_file` | rest mesh | file |  |  |  | Rest mesh (.vfxm); empty = <stem>_restmesh.vfx next to the file |
| `info` | info | text |  |  |  |  |
| `frame_offset` | frame offset | float | `0` | -1000 to 1000 (integer) |  |  |
| `retime` | fps | menu | `frames` | frames (frames (1:1)), seconds (seconds (file fps)) |  |  |
| `before` | before | menu | `HOLD` | HOLD (hold), LOOP (loop), BOUNCE (bounce), BLACK (black) |  |  |
| `after` | after | menu | `HOLD` | HOLD (hold), LOOP (loop), BOUNCE (bounce), BLACK (black) |  |  |
| `units_scale` | units scale | float | `1` | 0.001 to 100 |  | Multiplies the cache's positions (0.01 = cm to m) |
| `display` | display | menu | `proxy` | proxy, full |  |  |
| `proxy_points` | proxy points | float | `200000` | 1000 to 5000000 (integer) |  |  |
| `viewer_point_size` | viewer point size | float | `2` | 1 to 20 |  |  |
| `render_points` | render points | float | `2000000` | 0 to 20000000 (integer) |  | Most points rendered (0 = all) |
| `max_triangles` | max triangles | float | `10000000` | 0 to 50000000 (integer) |  | Instanced rest meshes: instances beyond this are dropped (0 = all) |
| `point_size` | point size | float | `0.01` | 0 to 1 |  | Point radius in scene units (renders) |
| `use_pscale` | use pscale | bool | `true` |  |  |  |
| `splat_display` | display as | menu | `auto` | auto (auto (splats if scale3)), splats, points |  |  |
| `splat_colorspace` | splat colour | menu | `sRGB` | sRGB (sRGB (3DGS)), linear |  |  |
| `viewer_splats` | viewer splats | float | `3000000` | 1000 to 20000000 (integer) |  | Most splats sent to the 3D viewer (the most visible ones) |
| `color_by` | color by | text | `auto` |  |  | auto, none, Cd, speed, id, pscale, piece, value, height, or a channel |
| `auto_range` | auto range | bool | `true` |  |  |  |
| `color_min` | color min | float | `0` | -100 to 100 |  |  |
| `color_max` | color max | float | `1` | -100 to 100 |  |  |
| `display_color` | display color | colour ×3 | `1, 1, 1` | 0 to 1 |  |  |
| `volume_mode` | volume | menu | `auto` | auto, surface (surface (level set)), density |  |  |
| `volume_grid` | grid | text |  |  |  | empty = first grid |
| `volume_threshold` | threshold | float | `0.05` | 0 to 10 |  |  |
| `volume_draw` | viewer volume | menu | `volume` | volume (volume (ray-marched)), points |  |  |
| `volume_quality` | quality | float | `1` | 0.1 to 4 |  | 3D viewer ray-march samples per voxel (halved while orbiting) |
| `surface_look` | surface look | menu | `water` | water, solid |  |  |
| `water_color` | water color | colour ×3 | `0.45, 0.8, 0.9` | 0 to 1 |  | Light left after crossing a tenth of the cache's size of water |
| `density_scale` | density | float | `1` | 0 to 100 |  | Fog extinction per scene unit = value x density |
| `volume_shadow` | shadow | float | `1` | 0 to 10 |  | Fog self-shadowing toward the light (0 = unlit) |
| `emission_grid` | emission grid | text |  |  |  | Grid that glows (fire ramp); empty = temperature / heat / flame if present, - = none |
| `emission_intensity` | emission | float | `1` | 0 to 20 |  |  |
| `projection` | mat projection | menu | `box` | off, box (box (triplanar)), planar XY, planar XZ, planar YZ, spherical, cylindrical |  | How the `mat` input's texture maps onto caches without UVs (level sets, particles), in the cache's object space |
| `projection_scale` | projection scale | float | `1` | 0.001 to 10 |  | Texture size: 1 = once across the cache's largest side (its first frame), centred on the cache each frame; 0.25 = four repeats |
| `xform_order` | transform order | menu | `SRT` | SRT, STR, RST, RTS, TSR, TRS |  |  |
| `rot_order` | rotation order | menu | `ZXY` | XYZ, XZY, YXZ, YZX, ZXY, ZYX |  |  |
| `translate` | translate | vector ×3 | `0, 0, 0` | -100 to 100 |  |  |
| `rotate` | rotate | vector ×3 | `0, 0, 0` | -180 to 180 |  |  |
| `scaling` | scale | vector ×3 | `1, 1, 1` | 0 to 10 |  |  |
| `uniform_scale` | uniform scale | float | `1` | 0 to 10 |  |  |
| `skew` | skew | vector ×3 | `0, 0, 0` | -1 to 1 |  |  |
| `pivot_translate` | pivot translate | vector ×3 | `0, 0, 0` | -100 to 100 |  |  |
| `pivot_rotate` | pivot rotate | vector ×3 | `0, 0, 0` | -180 to 180 |  |  |

### 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 |  |  |  |  |
| `channel_list` | Channels | string |  |  |  |  |


---
Sources: opencomp_core/nodes/three_d/read_vfx.py, opencomp_electron/src/components/properties/knobSchema.ts
