Solving hands
megamaster has its own solver, megasolver, and ships with a library of pre-solved spots; the Solve tab builds, solves and browses trees with it, and the Lines map, Preflop view and Train all read from the library. You do not need PioSolver. If you own it, the integration below still works and is switched on from Settings — everything on this page describes that optional path.
Optional: your own PioSolver
From any hand in the replayer, one click sets up and solves the exact postflop spot that hand reached — the real positions, effective stack, preflop sizing, and board — in your own local PioSolver install. This is the first piece of megamaster's "solver-aware" half: the tracker tells you what happened, the solver tells you what should have.
Nothing here runs in the cloud or touches a server megamaster controls. It launches
PioSOLVER2-edge.exe as a local subprocess and talks to it over its own scripting protocol
(UPI) — the exact same solver you'd use by hand, just driven for you.
What you get
Click Solve in PioSolver in the replayer's header. While it runs, the panel shows which stage it's on (loading the tree, solving, reconstructing the node); when it's done, you get:
- Root EV for both OOP and IP, straight from the solver's own summary.
- Which node in the tree the hand's real action actually reached — matched action by action (check/call, bet/raise sized to the nearest chip amount the tree offers, and the real dealt turn/river card), not just the root.
- An Open in PioSolver → button that launches PioSolver's own tree viewer on the finished solve — for the full per-hand-combo strategy and EV breakdown, not a from-scratch browser rebuilt inside megamaster.
Why it can take a while
A real solve isn't instant, and single-raised pots in particular carry much larger ranges (and much slower iterations) than a 3bet or 4bet pot does. Each spot type gets its own time budget, configurable via environment variables if the defaults don't fit your machine:
- Limped / single-raised pots: up to 20 minutes
- 3bet pots: up to 5 minutes
- 4bet+ pots: up to 1 minute
Every solve runs on one shared, warm PioSolver process — never more than one at a time — so a solve requested while another is already running just waits its turn rather than piling up multiple trees in memory at once.
Why some hands can't be solved yet
A spot can only be solved against a template: a pre-built PioSolver tree for a specific position matchup, preflop sizing, and stack depth. Not every combination has one yet — when a hand's spot has no matching template, the panel says so directly (which position matchup is missing) rather than a generic error.
Even with a template, node reconstruction snaps to the nearest option the tree actually offers, not an exact one — a 51%-pot bet might land on the tree's 50% option, and a real hand's line can run further than a specific line of the tree was built out to (some lines are deliberately short-circuited straight to a showdown-EV node to keep the tree a manageable size). When that happens, the panel says the match is approximate rather than presenting it as exact.
Adding a new template
Templates live in data/solver/trees/, one plain UPI script per file, named
{spot_type}_{oop}_{ip}_{sizing}_{depth}bb.txt — e.g. srp_bb_btn_2.5x_100bb.txt for
a single-raised pot, BB out of position to BTN, a 2.5x open, 100bb effective. To add coverage for a spot
that's missing:
- Build the tree in PioSolver's own GUI tree-building panel — ranges, board, pot, effective stack, and every street's bet/raise sizing, the same way you always would.
- Export it as a TreeBuilding script.
- Drop the file in
data/solver/trees/, named following the convention above.
That's it — the next hand matching that spot signature picks it up automatically. Board is the only thing megamaster ever changes per hand; everything else about the spot comes from the template exactly as you built it.
Aggregated reports & GTO baselines
Beyond one-hand solves, megamaster can import PioViewer aggregated reports — the per-flop CSV a report run writes to disk — and show their GTO action frequencies directly beside your own stats in the decision-node explorer, conditioned on a board-texture bucket.
That conditioning is the point. Your overall cbet frequency vs an overall GTO cbet frequency is close to a meaningless comparison — solver strategy varies enormously by board texture, and the averages can agree while every underlying texture disagrees. Comparing your frequency on low paired boards against the GTO frequency on those same boards is where real leaks show up.
- Run an aggregated report in PioViewer as you normally would (over a flop subset or a full 1,755-flop sim set) at the decision node you care about — e.g. the flop c-bet node of a BTN vs BB single-raised pot.
- On the Data tab's Import section, point Solver reports at the report folder and preview it.
- Tell megamaster which decision the report baselines (pot type, positions, the line leading to the node) and how the report's bet sizes map onto the app's own size buckets — it proposes a mapping from the pot size you enter; you confirm or override it.
- In the Lines tab, pick (or create) a texture bucket and load. Hero's frequencies are filtered to that bucket, and an amber GTO column appears beside them — both sides sliced by the same bucket. Actions GTO takes that you never took show up as explicit 0% rows, not blanks.
A report run over a 25-flop subset might cover your bucket with only two or three flops. The baseline caption always says how many report flops the bucket matched and what share of the report's weight they carry, so a thin comparison is visibly thin rather than silently authoritative. Baseline math follows PioViewer's own aggregation exactly (matchups-weighted averaging — verified against real reports).