Scan your local ebook and audiobook collection and compare it against MyAnonamouse (via Prowlarr) to see what you already have vs what might be missing.
- 📚 Supports ebooks + audiobooks
- ⚡ Multithreaded (fast scanning)
- 📊 Live progress + ETA
- 🧠 Smart matching:
- title
- author
- series
- book number
- 🔁 Resume support (skips already FOUND items)
- 💾 Caching (dramatically faster re-runs)
- 📈 Outputs CSV with:
- FOUND / PARTIAL / MISSING
- match score
- best match on MAM
- search query used
- Python 3.9+
- Prowlarr with MyAnonamouse configured
Install dependencies:
pip install requests rapidfuzz ebooklib pypdfEdit these values in the script:
BOOK_DIRS = [
("/your/ebooks", "ebook"),
("/your/audiobooks", "audiobook"),
]
PROWLARR_URL = "http://your-prowlarr:9696"
PROWLARR_API_KEY = "your_api_key"
INDEXER_IDS = [52] # your MAM indexer IDpython3 mam_checker.pyCreates:
mam_missing_report.csv
With columns:
- status → FOUND / PARTIAL / MISSING
- match_score
- title
- author
- series
- book_number
- best_mam_match
- searched_query
- type (ebook/audiobook)
- cache_hits
- live_hits
- error
- local_file
The script uses fuzzy matching:
- Title = primary signal
- Author = secondary
- Series = bonus signal
- Book number = small boost
| Status | Meaning |
|---|---|
| FOUND | Very strong match |
| PARTIAL | Likely match but uncertain |
| MISSING | No good match found |
| ERROR | API or parsing issue |
- First run: slower (builds cache)
- Future runs: much faster due to:
- cached search results
- skipping FOUND items
Cache file:
prowlarr_search_cache.json
/Books/
Author/
Series/
Author - Series 01 - Title.epub
/Audiobooks/
Author/
Series/
Author - Series 01 - Title.m4b
- Lower FOUND_MATCH if too many false MISSING
- Raise it if too many false positives
Start with:
MAX_WORKERS = 4- Matching is heuristic — not perfect
- Torrent titles are messy
- Expect some PARTIAL results
MIT – free to use and modify. Not affiliated with theme.park or any of the apps.
Based on the incredible work of MyAnonamouse.
ChilSoft.com with caffeine and questionable commits.
This site and its contents are provided for informational and educational purposes only.
Use any code, tools, or instructions at your own risk.
We are not responsible for any damage to your device, data loss, or unintended consequences.
Always proceed with care — and make backups.
© 2025 ChilSoft. All rights reserved.