Repository navigation
Expand file tree
/
Copy path.env.example
More file actions
147 lines (130 loc) · 6.03 KB
/
Copy path.env.example
File metadata and controls
147 lines (130 loc) · 6.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# Copy to .env and fill in. Backend reads these with the OPE_ prefix.
# self_host | hosted. self_host enables single-user conveniences (e.g. header paste).
OPE_DEPLOYMENT_MODE=self_host
OPE_FRONTEND_URL=http://localhost:8080
# Encryption key for stored provider credentials. CHANGE THIS.
OPE_SECRET_KEY=change-me-please
# Public playlist sharing is OFF while OPE_PUBLIC_BASE_URL is empty.
# When enabling it, also set a separate 32+ character owner access token. The
# private owner API/UI then requires an encrypted HttpOnly owner session.
OPE_PUBLIC_BASE_URL=
OPE_OWNER_ACCESS_TOKEN=
OPE_OWNER_SESSION_TTL_S=43200
# Public snapshot and recipient abuse/privacy limits.
OPE_SHARE_RECIPIENT_SESSION_TTL_S=86400
OPE_SHARE_RECIPIENT_CREDENTIAL_RETENTION_S=86400
OPE_SHARE_MAX_TRACKS=1000
OPE_SHARE_MAX_SNAPSHOT_BYTES=2000000
OPE_SHARE_MAX_DOWNLOAD_BYTES=4000000
OPE_SHARE_MAX_EXPIRY_DAYS=365
OPE_SHARE_RATE_LIMIT_CAPACITY=60
OPE_SHARE_RATE_LIMIT_REFILL_PER_S=1
OPE_SHARE_IMPORT_MAX_CONCURRENT_JOBS=3
OPE_SHARE_IMPORT_DAILY_TRACK_LIMIT=1000
OPE_SHARE_ARTWORK_HOSTS=i.scdn.co,mosaic.scdn.co,i.ytimg.com,lh3.googleusercontent.com,resources.tidal.com,mzstatic.com
# Youtube Music OAuth app (https://console.cloud.google.com/apis/credentials)
# Important: leave empty until the app is approved for prod use, this makes the app use
# a dev token from the header paste flow instead of the OAuth flow.
# This is a temporary measure until the app is approved.
OPE_YTMUSIC_ENABLED=true
OPE_YOUTUBE_OFFICIAL_ENABLED=false
OPE_YTMUSIC_CLIENT_ID=
OPE_YTMUSIC_CLIENT_SECRET=
# Used to match reconnected YouTube Music accounts by Google email when available.
OPE_YTMUSIC_USERINFO_URL=https://www.googleapis.com/oauth2/v2/userinfo
# Matching
OPE_REVIEW_CONFIDENCE_THRESHOLD=0.8
OPE_ENABLE_SHARED_GRAPH=false
# Conservative migration guardrails; the UI can override after a warning.
OPE_MIGRATION_SAFE_MAX_PLAYLISTS_PER_JOB=1
OPE_MIGRATION_SAFE_MAX_TRACKS_PER_JOB=50
OPE_MIGRATION_SAFE_DAILY_TRACKS=250
OPE_MIGRATION_SAFE_MIN_JOB_GAP_S=120
# ARQ worker timeout for one migration job. Large Spotify playlists can exceed 5 minutes.
OPE_MIGRATION_WORKER_JOB_TIMEOUT_S=3600
# Item-level history retention. 0 keeps detail indefinitely; summaries are always retained.
OPE_MIGRATION_HISTORY_RETENTION_DAYS=90
# Hourly cleanup and report streaming batch sizes.
OPE_MIGRATION_HISTORY_CLEANUP_BATCH_SIZE=100
OPE_MIGRATION_REPORT_BATCH_SIZE=250
# Portable exports. Track count is not capped; output streams through temporary files.
OPE_EXPORT_MAX_PLAYLISTS=100
# Playlist Organizer worker pacing and bounded rate-limit retries.
OPE_ORGANIZER_WORKER_JOB_TIMEOUT_S=3600
OPE_ORGANIZER_RATE_LIMIT_CAPACITY=2
OPE_ORGANIZER_RATE_LIMIT_REFILL_PER_S=1
OPE_ORGANIZER_RETRY_ATTEMPTS=3
OPE_ORGANIZER_RETRY_MAX_DELAY_S=30
# Scheduled playlist sync. Cadence values are minutes.
OPE_SYNC_MIN_CADENCE_MINUTES=5
OPE_SYNC_MAX_CADENCE_MINUTES=10080
OPE_SYNC_RETRY_DELAY_S=300
# Must remain longer than the worker job timeout so a live run is never reaped.
OPE_SYNC_STALE_RUN_AFTER_S=3900
OPE_SYNC_SCHEDULER_BATCH_SIZE=20
# Local playlist-file imports. Raw uploads are parsed from a bounded request stream
# and closed immediately; only the normalized preview is retained temporarily.
OPE_LOCAL_IMPORT_MAX_BYTES=10485760
OPE_LOCAL_IMPORT_MAX_PLAYLISTS=100
OPE_LOCAL_IMPORT_MAX_TRACKS=5000
OPE_LOCAL_IMPORT_MAX_ISSUES=200
OPE_LOCAL_IMPORT_SPOOL_MEMORY_BYTES=1048576
OPE_LOCAL_IMPORT_RETENTION_S=3600
OPE_LOCAL_IMPORT_QUEUED_RETENTION_S=7200
OPE_LOCAL_IMPORT_FAILED_RETENTION_S=900
# Public URL and pasted-text imports
OPE_IMPORT_MAX_TEXT_BYTES=262144
OPE_IMPORT_MAX_ITEMS=1000
OPE_IMPORT_MAX_LINE_CHARS=2000
OPE_IMPORT_MAX_FIELD_CHARS=500
OPE_IMPORT_MAX_URL_CHARS=2048
OPE_IMPORT_MAX_RESPONSE_BYTES=2000000
OPE_IMPORT_MAX_REDIRECTS=3
OPE_IMPORT_HTTP_TIMEOUT_S=10
# Comma-separated public HTTPS hosts allowed to serve Open Playlist Engine shares.
# A public HTTPS OPE_FRONTEND_URL host is included automatically.
OPE_IMPORT_OPEN_PLAYLIST_HOSTS=
# Local metadata-only library snapshots. Docker Compose overrides the directory to
# /data/snapshots and mounts the shared `snapshots` named volume into backend + worker.
OPE_SNAPSHOT_DIR=./data/snapshots
OPE_SNAPSHOT_DEFAULT_RETENTION_COUNT=10
OPE_SNAPSHOT_DEFAULT_RETENTION_DAYS=90
# Maximum compressed import size (1 GiB) and verified uncompressed JSON size (4 GiB).
OPE_SNAPSHOT_IMPORT_MAX_BYTES=1073741824
OPE_SNAPSHOT_MAX_UNCOMPRESSED_BYTES=4294967296
OPE_SNAPSHOT_MAX_MANIFEST_BYTES=67108864
OPE_SNAPSHOT_MAX_RECORD_BYTES=2097152
OPE_SNAPSHOT_MAX_COMPRESSION_RATIO=200
# Pending/running snapshots older than this are failed and their orphan files reconciled.
OPE_SNAPSHOT_STALE_AFTER_S=86400
OPE_SNAPSHOT_WORKER_JOB_TIMEOUT_S=3600
# Playlist generator. It stays disabled until both base URL and model are set.
# openai_compatible is the local-first default; copilot_sdk is optional.
OPE_GENERATOR_BACKEND=openai_compatible
OPE_GENERATOR_OPENAI_BASE_URL=
OPE_GENERATOR_OPENAI_API_KEY=
OPE_GENERATOR_COPILOT_GITHUB_TOKEN=
OPE_GENERATOR_MODEL=
OPE_GENERATOR_TIMEOUT_S=60
OPE_GENERATOR_MAX_PROMPT_CHARS=2000
OPE_GENERATOR_MAX_OUTPUT_CHARS=32000
OPE_GENERATOR_MAX_OUTPUT_TOKENS=4096
OPE_GENERATOR_MAX_TRACKS=25
# Spotify OAuth app (https://developer.spotify.com/dashboard)
OPE_SPOTIFY_CLIENT_ID=
OPE_SPOTIFY_CLIENT_SECRET=
# When sharing publicly, this must use the same public origin as OPE_PUBLIC_BASE_URL.
OPE_SPOTIFY_REDIRECT_URI=http://127.0.0.1:8000/api/auth/spotify/callback
# Tidal OAuth app (https://developer.tidal.com)
OPE_TIDAL_CLIENT_ID=
OPE_TIDAL_CLIENT_SECRET=
# When sharing publicly, this must use the same public origin as OPE_PUBLIC_BASE_URL.
OPE_TIDAL_REDIRECT_URI=http://127.0.0.1:8000/api/auth/tidal/callback
# Apple MusicKit (https://developer.apple.com/help/account/capabilities/create-a-media-identifier-and-private-key/)
# Apple Music does not use OAuth client ID/client secret credentials.
OPE_APPLE_MUSIC_TEAM_ID=
OPE_APPLE_MUSIC_KEY_ID=
# Prefer a path for local development, or use an escaped PEM value in OPE_APPLE_MUSIC_PRIVATE_KEY.
OPE_APPLE_MUSIC_PRIVATE_KEY_PATH=
OPE_APPLE_MUSIC_PRIVATE_KEY=
OPE_APPLE_MUSIC_TOKEN_TTL_S=86400