# SplatTrain

> Gaussian splats trained from your plate (gsplat, Apache-2.0, in the AI worker).

Gaussian splats trained from your plate (gsplat, Apache-2.0, in the AI worker). Connect the plate, an animated Camera (CameraTracker export or any Camera), optionally a mask (alpha = ignore, e.g. AIRoto on moving objects) and initial points (CameraTrackerPointCloud / DepthToPoints). Trains in scene-linear float (HDR kept). The viewer shows live previews; Cancel keeps a checkpoint, Resume continues. Output: splats for the 3D viewer / ScanlineRender; Export writes a standard 3DGS .ply. Mode 3DGS (ellipsoids) or 2DGS (flat discs, sharper surfaces); Densification MCMC (default, fixed budget set by Max Splats) or default.

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

![SplatTrain properties](/shots/nodes/splattrain@2x.webp)

## Inputs and outputs

| Port | Name | Type |
|---|---|---|
| input 0 | plate | image |
| input 1 | camera | scene |
| input 2 | mask | image |
| input 3 | points | scene |
| output 0 | scene | scene |

## Knobs

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

| Knob | Label | Type | Default | Range / values | .nk knob | Description |
|---|---|---|---|---|---|---|
| `frame_range` | frame range | menu | `project` | project, custom |  |  |
| `range_first` | first | float | `1` | -100000 to 100000 (integer) |  |  |
| `range_last` | last | float | `100` | -100000 to 100000 (integer) |  |  |
| `frame_step` | every Nth frame | float | `1` | 1 to 100 (integer) |  |  |
| `holdout_every` | hold out every | float | `0` | 0 to 100 (integer) |  | Every Nth frame is not trained, only scored (PSNR / SSIM). 0 = train on all |
| `resolution_scale` | resolution scale | float | `0.5` | 0.05 to 1 |  |  |
| `mask_mode` | mask | menu | `exclude` | none, exclude (alpha = ignore), include (alpha = train) |  |  |
| `iterations` | iterations | float | `7000` | 1 to 1000000 (integer) |  |  |
| `sh_degree` | SH degree | menu | `3` | 0 (0 (DC only)), 1, 2, 3 |  | Spherical-harmonic bands trained (view-dependent colour) |
| `mode` | mode | menu | `3dgs` | 3dgs (3DGS), 2dgs (2DGS (surfels)) |  |  |
| `antialiased` | anti-aliased (Mip) | bool | `false` |  |  | Mip-Splatting 2D filter (3DGS). Note: Oink's renderers draw classic splats |
| `strategy` | densification | menu | `mcmc` | default, mcmc (MCMC) |  |  |
| `densify` | densify | bool | `true` |  |  |  |
| `densify_from` | densify from | float | `500` | 0 to 1000000 (integer) |  |  |
| `densify_until` | densify until | float | `15000` | 0 to 1000000 (integer) |  |  |
| `densify_every` | densify every | float | `100` | 1 to 10000 (integer) |  |  |
| `grad_threshold` | grow threshold | float | `0.0002` | 0 to 0.01 |  | Screen-space gradient that clones / splits a splat |
| `opacity_reset_every` | opacity reset every | float | `3000` | 0 to 1000000 (integer) |  |  |
| `max_splats` | max splats (MCMC) | float | `1000000` | 1000 to 20000000 (integer) |  | MCMC budget |
| `init_count` | random init splats | float | `100000` | 100 to 5000000 (integer) |  | Without the points input: splats seeded along the camera rays |
| `background` | background | colour ×3 | `0, 0, 0` | 0 to 1 |  | Colour behind the splats while training (linear) |
| `preview_every` | preview every | float | `500` | 0 to 100000 (integer) |  | Steps between live previews in the viewer (0 = none) |
| `seed` | seed | float | `0` | 0 to 1000000 (integer) |  |  |
| `display_as` | display as | menu | `splats` | splats, points |  |  |
| `render_sh` | render SH | menu | `3` | 0 (0 (DC only)), 1, 2, 3 |  |  |
| `render_splats` | render splats | float | `0` | 0 to 20000000 (integer) |  | Most splats rendered, the most visible first (0 = all) |
| `viewer_splats` | viewer splats | float | `3000000` | 1000 to 20000000 (integer) |  |  |
| `run_dir` | run folder | text |  |  |  | Checkpoint + results (empty = new folder in $OPENCOMP_SPLAT_DIR or the NAS) |
| `export_file` | export file | file |  |  |  | Standard 3DGS .ply |

### 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 |  |  |  |  |
| `result_file` | Result | string |  |  |  |  |
| `preview_file` | Preview | string |  |  |  |  |
| `generation` | Generation | int | `0` | -2147483648 to 2147483647 |  |  |
| `splat_count` | Splats | int | `0` | -2147483648 to 2147483647 |  |  |
| `trained_steps` | Trained Steps | int | `0` | -2147483648 to 2147483647 |  |  |
| `train_psnr` | Train PSNR | float | `0` | -3.4028234663852886e+38 to 3.4028234663852886e+38 |  |  |
| `eval_psnr` | Held-out PSNR | float | `0` | -3.4028234663852886e+38 to 3.4028234663852886e+38 |  |  |
| `eval_ssim` | Held-out SSIM | float | `0` | -3.4028234663852886e+38 to 3.4028234663852886e+38 |  |  |
| `train_seconds` | Train Time (s) | float | `0` | -3.4028234663852886e+38 to 3.4028234663852886e+38 |  |  |
| `peak_vram` | Peak VRAM (GB) | float | `0` | -3.4028234663852886e+38 to 3.4028234663852886e+38 |  |  |


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