Your hand
Board
preflop
Deck
choose a slot aboveOpponents
A range narrows the answer. "any" is honest when you know nothing — it is also the most optimistic number you will see, because random hands are weak.
What they did this hand
the range above is the priorEach action moves their range by Bayes. A bet pushes mass to both ends — strong hands and air — because that is what betting actually means; a check drains both ends and leaves the middle.
Opponent reads
The bet you are facing
Rake comes off every pot you win, which raises the equity a call needs — a marginal call can flip to a fold. Folded players bias the remaining deck high (measured: ±3pp in full ring); setting a count corrects for it, assuming they folded everything outside the top 40%, and forces Monte Carlo.
Import hand history
PokerStars text formatShowdowns are the unlock: seeing their actual cards lets the bluff share be fitted instead of assumed, which is the single largest error source in this tool. Assign a fitted player to an opponent slot and their measured record replaces your guesses.
Read the table off the screen
Share a window, a screen, or play a recording full-screen and share that. Nothing is installed, nothing is injected, nothing leaves this page — it is pixels in, cards out. Draw a box over each card position once, teach it the deck once, and it reads every frame after that.
Regions
Pick a slot, then drag a box around just the rank and suit in the card's corner — not the whole card. Tight boxes read far better than loose ones.
Teach the deck
For each region it can see, type what the card actually is (e.g. Ah). Thirteen ranks and four suits is the whole job — usually two or three hands of a recording. Templates are stored in this browser only.
Live read
A read has to repeat on two consecutive frames before it is pushed to the calculator, and anything under the confidence floor is shown as ? rather than guessed.
Session recorder
0 hands recordedHands-free once reading is on: every stable read recomputes the calculator; a rise in the to-call region is logged as opponent #1 betting (pot before the bet is taken as pot − bet, since most tables show the pot including it); a change of hero cards closes the hand into the log with the tool's final numbers. Nothing leaves this browser — the CSV columns match the test spreadsheet, paste them straight in.
What this computes, and how far to trust it
The evaluator
Every seven-card hand is scored by a rank-mask evaluator at about 15 million hands per second. It was validated by enumerating all 133,784,560 seven-card combinations and comparing the count in every category against the published frequencies — all nine match exactly. It was then cross-checked against a deliberately naive best-five-of-seven evaluator, written separately, over 40,000 random head-to-heads: zero disagreements.
Equity
Whenever exact enumeration is affordable it is used and the answer is exact. Otherwise Monte Carlo runs, and the number is reported with its trial count and a 95% confidence interval. The two paths were checked against each other on five all-in matchups and agree within sampling error every time.
A confidence interval is not decoration. If calling is +EV at the point estimate but −EV at the bottom of the interval, this app says the decision is inside the noise instead of printing a verdict.
Who beats you
Equity answers "how often do I end up best". It does not answer "am I beaten right now", which is a different and often more useful question. That one is computed exactly — every combo in the opponent's range is enumerated against the current board, no sampling — and broken out by what they would be holding.
Inferring their range
The range you type is a prior. Each action they take updates it: P(hand | action) ∝ P(action | hand) · P(hand). Everything downstream — equity, threats, sizing — then runs on the posterior.
One property of the likelihood matters more than all its parameters: betting is U-shaped in hand strength. Strong hands bet for value, air bets as a bluff, and the medium hands in between check. So a bet pushes probability toward both ends of the range at once. A monotone likelihood — "they bet, therefore they are strong" — is the most common hand-reading error there is, and it is the one good players farm. A check does the reverse: it drains both ends and leaves the middle.
Strength is ranked per street on the board as it stood at the time, because a flop bet was a statement about a flop hand. On the river, where nothing is left to come, hand strength is enumerated exactly rather than sampled.
Each update reports its information gain in bits — the KL divergence from prior to posterior — and the effective number of hands left. An action worth 0.05 bits told you almost nothing, and the app says so instead of drawing a confident conclusion from it.
And it reports how much of the answer is the model. The inference is re-run assuming they bluff 15%, 40% and 65% of the time, and the resulting equity spread is shown. On a typical flop bet that spread runs to 15pp — wider than most edges worth chasing. That number is the honest headline: the bluff share is an assumption, not a measurement, and it is doing more work than the data is.
Reads, and why ten actions is not one
Every rate from the action log is a Beta-Binomial posterior against a weak population prior, and it is shown with its 95% credible interval. Seven folds in ten leaves that interval spanning [39%, 89%] on a flat prior — wide enough to contain a nit and a maniac at the same time. The app shows that interval rather than the point estimate, because the point estimate is the part that lies.
The model has exactly one fitted parameter, because one is all ten actions can support: delta, how far their folding sits from the size-indifferent rate B/(P+B). It is shrunk toward zero by normal-normal conjugacy, so ten observations move it about halfway and an empty log moves it not at all.
Bet sizing
EV(B) = f(B)·P + (1 − f(B))·[ e_call(B)·(P + 2B) − B ]
where f(B) = B/(P+B) + delta is how often they fold to that size, and e_call(B) is your equity against the strongest (1 − f) of their range. That second term is the tension sizing actually has: bet bigger, they fold more, and what continues is stronger. Both effects are computed, not assumed. The ranking that decides who calls uses each combo's equity to the river rather than its made-hand strength, so a flush draw is correctly placed in the calling half rather than the folding half.
Overlapping error bars are not the test. Every size is priced off the same delta, so the estimates move together and comparing their intervals proves nothing. Instead the app walks the whole plausible range of the read and asks whether the winning size ever changes. If it does, you get the list of sizes that win somewhere rather than a false decimal.
Not modelled: raises, future streets, implied odds, and the fact that real players call with a mix rather than a clean top slice. The check row assumes the hand checks down.
The preflop ordering
"Top N%" ranges use a table this app measured: every one of the 169 starting hands against one random hand, 300,000 trials each, median standard error 0.09pp. It is equity against a random hand and nothing else. It is not a claim about which hands are profitable from which seat. The named seat ranges are conventional published ranges, included for convenience and labelled as unmeasured.
A known bias: folded hands are not random
This app deals the board from a uniform deck of everything you cannot see. That is only correct if folding is independent of what people hold — and it is not. People fold weak hands, so the muck runs low and the stub the board comes from runs high.
We measured it rather than guessed. Full ring, five players folding everything outside the top 40%, two million trials: P(board contains an ace or king) rises 59.85% → 67.97%, a small pair loses 2.77pp of equity and two big cards gain 3.54pp. With folders discarding any two cards the effect vanishes to within noise, which is the control that makes the rest believable.
So in a full-ring pot where several players folded, the equity here understates big cards and overstates small pairs. Heads-up and short-handed, it barely applies. Correcting it properly means modelling the folders' ranges and removing their cards probabilistically, and that is not built yet.
What it does not know
Nothing about timing, position dynamics, stack depth beyond the numbers you type, or ICM. The one behavioural parameter it does fit aggregates over board texture, position and what they actually held — a crude summary, treated as one. Equity is not strategy. A perfectly correct equity number attached to a wrong range is a confidently wrong answer, and the range is your input.
Where the line is
Real-time assistance is banned by every real-money poker site. Screen-reading advisors are exactly what their anti-RTA teams look for, and the penalty is confiscation. This tool was built for reviewing your own recorded hands and for training away from the table. Pointing it at a live real-money table is against those sites' terms, and that is on you, not on the arithmetic.
Run the checks yourself
bun test/eval.test.mjs --full