music on atproto
plyr.fm
1# plyr.fm configuration
2
3# app
4DEBUG=false
5PORT=8001
6FRONTEND_URL=http://localhost:5173
7# FRONTEND_CORS_ORIGIN_REGEX= # optional regex pattern for CORS (defaults to plyr.fm + localhost)
8
9# branding (optional)
10# backend branding settings
11# APP_NAME=plyr.fm
12# APP_TAGLINE=music streaming on atproto
13# CANONICAL_HOST=plyr.fm
14# CANONICAL_URL_OVERRIDE=
15# BROADCAST_CHANNEL_PREFIX=plyr
16
17# frontend branding (requires VITE_ prefix for SvelteKit)
18# VITE_APP_NAME=plyr.fm
19# VITE_APP_TAGLINE=music streaming on atproto
20# VITE_APP_CANONICAL_HOST=plyr.fm
21# VITE_APP_CANONICAL_URL=
22# VITE_APP_BROADCAST_PREFIX=plyr
23
24# database
25DATABASE_URL=postgresql+asyncpg://localhost/plyr
26
27# storage (cloudflare r2)
28AWS_ACCESS_KEY_ID=your_r2_access_key_id
29AWS_SECRET_ACCESS_KEY=your_r2_secret_access_key
30R2_BUCKET=audio-dev
31R2_IMAGE_BUCKET=images-dev
32R2_ENDPOINT_URL=https://8feb33b5fb57ce2bc093bc6f4141f40a.r2.cloudflarestorage.com
33R2_PUBLIC_BUCKET_URL=https://pub-154b70b3121149eda0cf1ccbae78cb33.r2.dev
34R2_PUBLIC_IMAGE_BUCKET_URL=https://pub-154b70b3121149eda0cf1ccbae78cb33.r2.dev
35R2_PRIVATE_BUCKET=audio-private-dev # private bucket for supporter-gated audio
36MAX_UPLOAD_SIZE_MB=1536 # max audio upload size (default: 1536MB / 1.5GB - supports 2-hour WAV)
37
38# atproto
39ATPROTO_PDS_URL=https://bsky.social
40ATPROTO_CLIENT_ID=
41ATPROTO_CLIENT_SECRET=
42ATPROTO_REDIRECT_URI=http://localhost:8000/auth/callback
43OAUTH_ENCRYPTION_KEY= # base64-encoded 32-byte key (required for production)
44
45# atproto namespace (optional - defaults to fm.plyr)
46# ATPROTO_APP_NAMESPACE=fm.plyr
47# ATPROTO_SCOPE_OVERRIDE= # override computed oauth scope if needed
48
49# observability (optional)
50# LOGFIRE_ENABLED=false
51# LOGFIRE_WRITE_TOKEN=
52# LOGFIRE_ENVIRONMENT=local
53# LOGFIRE_SUPPRESSED_LOGGERS=docket # comma-separated logger names to suppress
54
55# notifications (optional - bluesky DMs)
56# NOTIFY_ENABLED=false
57# NOTIFY_RECIPIENT_HANDLE=
58# NOTIFY_BOT_HANDLE=
59# NOTIFY_BOT_PASSWORD=
60
61# background tasks (optional - docket/redis)
62# DOCKET_URL=redis://localhost:6379 # enables docket; omit for asyncio fallback
63# DOCKET_NAME=plyr # queue namespace (default: plyr)
64# DOCKET_WORKER_CONCURRENCY=10 # concurrent task limit (default: 10)