Skip to content

URL: https://mkdocs.justinsforge.com/memory/general/reference_myanonamouse/

MyAnonaMouse (MAM)

Private tracker for audiobooks and ebooks. Justin's account opened 2026-05-20.

Account

Field Value
Username HiroHathaway123
Registration IP (home) 136.62.213.210
Account opened 2026-05-20 23:29 UTC
Rank progression New → User (2 weeks) → Power User → VIP

VPN authorization (dynamic seedbox API)

MAM session is ASN-locked to Proton VPN (AS208172), with Dynamic Seedbox enabled. Means any Proton exit IP authenticates automatically — no per-IP staff PM required.

  • Session created in MAM Preferences → Sessions, labeled Proton VPN gluetun seedbox (CT 102 qBit)
  • mam_id session cookie stored at:
  • Console: ~/.forge-secrets/mam.env (600, justinwieb)
  • media-server: /root/.forge-secrets/mam.env (600, root) — needed by systemd timer
  • Current Proton exit IP: 159.26.100.51, server 95.173.217.217 (Dallas)

Auto-refresh timer

forge-mam-refresh.timer on media-server, hourly. Calls MAM's dynamicSeedbox.php from inside the gluetun container so the request arrives from Proton's ASN. Self-heals if Proton ever rotates the underlying exit.

  • Script: /usr/local/bin/forge_mam_refresh.sh (media-server)
  • Unit: /etc/systemd/system/forge-mam-refresh.{service,timer}
  • Log: /var/log/forge_mam_refresh.log
  • Expected log line per run: {"Success":true,"msg":"No change|Completed","ip":"...","ASN":208172,"AS":"Proton AG"}

To check status:

ssh media-server 'sudo systemctl status forge-mam-refresh.timer; sudo tail -5 /var/log/forge_mam_refresh.log'

To rotate the mam_id (recommended periodically): 1. MAM Preferences → Sessions → create new session with same settings (ASN-locked AS208172, Dynamic Seedbox = Yes) 2. Delete old session 3. Update both secrets files (Console + media-server) and sudo systemctl restart forge-mam-refresh.service

qBit client

Setting Value
Client qBittorrent v5.1.4 (qbittorrent-nox in Docker, CT 102 media-server, gluetun-routed)
WebUI qbit.justinsforge.com (CF Access gated)
Auth Username justinwieb, LocalHostAuth=false
Default save /mnt/storage/downloads/ then move to /mnt/storage/audiobooks/<library>/
Auto-update Disabled (General\CheckForUpdates=false)
Forwarded port dynamic via Proton NAT-PMP (gluetun pushes to qBit on each reconnect)
Connectable yes, verified end-to-end

Hit-and-Run hardening

Applied 2026-05-20 to prevent accidental Rule 2.5 violations:

Key Value Effect
Session\MaxRatioAction 0 (Pause) Never auto-deletes on ratio
Bittorrent\MaxRatioAction 0 (Pause) Legacy key, same
Session\GlobalMaxRatio -1 No global ratio cap
Session\GlobalMaxSeedingMinutes -1 No global time cap
Session\GlobalMaxInactiveSeedingMinutes -1 No inactivity timeout

Net effect: torrents seed forever until manually removed.

Prowlarr indexer

Wired in Prowlarr (CT 102, also gluetun-routed) as indexer ID 12, name MyAnonaMouse. Uses the same mam_id cookie. Search UI: prowlarr.justinsforge.com.

Field Value
baseUrl https://www.myanonamouse.net/
Search in description / series Enabled
Seed ratio 1.0
Seed time (per torrent + pack) 4320 min (72h) — matches Rule 2.5
App profile Standard (RSS + auto-search)
Categories Audiobooks (100013), E-Books (100014), Books (7000), Audio (3000), Musicology (100015)

To search programmatically:

curl -s -H 'X-Api-Key: <PROWLARR_API_KEY>' \
  'http://localhost:9696/api/v1/search?query=<TITLE>&indexerIds=12'

Key rules to internalize

Rule Constraint
1.2 One account per IP/person; VPN/seedbox IP changes need staff notice (ASN lock side-steps this)
1.4 / 2.4 Global ratio ≥ 1.0
1.7 No automation outside published API; dynamic seedbox + indexer integration are on the approved list ✅
2.5 72h seed time per torrent within 30 days (Hit and Run otherwise)
2.6 First 2 weeks: ≤ 10 GB non-Freeleech downloaded (FL is unlimited)
2.8 Unsatisfied torrent cap: 20 new / 50 user / 100 power user / 150 VIP

Full ruleset: MAM Rules 2026-05-19.

Monitoring

  • forge-mam-seed-watch.timer (Console, hourly) — polls qBit, fires forge_notify when an MAM torrent crosses 72h seed time. State at forge/data/mam_seed_state.json.