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 · 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 ​

source ​

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

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

revision ​

ts
readonly revision: number;

session.revision of the committed state captured.

seq ​

ts
readonly seq: number;

session.seq of the committed state captured.

frame ​

ts
readonly frame: number;

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

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.

sceneHash ​

ts
readonly sceneHash: string;

sha256 of the canonical committed SessionState 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.

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.

size ​

ts
readonly size: { … }

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

size.width ​

ts
readonly width: number;

size.height ​

ts
readonly height: number;

size.pixelRatio ​

ts
readonly pixelRatio: number;

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): 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) at tier stable (a member only where no rule, data, asset or app code serves the need)