{"_id":"3dgs-loader","_rev":"6-fd97c4f807b50f4305f6c9a8dea59911","name":"3dgs-loader","dist-tags":{"latest":"1.3.0"},"versions":{"0.0.1":{"name":"3dgs-loader","version":"0.0.1","keywords":["3dgs","gs","spz","sog","splat","ply"],"author":{"name":"Caven Chen","email":"cavencj@gmail.com"},"license":"MIT","_id":"3dgs-loader@0.0.1","maintainers":[{"name":"cavencj","email":"cavencj@gmail.com"}],"homepage":"https://github.com/dvt3d/gs-loader#readme","bugs":{"url":"https://github.com/dvt3d/gs-loader/issues"},"dist":{"shasum":"4d1b77c6afdb7897d8db32acf03e208c372ee862","tarball":"https://registry.npmjs.org/3dgs-loader/-/3dgs-loader-0.0.1.tgz","fileCount":5,"integrity":"sha512-PC9iLHOjm0ogruid0OqvgXdOZAie94xsEmkyd5LYZgccF8JOsHLcCIyI6t+Mux5XWpUaUGUJcf5gcrBZWEnZ4A==","signatures":[{"sig":"MEUCICAMFo/BehotJFs+1YsMUo8zL8DSlqUrLYfVQSnybGxVAiEAxuv3b2sUMALuI/iYGZV+L7+tCj9mynKtKBjcBVf6lY0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1037},"main":"index.js","_npmUser":{"name":"cavencj","email":"cavencj@gmail.com"},"repository":{"url":"git+https://github.com/dvt3d/gs-loader.git","type":"git"},"_npmVersion":"10.9.0","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/3dgs-loader_0.0.1_1767755030704_0.6148411069439907","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"3dgs-loader","version":"0.0.2","keywords":["3dgs-loader","3dgs","gs","spz","sog","splat","ply"],"author":{"name":"Caven Chen","email":"cavencj@gmail.com"},"license":"MIT","_id":"3dgs-loader@0.0.2","maintainers":[{"name":"cavencj","email":"cavencj@gmail.com"}],"homepage":"https://github.com/dvt3d/gs-loader#readme","bugs":{"url":"https://github.com/dvt3d/gs-loader/issues"},"dist":{"shasum":"40796eae9b4f21dadd47a3cdf4a91d7d43721dcd","tarball":"https://registry.npmjs.org/3dgs-loader/-/3dgs-loader-0.0.2.tgz","fileCount":6,"integrity":"sha512-ObxZsG8a8MovVGW3dt+OTrtDlQvXcWRnBDdDD4kEht9oYT3I0FF/dZJa9quxkZd8cldA+vNnve2aA7KU3o5phA==","signatures":[{"sig":"MEQCIGgKlx3TuNd/38tBLT+6u+azXapzNb7bYOpbOPly1mXmAiB00lgwQDPdoObtbxlLg5kHbZmoB743ywyen6CXmD3W4g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":320},"main":"index.js","_npmUser":{"name":"cavencj","email":"cavencj@gmail.com"},"repository":{"url":"git+https://github.com/dvt3d/gs-loader.git","type":"git"},"_npmVersion":"10.9.0","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/3dgs-loader_0.0.2_1767758156563_0.48120150764524205","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"3dgs-loader","version":"1.0.0","keywords":["3dgs-loader","Gaussian loader","Gaussian splatting","3dgs","gs","spz","sog","splat","ply","k-spalt"],"author":{"name":"Caven Chen","email":"cavencj@gmail.com"},"license":"Apache-2.0","_id":"3dgs-loader@1.0.0","maintainers":[{"name":"cavencj","email":"cavencj@gmail.com"}],"homepage":"https://github.com/dvt3d/gs-loader#readme","bugs":{"url":"https://github.com/dvt3d/gs-loader/issues"},"dist":{"shasum":"f3aa5662893ed712b33695a0bb7c1acd0b9e2284","tarball":"https://registry.npmjs.org/3dgs-loader/-/3dgs-loader-1.0.0.tgz","fileCount":11,"integrity":"sha512-XxhHIISxeR1FlG1DcIJeqg8XtefY4FhylB95jn36ZaVJ9OcgKZJLbfzJVD8Ta+4cWTtJe0JxJLxhkz3LciI0IQ==","signatures":[{"sig":"MEUCIQCMq8sS/M3r/+Q2Lt/sm7W/C74s4+Jhn2XMaaRuqlN7ZgIgFwzzLTl4R+8U6M9idIj3ltM3HJUd6jbBJLyhydfnIGo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":516569},"main":"dist/index.js","gitHead":"879ba01b945ea179776dd160235e68ae89844f51","scripts":{"dev":"rimraf dist && gulp dev","lint":"eslint --fix src","build":"rimraf dist && gulp build","build:iife":"rimraf dist && gulp buildIIFE","build:node":"rimraf dist && gulp buildNode","build:release":"rimraf dist && gulp buildRelease","prepublishOnly":"yarn run build:release"},"_npmUser":{"name":"cavencj","email":"cavencj@gmail.com"},"repository":{"url":"git+https://github.com/dvt3d/gs-loader.git","type":"git"},"_npmVersion":"10.9.0","description":"This module provides a **unified loader framework for 3D Gaussian Splatting (3DGS)** data.\r It supports multiple data formats and exposes a **consistent usage API**, independent of the underlying format.","directories":{},"_nodeVersion":"22.12.0","dependencies":{"fflate":"^0.8.2"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.1","chalk":"^5.6.2","rimraf":"^6.1.2","esbuild":"^0.27.2","shelljs":"^0.10.0","fs-extra":"^11.3.3","prettier":"^3.7.4","fast-glob":"^3.3.3"},"_npmOperationalInternal":{"tmp":"tmp/3dgs-loader_1.0.0_1768788512028_0.5013945893129057","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"3dgs-loader","version":"1.1.0","keywords":["3dgs-loader","Gaussian loader","Gaussian splatting","3dgs","gs","spz","sog","splat","ply","k-spalt"],"author":{"name":"Caven Chen","email":"cavencj@gmail.com"},"license":"Apache-2.0","_id":"3dgs-loader@1.1.0","maintainers":[{"name":"cavencj","email":"cavencj@gmail.com"}],"homepage":"https://github.com/dvt3d/gs-loader#readme","bugs":{"url":"https://github.com/dvt3d/gs-loader/issues"},"dist":{"shasum":"e662a1206f9a8c58a563da5204f2f7a464b1201f","tarball":"https://registry.npmjs.org/3dgs-loader/-/3dgs-loader-1.1.0.tgz","fileCount":11,"integrity":"sha512-FmgaImW4gCJ8GyPyNJR25J2zaEEXVuuhl25tlBsRcxCeN0456YJJ/BPmzYl+5BjNWdO2uNgkqbRKCXl5xipPDQ==","signatures":[{"sig":"MEUCIQDQVNEY7uANqFkMSKaDpWxDt5xGTG4Cd4jbEZaZtIhFQAIgPBk8OeLZ9WlVgShol+L18Lpg9OImQWRCCo2oY4vciDI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":463951},"main":"dist/index.js","gitHead":"14bc803ebc7a05e274edfebb0f62d3308152159d","scripts":{"dev":"rimraf dist && gulp dev","lint":"eslint --fix src","build":"rimraf dist && gulp build","build:iife":"rimraf dist && gulp buildIIFE","build:node":"rimraf dist && gulp buildNode","build:release":"rimraf dist && gulp buildRelease","prepublishOnly":"yarn run build:release"},"_npmUser":{"name":"cavencj","email":"cavencj@gmail.com"},"repository":{"url":"git+https://github.com/dvt3d/gs-loader.git","type":"git"},"_npmVersion":"10.9.0","description":"A unified, extensible loader framework for efficient loading and processing of 3D Gaussian Splatting (3DGS) data.","directories":{},"_nodeVersion":"22.12.0","dependencies":{"fflate":"^0.8.2"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.1","chalk":"^5.6.2","rimraf":"^6.1.2","esbuild":"^0.27.2","shelljs":"^0.10.0","fs-extra":"^11.3.3","prettier":"^3.7.4","fast-glob":"^3.3.3"},"_npmOperationalInternal":{"tmp":"tmp/3dgs-loader_1.1.0_1769149519215_0.8027437634384871","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"3dgs-loader","version":"1.2.0","keywords":["3dgs-loader","Gaussian loader","Gaussian splatting","3dgs","gs","spz","sog","splat","ply","k-spalt"],"author":{"name":"Caven Chen","email":"cavencj@gmail.com"},"license":"Apache-2.0","_id":"3dgs-loader@1.2.0","maintainers":[{"name":"cavencj","email":"cavencj@gmail.com"}],"homepage":"https://github.com/dvt3d/gs-loader#readme","bugs":{"url":"https://github.com/dvt3d/gs-loader/issues"},"dist":{"shasum":"21084b2afbb8312c8a7ee605f72b4877e698b432","tarball":"https://registry.npmjs.org/3dgs-loader/-/3dgs-loader-1.2.0.tgz","fileCount":11,"integrity":"sha512-S9/fnk9QHYm0JYduBUn6kGEL987m98Pqu+Y/DgAKD299X6tm54wBTBIpYzjo5TmMlhe4FKC0bRDjKVVUd+uWqQ==","signatures":[{"sig":"MEUCID1XLvEwp7lqsYnzo33C8YPZZU7r5c+wIsESb0PX4G8VAiEAuzlddNbFAsu9ZM9rOvROlzRHR2Nq1vqScn14rO0IU8g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":465275},"main":"dist/index.js","gitHead":"41fbd0fdc9d70d91eabead5c5c1e653fea864e21","scripts":{"dev":"rimraf dist && gulp dev","lint":"eslint --fix src","build":"rimraf dist && gulp build","build:iife":"rimraf dist && gulp buildIIFE","build:node":"rimraf dist && gulp buildNode","build:release":"rimraf dist && gulp buildRelease","prepublishOnly":"yarn run build:release"},"_npmUser":{"name":"cavencj","email":"cavencj@gmail.com"},"repository":{"url":"git+https://github.com/dvt3d/gs-loader.git","type":"git"},"_npmVersion":"10.9.0","description":"A unified, extensible loader framework for efficient loading and processing of 3D Gaussian Splatting (3DGS) data.","directories":{},"_nodeVersion":"22.12.0","dependencies":{"fflate":"^0.8.2"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.1","chalk":"^5.6.2","rimraf":"^6.1.2","esbuild":"^0.27.2","shelljs":"^0.10.0","fs-extra":"^11.3.3","prettier":"^3.7.4","fast-glob":"^3.3.3"},"_npmOperationalInternal":{"tmp":"tmp/3dgs-loader_1.2.0_1769159515384_0.319327125778728","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"3dgs-loader","version":"1.3.0","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/dvt3d/gs-loader.git"},"author":{"name":"Caven Chen","email":"cavencj@gmail.com"},"description":"A unified, extensible loader framework for efficient loading and processing of 3D Gaussian Splatting (3DGS) data.","keywords":["3dgs-loader","Gaussian loader","Gaussian splatting","3dgs","gs","spz","sog","splat","ply","k-spalt"],"license":"Apache-2.0","scripts":{"dev":"rimraf dist && gulp dev","build":"rimraf dist && gulp build","build:node":"rimraf dist && gulp buildNode","build:iife":"rimraf dist && gulp buildIIFE","build:release":"rimraf dist && gulp buildRelease","prepublishOnly":"yarn run build:release","lint":"eslint --fix src"},"devDependencies":{"chalk":"^5.6.2","esbuild":"^0.27.2","fast-glob":"^3.3.3","fs-extra":"^11.3.3","gulp":"^5.0.1","prettier":"^3.7.4","rimraf":"^6.1.2","shelljs":"^0.10.0"},"dependencies":{"fflate":"^0.8.2"},"_id":"3dgs-loader@1.3.0","gitHead":"d4d93fc9cc357ff1ed37e6431b7c3b0aa3788e77","bugs":{"url":"https://github.com/dvt3d/gs-loader/issues"},"homepage":"https://github.com/dvt3d/gs-loader#readme","_nodeVersion":"22.16.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-u7chRuUq7A3axaxhUidZwWAE7srXBf9YBMRCgGZxELlf9FuDLl57DzxCBJku25ckPio2sMWJTumMmMDhWOZUfA==","shasum":"a3d4de611d37ef33e787cbbc13e52e138467670a","tarball":"https://registry.npmjs.org/3dgs-loader/-/3dgs-loader-1.3.0.tgz","fileCount":11,"unpackedSize":465192,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD6KpDxjx6ic0/thetWBIz6dxd+tXRlJsZaZ+8EiPXS2AIhAKuQ9FjDZ7lT4B8uq7Rhqh98jFqJGMNtbN4BuhO+ZMtu"}]},"_npmUser":{"name":"cavencj","email":"cavencj@gmail.com"},"directories":{},"maintainers":[{"name":"cavencj","email":"cavencj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/3dgs-loader_1.3.0_1772026130211_0.68946309966607"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-07T03:03:50.592Z","modified":"2026-02-25T13:28:50.538Z","0.0.1":"2026-01-07T03:03:50.924Z","0.0.2":"2026-01-07T03:55:56.706Z","1.0.0":"2026-01-19T02:08:32.257Z","1.1.0":"2026-01-23T06:25:19.369Z","1.2.0":"2026-01-23T09:11:55.569Z","1.3.0":"2026-02-25T13:28:50.435Z"},"bugs":{"url":"https://github.com/dvt3d/gs-loader/issues"},"author":{"name":"Caven Chen","email":"cavencj@gmail.com"},"license":"Apache-2.0","homepage":"https://github.com/dvt3d/gs-loader#readme","keywords":["3dgs-loader","Gaussian loader","Gaussian splatting","3dgs","gs","spz","sog","splat","ply","k-spalt"],"repository":{"type":"git","url":"git+https://github.com/dvt3d/gs-loader.git"},"description":"A unified, extensible loader framework for efficient loading and processing of 3D Gaussian Splatting (3DGS) data.","maintainers":[{"name":"cavencj","email":"cavencj@gmail.com"}],"readme":"# 3DGS Loader\r\n\r\nThis module provides a **unified loader framework for 3D Gaussian Splatting (3DGS)** data.\r\nIt supports multiple data formats and exposes a **consistent usage API**, independent of the underlying format.\r\n\r\nThe loader layer is responsible **only for data loading and parsing**.\r\nIt does not handle rendering, sorting, LOD, or interaction logic.\r\n\r\n## 1. Loader Overview\r\n\r\nAll loaders inherit from a shared base class `Loader` and follow the same public API.\r\n\r\nSupported loaders include:\r\n\r\n- `SplatLoader` (`.splat`)\r\n- `SogLoader` (`.sog` , `.json` , `ArrayBuffer` )\r\n- `SpzLoader` （`.spz` , `ArrayBuffer`）\r\n- `KSplatLoader` (`.ksplat` , `ArrayBuffer`)\r\n- `PlyLoader` (`.ply` , `ArrayBuffer`)\r\n\r\nBecause the interface is uniform, loaders can be swapped without changing application code.\r\n\r\n## 2. Basic Usage (Common to All Loaders)\r\n\r\n### 2.1 Create a Loader\r\n\r\n```js\r\nimport SplatLoader from './loaders/SplatLoader'\r\n\r\nconst loader = new SplatLoader({\r\n    workerLimit: 4,        // Number of workers (0 = disabled)\r\n    workerBaseUrl: './',   // Base URL for worker scripts\r\n    wasmBaseUrl: './',     // Base URL for WASM assets (if required)\r\n})\r\n```\r\n\r\nAll loader types accept the same constructor options.\r\n\r\n> **Note**\r\n>\r\n> `SplatLoader` is a special case: it **only provides `load()` and `loadColumns()`**, and does **not** implement\r\n`loadAsSplat()` or `parseAsSplat()`, because the `.splat` format is already the native splat representation.\r\n\r\n### 2.2 Load as Columns\r\n\r\n```js\r\nconst columns = await loader.loadColumns('scene.splat', {\r\n    onProgress: (percent) => {\r\n        console.log(`loading: ${percent}`)\r\n    },\r\n})\r\n```\r\n\r\n- Loads a 3DGS source and parses it into **column-based data**\r\n- Recommended entry point for most pipelines\r\n- Suitable for any downstream 3DGS workflow\r\n\r\n### 2.3 Parse as Columns (From Existing Buffer)\r\n\r\n```js\r\nconst columns = await loader.parseColumns(dataBuffer)\r\n```\r\n\r\n- Parses an already loaded binary buffer\r\n- Skips network requests\r\n- Useful for custom I/O or streaming systems\r\n\r\n### 2.4 Load as Splat\r\n\r\n```js\r\nconst splat = await loader.loadAsSplat('***.ply', {\r\n    onProgress: (percent) => {\r\n        console.log(`loading: ${percent}`)\r\n    },\r\n})\r\n```\r\n\r\n- Loads a 3DGS source and parses it directly into **Splat format**\r\n- Skips the column-based representation\r\n- Useful for exporting, legacy pipelines, or direct splat-based workflows\r\n- **Not supported by `SplatLoader`**\r\n\r\n### 2.5 Parse as Splat (From Existing Buffer)\r\n\r\n```js\r\nconst splat = await loader.parseAsSplat(dataBuffer)\r\n```\r\n\r\n- Parses raw data directly into Splat format\r\n- Suitable when data is already available in memory\r\n- **Not supported by `SplatLoader`**\r\n\r\n### 2.6 Load as Attributes\r\n\r\n```js\r\nconst attributes = await loader.loadAsAttributes('***.ply', {\r\n    onProgress: (percent) => {\r\n        console.log(`loading: ${percent}`)\r\n    },\r\n})\r\n```\r\n\r\n- Loads a 3DGS source and parses it directly into **Attributes format**\r\n- Produces typed arrays:\r\n    - `positions: Float32Array`\r\n    - `scales: Float32Array`\r\n    - `rotations: Float32Array`\r\n    - `colors: Uint8Array`\r\n\r\n---\r\n\r\n### 2.7 Parse as Attributes (From Existing Buffer)\r\n\r\n```js\r\nconst attributes = await loader.parseAsAttributes(dataBuffer)\r\n```\r\n\r\n- Parses raw data already available in memory into **Attributes format**\r\n\r\n#### Attributes Format Definition\r\n\r\n```js\r\ninterface\r\nGaussianSplatAttributes\r\n{\r\n    numSplats: number\r\n    positions: Float32Array   // xyz, length = numSplats * 3\r\n    scales: Float32Array      // sx sy sz (linear), length = numSplats * 3\r\n    rotations: Float32Array   // quaternion xyzw, length = numSplats * 4\r\n    colors: Uint8Array        // rgba, length = numSplats * 4\r\n}\r\n```\r\n\r\n### 2.8 Dispose the Loader\r\n\r\n```js\r\nloader.dispose()\r\n```\r\n\r\nAlways dispose the loader when it is no longer needed to properly release worker and memory resources.\r\n\r\n## 3. Worker Acceleration (Optional)\r\n\r\nAll loaders support worker-based parsing through `WorkerPool`, allowing heavy decoding\r\nand parsing work to run off the main thread.\r\n\r\n### 3.1 Enable Worker Acceleration\r\n\r\n```js\r\nconst loader = new SogLoader({\r\n    workerLimit: 4,   // Enable worker-based parsing\r\n})\r\n```\r\n\r\n- Parsing runs entirely off the main thread\r\n- ArrayBuffers are transferred to workers (zero-copy)\r\n- Fully transparent to the calling code\r\n\r\n## 4. WASM Support (Optional)\r\n\r\nSome loaders (notably **`SogLoader`**) rely on **WebAssembly (WASM)** modules for\r\ndecoding compressed data, such as **WebP-encoded spherical harmonics**.\r\n\r\n### 4.1 When WASM Is Required\r\n\r\n- SOG data may store SH coefficients in WebP format\r\n- Decoding WebP efficiently requires a WASM-based decoder\r\n- The WASM module is **not bundled** with the loader by default\r\n\r\n### 4.2 Required WASM Assets\r\n\r\nThe following files must be available at runtime:\r\n\r\n```text\r\n/webp/\r\n├─ wasm_webp.wasm\r\n└─ wasm_webp.min.js\r\n```\r\n\r\nThese files must be copied to a publicly accessible location.\r\n\r\n### 4.3 Configure WASM Path\r\n\r\n```js\r\nconst loader = new SogLoader({\r\n    workerLimit: 4,\r\n    wasmBaseUrl: './',   // Base URL that contains the /webp directory\r\n})\r\n```\r\n\r\nThe loader resolves the WebP WASM script URL internally and passes it to the worker\r\nor main-thread parser as needed.\r\n","readmeFilename":"README.md"}