Load a .ply, .compressed.ply, or .sog from the menu, or drag and drop a file onto this view. Use Import as layer to add splats without replacing the whole scene.
Sign in (top right) to load or import splat files.
Loading…
Hue/Saturation on the wheel · Luminance & Strength bars · HEX controls.
Global hue rotation, then per bin: Hue shift · Saturation multiplier offset · Luminance offset
Check your email
We sent a confirmation link to . After you confirm, sign in with your password below.
or
WebGPU is not available in this browser. Training needs a current Chrome, Edge, Safari or Firefox with WebGPU enabled (or the desktop app).
No files chosen yet.
Preparing…
Camera solve and training run locally on your GPU (splat.js, MIT). Nothing is uploaded.
More splats = denser surface coverage and longer conversion time. Capped at 9,990,000 — going higher risks out-of-memory on textured meshes.
Splat radius relative to the average inter-sample distance. ~1.2× closes holes from random sampling; bump up if the model still has gaps, drop down for a crisper look. Try this before maxing out density — it's free.
Lambert diffuse shading. Drag the puck in the preview to set azimuth/elevation, or use the sliders. Ambient floors the dark side so back-facing splats don't go pure black.
Preparing…
Drag canvas to orbit · scroll to zoom · drag puck for light
Exporting your work requires Photoshock Beta.
Paint, sculpt, and explore Gaussian splats for free. Pro unlocks the tools that turn Photoshock into a finishing studio.
Beta supporter pricing: $49 one-time for a perpetual license. One license per Gumroad email; activates within seconds of payment.
You're in. Join the private beta-tester channel on Discord to swap files, get early builds, and shape what ships next.
These work when the viewport or canvas is focused, not while typing in a field. ⌘ is Mac; use Ctrl on Windows/Linux.
| V | Cursor |
| B | Brush |
| X | Eraser |
| Z | Reset brush |
| K | Paint bucket |
| R | Rectangle select |
| O | Brush select |
| L | Lasso select |
| P | Polygon (vector) select |
| C | Color select |
| Y | 3D selection |
| ; | Splat select |
| U | Histogram viewer |
| N | Shape layer |
| Tab | Toggle display overlays (centers / rings) |
| Ctrl/⌘ + M | Toggle display overlays (same as Tab) |
| M | Toggle selection footprint (centers ↔ footprint) |
| H | Toggle selection color |
| 8 | New selection (replace) |
| 9 | Add to selection |
| 0 | Subtract from selection |
| H | Toggle selection highlight |
| Shift B | Sphere Select — 3D brush that follows the surface (size shared with Brush Select) |
| 4 | Toggle Depth (visible surface only ↔ through the scene) — selection & brush |
| 5 | Toggle Follow surface (per-cell depth band / sphere brush) — selection & brush |
| ⌘ A | Select all |
| ⌘ I | Invert selection |
| \ | Clear selection |
| Enter | Close polygon (vector select, 3+ points) |
| Backspace | Remove last polygon vertex (vector select) |
| Delete / Backspace | Delete selected splats, or clear selection |
| Esc | Clear selection / cancel partial shape; then cursor in some tools |
| ` | Toggle orbit / fly camera |
| W A S D | Move (orbit: pan target; fly: move) |
| Q / E | Up / down |
| ↑ / ↓ | Cam speed (or brush size when brush/eraser/reset is active) |
| ← / → | Switch right-panel tab (Scene · Color · Swatches) |
| F | Frame active layer |
| ⌘ F | Reset camera |
| ⌘ G | Toggle grid |
| ⌘ B | Toggle render box |
| 1 2 3 | Gizmo: move / rotate / scale |
| G | Show / hide layer transform gizmo |
| J | Toggle gizmo coordinate space (Local ↔ World) |
| I | Toggle hover-highlight on non-selected layers |
| ⇧ F | Show / hide FPS (top-left of viewer) |
| Double-click on the model (cursor tool) focuses the camera on that point. | |
| ⌘ Z | Undo |
| ⌘ Y / ⌘ ⇧ Z | Redo |
| ⌘ D | Duplicate selected user layer |
| ⌘ L | Load Splat |
| ⌘ E | Export PLY |
| ⌘ P | Snapshot (PNG/JPEG) |
| , | Save selection |
| . | Save camera bookmark |
| / | Add active color to swatches |
| Enter | Splat It (Shape / Text tool) |
Photoshock is a Gaussian-splat painting app built by The Creative Computing. The closed beta runs on the open source stack below — huge thanks to every maintainer making this possible.
| PlayCanvas | WebGPU / WebGL renderer + gsplat pipeline · MIT |
| @playcanvas/splat-transform | PLY ↔ SOG ↔ compressed.ply codecs · MIT |
| fflate | Zip / gzip codec for LCC bundles · MIT |
| Vite | Dev server + production bundler · MIT |
| vite-plugin-pwa | Service worker + offline shell for the web build · MIT |
| @supabase/supabase-js | Auth + subscription gate · MIT |
| posthog-js | Product analytics (no autocapture; explicit events only) · MIT |
| Tabler Icons | Every glyph in the toolbar + panels · MIT |
| splat.js | Train splat — in-browser structure-from-motion + WebGPU 3DGS trainer (vendored) · MIT © Stratum1 GmbH |
| Google Fonts | Fonts available in the 3D Text tool · SIL Open Font / Apache |
Photoshock itself is closed source today. If you'd like to discuss licensing or partnerships, reach out at dev@thecreativecomputing.com.
Photoshock is in closed beta for a small group of selected users. Access is $49 one-time on Gumroad — a perpetual license that funds development toward the public release. Loading the checkout may take a moment.
After payment, Gumroad redirects back with
?photoshock_contributor=1
and your license activates automatically — this dialog stays hidden afterwards.
Renders the current view at the size you choose. Opaque uses the menu BG color; transparent PNG uses alpha behind the splats.
Export multiple PLY files at different levels of detail. Splats are ranked by visual importance (opacity × scale) and the top N% are kept per level.
Removing spherical harmonics from lower LODs reduces file size with minimal visual impact at distance.