2026-10-27 · 13 min · 3d · gaussian-splatting · world-models · reconstruction
Why read this
Nichelast 15%Closed model, no paper; value is a byte-level read of one public sample splat (7,276,512 discs, 16.4 B each) plus the price list and the training clause.
- Original analysis
3D & spatialAPI onlyProprietaryPractitioner model
How this was scored
- Is it new?
- 1 of 3: An incremental tweak
- Can I trust it?
- 2 of 3: Measures key facts from files, code or configs
- Can I run it?
- 0 of 3: Closed, nothing to run
- Will I understand it?
- 1 of 3: Partial mechanism
- Can I act on it?
- 1 of 3: General advice
- Will it last?
- 1 of 3: Relevant for months
- Does it affect many?
- 1 of 3: A specialist community
- Only here?
- 2 of 3: A teardown or measurement few others did
Score 42 of 100, ranked 611 of 666 rated articles. Each question is answered 0–3 by hand, and a 3 is rare. How articles are scored
A post made the rounds this week: a four-minute scan of a hotel room, rebuilt by SpAItial's new Echo-3 into something you can walk through in a browser. The claim is a good one. A phone, a slow lap of a room, and a few minutes later a photorealistic splat scene at real-world scale.
I cannot tell you how Echo-3 works. Nobody outside SpAItial can. There is no technical report on the company's site, no GitHub organisation I could find, and a search of the Hugging Face API for the name returned an empty list. What I can do is read everything the launch exposes: the product page, the launch posts, the terms, and the files behind one public sample world. Each claim below is labelled reported (someone said it), measured (I read it out of a file) or reasoned (I inferred it and say how).
What is claimed
The launch is dated 27 October 2026. Three outlets and the company's own pages agree on the outline (reported):
- Echo-3 takes "a few minutes of phone capture" and returns a Gaussian-splat scene "scaled to real-world dimensions". The three steps on the product page are capture (walk slowly, on-screen guides show coverage), generate, then explore, measure and share by link.
- The announcement says phone captures are incomplete, so Echo-3 builds the scene from what was captured and then fills the missing regions to match their surroundings. The stated goal is to "preserve what you captured and complete what you missed".
- It follows two earlier models. Echo (December) made a scene from an image or text. Echo-2 (April) added decomposition and per-object editing. Echo-3 is the first that starts from a walkthrough of a real place.
- SpAItial compared one scene against Polycam, KIRI Engine and Niantic Scaniverse and says its surfaces are sharp with no visible floaters. It published no benchmark figures, no error in centimetres, and no processing time.
That last sentence is the one to hold on to. "Faithful" and "state of the art" are the company's words. I found nothing that would let a reader check either.
What you can get
Reported. An iPhone app is out now, Android is "coming soon". Scans are saved on the phone and uploaded for cloud processing. On a LiDAR iPhone the app shows live coverage guidance and a dense point-cloud preview; other iPhones capture without them. An enterprise API is promised for real-estate visualisation, simulation inputs and agents that understand or edit scenes. A Claude plugin and a hosted MCP server for the earlier Echo models shipped in June.
Weights: not released, as far as I can find. The model is reachable through the
app, the web viewer and, for enterprises, the API. That is why the article's
runsOn says API.
Pricing is a credit meter. Processing costs 300 credits per recorded scan minute with a 900-credit minimum. Standard gives 7,500 credits a month, about 25 scan minutes, for non-commercial use. Pro gives 15,000 credits, about 50 minutes, with commercial rights. Eligible new subscribers get the first month free. The slider below is that arithmetic and nothing else, so a four-minute scan is 1,200 credits: 16% of a Standard month.
The table under the bars uses the file size I measured later in this piece. Only the first row is a download; the other two are the same bytes per splat applied to their counts, an estimate (reasoned).
The terms
I read the terms of service rather than summarising a summary. Four clauses matter to anyone scanning somewhere that is not theirs (reported, clause numbers as the document gives them):
- 6.1: the user owns the intellectual property in Generated Content.
- 5.1 and 6.9: SpAItial gets a "worldwide, irrevocable, perpetual, royalty-free, sublicensable" licence over the user's input and the generated content.
- 7.1: SpAItial may use that data for "training, fine-tuning, evaluating, and improving the Underlying Model". Clause 6.9 says commercial rights do not change this.
- 6.3, 6.4: Free and Standard are personal and non-commercial; Pro allows commercial use of Echo-2 or Echo-3 outputs worldwide. 6.7 forbids using the output to train a competing model without written consent.
Read together: you own the room, and the company may train on your scan of it forever. A capture of a client's factory floor is not yours alone to give. The terms say nothing I could find about world visibility, so I cannot tell you whether a link is private by default.
The sample world
The tweet links a world in SpAItial's web viewer. The viewer page is plain HTML
that points at its assets, and the asset links are public. That gives me a real
Echo-3 output to measure. Two caveats up front. I cannot show that this world is
the four-minute hotel scan; its title is "Modern room with wood floors and white
walls", and the output path of the file contains video2splat. And it is one
scene, so nothing below is a statistic about Echo-3. It is a reading of one
output.
What the viewer loads (measured):
| File | What it is | Size |
|---|---|---|
splat.spz | the scene, Niantic SPZ | 119,247,965 bytes |
lod-meta.json | a three-level streaming hierarchy | 10,777 bytes |
splat.voxel.json | an occupancy grid for the same scene | 623 bytes |
Both JSON files name their generator: PlayCanvas's splat-transform v2.6.0. So
the web viewer is built on the standard open splat tooling, with SpAItial's
model upstream of it (reasoned; the generator string tells me the converter,
not the model).
Header and layout
SPZ is a gzip stream. I decompressed it and parsed the header (measured):
magic NGSP, version 3, 7,276,512 points, spherical-harmonics degree 0, 12
fractional bits for positions, flag 1 (antialiased). Degree 0 means colour is
one RGB triple per splat: no view-dependent shading, so a reflection will not
slide across a wall as you move. Raw layout is 9 bytes of position, 1 of
opacity, 3 of colour, 3 of scale and 4 of rotation: 20 bytes. The gzipped file
is 119,247,965 bytes, which is 16.39 bytes per splat, 82% of raw.
For comparison, the SOG teardown measured 13.64 bytes per splat for a trained scene in PlayCanvas's own format, from 248 for the raw PLY. SPZ at 16.4 sits between those; this is what the "download SPZ" button hands you.
lod-meta.json lists 10,696,472 splats in three levels: 7,276,512, 2,546,779
and 873,181. The first equals the SPZ's count exactly, so the SPZ export is the
finest level and the viewer streams coarser ones over 18 chunk files (measured,
the match; the reading that level 0 is the SPZ is reasoned).
How big is the room
Positions are 24-bit fixed point, so decoding is exact to 1/4096 m. The SPZ documentation for this service says positions are exported in the RDF (OpenCV/COLMAP) frame: x right, y down, z forward. I took that as given and checked it against the data. The two tallest bands in the height histogram are at y = +1.35 and y around −1.15, and the first carries 875,553 splats in a single 5 cm bin. If y points down, +1.35 is the floor and −1.15 the ceiling, which makes the room 2.5 m high (measured, with the axis convention taken from the docs). That is a normal room height, which is mild evidence for the scale claim. It is one dimension of one room and no substitute for a tape measure.
The occupancy grid agrees about the footprint. Its gridBounds span 11.0 by
4.0 by 8.8 m at 5 cm voxels, in a different axis order and padded; the splats
span 10.75 by 3.0 by 8.54 m (measured). Counting 0.25 m floor cells that hold
at least 200 splats gives 893 cells, or 55.8 m². Move the threshold and watch
the number; the heat map is every splat, binned.
The grid file also tells you something about use. A leaf size of 4 voxels and a tree depth of 6 gives 14,440 nodes, 11,421 of them mixed leaves (measured). Occupancy at that resolution is what a walking camera needs to stay out of walls. That is my reading of its purpose (reasoned); the file does not say.
The splats are discs
This is the finding I did not expect. In SPZ, scale is stored per axis as
byte/16 − 10 in the log domain. I decoded all of them and sorted each splat's
three axes (measured):
- Median longest axis: 3.84 mm. Median middle axis: 2.19 mm.
- 5th to 95th percentile of the longest axis: 1.1 mm to 17.21 mm. The 99th is 32.14 mm.
- The shortest axis is byte 0 on 7,218,723 splats, 99.2%, which decodes to e−10 m, 0.045 mm. The next byte values hold about 1,300 splats each.
Three-dimensional Gaussian splatting usually trains full ellipsoids. A distribution with 99.2% of the mass pinned at the format's minimum is not that. The splats are flat discs (surfels), the representation of 2D Gaussian splatting, where each primitive is a small oriented patch lying on a surface (reasoned from the scale arrays; SpAItial has not said which representation Echo-3 emits, and a clamp to the minimum would look identical).
Why it matters: a flat disc has a normal, and the launch material lists "normals" and "depth" among exports. Discs give clean geometry for a mesh or a depth map in a way blobs do not. It would also explain the "no floaters" claim, since a disc not lying on a surface has nothing to hold it up. Both are speculation about why; the measurement is the 99.2%.
Opacity follows suit. The lowest stored value is byte 11, about 0.04, so nothing fainter survived. A quarter of the splats, 24.5%, are at 250 or above out of 255, and the median is 0.616. Colour is a single triple. At a median 3.84 by 2.19 mm a disc covers roughly 7 mm², so one square metre of surface takes on the order of a hundred thousand of them before overlap (reasoned, back of the envelope). That is where 7.3 million splats goes.
Where it sits among the splat articles here
It is a different kind of subject from the others on this site, which is why the comparison is short.
- Gaussian-splat capture in practice walks through the manual route: a 360 camera, structure from motion, training, trimming, a map. Echo-3 replaces that chain with an app and a credit meter, and keeps the output format the same. The cost is that every stage between frames and splats is now opaque.
- InfiniSplat v2 is the open feed-forward version of the idea: frames in, Gaussians out, in one pass, with the method readable. Echo-3 is plausibly the same class of system with a generative completion stage (reasoned from the "fills missing regions" claim); I can confirm none of it.
- WorldCrafter is the world-model reading of "3D": generate video that stays consistent when you return to a place. Echo-3 starts from a real place and ends in an explicit asset, which does not drift, because it is a file.
- Atlas Camera Studio is a reminder that "world model" labels very different pipelines.
Read it yourself
The whole measurement is a page of Python and works on any SPZ you export. The format is a gzip stream, a 16-byte header, then planar arrays in a fixed order.
import gzip, struct, numpy as np
f = gzip.open("splat.spz", "rb")
magic, ver, n, sh, frac, flags, _ = struct.unpack("<IIIBBBB", f.read(16))
pos = np.frombuffer(f.read(n * 9), np.uint8).reshape(n, 3, 3).astype(np.int32)
v = pos[:, :, 0] | (pos[:, :, 1] << 8) | (pos[:, :, 2] << 16)
v = np.where(v & 0x800000, v - (1 << 24), v) / (1 << frac) # metres
alpha = np.frombuffer(f.read(n), np.uint8)
f.read(n * 3) # colour
scale = np.frombuffer(f.read(n * 3), np.uint8).reshape(n, 3)
print((scale.min(1) == 0).mean()) # the 99.2%It decompresses to a few hundred megabytes of arrays for this file, so keep the intermediate steps in 32-bit integers. If your number for the flat fraction on a different Echo-3 scene is not near 99%, the disc reading is wrong, and I would like to hear it.
Why filling in is the hard part
A walkthrough never sees the back of a sofa, the top of a wardrobe or the floor under a bed. A pure reconstruction leaves holes there, and a viewer who steps close enough sees through the wall of the scan into the void. Echo-3's selling point is that it does not leave them (reported). Making the fill credible needs a prior over what rooms look like, which is a generative model's job, and it is the reason this is called a world model rather than a reconstruction pipeline (reasoned; the label is the company's, the justification is mine).
The same strength is the audit problem. A measuring tool built on this output has two kinds of surface in it, captured and invented, and the file does not mark which is which. The app offers measurements, so the useful question for SpAItial is whether a distance between two captured walls and a distance across a filled gap come with the same error bar. Until that is published, treat a measurement as accurate only between surfaces you walked past.
What I could not check
- Accuracy. There is no ground truth for this room. 2.5 m is plausible, not verified. The launch gives no centimetre error.
- The completion. The headline feature is filling what the phone missed. A filled region and a captured region look the same in the file, and I have no capture to difference against. Whether the four-minute hotel video produced this world I cannot say.
- Anything inside the model. Architecture, training data and size are undisclosed.
- Rendering. I decoded the file and did not render it, so I make no claim about how it looks. A 119 MB download is also a real cost on a phone, which is presumably why the viewer streams the lower levels.
- Other scenes. One file, one afternoon.
Everything numeric above came from two commands' worth of Python: gunzip the SPZ, read the 16-byte header, read the arrays in order. Nothing from SpAItial was executed; the only files I fetched were public assets the viewer itself requests.
What I would do with it
If you scan places you own and want a metric splat without an SfM stack, the app is a convenient front end, and the price list is simple enough to budget: 300 credits a minute, and keep scans short because the minimum is 900. If you scan anyone else's space, read clause 7.1 first. If you need to know how good it is, wait for a number: the sentence "the same scene against three competitors" is a demo, and the question that decides it is the error in centimetres on a room you can measure by hand.
The artefact is useful even so. A flat-disc splat with degree-0 colour and 14,440 voxel nodes of occupancy beside it is a well-chosen delivery format for a web viewer, and everything past the capture is closed.
- license
- MIT
- branch
- main
- tests
- 86 files
- source
- 3.0 MB
- commit date
- 2026-10-29
by size of tracked source at this commit, file counts in brackets; docs, data and vendored trees excluded
local clone, 2026-11-01 at cf7bd62 — branch, commit, commitDate, fileCount, hasTests, languages, license, licenseFile, shallow, testFileCount
shallow clone: counts describe the pinned tree, not the history