| # playback-farm2000 config. Never commit real values (.env is gitignored). |
|
| # ---- ElevenMusic ---------------------------------------------------------- |
| BASE |
https://api.elevenmusic.io |
| ARTIST_ID |
6a8d1b6b98a875faa917579f |
| CATALOG_FILE |
../catalog/tracks.json |
| # how many random tracks each account plays per day |
| PLAYS_PER_ACCOUNT_MIN |
2 |
| PLAYS_PER_ACCOUNT_MAX |
3 |
| # distribution of the plays across the day: uniform (random anytime) or |
| # waking-hours (weighted 7am-1am target-timezone). Default uniform. |
| PLAY_SCHEDULE |
uniform |
| # selection weighting: uniform | favor_cold | favor_new |
| # favor_cold = tracks with fewer listens get picked more; favor_new = newer |
| # tracks get a boost. Uniform is the least-suspicious default. |
| TRACK_WEIGHTING |
uniform |
|
| # ---- Firebase (public web key — same as the browser app) ----------------- |
| FIREBASE_API_KEY |
AIza…f-GM |
|
| # ---- Shifter residential proxy -------------------------------------------- |
| # Set from the shifter dashboard's "API Key" view AFTER you buy the plan. |
| # All accounts share the same gateway host + user/pass; the per-account lock |
| # is done by embedding a unique session id in the username via the template |
| # below. Sessions are pinned by shifter for the lifetime you request (up to |
| # 24h on most residential plans). We keep the session id constant across the |
| # account's whole life so its exit IP stays in the same session bucket. IP |
| # drifts slowly within the session — acceptable and looks more human than a |
| # frozen IP. |
| PROXY_GATEWAY |
p.shifter.io:443 |
| PROXY_USER |
cust…vili |
| PROXY_PASS |
Wct3…v0gJ |
| # username template. Placeholders: {user}, {session}, {country}, {lifetime_min}. |
| # Shifter residential uses `-sid-<alphanum>` for sticky sessions (docs: |
| # /docs/products/residential-proxies/). Default sticky TTL is 120 s, which |
| # is plenty for one 40 s play cycle. Between cycles (>= 30 min apart) the |
| # IP drifts to a new one within the same sid — that looks more human than |
| # a frozen IP so we don't extend the TTL. |
| # |
| # To pin a country, edit the template to include `-country-{country}` and |
| # set PROXY_DEFAULT_COUNTRY. To extend stickiness across a longer cycle, |
| # add `-ttl-3600` (seconds). |
| PROXY_USERNAME_TEMPLATE |
{use…ion} |
| # http or socks5. Shifter supports both. Docs default: http on p.shifter.io:443. |
| PROXY_SCHEME |
http |
| # ISO-3166 alpha-2 or empty for global pool. Only used if you edit the |
| # username template above to include `-country-{country}`. |
| PROXY_DEFAULT_COUNTRY |
|
| # Unused unless you add `-ttl-{lifetime_min}` (seconds!) to the template. |
| PROXY_SESSION_LIFETIME_MIN |
120 |
|
| # ---- Registration pacing -------------------------------------------------- |
| # Slow, sequential registration — bulk-registrations are the loudest possible |
| # signal. Default: 2 concurrent, 60-180s jitter between each account. |
| REGISTER_CONCURRENCY |
1 |
| REGISTER_SLEEP_MIN |
180 |
| REGISTER_SLEEP_MAX |
300 |
| # Vendor file of pre-warmed hotmail rows. One line per account, |
| # colon-separated: email:password:ms_refresh_token:ms_client_id. |
| # Password is the mailbox password (unused by elevenmusic — that flow is |
| # passwordless magic-link). Refresh token + client_id let us read the |
| # mailbox via Microsoft Graph to catch the sign-in email during registration. |
| VENDOR_FILE |
state/order.txt |
|
| # ---- Playback timing (same knobs as playback-farm/, per-cycle jittered) --- |
| HOLD_MIN |
55 |
| HOLD_MAX |
75 |
| HEARTBEAT_MIN |
6 |
| HEARTBEAT_MAX |
10 |
| FIRST_HB_MIN |
3 |
| FIRST_HB_MAX |
5 |
|
| # ---- Runtime / scheduling ------------------------------------------------- |
| # Global concurrency ceiling on plays in flight at once. At 2000 accounts x |
| # 15/day the natural average is ~15 concurrent; cap allows bursts. |
| MAX_CONCURRENT_PLAYS |
60 |
| # Per-account minimum sleep between plays (seconds). The scheduler smears |
| # each account's daily quota over 24h and won't stack two of its plays inside |
| # this window. |
| MIN_INTRA_ACCOUNT_GAP |
1800 |
| # Refresh-through-proxy: keep 1. Only turn off if shifter IPs are getting |
| # rate-limited by Google. |
| REFRESH_THROUGH_PROXY |
1 |
| # per-request timeouts through the proxy |
| PROXY_CONNECT_TIMEOUT |
30 |
| PROXY_TOTAL_TIMEOUT |
90 |
|
| # ---- Failure policy ------------------------------------------------------- |
| PROXY_MAX_RETRIES |
3 |
| PAUSE_MINUTES_AFTER_FAILURES |
15 |
| # consecutive successful auths where listen_count doesn't move => shadow-ban |
| SHADOW_BAN_STRIKES |
25 |
|
| # ---- Discovery / engagement (see social.py) -------------------------------- |
| GENRE_PLAYLIST_IDS |
|
| PLAYLIST_CACHE_TTL_SEC |
300 |
|
| # ---- UI ------------------------------------------------------ |
| UI_HOST |
127.0.0.1 |
| UI_PORT |
8787 |
| UI_TOKEN |
P4co…7bhv |
|
| # ---- Target-track campaign: SUNBURN AFTER MIDNIGHT ------------------------ |
| TARGET_TRACK_ID |
|
| TARGET_TRACK_MIN_PER_ACCOUNT |
|
| TARGET_TRACK_MAX_PER_ACCOUNT |
|
| TARGET_DEADLINE_UTC |
|
|
| # ---- Exclusions ---------------------------------------------------- |
| EXCLUDE_TRACK_IDS |
|