Free media server
- Server accounts management
- YouTube library management
- HLS CORS proxy (m3u8 manifest, segment)
- Docker & Docker Compose
- Copy
.env.exampleto.env:
cp .env.example .env- Generate admin token (128+ chars):
node generate-token.js-
Update
.envwith generated token -
Start services:
docker-compose up -d- Server runs at
http://localhost:3000
Run a Ekydum client to connect to the server using your server URL and the admin token.
If anonymous yt-dlp extraction becomes unreliable, the server can pass a Netscape-format cookies file to yt-dlp.
- Put a cookies file on disk, for example
./secrets/youtube.cookies.txt - Mount it into the container, for example in
docker-compose.override.yml:
services:
app:
volumes:
- ./secrets/youtube.cookies.txt:/run/secrets/youtube.cookies.txt:ro- Set the env var in
.env:
YT_DLP_COOKIES_FILE="/run/secrets/youtube.cookies.txt"If YT_DLP_COOKIES_FILE is unset, the server continues to use anonymous extraction.
Create docker-compose.override.yml from example.
Edit code...
Restart the app service
See API_EXAMPLES.md
- Node.js / Express.js
- PostgreSQL / Sequelize
- Redis / ioredis
- yt-dlp