An open-source loot tracker for The Legend of Pirates Online. It watches the loot window, reads what dropped, and keeps the history on your own machine.
No account, no server, no connection. Install it, play, and your numbers are there — in a terminal dashboard while you play, and in a stats page you can open in a browser afterwards.
A leaderboard is planned, not present. It will be something you opt into, on top of a tracker that already works without it - not a thing you have to sign up for before you can count a chest. Nothing in this version talks to a server, and the log is already written in a form a leaderboard can accept later.
While you play, a dashboard that redraws the moment a chest is counted:
==============================================================
Plunder Tracker LOOT TRACKER v1.0.0 |
==============================================================
pirate : Jack Redsteel
monitor : watching
window : The Legend of Pirates Online [1920x1080] ui scale: 1.00x
detect : 13.8 checks/sec windows seen: 380 recorded: 379
season : Hollowed Woods active (chest names may be renamed)
last : Haunted Skull Chest
--- TOTALS --------------------------------------------------
Pouches: 157
Chests: 119
Skull Chests: 77
Kraken Chests: 27
Total containers: 380
Famed: 23
Legendary: 4
--- SINCE LAST LEGENDARY ------------------------------------
Pouches: 38
Chests: 29
Skull Chests: 30
Kraken Chests: 11
Famed drops: 6
--- AVERAGES PER DROP ---------------------------------------
per famed Pouche: 6.6 | Chests: 5.1 | Skull : 3.2 | Kraken: 1.1
per legendary Pouche: 29.8 | Chests: 22.5 | Skull : 11.8 | Kraken: 4.0
famed per legendary: 4.2
--- RECENT RARE DROPS ---------------------------------------
2026-08-25 01:29 famed Bane Curse Cutlass
2026-08-24 22:52 legendary Lost Sword of El Patron
==============================================================
[1] log famed manually [2] log legendary manually
[p] switch pirate [c] recalibrate
[r] full stats page [v] verify local log
[u] check for updates [q] quit
==============================================================
And afterwards, python run.py report writes the full picture as a page you
can open in a browser:
Sample data.
Reads item names instead of guessing at colours. The loot window is OCR'd and every name is looked up in a dictionary of 1,700+ known in-game items across every rarity. A Wax Doll is identified as a Wax Doll and a Ruby as a Ruby, so neither gets counted as something rare because it happened to be red — the false positive that plagues colour-threshold trackers.
Works on any resolution. Nothing is pinned to screen coordinates. The loot window is located by template-matching its header art at whatever scale it happens to be drawn, and every region is measured in multiples of that matched header. 800×600 windowed and 4K fullscreen both work with no configuration, and resizing mid-session re-derives the scale automatically.
Survives seasonal events. During Hollowed Woods the game renames Skull Chests to Haunted Skull Chests, and during the Winter Festival to Winter Skull Chests. The parser matches the trailing container noun and treats anything in front of it as the variant, so those resolve correctly — and so will an event that does not exist yet. The variant is recorded separately rather than discarded.
Records what actually dropped. Every famed and legendary drop is logged by name, with the loot window screenshot it came from, saved next to the log.
Counts per pirate. Most players have several, and pooling their loot makes every per-pirate figure meaningless. The tracker asks which one is playing at each launch — one keypress to confirm the last — and you can switch mid-session.
Keeps an auditable history. Events are chained by hash, so a corrupted write or an edited line is detectable rather than quietly wrong.
- Install Python 3.10+ — tick Add python.exe to PATH.
- Install Tesseract OCR:
- Windows: UB Mannheim installer
- macOS:
brew install tesseract - Linux:
sudo apt install tesseract-ocr
- Clone and run:
git clone https://github.com/plundertracker-hub/plundertracker.git
cd plundertracker/trackerDouble-click tracker.bat (Windows) or run python run.py. Dependencies
install themselves on first launch, and the first run walks you through a
three-step setup: OCR, finding the game window, and reading one real loot window
so you can see exactly what it read back.
If anything misbehaves, run doctor.bat / python run.py doctor — it checks
every part of the setup and names the one that is wrong.
python run.py # the dashboard (default)
python run.py setup # guided first-run setup
python run.py doctor # diagnose the install
python run.py calibrate # locate the loot window and report the scale
python run.py verify # re-hash the local event log end to end
python run.py stats # print stats and exit
python run.py report # write a stats page and open it
python run.py import <file> # import an old "timestamp,item" log
python run.py config # list settings
python run.py config <key> <val> # change one
1 log a famed drop by hand · 2 log a legendary · p switch pirate ·
c recalibrate · r full stats page · v verify the local log ·
u check for updates · q quit
python run.py report writes report.html next to your log and opens it. It
holds what will not fit on one terminal screen: every rare drop by name and
date, which loot window each came from, a link to its screenshot, per-pirate
comparison, and per-item totals.
It is a single self-contained file — no fonts, scripts or trackers are fetched when it opens, so it works on a machine that has never been online. Re-run the command to refresh it.
Everything stays on your machine. The tracker has no account, no telemetry and nothing to log in to, and the only request it ever makes on its own is one GitHub API call at launch to see whether there is a newer release:
python run.py config check_for_updates false # not even thatA Discord webhook, if you configure one, is yours and posts only to the channel you point it at. Proof screenshots are cropped to the loot window and never leave the folder they are written to.
Settings live in your user data directory, never in the repo, so git pull
cannot clobber them:
- Windows:
%LOCALAPPDATA%\PlunderTracker\ - Linux/macOS:
~/.local/share/plunder-tracker/
That directory holds config.json, events.jsonl (the log), state.json,
calibration.json, report.html and proofs/.
| Key | Default | Notes |
|---|---|---|
window_titles |
the game's titles | add yours if a launcher renames the window |
fallback_region |
null |
[l, t, r, b] if window detection fails |
poll_interval |
0.2 |
seconds between screen checks |
header_match_threshold |
0.62 |
lower it if the loot window is not found |
name_match_cutoff |
0.86 |
how close an OCR'd name must be to count |
tesseract_cmd |
auto | explicit path if it is installed somewhere odd |
save_proof_screenshots |
true |
keep the loot window each rare drop came from |
sound_on_rare |
true |
|
discord_webhook |
"" |
personal alerts, your own webhook |
check_for_updates |
true |
one GitHub call at launch |
Set PLUNDER_TRACKER_HOME to point the whole data directory somewhere else,
which is what you want when testing.
Most valuable contribution: missing item names. When the matcher cannot
place a name it writes it to unknown_items.jsonl in your data directory rather
than guessing. Open an issue with that file and the dictionary improves for
everyone.
The dictionary is regenerated from the Pirates Online wiki with
python tools/build_items.py.
See CONTRIBUTING.md, and docs/INTEGRITY.md for what the hash chain does and does not prove.
MIT — see LICENSE.
Item names are derived from the Pirates Online Wiki, CC-BY-SA 3.0.
Not affiliated with, endorsed by, or connected to The Legend of Pirates Online or its developers. This reads pixels from your own screen and writes to your own files; it does not modify, inject into, or automate the game.