How it works
What the phone does
when the shot goes off.
Nothing on this page is a secret. A shot timer is only worth carrying if you can tell when it is wrong, so here is the whole chain: what listens, what decides, what it gets fooled by, and what you can fix. Numbers below carry the date they were measured and the size of the sample they came from.
One shot, start to finish
1. Something loud happens
The microphone runs the whole time you are on the clock. Small chunks of audio come in continuously and get checked for a sudden jump in energy — the signature of an impulse rather than a voice or a fan.
2. The onset gets pinned to a sample
When energy jumps, the app walks back into the audio and finds the individual sample where the rise began (a Teager-Kaiser energy operator, if you want to look it up). At 44.1 kHz that is a slice of about 23 microseconds. That sample is your shot time. Everything downstream can reject the shot, but nothing downstream can move its time.
3. The classifier decides what it was
A small model, bundled in the app, listens to about a second of audio around that onset and scores how much it looks like a gunshot. It runs five times at slightly different alignments and takes the best score, because a shot that is a hair off-center in the window can score much lower than the same shot centered.
4. The score lands in one of three bands
High score: the shot is emitted. Middle score: the shot is emitted and flagged for you to look at. Low score: it is dropped. The middle band exists on purpose — on a timer, a shot that quietly disappears is worse than one you have to glance at.
5. You get the last word
Every emitted detection shows up on a waveform with its time. Keep it, drag it, add one it missed, reject one that was not a shot, or tag another shooter’s bang as not mine. Your version is what gets saved.
Why the splits are sample-accurate
Two different jobs, two different tools. Finding when a sharp sound started is cheap and exact. Deciding what that sound was is expensive and fuzzy. If you let the classifier hand you the time, your splits inherit the classifier’s fuzziness — tens of milliseconds of slop, which is real money on a Bill Drill.
So the app keeps them apart. The energy detector owns the clock. The classifier owns identity, and its only power is to accept, flag, or drop. Wrist recoil, if you wear the Watch, owns attribution and nothing else. Each signal keeps only the job it can actually do.
One consequence worth understanding: a shot pops onto the screen roughly eight tenths of a second after it happens. That is not lag in the timing — it is the app waiting for the half second of audio after the shot so the classifier has something to judge. The time that gets stored and displayed is the original onset, not the moment the row appeared.
| Stage | p50 | p95 |
|---|---|---|
| Audio arrives → energy spike found | 15.4 ms | 81.2 ms |
| Energy spike → onset pinned to a sample | 1.37 ms | 2.14 ms |
| Classifier pass (five aligned windows) | 65.9 ms | 111.8 ms |
| Audio arrives → shot appears on screen | 796.8 ms | 838.3 ms |
Dated snapshot, 2026-08-15, from production telemetry across an inventory of 495 sessions — concentrated in one shooter’s devices, firearms, and ranges. Not a population-level claim.
The hard cases: echoes and the next lane
Most of the work is not telling a gunshot from silence. It is telling a gunshot from things that look almost exactly like a gunshot.
Your own echo
Indoor bays throw the muzzle blast back at you roughly a quarter second later, loud enough to look like a second shot. The classifier cannot help here: the echo’s audio window overlaps the real shot, so it scores like a gunshot — because it is one. What separates them is the pattern. A tail arrives in a tight window after a shot you already logged, and it is markedly weaker than the shot that caused it. That rule runs after the classifier and drops the tail. Re-scored offline against the labeled corpus in the 2026-08-15 snapshot, it removed 40 false calls and cost zero real shots — one shooter’s bays, so treat it as evidence rather than a guarantee. The switch to turn it off is in Settings if you ever disagree with it.
The shooter beside you
A neighbor’s shot is a real gunshot. No acoustic model is going to call it fake, and yours will occasionally land on your timer. So the app does not pretend to solve it silently: in review you mark it Not my shot. The marker turns orange, the time is preserved, and the label is kept as evidence that this specific bang belonged to someone else. Enough of those and the difference becomes learnable. Until then, you are the one who knows.
What the wrist adds
If you wear an Apple Watch and start a Range Training Workout, the app also has the recoil impulse at your wrist. A detection the phone heard and your wrist felt has stronger evidence of being yours. One without matched recoil gets flagged for review — never deleted, because it might be a neighbor or it might be the Watch missing it. Recoil never moves a timestamp. The timer works fine with no Watch at all.
Scoring paper from a photo
Target scoring starts with the paper’s ring dimensions, then proposes shot marks for you to review. WP-1 uses the following process.
- Find the corners. The WP-1 carries four printed markers, one of them deliberately different so the app knows which way is up.
- Undo your camera angle. Those four points define a perspective mapping from your photograph back to the flat sheet. Keep all four markers visible and use a clear, evenly lit photo; an uncertain alignment needs adjustment or a retake.
- Work in inches, not pixels. After the correction, every ring, every hole, and every caliber gauge is measured in physical inches on the paper. The rings you see drawn on your photo are the actual scoring rings, projected back through that same mapping — not a circle fitted to look about right.
- Find the holes. The app subtracts what it already knows is printed there — rings, numerals, markers — then looks for what is left: the backer color showing through, and the torn paper around it.
- Calculate the ring value. The scorer uses the marked center, the target’s ring dimensions, and the selected scoring gauge. It awards the higher value when that computed gauge touches the ring. Check marks near a line and torn or overlapping holes yourself.
- Then you fix it. Add one it missed, drag one that is off, delete one that is not a hole, flag a tear that holds two rounds, declare known misses.
If the corner markers cannot be read confidently, adjust the alignment by hand or use another photo. Automatic results remain drafts until you review and confirm them.
NRA B-2 and B-3 use their printed concentric rings instead of WP-1 corner markers. The scorer can fit those rings and suggest holes for review. Both model selections share the NRA suggestions; the experimental learned verifier applies to WP-1. B-8 / B-6 and B-16 use manual alignment and marking. See the NRA scoring guide.
Speed and alignment, measured across 43 field target records in the 2026-08-15 snapshot: hole detection ran 11.71 ms at p50 and 12.31 ms at p95, and the independent check of printed-ring alignment landed within 0.031 in at p50 and 0.049 in at p95. Those are speed and registration measurements from one shooter’s targets, not a hit-detection accuracy claim — there is not yet enough reviewed placement data to make one honestly.
How your corrections help
It means three specific things, and we hold ourselves to all three.
- Every emitted detection is visible and correctable, with its waveform and its time. Nothing is quietly cleaned up behind your back.
- A machine target score is a draft. Hitting the expected round count does not make it reviewed. Saving preserves the result; explicit review confirmation records that you have checked it.
- Output nobody has reviewed is not treated as truth, by us or by the training pipeline. Unreviewed sessions sit in their own bucket until somebody labels them.
Reviewed corrections can become training and evaluation examples after admission checks. Audio examples are split by session so clips from the same recording do not appear in both training and evaluation. A candidate model is scored against held-out sessions and ships only if the evidence supports it. It does not always: in the 2026-08-15 evaluation a fresh candidate lost to the incumbent on a 53-session held-out rerun — F1 0.753 versus 0.759 at the live threshold. That result is in the record, and the older model was kept available. Your input supports this ongoing cycle of review, training, testing, and model updates.
What your review is worth
Keep your shots, remove non-shot sounds, add missed shots, and mark shots from other shooters. Confirm an empty string when appropriate. On paper, correct misplaced marks and identify uncertain overlaps. These examples help us test future models against what actually happened at the range.
Where the evidence actually stands
In the 2026-08-15 inventory, 463 of 495 sessions had been reviewed by a human or confirmed empty. Across the 35 most recent reviewed or confirmed-empty sessions — 165 accepted calls, 16 rejected or marked as another shooter’s, 3 misses added by hand — the review outcome worked out to 91.2% precision and 98.2% recall.
Read that number carefully. It comes from one shooter, a narrow set of firearms, and a small number of ranges. It says the loop works and is worth continuing. It does not predict what the app will do with your gun in your bay, and we will not present it that way.
The gaps we know about: not enough shooters, not enough firearms, not enough acoustic environments, and not enough other-shooter labels to train the ownership question properly. Every session records its app build, detector version, exact model hash, device, audio route, and gate decisions, so when those numbers do move we will be able to say which change moved them. Missing measurements stay missing; they never get written down as zeros.