Homerun Catcher

Picks a real game, pulls the lineup and the weather, and runs a Monte Carlo of where the home runs would land. Everything below happens in this tab — the schedule, the forecast and the physics. Nothing about what you look at reaches a server of mine, because there isn't one.

Landing map

less → more likely ◯ mode-local radius — half the densest cluster, not the whole field 0° is dead centre; left field is negative.

Conditions and inputs

  • Run a simulation to see what drove it.

Lineup used

Where it says to sit

  1. No simulation yet.

Spread

Does this actually work? The seat is park history. The spray is two lobes.

Re-scored on 4,997 real home runs in 1,910 completed regular-season games at all 30 parks, 25 March through 10 September 2026. Same games, two models. No peeking at the day’s contact.

Picking the right sectiontop‑1top‑3
This page (park history + two-lobe spray)23.2%51.2%
The August model (everyone a righty)21.1%48.0%
Monte Carlo only (bimodal, no park table)18.3%48.2%
How big those shipped sections just are15.2%39.3%
Batter handedness, and nothing else17.4%61.4%

Two-lobe spray made the angles better: mean error 26.6° → 17.3°, and the predicted lefty-minus-righty split went from 0.49° to 46.6° against a real 39.2° (the point estimate is the pull peak, so it overshoots a little). It did not make the Monte Carlo’s single section better — that is still 18.3%, a mixed lineup’s two lobes smeared into one pick. So the one-seat recommendation this page ships is the park table. That is why the first row matches “where they landed here before,” and why it now beats its own area share (23.2% vs 15.2%) instead of tying it.

What went wrong

A missing hydrate=person(batSide) on the roster endpoint labelled 11,065 of 11,069 cached batters right-handed. The confirmed-lineup boxscore had the same hole. The live feed used to score games never puts batSide on person at all — only the play-by-play matchup does. And even with a correct label, the Monte Carlo drew the empirical chart and ignored the bit, so lefties and righties were separated by −0.35° where real home runs separate them by 40.3°. It could not tell which way anyone pulls.

What we fixed

The roster and boxscore requests now ask for handedness. Historical scoring reads it from the play-by-play when the boxscore person is bare. The spray is a two-lobe mixture (pull + opposite field), not a unimodal chart slid onto one mean. The one-seat recommendation is the prospective park table — where balls have already landed here. The next two seats are the pull sides: left field for right-handed power, right field for left-handed power. The live loop now keeps scoring through six hours after first pitch, so late innings are no longer dropped.

Why it might work next season

The prior and the park table are available on opening day, when most charts are thin. This page already recommends both pull sides and the boring park-history seat. What this season proved is that a two-lobe spray is the right shape and still a bad one-section pick. The physics is no longer the thing pretending lefties pull left.

What would still make it better

The two-lobe spray, the climatology one-seat pick, the late-inning capture, and calling the radius mode-local instead of cep50 are in this build. Still open: per-batter spray when the chart is thick enough to trust over the lobe prior, and the metric a person actually buys — probability per seat, per real game, not per recorded home run. Scoring keeps reporting area share, park history, and handedness. It does not treat “uniform over sections” as the thing to beat.

The August 35-day measurement, and caveats on this one

The first public table was 879 home runs over 35 days. That sample was about 87% complete, captured nothing beyond 180 minutes from first pitch, and 96% of its section ranks were self-reported. It said the model hit top-1 / top-3 at 14.4% / 44.6% and lost to area share, park history, and handedness. The cause above is from that writeup. This season’s table is a fresh, independent score of finished games — not a continuation of those 879 rows.

Handedness-only is scored given the batter who already hit the ball. A fan choosing a seat before first pitch cannot use that; it is a test of whether the model used the hand bit, not a seating strategy. Park climatology is a real pregame rule (only earlier games at that park). Weather was held identical across the two model arms so the comparison is about pull side, not aero.

What this is

A browser build of a local tool that runs on one Mac. It ships 30 park geometries, 306 seating polygons and 452 batter profiles; the schedule, the lineup and the forecast are fetched live from MLB Stats and Open‑Meteo by your browser, directly.

The physics is checked against the Python it was ported from on 106,314 comparisons with no tolerance band — every density cell, not a sample.