# Processing pipeline

> What happens between an upload and a searchable segment, and what you see at each stage.

Source: https://rayform.world/docs/reference/processing
Last updated: 2026-10-18
Status: Rayform is in private preview. APIs, formats and the SDK described here may change before general availability.

Every session goes through the same stages. Each one is keyed by its inputs, so retries and reprocessing are safe and an unchanged input is never processed twice.

| Stage | What happens | What you see |
| --- | --- | --- |
| Verify | Whole-file checksum checked; original stored unchanged | `status: uploaded` |
| Validate | Schema, channel rates, missing data, calibration lookup | `issues` with `severity: error` stop here |
| Protect | Faces and other personal details blurred in image channels | Nothing; originals stay in storage |
| Align | Clock offsets estimated and applied; streams placed on one timeline | `clock_offset_estimated` issues |
| Register | Poses registered into the site's world frame | `registration_residual_m` in session metadata |
| Reconstruct | Gaussian splats, meshes and collision geometry; moving objects separated | Scene and object assets |
| Label | Entities segmented and tracked; interactions detected | Entities and events |
| Segment | Recording cut at interactions, with margins | Segments become searchable |
| Check | Lossless encoding verified on read-back; quality scored on held-out frames | `quality` on each segment |

## Lossless storage

Reconstructions are stored with a lossless codec and verified after encoding: an asset is published only if decoding it reproduces exactly the data that was encoded. What you retrieve is therefore exactly what was processed.

## Quality scores

| Score | Meaning |
| --- | --- |
| `psnr` | Peak signal-to-noise ratio of renders against held-out camera frames, in dB |
| `coverage` | Fraction of the segment's extent seen by at least three frames |
| `registration_residual_m` | Mean pose error after registration to the site frame |

Use `quality_min` when searching to keep low-quality segments out of training.

## Reprocessing

When the pipeline improves, sessions can be reprocessed. New segment versions are created next to the old ones; slices keep pointing at the versions they were frozen with. Each segment records the `pipeline_version` that produced it.
