View, clean, animate and export Gaussian Splats β a playblast-ready splat editor built for VFX pipelines.
English | FranΓ§ais
π¬ Building AI Γ VFX pipeline tools. Follow along and get new tools + breakdowns first β Patrick Crucke on LinkedIn
NEXUS GS Viewer is a standalone Gaussian Splatting viewer and editor for Windows, macOS and Linux. Drop in a .ply, .spz, .splat or .ksplat scan and you get a fast, 60 fps viewer with Photoshop-style layers β plus the two things most splat viewers are missing:
- a camera animation timeline with a Blender-style camera frame, that exports playblasts (MP4, alpha PNG sequences) and Nuke cameras (
.chan, both directions), - a full cleanup toolset β keep/erase shapes, an eraser brush, splat selection with cut/copy/paste to layers, and destructive baking β so a raw scan becomes a clean, re-exportable asset without leaving the app.
It's the missing bridge between splat training tools and your compositing pipeline, and it's 100% local: no accounts, no cloud, no telemetry.
Gaussian Splat scans come out of training noisy β floaters, stray ground, blown-out edges β and reviewing them means screen-recording a viewport. With NEXUS GS Viewer, the same tool that cleans the scan also blocks the shot: set camera keys like in a DCC, export a 1080p/4K playblast with burn-in timecode, hand the matching .chan camera to Nuke, and composite the alpha PNG sequence directly. A scan goes from trained to in the comp in minutes.
- π Fast β streams multi-GB scans from disk, 2,000,000 splats at 60 fps on a modern GPU
- ποΈ Layers β one per file: rename, reorder visibility, per-layer opacity, transform with move/rotate/scale gizmo
- π¬ Camera timeline β keyframes with easing per key, Catmull-Rom curves, Blender-style camera frame with composition guides (thirds, safe areas)
- πΌ Playblast export β MP4 (H.264) or PNG sequence with alpha, fixed 1080p/4K/Scope/vertical formats, burn-in timecode option
- π₯ Nuke camera round-trip β export the animated camera as
.chan, or import a tracked.chanfrom Nuke and replay it on the splats - π§Ή Cleanup shapes β boxes, spheres, cylinders and cutting planes in Keep / Erase / Select mode, soft-edge falloff, real-time SDF masking
- ποΈ Brushes β paint directly on the splats to erase or select (wheel = radius)
- βοΈ Splat selection ops β extract (cut), duplicate (copy/paste) or delete the selection; extracted splats become a movable layer
- π₯ Bake β apply edits destructively (undoable), then iterate: slice the ground β apply β brush the floaters β apply
- πΎ Scene sidecar β layers, transforms, animation, shapes and settings auto-save next to your file and restore on reopen
- β©οΈ Undo/redo everywhere β including bakes and selection extractions
- π₯οΈ Headless CLI β batch-render playblasts from scripts or a render farm
- π English / French UI (
Lor the FR/EN button) - π MIT, fully local β your scans never leave your machine
| Viewer β 2M splats @ 60 fps | Camera timeline & frame |
|---|---|
![]() |
![]() |
| Cleanup shapes (Keep / Erase) | Eraser brush |
![]() |
![]() |
Windows
- Download the latest
NEXUS-GS-Viewer-win32-x64.zipfrom Releases - Unzip anywhere (e.g.
C:\Tools\NEXUS GS Viewer\) - Run
NEXUS GS Viewer.exe
On first launch the app registers itself (per-user, no admin rights): .spz, .splat and .ksplat open on double-click, and .ply gets an "Open with" entry.
macOS (Apple Silicon: arm64 Β· Intel: x64)
One-line install β paste in Terminal, then launch normally from Applications:
curl -L https://github.com/NXStorm/nexus-gs-viewer/releases/latest/download/NEXUS-GS-Viewer-macos-arm64.tar.gz | tar xz -C /Applications(Intel Macs: replace arm64 with x64.) Downloading with curl skips the browser quarantine entirely, so no Gatekeeper warning and no xattr step.
If you download the .zip through a browser instead, macOS quarantines it (the app isn't notarized): unzip, then run xattr -cr "NEXUS GS Viewer.app" once.
Linux (x64)
curl -L https://github.com/NXStorm/nexus-gs-viewer/releases/latest/download/NEXUS-GS-Viewer-linux-x64.tar.gz | tar xz
"./NEXUS GS Viewer-linux-x64/nexus-gs-viewer"git clone https://github.com/NXStorm/nexus-gs-viewer.git
cd nex-gs-viewer
npm install
npm start # development
npm run package # builds release/NEXUS GS Viewer-win32-x64/Requires Node.js 18+.
| Action | Input |
|---|---|
| Orbit / zoom / pan | Left click / wheel / middle click |
| Fly mode (Unreal-style) | Hold right click + WASD, wheel = speed, Shift = boost |
| Frame the scene | F |
| Ground grid | V |
| Screenshot (drops a 3D camera marker) | P |
- Press
Tto open the timeline β the Blender-style camera frame appears (what's inside is exactly what renders) - Frame your shot, press
Kto set a key; the playhead advances 1 s β repeat frame β K to block the move Spaceplays the loop; drag keys to retime, double-click one for per-key easing, click a 3D diamond to jump to it- Open β Settings for curve type, duration, fps, format (1080p / 4K / Scope 2.39 / vertical / square), composition guides, burn-in TC and alpha
- Hit Export and pick the output type in the save dialog: MP4, PNG sequence (with alpha if enabled) or Nuke
.chancamera
- Press
Cto enter Edit mode β a bounding box in Keep mode is created - Add shapes (
+ Box,+ Sphere,+ Cyl.,+ Plane) and set each to Keep (amber β masks everything outside the union), Erase (red β deletes inside) or Select (blue) - Move shapes with the gizmo, or drag a box face directly;
Bcycles the eraser / selection brush (wheel = radius) - With a selection: Extract (cut to a new layer), Duplicate (copy to a new layer) or Delete β the new layer moves with the gizmo
- Apply edits bakes everything destructively (undoable) so you can iterate; Export writes the cleaned
.spz/.ply
π Working in Nuke? Install Nexus-x-Nuke β a NEXUS Edit node that opens your splat in the viewer and imports the cleaned result back as a GeoImport, one click each way.
- NEX β Nuke: export
.chanfrom the timeline, import it on a Camera node (default ZXY rotation order, focal matches the default 18.672 vertical aperture). The camera matches the playblast frame-for-frame β composite the alpha PNG sequence directly. - Nuke β NEX: export a tracked camera as
.chanfrom Nuke, click β€ Chan in the timeline (set the timeline fps first). One key per frame, Linear curve, exact replay.
"NEXUS GS Viewer.exe" scene.ply --render out.mp4 --res 3840x2160 --fps 30Renders the scene's saved animation (or an automatic orbit) and quits. out can be .mp4, .png (sequence) or .chan.
| Key | Action | Key | Action |
|---|---|---|---|
O |
Open | T |
Timeline |
F |
Frame view | K |
Set camera key |
P |
Screenshot | Space |
Play / pause |
V |
Ground grid | G |
Frame guides |
C |
Edit mode | A |
Key easing |
B |
Brush (erase/select) | S |
Settings panel |
W/E/R |
Move / rotate / scale gizmo | Ctrl+Z/Y |
Undo / redo |
L |
Language | H |
Shortcuts panel |
nex-gs-viewer/
βββ src/
β βββ main/index.js # Electron main β IPC, CLI, file associations
β βββ preload/index.js # Safe bridge between main and renderer
β βββ renderer/ # The app: viewer, timeline, editor, i18n
βββ scripts/
β βββ package.mjs # npm run package β portable win32-x64 build
β βββ make-test-ply.mjs # Generates the 2k-splat test sphere
βββ docs/ # Screenshots, hero GIF, French README
βββ LICENSE # MIT
βββ README.md
- Windows 10/11, macOS 12+ (Apple Silicon & Intel) or Linux x64, GPU with WebGL2 (tested up to 2M splats at 60 fps on an RTX 5090)
- Node.js 18+ only if building from source
- No external dependencies, no account, no network access
| Problem | Solution |
|---|---|
| Scan loads but looks upside down | Press X (flip) β many trainers export Y-down |
| Playblast is black | Update GPU drivers; the export uses WebCodecs H.264 hardware encoding |
.chan import plays too fast/slow |
Set the timeline fps to the .chan's frame rate before importing |
| Cleaned SPZ lost view-dependent shading | Expected: cleanup/bake rebuilds splats without SH>0 harmonics |
| Scene edits gone after reopening | Bakes and extracted layers aren't in the sidecar β export them as .spz/.ply to keep them |
| Double-click doesn't open files | Launch the app once manually β associations register on first run |
| macOS says the app is "damaged" | Browser-downloaded zip quarantine β use the curl | tar one-liner instead, or run xattr -cr "NEXUS GS Viewer.app" once |
| Linux: "SUID sandbox helper" error | sudo chown root:root chrome-sandbox && sudo chmod 4755 chrome-sandbox (inside the app folder), or launch with --no-sandbox |
| Linux: MP4 export fails | Some distros lack a WebCodecs H.264 encoder β export a PNG sequence instead |
- Attenuate/tint shape mode (dim instead of delete)
- Motion blur (sub-frame accumulation) for playblasts
- Exposure/gamma viewport grading
- Signed/notarized macOS builds (removes the quarantine caveat for browser downloads)
Have an idea? Open an issue or ping me on LinkedIn.
PRs and issues welcome. If you clean up or previz a shot with NEXUS GS Viewer, I'd love to see it β tag me on LinkedIn.
Released under the MIT License. Free to use, modify, and ship in commercial work.
- Spark by World Labs β the WebGL Gaussian Splatting renderer that powers the viewport and real-time edits
- three.js β 3D framework
- Electron + electron-vite β desktop shell
- mp4-muxer β in-process MP4 muxing
Built and maintained by SINAI R&D.
Patrick Crucke explores the intersection of AI, 3D, and audiovisual production, building tools that bring generative pipelines into the hands of working VFX artists.
If this project saved you time, a β on the repo goes a long way.
NEXUS GS Viewer. Open source VFX tooling, made with care.



