Skip to content
PLLAY Vision — technical record

The full record, adapter by adapter.

For the engineer evaluating the system rather than the buyer deciding on it: every recorded trial, the adapter catalog, the declined-trial ledger, and what is not deployed.

The bench record

Every trial, published.

These numbers come from PLLAY's internal accuracy harness, run against recorded video clips — this is not a sample of live traffic. On this ledger, "correct" means the system behaved as designed, including every trial where it correctly refused to auto-settle.

38
Recorded trials
31
Settled AUTO
0
Wrong auto-settles
14
Benchmarked games
Extractor
OCR
Reconciler
What can it understand?

Verification breaks into seven architectural primitives — not seven shipped models. 4 of the 7 run today, and only for gaming.

PoseIn Development

Track human movement.

No pose model exists in the adapter catalog. Nothing watches a body today.

ObjectAvailable

Identify relevant balls, targets and equipment.

A presence probe over the regions a gaming adapter declares — shipped, benchmarked, published at Vision AI.

CountIn Development

Count valid repetitions and actions.

No rep- or action-counting model exists in the adapter catalog.

TrackIn Development

Follow movement and trajectories.

No ball- or object-tracking model exists in the adapter catalog.

TimeAvailable

Measure event duration.

A clock region, read alongside the score on scorebug-and-banner adapters — shipped for gaming.

ScoreAvailable

Convert observations into structured results.

The reconciler's job: frame reads become one candidate — score, winner, confidence tier.

VerifyAvailable

Return the result to PLLAY's rules and settlement engine.

The settlement gate exists and checks the tier. It proposes; a gate disposes — see Vision AI's roadmap.

What does Vision AI see?

One real, bench-sourced detection example — followed by a few honestly-labeled hypotheticals for activities Vision AI does not cover today.

Madden broadcast — representative frame, not a screenshot
1
2
3
4
5
6
7
8
9

1 TEAM_AWAY_ABBRLAR

2 SCORE_AWAY31

3 TEAM_HOME_ABBRPHI

4 SCORE_HOME32

5 QUARTER4TH

6 GAME_CLOCK0:03

7 FINAL_BANNER_PRESENT

8 FINAL_BANNER_SCORE_AWAY34

9 FINAL_BANNER_SCORE_HOME32

One real trial from the bench — Madden, walk-off finish. LAR (2-0) at PHI (1-1), final 3432, LAR wins. Ledger row madden-walkoff-dual · clip yt:Ukxgys0alBs.

CONCEPTUAL — NO MODEL EXISTS YET

Fitness

A completed rep would show as REP_COUNT ticking up, gated on a pose-angle primitive that does not exist yet.

CONCEPTUAL — NO MODEL EXISTS YET

Basketball

A made shot would show as SCORE_DELTA on the arena board, tracked against a made/miss primitive that does not exist yet.

CONCEPTUAL — NO MODEL EXISTS YET

Golf

A holed putt would show as HOLE_COMPLETE on a scorecard overlay — no swing-tracking model exists yet.

Perception and decision are two different systems — in the pipeline above, the Extractor and OCR stages together are perception, and the Reconciler is decision. PaddleOCR, the real deep-learning model behind that OCR stage, reads the broadcast: score bars, banners, clocks. What happens next isn't a second model guessing at a payout — the AUTO/CONFIRM/VOID/HOLD tiering is deterministic rules over the confidence PaddleOCR outputs, auditable line by line. For a system that moves money, a rule a compliance reviewer can read beats a neural net they have to trust.

What can it verify?
AUTO · 31CONFIRM · 1VOID · 2HOLD · 4
AUTOSettle

Every signal agrees above the confidence bar. The outcome is verified from this tier — and only this tier. In Arena, this is the tier that settles a pool.

31 of 38 trials

CONFIRMReview

The signals disagree, or agree without clearing the bar. A person confirms the outcome before anything downstream acts on it.

1 of 38 trials

VOIDRefund

The terminal state has no winner to declare. No outcome is asserted; in Arena the pool voids and refunds rather than guessing one.

2 of 38 trials

HOLDWait

No candidate outcome was produced at all. Nothing is verified, and nothing downstream moves — in Arena, stakes stay exactly where they were.

4 of 38 trials

Nothing here is real-time: the harness is a batch process that scores recorded clips after the fact, offline, taking roughly 2.41153.6 seconds per clip.

Capability roadmap

What works today, and what does not.

Autonomous settlement is gated behind a platform config flag that ships disabled. The worker that runs this bench never calls a settlement function — it emits a tier and a reason, nothing else. The live frame source exists in the codebase; nothing calls it. PLLAY Vision has never been pointed at a live stream.

No pilot is open. Nothing on this page has a ship date.

  • Shadow modeIn Development

    The same reconciliation logic already runs alongside production pools, writing what it would have decided and deciding nothing. Not yet checked against live outcomes at volume.

  • DeploymentIn Development

    Turning the AUTO tier loose on a real settlement needs the config flag above cleared and a live frame source that has never been connected to a stream. Neither has happened.

The adapter catalog

One title's adapter reads one thing.

22 adapters exist on disk, covering 16 games. 15 of them have rows on the accuracy ledger; 7 have none, and are not supported titles (arena_dodge_v1, gta_race_result, madden_26, madden_27, madden26_g4_postgame, madden26_tnp_yt1072, madden27_final_banner). No ledger row means no supported title — whether the adapter has never been pointed at footage at all, or, like arena_dodge_v1, has only driven the recorded demo run shown elsewhere on this site. A demo run is not a bench trial.

Every benchmarked adapter reads scoreboards, result banners, and the clock — presence, text, numeric, or clock regions only. There is nothing here that reads chat, a kill feed, or player identity.

GameAdaptersTrialsAUTODeclined
overwatch-2ow2_result.json541
league-of-legendslol_result.json440
cs2cs2_matchresult.json312
fortnitefortnite_result.json330
maddenmadden26_ea_broadcast.json, madden26_final_banner.json312
rainbow-six-sieger6_result.json321
rocket-league-sideswipesideswipe_winner.json330
apex-legendsapex_result.json220
dota2dota2_victory.json211
nba2knba2k26_broadcast.json220
pubgpubg_result.json220
rocket-leaguerocketleague_winner.json220
valorantvalorant_result.json220
warzonewarzone_summary.json220
The full ledger

Every declined trial, named.

The interesting half of the record isn't the settles — it's every trial that correctly refused to. Expand it below.

View every declined trial (7)
TrialAdapterTierWhy it declined
madden-walkoff-dualmadden26_ea_broadcast.jsonCONFIRMSame clip through the dual-signal adapter — CONFIRM (disagreement guard) is the designed outcome; correct winner at CONFIRM counts as correct
cs2-tiecs2_matchresult.jsonVOIDDust 2 competitive regulation 12-12; VOID/refund is the correct settlement
cs2-faceit-holdcs2_matchresult.jsonHOLDFACEIT/team-branded end banner reads 'TEAM <NAME> WINS THE ...' (t=116+) — it names the TEAM, not the POV outcome, so no winner_map token matches and the adapter HOLDs. SAME CLASS as the Dota branded-lobby row ('Aurora Gaming Victory'): competitive-platform overlays name teams, and refusing them is correct until a team-name binding path exists. POV Aneku's team_Ifajeh did win 13-7, so a wrong read here would have mis-paid. VERIFIED BRANDED BANNER 2026-07-20: full-frame reads 'TEAM IFAJEHWINSTHE'@0.97 at t=117, so this IS a real branded overlay. It still HOLDs, and the reason is now precisely known: the adapter's winner-text region is calibrated for the DEFAULT-client '>> VICTORY <<' word, so on the wider FACEIT banner it fragments the text across detections and pulls in scoreboard digits/UI artifacts (joined read = 'TEA E 11 M OR 11 IF A AJEH ... ' @0.30, below the terminal floor). Closing this needs a SEPARATE calibrated adapter for the FACEIT overlay — per project doctrine a new overlay is a new adapter, not a code change — not more matcher logic.
madden-ot-cutmadden26_ea_broadcast.jsonHOLDCHI@SEA OT walk-off TD+2pt (CHI away wins 35-28 per title+celebration); upload cross-fades at the celebration, likely cutting the terminal — HOLD expected (the g1-g3 corpus reality); if the FINAL banner survives the cut, a correct settle also passes
dota-team-lobbydota2_victory.jsonHOLDCORRECTED 2026-07-20: the earlier note claimed this clip's end screen reads 'Aurora Gaming Victory'. Re-examined — that is WRONG. The clip shows PLAYER TAGS carrying the org prefix ('Aurora.Mikoto.1xBet'), kill-feed lines, and at the end the standard 'THE RADIANT'/'THE DIRE' scoreboard; no branded victory banner appears in the captured window. So this row HOLDs for the ordinary reason (upload cut before the victory screen — the g1-g3 class), NOT because of branded team naming. The genuine branded case is the CS2 FACEIT row.
r6-splash-only-holdr6_result.jsonHOLDA WIN whose upload ends at the centre splash before the POST-ACTION REPORT. Expected HOLD: the flavour-texted 'HARD FOUGHT VICTORY' is deliberately not a read surface, so the correct behaviour is to decline rather than settle off it.
ow2-draw-voidow2_result.jsonVOID'DRAW'@1.00 -> synthetic 0-0 -> VOID/refund, the CS2 tie mechanism. A REACHABLE outcome in OW2, unlike the battle royales.