Skip to main content

How to Deploy Gaussian Splatting to the Web: Complete Guide

Updated Mar 2026

You have trained a Gaussian Splatting scene — now you want to share it on the web. But a raw PLY file is 500 MB, most web viewers choke on files over 50 MB, and your visitors will not wait 30 seconds for a scene to load on mobile. This guide covers the complete pipeline from raw PLY to a fast-loading, embeddable 3DGS experience: choosing the right compressed format, optimizing file size, selecting a viewer, hosting your files, and embedding on your website. Every recommendation is based on real performance data from deploying 3DGS scenes in production.

Tools used in this guide

Step-by-Step Guide

  1. 1

    Step 1 — Understand Your File Size Budget

    The first question is: how large can your compressed scene be? This depends on your audience. For broadband desktop users, 50-100 MB is acceptable (loads in 5-15 seconds). For mobile users on 4G, keep it under 20 MB (3-5 seconds). For embedding on pages that also load other content, 10-30 MB is ideal. A raw 3DGS PLY file with 1 million Gaussians and SH degree 3 is about 236 MB. After compression to SPZ, it becomes ~24 MB. After compression to SOG, it becomes ~12 MB. Both are within the mobile budget. If your scene has more than 2 million Gaussians, you will need to reduce the count before deploying.

  2. 2

    Step 2 — Choose a Compressed Format

    For web delivery, you have three options. SPZ (Niantic): 90% compression, preserves all spherical harmonics, widest viewer support, glTF ecosystem alignment. Best all-around choice. SOG (PlayCanvas): 95% compression, Morton spatial ordering for faster decode, but fewer viewers support it. Best for maximum compression. SPLAT (antimatter15): 85% compression, drops spherical harmonics (flat colors only), broadest legacy viewer support. Best if you need compatibility with older viewers. Use our format converter (polyvia3d.com) to convert between any of these formats. Our recommendation: use SPZ unless you need SOG's extra compression or SPLAT's legacy compatibility.

  3. 3

    Step 3 — Compress Your PLY File

    Upload your PLY file to our PLY to SPZ compressor (polyvia3d.com/splat-compress/ply). The compression runs entirely in your browser — your file never leaves your device. For most scenes, default settings work well. After compression, check the output file size. If it exceeds your budget from Step 1, consider: (1) reducing the Gaussian count using our LOD tool, (2) using SOG format instead of SPZ for more compression, or (3) cropping unnecessary parts of the scene in Blender before compressing. Use our File Inspector (polyvia3d.com/splat-inspector) to check your file before and after compression.

  4. 4

    Step 4 — Choose a Web Viewer

    You need a JavaScript library to render 3DGS in the browser. Options: Spark.js (@sparkjsdev/spark) — MIT, Three.js integration, supports PLY/SPZ/SPLAT/KSplat/SOG, built-in LOD tree, WASM-accelerated sorting. This is what polyvia3d uses. GaussianSplats3D (mkkellogg) — Three.js, supports PLY/SPLAT/KSplat, progressive loading, widely used. PlayCanvas Engine — supports SOG natively, full game engine with editor. If you just want to embed a scene without writing code, use our embed tool (polyvia3d.com/splat-embed) to generate an iframe snippet.

  5. 5

    Step 5 — Host Your Compressed File

    Your compressed 3DGS file needs to be served from a URL that supports CORS (Cross-Origin Resource Sharing) and large file downloads. Options: Cloudflare R2 — free tier includes 10 GB storage and zero egress fees, ideal for 3DGS files. AWS S3 + CloudFront — established CDN, pay for egress. Vercel/Netlify — easy but size limits apply (Vercel: 50 MB per file, Netlify: 100 MB). GitHub Releases — free for public repos, up to 2 GB per file. Your own server — make sure CORS headers are set: Access-Control-Allow-Origin: *. Whichever you choose, set the Content-Type to application/octet-stream and enable gzip/brotli compression at the CDN level (though SPZ is already gzip-compressed internally).

  6. 6

    Step 6 — Embed on Your Website

    The simplest way: use an iframe pointing to a viewer that loads your hosted file. Our embed tool generates this code for you. For custom integration: install Spark.js (npm install @sparkjsdev/spark), create a Three.js scene, and load your file with SplatMesh({ url: "https://your-cdn.com/scene.spz" }). For WordPress: use the Custom HTML block to paste the iframe. For Squarespace: use the Code block. For React/Next.js: import SplatMesh and use it in a Canvas component. Make sure to add loading states — 3DGS files take seconds to load, and users need visual feedback.

  7. 7

    Step 7 — Optimize Loading Performance

    Three optimizations make the biggest difference: (1) Use SOG format if possible — its WebP-based compression decodes directly into GPU textures, skipping JavaScript decompression. (2) Add a loading skeleton or progress bar — the Three.js loader provides progress events. (3) Lazy-load the viewer — do not load the 3DGS viewer JavaScript until the user scrolls to the 3D section. On mobile, consider showing a static preview image first with a "Load 3D View" button that initializes the viewer on tap. This avoids loading megabytes of data for users who may not interact with the 3D content.

  8. 8

    Step 8 — Test Across Devices

    Before publishing, test on: (1) Desktop Chrome with fast internet — should load in under 5 seconds. (2) Mobile Safari on iPhone — test WebGL2 compatibility and memory limits. (3) A budget Android phone on 4G — this is your worst-case scenario. Common issues: scenes with more than 1 million Gaussians may crash on mobile (limit to 500K for mobile). Some iOS versions have WebGL memory limits that cause silent failures. If your scene does not render on a specific device, reduce the Gaussian count or switch to SPLAT format (smaller memory footprint due to no SH data).

Frequently Asked Questions

What is the best format for web deployment?
SPZ for most cases (90% compression, preserves SH, widest support). SOG if you need maximum compression (95%). SPLAT if you need legacy viewer compatibility.
How large should my 3DGS file be for web?
Under 20 MB for mobile, under 50 MB for desktop. A 1M Gaussian scene compresses to about 24 MB (SPZ) or 12 MB (SOG).
Can I embed 3DGS on WordPress?
Yes. Use our embed tool to generate an iframe code, then paste it into a Custom HTML block in WordPress. The iframe loads the viewer from our domain, so no plugins are needed.
Do I need a backend to serve 3DGS files?
No. 3DGS files are static assets — serve them from any CDN or static hosting (Cloudflare R2, AWS S3, GitHub Releases). Make sure CORS headers are enabled.
Why does my scene look flat / missing colors?
If you compressed to SPLAT format, spherical harmonics (view-dependent colors) are stripped. The scene will look flat from all angles. Use SPZ or SOG instead to preserve SH data.
How do I reduce loading time?
Three biggest wins: (1) Use SOG format for fastest decode, (2) Lazy-load the viewer (do not load JS until needed), (3) Show a static preview image with a "Load 3D" button on mobile.

Related Tools

Related Format Guides