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. T is the camera position, R the camera to world rotation as a [w, x, y, z] quaternion with +Z forward.

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" | "others"

xgrid for a Lixel CyberColor export. Use others for a splat trained in any other tool.

fileType

"splat"

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

coordinateSystem

"RHS-Z-UP" | "RHS-Y-UP"

The frame your splat and poses.json are in. Xgrids exports are right-handed Z up. Most other trainers, COLMAP included, are right-handed Y up, so send RHS-Y-UP and the pipeline rotates for you.

metadata.mode

"indoor" | "outdoor"

Pick the one that matches the capture, it affects VPS accuracy.

metadata.hasPoses

true

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

Right-handed Y up inputs no longer need converting. Set coordinateSystem to RHS-Y-UP and the pipeline rotates the splat, its spherical harmonics, and poses.json into the working frame together. See Splats from Other Tools.

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?