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

# Live View & OSD

> Live view streaming with optional camera UI overlay

Per-camera live view with optional OSD (On-Screen Display) overlay. All endpoints are scoped to a specific camera.

See the auto-generated [API reference](/web-api/overview) for full request/response schemas.

## Workflow

<Steps>
  <Step title="Enable or start live view">
    `POST /api/cameras/{id}/live-view/enable` or `POST /api/cameras/{id}/live-view/start`
  </Step>

  <Step title="Get frames">
    `GET /api/cameras/{id}/live-view/frame` returns a single JPEG frame
  </Step>

  <Step title="Optional: enable OSD">
    `POST /api/cameras/{id}/live-view/osd-enable`
  </Step>

  <Step title="Get OSD frames">
    `GET /api/cameras/{id}/live-view/osd-frame`
  </Step>

  <Step title="Stop live view">
    `POST /api/cameras/{id}/live-view/stop`
  </Step>
</Steps>

***

## Endpoints

| Method | Path                                      | Description                                             |
| ------ | ----------------------------------------- | ------------------------------------------------------- |
| `POST` | `/api/cameras/{id}/live-view/enable`      | Send SDK `Setting_Key_EnableLiveView`                   |
| `POST` | `/api/cameras/{id}/live-view/disable`     | Disable live view                                       |
| `GET`  | `/api/cameras/{id}/live-view/status`      | Returns `enabled` + `streaming` booleans                |
| `POST` | `/api/cameras/{id}/live-view/start`       | Start the frame capture worker (auto-enables live view) |
| `POST` | `/api/cameras/{id}/live-view/stop`        | Stop the frame capture worker                           |
| `GET`  | `/api/cameras/{id}/live-view/frame`       | Latest JPEG frame (`Content-Type: image/jpeg`)          |
| `POST` | `/api/cameras/{id}/live-view/osd-enable`  | Enable OSD overlay                                      |
| `POST` | `/api/cameras/{id}/live-view/osd-disable` | Disable OSD overlay                                     |
| `GET`  | `/api/cameras/{id}/live-view/osd-status`  | Returns `supported` + `enabled`                         |
| `GET`  | `/api/cameras/{id}/live-view/osd-frame`   | Composited JPEG (live view + OSD)                       |

<Warning>
  Live view is disabled by default in `remote-transfer` mode. You must call `/live-view/enable` (or `/live-view/start` which auto-enables) before requesting frames.
</Warning>

### Get Frame

Returns the latest live view frame as a JPEG image. Streaming must be started first.

<CodeGroup>
  ```bash curl theme={null}
  curl -o frame.jpg http://localhost:8080/api/cameras/D10F60149B0C/live-view/frame
  ```
</CodeGroup>

### OSD Overlay

Enable on-screen display — the camera renders its UI (exposure info, focus points, histogram, etc.) as an overlay image composited onto the live view frame.

```bash theme={null}
curl -o osd-frame.jpg http://localhost:8080/api/cameras/D10F60149B0C/live-view/osd-frame
```

***

## Polling for continuous frames

For a render loop at \~15 fps, poll `GET /api/cameras/{id}/live-view/frame` at roughly 66 ms intervals. The endpoint returns the latest JPEG the server has captured — the camera-side frame rate is the actual cap.

See [the live-view polling example](/sdk/recipes/live-view-polling) for full client implementations in TypeScript, Python, and Swift.
