Source: https://shadowfrag.com/blog/demos-for-players-and-referees/

# Recording a match I can inspect

By the SHADOWFRAG developer · Game systems · Oct 22, 2026 · 3 min read

[Native demos](https://shadowfrag.com/glossary/#term-native-demo) let me change viewpoint and inspect the server’s decisions after a match. They also need to show what was never recorded and what a client report cannot prove.

[Native SHADOWFRAG replay view with a first-person scene, timeline, action list and evidence inspector.](https://shadowfrag.com/_astro/039923b22c15a14f958fd37c67dcc96f0888538191478f57afe840d1fc9628f4.DOsy7gn1.png)

The replay scene shares the renderer, with a timeline and evidence inspector around it. Archive date: Oct 22, 2026.

A video is useful for watching the view someone captured. To follow a different player afterward, or inspect the line the server used to judge a shot, I needed a different kind of recording. [Native demos](https://shadowfrag.com/glossary/#term-native-demo) save game state and evidence that the game can reconstruct after the match.

Ordinary players can choose to record. Competitive hosts record the server's [authoritative track](https://shadowfrag.com/glossary/#term-demo-tracks) and require recording in the shipping client. The full files are collected explicitly after the match; they are not uploaded continuously through the gameplay connection.

## Leaving the live match to inspect it

Opening a demo leaves the live match. The viewer can pause, seek to another moment, change playback speed, follow a player or use a free camera. It has no live connection and cannot send recorded inputs back to a server.

A client's track contains only what that client received. If it never received another player's inventory, playback shows that information as missing instead of filling it in. A referee can align the [server track](https://shadowfrag.com/glossary/#term-demo-tracks) with [participant tracks](https://shadowfrag.com/glossary/#term-demo-tracks) to inspect accepted actions, rejection reasons and the timing information that is available. Historical [hitbox](https://shadowfrag.com/glossary/#term-hitbox) overlays show the collision shapes and the ray—the line of attack—used to validate a rail shot or [melee](https://shadowfrag.com/glossary/#term-melee) action.

Timing needs the same care. A client's [capture-to-feedback](https://shadowfrag.com/glossary/#term-input-latency) measurement uses that client's [monotonic clock](https://shadowfrag.com/glossary/#term-monotonic-clock), which measures elapsed time without relying on the wall clock. Subtracting a timestamp from an unrelated server clock would not establish [latency](https://shadowfrag.com/glossary/#term-latency), even if the resulting number looked plausible.

## Checking what a recording can establish

Recordings link their contents with a [SHA-256](https://shadowfrag.com/glossary/#term-hash-chain) [hash chain](https://shadowfrag.com/glossary/#term-hash-chain). Clients also send small periodic commitments: compact fingerprints that later verification can compare with the submitted recording. Those commitments use the existing authenticated control connection. Server files are sealed with the server's identity, and verification checks that tracks belong together and reports missing participant sessions.

The server identity still needs to be trusted independently. Finding a key inside a file does not establish whose key it is. A modified client can also report something false before committing to that report. Reconstructed playback cannot prove which pixels reached a monitor or automatically reveal an external overlay.

The viewer therefore distinguishes server decisions, client reports and the presentation reconstructed from them. That gives an organizer a way to examine a disputed moment while seeing where the evidence stops.

Recording also has to coexist with play. I limited the [queues](https://shadowfrag.com/glossary/#term-queue) and moved disk writing into the background so storage trouble cannot create an unbounded gameplay stall. If the recording is incomplete, it stays visibly incomplete. The retained Linux and Windows tests passed cross-platform verification and native replay, giving me a checked path for reopening these files on either platform.

## Playback has its own controls

A retained native replay capture shows the timeline and action inspector as part of a separate playback session.

[Native SHADOWFRAG replay view with a first-person scene, timeline, action list and evidence inspector.](https://shadowfrag.com/media/development/ui-replay-original.png)

**Native replay viewer**Archive date · Oct 22, 2026

The replay scene shares the renderer, with a timeline and evidence inspector around it.

[Original PNG](https://shadowfrag.com/media/development/ui-replay-original.png)

Still-image archive dates come from retained image file timestamps in Los Angeles time. An earlier-dated article may include later builds; each image is dated separately. Images are genuine engine or native-editor output. [Download sources, transforms and SHA-256 hashes](https://shadowfrag.com/media/development/manifest.json).

[Back to blog](https://shadowfrag.com/blog/)[Browse the glossary](https://shadowfrag.com/glossary/)

## Request an _invite code._

SHADOWFRAG is opening by invitation. Request a code and receive development updates. [Shadow Council](https://shadowfrag.com/glossary/#term-shadow-council) contributors receive priority when invitations begin.

Enable JavaScript to request an invite code and confirm your email address.

Email confirmation required. Codes will be issued later; a request does not guarantee access. Unsubscribe at any time. [Privacy](https://shadowfrag.com/privacy/)

Confirm your email to join the invitation list. Codes will be issued in a future round; a request does not guarantee access. Unsubscribe at any time.

Anyone can request a code. For [Shadow Council](https://shadowfrag.com/shadow-council/) priority, introduce yourself on Discord with your role, experience, region and time zone. Include examples of your maps or content if you have them.

[Join Discord](https://discord.gg/EHj7rZDNj)
