For the complete documentation index, see llms.txt. This page is also available as Markdown.

Gaussian Splat Upload

Upload a Gaussian Splat (.ply + poses.json) as a Multiset VPS map via the REST API.

Gaussian Splats are uploaded through the same two-step multipart flow as e57 maps (POST /v2/vps/map → upload parts → /complete-upload/{id}). The only thing that changes is the source object you send in Step 1 — it describes that the file is a Gaussian Splat and carries splat-specific metadata.

What to upload

A single .zip containing both:

  • point_cloud.ply — the Gaussian Splat file.

  • poses.json — the training camera poses.

Both files must be at the root of the archive. See Gaussian Splat for export details and the poses.json schema.

source object for Gaussian Splat

"source": {
  "provider": "xgrid",
  "fileType": "splat",
  "coordinateSystem": "RHS-Z-UP",
  "metadata": {
    "mode": "indoor",
    "hasPoses": true
  }
}
Field
Value
Notes

provider

"xgrid"

Scanner provider. See note below for upcoming providers.

fileType

"splat"

Tells the server this is a Gaussian Splat upload (not e57 / zip).

coordinateSystem

"RHS-Z-UP"

Xgrids exports use right-handed, Z-up.

metadata.mode

"indoor" | "outdoor"

Pick the one that matches the capture — affects VPS accuracy.

metadata.hasPoses

true

Must be true. poses.json is required for VPS.

The example on this page is specifically for Xgrids Gaussian Splats (exported from Lixel CyberColor). Support for additional Gaussian Splat providers — such as LitechFeld — is coming soon. The provider value will change per pipeline; the rest of the source shape (fileType, metadata.mode, metadata.hasPoses) will stay the same.

Example — create a Gaussian Splat map (Step 1)

The response contains mapId, uploadId, and the array of presigned signedUrls — exactly like the e57 flow.

Next steps

After Step 1:

  1. Split your .zip into chunks and PUT each chunk to the corresponding presigned URL. Capture the ETag of every part.

  2. Call POST /v2/vps/map/complete-upload/{mapId} with the uploadId, S3 key, and the array of { PartNumber, ETag }.

Both endpoints are identical to the e57 upload — see the Map Upload overview for the full OpenAPI specs.

Last updated

Was this helpful?