# `CaptureResult.snapshot`

> Contract 2.0.0 · package sha256 `a857eca95b35921109faf997094bb4192f12527d9d0fcd4be7e97f06425bad6e` · generated from `configurator-runtime.d.ts` by `services/onsite-scripter/scripts/build-contract-docs.mjs`; edit the source, not this file.

Property of [`CaptureResult`](CaptureResult.md) · stable · since 2.0.0

```ts
readonly snapshot: {
  readonly source: 'render' | 'displayed' | 'other';
  readonly revision: number;
  readonly seq: number;
  readonly frame: number;
  readonly settled: boolean;
  readonly sceneHash: string;
  readonly camera: Pick<CameraState, 'position' | 'target' | 'fovDeg' | 'aspect'>;
  readonly size: {
    readonly width: number;
    readonly height: number;
    readonly pixelRatio: number;
  };
  readonly runtime: string;
};
```

What the image shows, for repeatability and audit.

## Fields

<a id="source"></a>
### `source`

```ts
readonly source: 'render' | 'displayed' | 'other';
```

The source used ('render' or 'displayed').

<a id="revision"></a>
### `revision`

```ts
readonly revision: number;
```

[`session.revision`](Session.revision.md) of the committed state captured.

<a id="seq"></a>
### `seq`

```ts
readonly seq: number;
```

[`session.seq`](Session.seq.md) of the committed state captured.

<a id="frame"></a>
### `frame`

```ts
readonly frame: number;
```

Whose transient state (frame writes, clip time) was used: the last drawn frame.

<a id="settled"></a>
### `settled`

```ts
readonly settled: boolean;
```

No clip, tween, fade, damping, accumulation or late swap in flight. False while open-ended motion (`autoRotate`, a looping clip) runs. Not a reset pose: a clip held at its last frame or paused is settled. With 'render', a material or stage crossfade doesn't count, because the capture draws it at its target (spec section 6.8, rule 2), so `await select(…)` then a capture is settled when nothing else moves; a 'displayed' capture copies the blend and counts it.

<a id="scenehash"></a>
### `sceneHash`

```ts
readonly sceneHash: string;
```

sha256 of the canonical committed [`SessionState`](SessionState.md) captured (as of `seq`; staged and queued writes never enter it) plus asset versions and the worn materials and labs geometry writes outside it (spec section 6.8, rule 8). Transient state (clip time, frame writes; see `frame`) is not in it. Never a commercial id.

<a id="camera"></a>
### `camera`

```ts
readonly camera: Pick<CameraState, 'position' | 'target' | 'fovDeg' | 'aspect'>;
```

The camera the image was rendered with: world metres, degrees, and `aspect` the image's width over height.

<a id="size"></a>
### `size`

```ts
readonly size: { … }
```

CSS px and the pixel ratio; the image is width × pixelRatio by height × pixelRatio pixels.

<a id="size.width"></a>
### `size.width`

```ts
readonly width: number;
```

<a id="size.height"></a>
### `size.height`

```ts
readonly height: number;
```

<a id="size.pixelratio"></a>
### `size.pixelRatio`

```ts
readonly pixelRatio: number;
```

<a id="runtime"></a>
### `runtime`

```ts
readonly runtime: string;
```

RUNTIME_VERSION.

## Generic-API test (spec 3.1)

| Rule | Result |
| --- | --- |
| 1. Neutral name | pass: `snapshot` names no product |
| 2. A precedent | pass (through its owner [`CaptureResult`](CaptureResult.md)): a correctness rule (rows `G21`) |
| 3. Two apps, or labs | pass: 24 apps (ledger: app-c1384707fc; fleet cross-check: app-04c2774145, app-4762caacdc, app-4f16d2f6da, app-4fd23bc869, app-510d750508, app-822bb9d6aa, app-8675b3225c, app-b362a81c85 and 16 more) |
| 4. The cheaper fix first | decided per need in Appendix B: rows `G21` (through its owner [`CaptureResult`](CaptureResult.md)) at tier stable (a member only where no rule, data, asset or app code serves the need) |
