-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy path.env.example
More file actions
76 lines (66 loc) · 3.41 KB
/
Copy path.env.example
File metadata and controls
76 lines (66 loc) · 3.41 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
# ---- Syncwave configuration ----
# Public URL of this instance (used for share links). On a VPS set this to your domain.
PUBLIC_URL=http://localhost:3000
# Port the server listens on.
PORT=3000
# Where resolved audio is cached on disk.
CACHE_DIR=./cache
# Where durable rooms, settings, and the cache index are stored.
DATA_DIR=./data
# ---- YouTube session (recommended on VPS / datacenter IPs) ----
# yt-dlp is frequently bot-checked from datacenter IPs. Provide a cookies file
# exported from a logged-in YouTube session to make playback reliable.
# Path is inside the container/host; leave blank to try without cookies.
# Easier alternative: upload the file in the admin console at /admin.
YTDLP_COOKIES_FILE=
# Cap on cached audio, in MB. Tracks are already dropped 72h after their last
# play, but age alone isn't a bound: a busy room pulls more inside that window
# than a small disk holds. The least recently played go first. 0 disables it.
CACHE_MAX_MB=4096
# ---- Limits that only matter on a public instance ----
# Both of these are no-ops for a room of friends. They exist for an instance
# anyone on the internet can reach, where the traffic is strangers rather than
# the people the room was made for. Set either to 0 to disable it.
#
# Simultaneous track downloads. Each one is a yt-dlp process plus an ffmpeg
# remux, so this is where a busy box becomes CPU-bound. Waiting downloads start
# as soon as a slot frees, and only the *currently playing* track is ever
# urgent — the rest are warming ahead.
MAX_PARALLEL_DOWNLOADS=3
# New rooms per IP address per hour. Creating a room is the only write an
# anonymous visitor can repeat forever. Well above what a person does — you
# make a room, you send the link, you listen — and low enough that a script
# gives up. Note that a household behind one NAT shares an address, and so
# shares the allowance.
ROOM_CREATE_LIMIT=20
# ---- Proxy pool (the practical fix for a cloud host) ----
# YouTube blocks datacenter IPs and cookies do NOT lift that block. But the
# block is not uniform: measured on a fresh cloud instance, every direct attempt
# was refused while 4 of 10 commodity proxies fetched the same track fine. So
# Syncwave tries the direct connection first and only falls back to the pool
# when the IP is refused, remembering which proxies worked.
#
# Either set an API key and the list is fetched and refreshed for you...
WEBSHARE_API_KEY=
# ...or paste proxies yourself, comma-separated, any provider:
# http://user:pass@host:port,http://user:pass@host2:port
YTDLP_PROXY_LIST=
# A single fixed proxy, always tried first. Fine on its own if you have one
# good residential proxy and don't need rotation.
YTDLP_PROXY=
# ---- AI DJ (optional, Phase 3) ----
# Swappable LLM provider. Leave disabled for the plain listening room.
AI_DJ_ENABLED=false
# One of: ollama | google | openai | anthropic
# ollama — local, no key (LLM_MODEL=llama3.1)
# google — Gemini, free tier (LLM_MODEL=gemini-3.5-flash-lite)
# key from https://aistudio.google.com/apikey
# Pick a *lite* model. A reasoning model spends its token
# budget thinking and can return nothing at all.
# openai (LLM_MODEL=gpt-4o-mini)
# anthropic (LLM_MODEL=claude-haiku-4-5)
LLM_PROVIDER=ollama
LLM_MODEL=llama3.1
LLM_API_KEY=
# For ollama / OpenAI-compatible servers:
LLM_BASE_URL=http://localhost:11434