> ## Documentation Index
> Fetch the complete documentation index at: https://docs.encord.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Scene Concepts

Scenes are built from timestamped streams. Most teams should register Scenes with the [Scene SDK workflow](/sdk-documentation/index-sdk/sdk-scenes) and [SceneBuilder reference](/sdk-documentation/sdk-references/beta.scene.builder), then use this page when they need to understand how streams, calibration, and raw payloads fit together.

## Sensor Streams and Events

A Scene is built from streams. Point cloud streams, image streams, camera-parameter streams, and frame-of-reference streams each contain timestamped events.

For frame-indexed data, use sequential integer timestamps. For asynchronous sensors, use the original sensor timestamps so Encord can align the latest available event from each stream at the selected time.

## Frame of Reference Hierarchies

Frames of reference describe how the world, ego vehicle, robot, and sensors relate to each other. A typical hierarchy is:

* A root or world frame.
* An `ego` frame for the moving platform.
* Sensor streams linked to `ego`, with static sensor mount poses when the sensor is fixed on the platform.

Use dynamic FoR events when the platform moves over time. Use a static `pose=` on a sensor stream for calibration offsets that do not change.

## Camera Calibration

Camera projection needs both:

* Intrinsics: focal length, principal point, and optional distortion model.
* Extrinsics: the camera pose relative to the Scene frame hierarchy.

Image streams reference camera-parameter streams. If you use `add_image_stream` with inline camera parameters, the SDK creates the camera stream for you.

## Storage Architecture

Composite Scenes reference external point cloud and image files by URI. Container-style data, such as MCAP or ROS bag exports, can contain multiple sensor streams in one file, but the same concepts still apply: streams, events, timestamps, calibration, and frames of reference.

## Camera Distortion Models

The SDK source of truth for supported camera distortion models is [`encord.beta.scene.intrinsics`](/sdk-documentation/sdk-references/beta.scene.intrinsics). The generated table below is produced from that SDK support list.

| SDK API                                    | Model type            | Distortion coefficients                        | Use when                                                                   |
| ------------------------------------------ | --------------------- | ---------------------------------------------- | -------------------------------------------------------------------------- |
| `intrinsics_pinhole(...)`                  | `pinhole`             | None                                           | Use for calibrated pinhole cameras with no distortion.                     |
| `intrinsics_radial(...)`                   | `radial`              | `k1`, `k2`, `k3`                               | Use when calibration only supplies radial coefficients.                    |
| `intrinsics_plumb_bob(...)`                | `plumb_bob`           | `k1`, `k2`, `k3`, `t1`, `t2`                   | Use for Brown-Conrady calibration with radial and tangential coefficients. |
| `intrinsics_fisheye(...)`                  | `fisheye`             | `k1`, `k2`, `k3`, `k4`                         | Use for fisheye lenses calibrated with four coefficients.                  |
| `intrinsics_rational_polynomial(...)`      | `rational_polynomial` | `k1`, `k2`, `k3`, `k4`, `k5`, `k6`, `t1`, `t2` | Use for OpenCV rational-polynomial calibration.                            |
| `intrinsics_simple(..., model="division")` | `division`            | `k`                                            | Use for one-parameter division-model calibration.                          |
| `intrinsics_simple(..., model="ucm")`      | `ucm`                 | `xi`, `k1`, `k2`, `k3`                         | Use for unified camera model calibration.                                  |
| `intrinsics_cylindrical(...)`              | `cylindrical`         | None                                           | Use for cylindrical camera projections.                                    |

## Encord Format Specification

<Important>
  Use the [Scene SDK workflow](/sdk-documentation/index-sdk/sdk-scenes) and [SceneBuilder reference](/sdk-documentation/sdk-references/beta.scene.builder) instead of writing raw upload payloads. The raw Encord format is only for systems that already emit Encord-compatible Scene JSON.
</Important>

<Tabs>
  <Tab title="Basic Example">
    This payload registers one Scene with one point cloud stream.

    ```json Basic theme={"dark"}
    {
      "scenes": [
        {
          "title": "single-pcd-basic",
          "scene": {
            "lidar": {
              "type": "point_cloud",
              "events": [
                { "uri": "s3://my-bucket/scenes/scene-001/lidar/000000.pcd" }
              ]
            }
          }
        }
      ]
    }
    ```
  </Tab>

  <Tab title="Advanced">
    This example registers one LiDAR point cloud stream and one image stream with multiple synchronized frames.

    [Download the advanced Scene JSON example](https://storage.googleapis.com/docs-media.encord.com/scene-mid-level-complexity.json).
  </Tab>
</Tabs>
