Engine-state diffing
Align a buggy run against a passing reference and pinpoint the first frame they diverge, over structured state, never screenshots. That first-divergence frame is the highest-signal root-cause cue.
first-divergence frameDeterministic replay for game studios
Capture your game's inputs, RNG, and state so any reported bug replays frame for frame, on demand.
The raw stream
Every captured session lands as a signature in the stream. Scroll to fly through it, on the way to the pipeline that turns it into order.
The raw stream
Every captured session lands as a signature in the stream, on the way to the pipeline that turns it into order.
One seeded PRNG, a fixed timestep, and float-quantized state hashing capture a run so it replays bit for bit. If it happened once, it happens again, on demand.
Anomalies group by the rule they broke and the state they broke it in. Different stack traces, one root cause, one ticket.
Every ticket is severity-ranked and re-triggers inline from its trace. Triage stops being archaeology.
deprecated
One captured trace replaces the whole pile. Move the cursor through the wreckage.
triage
The analysis engine
Deterministic replay catches a bug once. The analysis layer turns it into the full picture: what diverged and when, every other bug that shares its root cause, how flaky it is, the shortest way to trigger it, whether a patch actually fixed the family, and whether it ever comes back.
Align a buggy run against a passing reference and pinpoint the first frame they diverge, over structured state, never screenshots. That first-divergence frame is the highest-signal root-cause cue.
first-divergence frameA trace encoder (signature + divergence pattern + trigger) feeds a FAISS index and HDBSCAN. Superficially different traces that share one root cause land in one family; new traces route online or flag as novel.
cluster purity 1.000Replay K times under identical seed and inputs for P(repro), then vary one axis at a time to classify the bug: deterministic, seed-sensitive, frame-timing race, or desync.
P(repro) + sensitivityDelta-debug the input down to the few steps that still reproduce the same failure signature, confirmed by the diff and repeated for flaky bugs so a needed step is never dropped.
shortest reproducing stepsOn a new build, re-run the original, its minimal repro, and a sample of the whole family. Reports fixed / still-failing / partially-fixed / new-regression as a CI-gateable check.
CI exit codeAn LLM turns a plain-language report into a structured state-pattern query; matching runs over the real indexed state, so results are grounded, with no hallucinated matches. The LLM is budget-capped.
grounded, cost-controlledEvery engine implements one adapter that emits the same structural `BugTrace`. The core never imports an engine, so the whole analysis stack runs identically on Unity, Unreal, Godot, or a real MuJoCo sim.
One adapter emits the same canonical trace, so the whole analysis stack runs identically on the engine you already ship in.
Unity, Unreal, and Godot today. Anything that can emit a BugTrace next.
A real ticket from the live dashboard: three reports merged into one, with the invariant it broke and a trace that reproduces it bit for bit. Hit re-trigger.
Open the monitorA scripted overdrive commands the elbow joint past its safe range, slamming it into the hard limit. Validated on MuJoCo: the same trace replays bit-for-bit, and the joint reaches the limit on every run.
Reports that share a root cause collapse into one severity-ranked ticket. Your morning starts with a list that is already deduplicated, not a channel full of the same crash filed five times.
Every source of randomness flows through one seeded PCG32 generator, gameplay advances on a fixed timestep, and state is quantized to a 1e-4 grid before hashing. Given the same seed and inputs, the run is a pure function of (state, input, rng), so it reproduces bit-for-bit.
Reports are clustered by the invariants they violated and the state region they fired in, weighted over stack-trace and game-state similarity. Different stack traces with the same root cause collapse into one severity-ranked ticket.
PhysX is not reproducible across runs, so we do not promise bit-for-bit replay of a Rigidbody pile. Two honest paths: drive a deterministic simulation you own (guaranteed replay), or capture inputs and checkpoint hashes over PhysX and let the harness flag nondeterminism as a desync canary. The Unity package ships both.
Yes. We validated the same guarantee on MuJoCo across three environments (a box tower, a robot arm, and a humanoid), each with a planted bug. Every run replays bit-for-bit; perturb one input by two percent and it diverges at the contact moment. The clips on this page are those real runs.
Drop in the Frame Perfect Unity package, implement IDeterministicSimulation over your gameplay, and it records the seed, PRNG state, input log, and checkpoint hashes. The moment an invariant fires it writes a re-triggerable trace and ships the anomaly to ingestion.
Capture the run once, reproduce it on command, and ship the fix with confidence. Free to start, no card required.