Make every minute count.
Track your training. Compare Rates. Find the optimal training spots
Before the adventure
- 1 Set up
- 2 Train
- 3 Review
Use items & costs
Correct item identities or prices for this recording. Counts and timestamps stay the same. Add new items before starting the next run.
Supplies & prices
Correct the recovery items and unit prices used for this recording. Corrections recalculate its potion costs; your recorded quantities and times stay the same.
Pause for a break, log an optional checkpoint, or click Done when you finish.
Your grind, live
EXP pace · between snapshots
Net mesos pace · between snapshots
Tracked items & reading details
How to read these estimates
Headline rates are session averages. Level % per hour divides EXP/hour by the full EXP requirement of your current level, and updates after a level-up. The graphs show the hourly rate between valid, confirmed snapshots, using active time and excluding breaks. Pending or rejected OCR readings are not plotted; a new capture waits for validation by the next reading. Rates start at 0 until the first full active minute. Missing balances, potion counts or ETC totals use their own last validated rate, or hold the last value until a rate is known. Estimated financial segments are dotted and labeled; their age is shown on the meso card. Forecasts use active capture times and never become confirmed readings. Readable values reconcile the estimate, and the next complete financial point measures the actual interval since the last complete one. Stream overlays use averages from validated captures with the same financial fallback; final review uses actual counts. Short intervals and rounded EXP percentages can make the graph jump. Potion drain and time remaining use average consumption over active training time, including confirmed restocks. No use recorded means there is not yet a depletion estimate.
Your first usable capture starts the graphs. Keep the HUD and potion counts visible; mesos is optional.
10 active minutes have passed since your last checkpoint. Log one to compare your pace.
Automatic progress
One screen snapshot every 30 seconds
Capture setup & diagnostics
Choose Entire screen. First snapshot now, then about every 30 seconds while training. Keep the inventory balance open for mesos; EXP tracking continues if it is hidden or a potion count is unreadable. If a balance, supply count or ETC total is unreadable, live net mesos uses the last validated rate or value and labels the estimate. Final counts still need review. EXP uses your validated starting level and HUD percentage; level OCR runs during review, not every sample. A 99% → 0–5% transition or an exact 100% reading suggests a level-up, confirmed by the next usable capture. Other percentage drops require a manual level checkpoint. Two-decimal percentages limit EXP precision. Check your read regions using a full-screen screenshot; keep the game and HUD visible in the same position. Screenshots stay on this device and are discarded after reading.
A sample waits for the next usable reading before becoming a checkpoint. Uncertain readings, spikes and dips are held or skipped. For real restocks, spending or EXP loss, save a manual checkpoint to reset the baseline. Reviewed ETC inventory tracking runs alongside these samples when enabled. Browser throttling or sleep can delay snapshots; missed captures are not replayed.
Off. Start a session with a starting level to enable this mode.
Automatic sample log Latest 30 readings · values only
Log a checkpoint Optional pace update
Session complete. A little progress, all accounted for.
Discard this session and its values?
Browser storage is unavailable. Keep this tab open to retain this session.
Stream overlayShare your live rates in OBS
Stream from the regular website with a small overlay window. No download or account needed; your stats stay in this browser.
Open grindjournal.com to use the browser overlay, or use the optional helper below.
Open the overlay in this browser, then share your run. Only validated captures appear; meso averages can include estimates. Keep both windows open and leave the overlay window unminimized.
Open this link in the same browser profile as the tracker. In OBS use Window Capture, rather than pasting it into a Browser Source.
Reset stats waits for fresh validated readings for each metric. Your full recording and OBS link stay the same.
Invalidate the current OBS link? You will need to replace it in OBS.
OBS setup · no download
- Click Open stream overlay and allow the pop-up if prompted. Enable Share this run after starting your recording.
- In OBS add Window Capture and select the Grind Journal overlay window. Crop out the browser toolbar and borders (hold Alt while dragging the source edges on Windows).
- Add a Chroma Key filter to that source and choose Magenta to remove the background. The stats panel stays solid for a clean edge.
- Leave the pop-out open and unminimized. Resize it for your chosen layout, and keep the tracker tab open. Share each new run separately.
Updates stay in this browser profile using local browser messaging/storage. A link opened inside OBS, another browser or a different profile cannot access these stats. Browser suspension can delay updates; the overlay marks stale or disconnected readings. Hide clears the widget; Reset stats starts its totals and graph over without changing your full recording.
OBS Browser Source setup & local privacy
- Create the overlay, enable Share this run, then copy the link.
- In OBS, add a Browser Source. Paste the URL with Local file turned off.
- Use the dimensions above. The page background is transparent. Position it over your game.
Run OBS and the helper on the same computer. A stopped helper or closed publisher shows Disconnected after 90 seconds. Snapshot data expires after 24 hours without publishing; credentials expire after 30 days. Local helper state is stored under .grindjournal-overlay in your home folder; browser history and screenshots are not sent to it. A different browser profile needs a new link.
Optional: direct OBS Browser Source URL
Prefer pasting a URL into OBS? The local helper connects its tracker to OBS on the same computer. This is optional; the browser pop-out above needs no installation.
Download local streaming helper Preview ↗Unzip, install Node.js 24 LTS once if needed, then open Start-Grind-Journal.cmd on Windows (or run node local-overlay/server.cjs). Start your streaming run on the helper’s localhost page. Website and localhost history are separate; transfer history with Back up JSON and Restore JSON.
Your session review
The session, in numbers
Your results will be waiting at the finish line.
| PACE | EXP | NET MESOS |
|---|---|---|
| Per hour 60 MIN | — | — |
| Per 10 minutes | — | — |
| Per minute | — | — |
Rates use active time and are rounded to 2 decimal places.
A little more insight
↗Insights from your completed session.
Runway assumes your observed consumption continues. Cost share uses positive meso balance change; it can exceed 100%.
Add starting and ending levels to estimate leveling time.
| ACTIVE TIME | EXP | NET MESOS |
|---|---|---|
| Next 30 minutes | — | — |
| Next 60 minutes | — | — |
Find your rhythm
Your recorded checkpoints show how your pace changed during the session.
| ACTIVE INTERVAL | EXP / H | NET / H |
|---|
A note on the math +
Original net mesos = (ending mesos − starting mesos) − (HP used × HP cost) − (MP used × MP cost).
Every rate uses active time, excluding paused breaks and ending-value entry. Negative gains and losses are preserved. Add starting and ending levels for automatic level-up EXP, using the MeowDB Classic table through level 100.
Adjusted cash adds uncounted income and subtracts uncounted expenses. Estimated total additionally includes unsold loot. Keep anything already included in the balance out of the ledger.
Use one distinct supply per slot. Count mixed HP/MP potions in one slot only. Map comparisons are time-weighted averages of your filtered history; party size, buffs, and gear are not normalized.
Every run has a story.
Completed sessions save here automatically. Editing ending values updates the same record. Backups stay with you; history is stored in this browser. Restore JSON replaces all saved history with the selected backup. Back up your current history first if you want to keep it.
| MAP / DATE | CLASS / LEVEL | ACTIVE TIME | EXP / H | NET / H | DETAILS |
|---|
Compare your training spots.
Uses the history filters above. Each map's rate is total gain divided by total active time. Compare similar levels and training conditions.
| TRAINING MAP | RUNS / TIME | EXP / H | MESOS / H |
|---|
Buy low. Set your price.
Record each purchase now and keep a ready-to-list shop sheet for later.
Shop list 0 items
Active purchases stay in this browser. Prices and quantities remain editable.
Your finds will appear here as you add them.
Sold archive 0 sales
Saved with the target price and shop fee in effect when marked sold. Profit here is an estimate unless your sale matched that target.
Estimated profit = planned sale proceeds − store fee − purchase cost. Fee is calculated on each entry’s total planned sale and rounded to the nearest meso; actual game rounding may differ. The 3% store fee comes from MeowDB ↗. Item names and icons are a local snapshot of its Classic item database ↗. No player market price is inferred.