Bead: Gaussian Splat Manager

**Bead** `02f02f91-355d-45a6-86ab-9d7a7ebe79ea` · [canonical URI](https://redfish.acequia.io/guerin/.agents/02f02f91-355d-45a6-86ab-9d7a7ebe79ea/) · discussion: Talk: Gaussian Splat Manager This page is the wiki facet of a [bead](https://redfish.acequia.io/guerin/.agents/); the bead is the source of truth.

## Identity - **URI:** https://redfish.acequia.io/guerin/.agents/02f02f91-355d-45a6-86ab-9d7a7ebe79ea/ - **GUID:** `02f02f91-355d-45a6-86ab-9d7a7ebe79ea` - **Slug:** gaussian-splat-manager - **Opened:** 2026-06-19

## Motivation (why a GUID) A home for managing Gaussian-splat model assets — discovery, format conversion, and (eventually) cataloging/serving. First task: take the legacy `.splat` models published at `https://redfish.com/splats/` and produce modern Niantic `.spz` (compressed) versions, held locally as bead artifacts.

## Mechanism (what this bead does) Converts antimatter15/INRIA `.splat` files to Niantic `.spz` using a small Node script over the pure-JS `spz-js` library. The `.splat` container carries no spherical harmonics beyond the DC term, so output is SH-degree 0. Conversion fidelity is verified by reloading the `.spz` and comparing per-attribute mean-absolute-error against the source decode (all within SPZ's 8-bit/12-bit quantization budget). Source note: the request said `.ply`, but `redfish.com/splats/` actually serves `.splat` files. These are the same Gaussian-splat models in a different container; the bead converts the `.splat` files that are actually there.

## Folder Layout - `2026-06-19/` - `skills/splat-to-spz.mjs` — the reusable converter (`node splat-to-spz.mjs <in.splat> <out.spz>`) - `skills/package.json` + `package-lock.json` — `spz-js` dependency manifest (run `npm install` to restore `node_modules/`, which is not synced) - `notes/00-splat-to-spz-format-mapping.md` — the exact field/encoding mapping between the two formats - `artifacts/spz/` — the three converted `.spz` deliverables, plus `SOURCE.md` pointing at the original `.splat` URLs - `chats/2026-06-19-gaussian-splat-manager.md` — verbatim chat log - `uploads/` — inbound dock Source `.splat` files are not kept in the bead; they remain served at https://redfish.com/splats/ (see `artifacts/spz/SOURCE.md`).

## Session Log - **2026-06-19** — Opened. Downloaded 3 `.splat` models, wrote `splat-to-spz.mjs`, converted all three to `.spz` (~48% of source size), validated round-trip fidelity.

## Deliverables Source `.splat` (sizes for reference) → `.spz`. Sources served at https://redfish.com/splats/. | Model | Splats | `.splat` source | `.spz` output | Ratio | |---|---|---|---|---| | BostonLoganLandingApproach | 918,742 | 29,399,744 B | 14,056,971 B | 47.8% | | HarvardStadium3 | 611,302 | 19,561,664 B | 9,659,121 B | 49.4% | | SantaFeSkiBasinAndAspens | 434,124 | 13,891,968 B | 6,747,938 B | 48.6% |

## Modus Operandi (how to interact) - Drop new `.splat` (or `.ply`) assets in `uploads/`, or point the converter at any local file. - For `.ply` inputs, `spz-js` already ships `loadPly`; the converter would need a one-line branch to use it instead of `decodeSplat`.

## Capabilities - `.splat` → `.spz` conversion (SH-degree 0). - Round-trip validation harness (per-attribute MAE).

## Lifecycle Active. Apoptotic: terminate by signal; no dangling state outside this bead.

## Limitations - `.splat` is a lossy, DC-only container, so the produced `.spz` carries no higher-order spherical harmonics (none existed in the source). Converting from the original training `.ply` would preserve full SH. - `node_modules/` is excluded from the bead; restore with `npm install` in `skills/` before running the converter. - `.spz` outputs total ~30 MB; mind the bead-sync size pre-flight.

See all: Beads