Catalog npm
PACKAGE EXPLORERView in registry

3dgs-loader

npm

A unified, extensible loader framework for efficient loading and processing of 3D Gaussian Splatting (3DGS) data.

3dgs3dgs-loadergaussian loadergaussian splattinggsk-spaltplysogsplatspz
Versions collected6
Direct dependencies9From release 1.3.0
Last observed20 Oct, 19:39 UTC

README

Current package documentation

3DGS Loader

This module provides a unified loader framework for 3D Gaussian Splatting (3DGS) data. It supports multiple data formats and exposes a consistent usage API, independent of the underlying format.

The loader layer is responsible only for data loading and parsing. It does not handle rendering, sorting, LOD, or interaction logic.

1. Loader Overview

All loaders inherit from a shared base class Loader and follow the same public API.

Supported loaders include:

  • SplatLoader (.splat)
  • SogLoader (.sog , .json , ArrayBuffer )
  • SpzLoader (.spz , ArrayBuffer)
  • KSplatLoader (.ksplat , ArrayBuffer)
  • PlyLoader (.ply , ArrayBuffer)

Because the interface is uniform, loaders can be swapped without changing application code.

2. Basic Usage (Common to All Loaders)

2.1 Create a Loader

import SplatLoader from './loaders/SplatLoader'

const loader = new SplatLoader({
    workerLimit: 4,        // Number of workers (0 = disabled)
    workerBaseUrl: './',   // Base URL for worker scripts
    wasmBaseUrl: './',     // Base URL for WASM assets (if required)
})

All loader types accept the same constructor options.

Note

SplatLoader is a special case: it only provides load() and loadColumns(), and does not implement loadAsSplat() or parseAsSplat(), because the .splat format is already the native splat representation.

2.2 Load as Columns

const columns = await loader.loadColumns('scene.splat', {
    onProgress: (percent) => {
        console.log(`loading: ${percent}`)
    },
})
  • Loads a 3DGS source and parses it into column-based data
  • Recommended entry point for most pipelines
  • Suitable for any downstream 3DGS workflow

2.3 Parse as Columns (From Existing Buffer)

const columns = await loader.parseColumns(dataBuffer)
  • Parses an already loaded binary buffer
  • Skips network requests
  • Useful for custom I/O or streaming systems

2.4 Load as Splat

const splat = await loader.loadAsSplat('***.ply', {
    onProgress: (percent) => {
        console.log(`loading: ${percent}`)
    },
})
  • Loads a 3DGS source and parses it directly into Splat format
  • Skips the column-based representation
  • Useful for exporting, legacy pipelines, or direct splat-based workflows
  • Not supported by SplatLoader

2.5 Parse as Splat (From Existing Buffer)

const splat = await loader.parseAsSplat(dataBuffer)
  • Parses raw data directly into Splat format
  • Suitable when data is already available in memory
  • Not supported by SplatLoader

2.6 Load as Attributes

const attributes = await loader.loadAsAttributes('***.ply', {
    onProgress: (percent) => {
        console.log(`loading: ${percent}`)
    },
})
  • Loads a 3DGS source and parses it directly into Attributes format
  • Produces typed arrays:
    • positions: Float32Array
    • scales: Float32Array
    • rotations: Float32Array
    • colors: Uint8Array

2.7 Parse as Attributes (From Existing Buffer)

const attributes = await loader.parseAsAttributes(dataBuffer)
  • Parses raw data already available in memory into Attributes format

Attributes Format Definition

interface
GaussianSplatAttributes
{
    numSplats: number
    positions: Float32Array   // xyz, length = numSplats * 3
    scales: Float32Array      // sx sy sz (linear), length = numSplats * 3
    rotations: Float32Array   // quaternion xyzw, length = numSplats * 4
    colors: Uint8Array        // rgba, length = numSplats * 4
}

2.8 Dispose the Loader

loader.dispose()

Always dispose the loader when it is no longer needed to properly release worker and memory resources.

3. Worker Acceleration (Optional)

All loaders support worker-based parsing through WorkerPool, allowing heavy decoding and parsing work to run off the main thread.

3.1 Enable Worker Acceleration

const loader = new SogLoader({
    workerLimit: 4,   // Enable worker-based parsing
})
  • Parsing runs entirely off the main thread
  • ArrayBuffers are transferred to workers (zero-copy)
  • Fully transparent to the calling code

4. WASM Support (Optional)

Some loaders (notably SogLoader) rely on WebAssembly (WASM) modules for decoding compressed data, such as WebP-encoded spherical harmonics.

4.1 When WASM Is Required

  • SOG data may store SH coefficients in WebP format
  • Decoding WebP efficiently requires a WASM-based decoder
  • The WASM module is not bundled with the loader by default

4.2 Required WASM Assets

The following files must be available at runtime:

/webp/
├─ wasm_webp.wasm
└─ wasm_webp.min.js

These files must be copied to a publicly accessible location.

4.3 Configure WASM Path

const loader = new SogLoader({
    workerLimit: 4,
    wasmBaseUrl: './',   // Base URL that contains the /webp directory
})

The loader resolves the WebP WASM script URL internally and passes it to the worker or main-thread parser as needed.

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Versions 6

Collected releases
VersionPublishedDirect dependenciesOpen version
1.3.0Registry latest25 Feb 20269
1.2.023 Jan 20269
1.1.023 Jan 20269
1.0.019 Jan 20269
0.0.27 Jan 20260
0.0.17 Jan 20260

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Repository

PENDING
dvt3d/gs-loader

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 19:39 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:10d43ebd42bd1c57a915214f49b26bb08275fd1862fbf7aee3ad296ca1a8f37c