How Lotus Vault works
A scanner that runs in your browser
Photos never leave your device, and there's no embedded AI model. Recognition happens in three steps:
OpenCV.js detects the card in the frame and straightens it out.
A 256-bit perceptual hash (pHash) is computed from the straightened card.
The fingerprint is compared by Hamming distance against a locally cached base of about 100,000 printings, downloaded once. Filtering by set makes the match sharper.
The base covers printings, not just cards, so the scanner tells editions apart. Acceptance thresholds are validated against test sets before every base update. The scanner tolerates odd angles, glare and uneven light, but the card still has to be visible and legible. Tip: filtering to one or two sets when you're scanning cards from the same edition pushes accuracy close to 100%.
Collection and prices
Card data and prices come from Scryfall. The collection is tracked by printing (set, number, foil or not), not just by card name. That's what makes for a fairly precise valuation, though it's still an estimate: prices move with the market and the cards' condition. When the euro price isn't available, the dollar price is converted at the day's exchange rate.
100% solo, and the Forge engine
The "solo" playtester runs on a small, homemade rules engine written in TypeScript, and lets you play a "manual" game and stream it via OBS in one click. The second playtester uses Forge (opens in a new tab), an open-source rules engine that knows the cards and enforces almost the whole rulebook: the stack, triggers, replacement effects, states, combat. Your decklist is sent to the engine, which seats you at a table against bots. The bots' decks are precons picked at random.
Forge is an independent open-source project, built by the community and unaffiliated with Lotus Vault: github.com/Card-Forge/forge (opens in a new tab)
- →The bots actually play: they block, respond, and can win if you let them.
- →The engine tracks everything — mana, damage, triggers — but even though the Forge engine comes very close to the real game, it isn't perfect: some interactions are missing or poorly implemented.
What the numbers mean
Only one thing here is an exact calculation: opening-hand probabilities. Power level, bracket and salt all rest on thresholds I picked arbitrarily. Below, I explain those choices and the rules that come from other sources (EDHREC, Wizards of the Coast). The goal is to make the maths transparent and show what the numbers actually mean.
Opening hand
The odds of keeping your hand, of being mana-screwed or mana-flooded, are real calculated probabilities. A hand counts as keepable with 2 to 5 lands — the calculation only judges the number of lands, not the quality of the spells. The odds of hitting a land drop on turns 2, 3 and 4 assume an acceptable hand, no mulligan and no cantrips. They answer 'have I drawn enough lands?', nothing more.
Mana sources
For each colour, I check whether the number of your sources matches the spread of your mana costs (your pips). I leave a 15% tolerance margin before raising the alarm. That's deliberately generous, especially since I count your mana rocks and mana dorks as sources in their own right. The idea is a radar that flags a manabase that's completely broken, and to leave the hypergeometric probability maths to Frank Karsten!
Power level
The score out of 10 is calculated from eight criteria. The three that matter most are combos, interaction and card draw; next come the mana curve, fast mana, tutors and Game Changers; salt barely weighs anything. Tutors boost the combo score, because a deck that fetches its combo pieces simply has them more often.
The consequence is deliberate: with no combo and no Game Changer, a deck tops out at 7/10. That's not a gap in the model. In practice a "normal" deck reads between 3.5 and 7, and the top of the scale is reserved for combo decks. The scale was calibrated by degrading a real decklist step by step, from an optimised build down to jank — not against a reference corpus.
Bracket
Wizards' own criteria are used as-is: no more than 3 Game Changers, no mass land destruction, no early two-card combo, to stay in bracket 3. I add two house caps of my own — tutors and extra turns — and, above all, the line between 2 and 3, which the official rules don't actually draw: they say what a deck must not play, not how sharp it is. So I look at five tuning signals — a low curve, dense interaction, heavy card draw, high salt, acceleration — and it takes three of the five to move up to bracket 3. Without that test, every "clean" deck would fall back to bracket 2, and a precon would be indistinguishable from a deck built to beat it. Imported precons are analysed exactly as they're built, for what it's worth, and can land in bracket 3 too.
The + or the − marks where you sit within the bracket, and a deck that maxes out its whole tier budget gets promoted to the next tier with a "−". If Commander Spellbook ranks your deck higher than my calculation does, it wins: it knows combo speed better than I do.
Salt and the deck plan
Salt comes from EDHREC's votes ("how much does this card ruin the fun"). It's the deck total that matters, not the average: the average gets diluted by the roughly 60 neutral cards — little or no salt — that every deck plays.
The builder's Plan proposes quotas by role. The "balanced" line — 37 lands, 10 ramp, 10 draw, 8 removal, 3 wraths — takes the median values that deckbuilding guides agree on. The other archetypes aren't sourced from anywhere: they're that same baseline nudged toward the archetype. Treat it as a starting point, not a truth. You can also generate the plan from your commander's EDHREC decks — there, the proportions come from real lists.
Questions & answers
Is it free?
Yes, entirely, and nothing is held back for paying users. Lotus Vault is a hobby project running on servers I pay for myself; if you'd like to help cover the hosting, you can buy me a coffee.
Which formats are supported?
Lotus Vault is built for Commander (EDH): 100 cards, 1 commander, singleton. Legality is only checked for that format. Other formats might show up later.
Can I import my existing decks?
Yes — paste a raw decklist or import from a Moxfield/Archidekt URL. Text and CSV export work the other way round.
Are the playtester's bots any good?
They play properly: they block, respond and build up threats. It's not tournament level, but it's enough to spot a deck's weaknesses.
Where do the prices come from?
From the Scryfall catalogue, per printing (set, number, foil). Your collection's valuation follows those prices; it's only an estimate.