Embedding the Viewer
The SuperSplat Viewer is published on npm as @playcanvas/supersplat-viewer. It's a self-contained static web app you can drop into your own site, point at any splat file, and configure via URL parameters or a JSON settings document.
Installing
npm install @playcanvas/supersplat-viewer
The package exports the viewer's index.html, index.css, and index.js as strings, ready to template into your build pipeline:
import { html, css, js } from '@playcanvas/supersplat-viewer';
// The full markup of the viewer page
console.log(html);
// The viewer's stylesheet
console.log(css);
// The viewer's compiled JS bundle
console.log(js);
This is the same machinery the Editor's HTML export uses internally to produce a single-file viewer. Use it when you want to build your own templated bundle — e.g. injecting a particular settings.json, swapping in a custom skybox, or replacing the default poster image — without paying the runtime cost of loading the viewer from a CDN.
URL parameters
If you'd rather host the viewer's built files yourself and configure each instance through query parameters, the following are supported:
| Parameter | Description | Default |
|---|---|---|
settings | URL of the Experience Settings JSON file | ./settings.json |
content | URL of the scene file (.ply, .sog, .meta.json, .lod-meta.json, .compressed.ply) | ./scene.compressed.ply |
skybox | URL of an equirectangular skybox image | (none) |
poster | URL of an image to show while the scene loads | (none) |
noui | Hide the viewer's built-in UI | (off) |
noanim | Start with any animation track paused | (off) |
ministats | Show runtime CPU/GPU performance graphs | (off) |
unified | Force unified rendering | (off) |
aa | Enable antialiasing (not supported in unified mode) | (off) |
These flags are subject to change as the viewer evolves; check the project README for the current set.
Settings JSON
The settings URL parameter points at an Experience Settings v2 document — the same JSON format Studio saves whenever you hit Save. See the Experience Settings reference for the full schema, defaults, and migration notes.
A complete minimal settings.json (every field the v2 schema requires, populated with the defaults the Studio emits for a fresh scene):
{
"version": 2,
"tonemapping": "linear",
"highPrecisionRendering": false,
"background": {
"color": [0, 0, 0]
},
"postEffectSettings": {
"sharpness": { "enabled": false, "amount": 0 },
"bloom": { "enabled": false, "intensity": 0.1, "blurLevel": 2 },
"grading": { "enabled": false, "brightness": 1, "contrast": 1, "saturation": 1, "tint": [1, 1, 1] },
"vignette": { "enabled": false, "intensity": 0.5, "inner": 0.3, "outer": 0.75, "curvature": 1 },
"fringing": { "enabled": false, "intensity": 0.5 }
},
"cameras": [
{ "initial": { "position": [0, 1, -1], "target": [0, 0, 0], "fov": 75 } }
],
"animTracks": [],
"annotations": [],
"startMode": "default"
}
For full coverage of every field — post effects parameters, annotations, animation keyframes, tonemapping options, etc. — see the Experience Settings reference.
Programmatic publishing
If you want to publish splats and update their settings without going through the Editor or Studio UIs, the Splat Publishing API exposes the underlying REST endpoints.
See also
- SuperSplat Viewer overview — what the viewer is and when to reach for it
- Self-Hosting — single-file HTML export from the Editor
- Experience Settings — the JSON contract the viewer reads
- Splat Publishing API — REST endpoints for programmatic publishing