Short answer: drop a tape shard below — its manifest, state ticks and control rows stay on your device, appear as tables you can read, and the page re-hashes the replay hash so you can check the shard before trusting it. 100% in your browser. No upload, no signup.
Free tool 2026-10-04 (free-tools lane, FT-02, free magnet of the Gameplay Data Kit). Linked from the hub tool list. No analytics (Cloudflare token is an open blocker). No ranking promises. No testimonials. Traffic UNKNOWN.
Drop a shard here — sample.json + state.jsonl + the two control CSVs or press to choose the files (nothing leaves this device)
Waiting. Drop a shard's 4 files — or “Use demo shard” for the instant example. Nothing leaves this device.
Shard
Nothing loaded yet.
State table
No state ticks loaded. Each row is one 20 Hz tick: position, HP, enemies alive, score.
Action table
No control rows loaded. Each row is one tick's raw + normalized action (dx, dy, action).
Path trace
Player (x, y) path appears here once a shard loads.
Replay hash
No hash computed yet. The re-hash runs the VERIFY.py recipe (SHA-256 over manifest + state + controls) on this page.
Recipe: sha256 of sample_id + scenario + seed lines, then every state tick as tick,player_x,player_y,player_hp,enemies,score, every raw row as R:tick,dx,dy,action, every normalized row as N:... — byte-identical to VERIFY.py compute_replay_hash. Numbers keep their file spelling (160.0 stays 160.0) so the hash matches.
How to use
Drop a shard's 4 files (sample.json, state.jsonl, raw + normalized control CSVs) — or press “Use demo shard”.
Read the state table (position, HP, enemies, score per tick) and the action table (dx, dy, action per tick).
Check the replay hash: MATCH means the shard re-hashes exactly; MISMATCH names the first difference.
Download the receipt (TXT/JSON) — then get full 10-sample shards from the free Gameplay Data Kit below.
FAQ
Does the viewer upload my shard?
No. Files are read by this page's own script into tab memory and never sent anywhere. Open the network panel while dropping a shard — zero uploads, zero third-party requests, zero key needed.
What is the replay hash it re-computes?
SHA-256 over sample_id + scenario + seed, then every state tick and every raw (R:) and normalized (N:) control row — the same recipe as VERIFY.py in the Gameplay Data Kit. MATCH means the shard verifies exactly as the kit's own verifier would say.
Which files make a shard?
A sample.json manifest plus its state.jsonl state ticks and the two control CSVs (raw + normalized). Each sample folder of the free Gameplay Data Kit holds exactly these four files (plus its PNG frames, which this viewer does not need).
Where do full shards come from?
From the free Gameplay Data Kit (stub-v1, $0): 10 honestly labeled stub samples with manifests, state dictionaries and a stdlib VERIFY.py. Grab any sample folder's 4 files and drop them here. Real engine tapes arrive later — every sample today is labeled STUB, including the demo on this page.