Discord bot for requesting movies/TV and receiving notifications when items are added to your media server.
See the code
A helpful Discord bot for requesting media via Seerr and receiving Jellyfin notifications for new content in your library.
Features • Quick Start • Configuration • Commands • Docker • Changelog • Contributing • Discord
Before anything else, I invite you to join my Discord server for faster assistance, discussions, and important information such as an organized list of known bugs that are currently being tracked or planned features scheduled for future releases!
I also have a dedicated channel on the r/JellyfinCommunity server (if you are already a member): Join me here
/search command - you can then request it later within the message embed/trending command/request command/search, or request all seasons at once with /requestAnchorr is designed to run locally on your home network alongside your Jellyfin server. It is not hardened for public internet exposure.
If you choose to expose Anchorr to the internet (e.g. via port forwarding or a reverse proxy), be aware of the following risks:
config.json — note that base64 is not encryption and can be trivially decodedRecommendation: Keep Anchorr on your local network. If remote access is needed, use a VPN instead of direct port forwarding.
Before getting started, ensure you have:
git clone https://github.com/nairdahh/anchorr.git
cd anchorr
npm install
node app.js
The web dashboard will be available at http://localhost:8282
Note: The server binds to
127.0.0.1(localhost only) by default. This means the dashboard is only accessible from the machine running Anchorr. If you need to access it from another device on your network, either use a reverse proxy or setBIND_HOST=0.0.0.0before starting (e.g.BIND_HOST=0.0.0.0 node app.js). Docker deployments handle this automatically.
http://localhost:8282 in your browserGenerate an OAuth2 URL in Discord Developer Portal:
bot, applications.commandsIn Jellyfin Dashboard → Webhooks:
http://<bot-host>:<port>/jellyfin-webhookhttp://192.168.1.100:8282/jellyfin-webhookSecurity: Anchorr auto-generates a webhook secret on first start. Open the Anchorr dashboard, find the Webhook Secret field in the Jellyfin section, and click Copy Secret. Then add it as a custom HTTP header in the Jellyfin webhook plugin:
Header name Value X-Webhook-Secret(paste from dashboard) Requests without a valid secret are rejected with
401 Unauthorized.
Configuration is managed through a web dashboard at http://localhost:8282/. However, you can also configure it programmatically.
Deploying with Docker is the recommended method for running Anchorr. You can use Docker Compose (the easiest way) or run the container manually.
Option A: Clone the full repository
git clone https://github.com/nairdahh/anchorr.git
cd anchorr
docker compose up -d
Option B: Download only docker-compose.yml
mkdir anchorr && cd anchorr
wget https://raw.githubusercontent.com/nairdahh/anchorr/main/docker-compose.yml
# OR with curl: curl -O https://raw.githubusercontent.com/nairdahh/anchorr/main/docker-compose.yml
docker compose up -d
Access: Open browser at http://<your-server-ip>:8282 (e.g., http://192.168.1.100:8282 or http://localhost:8282)
# Run container (using port 8282)
docker run -d \
--name anchorr \
--restart unless-stopped \
-p 8282:8282 \
-v ./anchorr-data:/usr/src/app/config \
-e WEBHOOK_PORT=8282 \
-e NODE_ENV=production \
-e BIND_HOST=0.0.0.0 \
nairdah/anchorr:latest
Access: Open browser at http://<your-server-ip>:8282
Important parameters:
-p 8282:8282 - Port mapping (host:container). First number is the port on your host.-v ./anchorr-data:/usr/src/app/config - Persistent config storage (saves to ./anchorr-data/config.json)--restart unless-stopped - Auto-restart on failure-e WEBHOOK_PORT=8282 - Web dashboard port-e NODE_ENV=production - Production modeExample for Unraid: When adding the container in Unraid Community Apps, add this volume mapping in the "Path" section:
/usr/src/app/config/mnt/user/appdata/anchorrRW (Read-Write)If you use Docker Desktop or other GUI tools (Portainer, Unraid, etc.), you can install directly from Docker Hub without cloning the repository:
nairdah/anchorr or just anchorr8282:8282 (or change as needed)./anchorr-data → /usr/src/app/configWEBHOOK_PORT=8282NODE_ENV=productionBIND_HOST=0.0.0.0If port 8282 is already in use:
Docker Compose: Edit docker-compose.yml
ports:
- "9000:8282" # Change 9000 to your desired port
Docker Run: Change the first port number
docker run -d \
--name anchorr \
--restart unless-stopped \
-p 9000:8282 \ # Use port 9000 on host
-v ./anchorr-data:/usr/src/app/config \
-e WEBHOOK_PORT=8282 \
-e NODE_ENV=production \
nairdah/anchorr:latest
Then access at: http://localhost:9000
cd anchorr
git pull origin main
npm install
# Restart the application (Ctrl+C, then run: node app.js)
cd anchorr
git pull origin main
docker compose up -d --pull always
docker pull nairdah/anchorr:latest
docker stop anchorr
docker rm anchorr
docker run -d \
--name anchorr \
--restart unless-stopped \
-p 8282:8282 \
-v ./anchorr-data:/usr/src/app/config \
-e WEBHOOK_PORT=8282 \
-e NODE_ENV=production \
-e BIND_HOST=0.0.0.0 \
nairdah/anchorr:latest
| Feature | Screenshot |
|---|---|
| Autocomplete | ![]() |
| Search Results | ![]() |
| Request Confirmation | ![]() |
| Jellyfin Notification | ![]() |
Contributions are welcome! See CONTRIBUTING.md for guidelines.
Help make Anchorr accessible to more users by contributing translations! The system automatically detects and loads new languages — no code changes needed.
Quick start: Copy locales/template.json to locales/<language_code>.json, fill in the _meta section, translate the values, and open a PR.
See CONTRIBUTING.md for detailed instructions.
A huge thank you to all the amazing people who have contributed to making Anchorr better! 🎉
This project is released under the Unlicense — it's public domain. Do anything you want with the code!
JavaScript
77.8%
HTML
13.7%
CSS
8.1%
Discord bot for requesting movies/TV and receiving notifications when items are added to your media server.
See the code
A helpful Discord bot for requesting media via Seerr and receiving Jellyfin notifications for new content in your library.
Features • Quick Start • Configuration • Commands • Docker • Changelog • Contributing • Discord
Before anything else, I invite you to join my Discord server for faster assistance, discussions, and important information such as an organized list of known bugs that are currently being tracked or planned features scheduled for future releases!
I also have a dedicated channel on the r/JellyfinCommunity server (if you are already a member): Join me here
/search command - you can then request it later within the message embed/trending command/request command/search, or request all seasons at once with /requestAnchorr is designed to run locally on your home network alongside your Jellyfin server. It is not hardened for public internet exposure.
If you choose to expose Anchorr to the internet (e.g. via port forwarding or a reverse proxy), be aware of the following risks:
config.json — note that base64 is not encryption and can be trivially decodedRecommendation: Keep Anchorr on your local network. If remote access is needed, use a VPN instead of direct port forwarding.
Before getting started, ensure you have:
git clone https://github.com/nairdahh/anchorr.git
cd anchorr
npm install
node app.js
The web dashboard will be available at http://localhost:8282
Note: The server binds to
127.0.0.1(localhost only) by default. This means the dashboard is only accessible from the machine running Anchorr. If you need to access it from another device on your network, either use a reverse proxy or setBIND_HOST=0.0.0.0before starting (e.g.BIND_HOST=0.0.0.0 node app.js). Docker deployments handle this automatically.
http://localhost:8282 in your browserGenerate an OAuth2 URL in Discord Developer Portal:
bot, applications.commandsIn Jellyfin Dashboard → Webhooks:
http://<bot-host>:<port>/jellyfin-webhookhttp://192.168.1.100:8282/jellyfin-webhookSecurity: Anchorr auto-generates a webhook secret on first start. Open the Anchorr dashboard, find the Webhook Secret field in the Jellyfin section, and click Copy Secret. Then add it as a custom HTTP header in the Jellyfin webhook plugin:
Header name Value X-Webhook-Secret(paste from dashboard) Requests without a valid secret are rejected with
401 Unauthorized.
Configuration is managed through a web dashboard at http://localhost:8282/. However, you can also configure it programmatically.
Deploying with Docker is the recommended method for running Anchorr. You can use Docker Compose (the easiest way) or run the container manually.
Option A: Clone the full repository
git clone https://github.com/nairdahh/anchorr.git
cd anchorr
docker compose up -d
Option B: Download only docker-compose.yml
mkdir anchorr && cd anchorr
wget https://raw.githubusercontent.com/nairdahh/anchorr/main/docker-compose.yml
# OR with curl: curl -O https://raw.githubusercontent.com/nairdahh/anchorr/main/docker-compose.yml
docker compose up -d
Access: Open browser at http://<your-server-ip>:8282 (e.g., http://192.168.1.100:8282 or http://localhost:8282)
# Run container (using port 8282)
docker run -d \
--name anchorr \
--restart unless-stopped \
-p 8282:8282 \
-v ./anchorr-data:/usr/src/app/config \
-e WEBHOOK_PORT=8282 \
-e NODE_ENV=production \
-e BIND_HOST=0.0.0.0 \
nairdah/anchorr:latest
Access: Open browser at http://<your-server-ip>:8282
Important parameters:
-p 8282:8282 - Port mapping (host:container). First number is the port on your host.-v ./anchorr-data:/usr/src/app/config - Persistent config storage (saves to ./anchorr-data/config.json)--restart unless-stopped - Auto-restart on failure-e WEBHOOK_PORT=8282 - Web dashboard port-e NODE_ENV=production - Production modeExample for Unraid: When adding the container in Unraid Community Apps, add this volume mapping in the "Path" section:
/usr/src/app/config/mnt/user/appdata/anchorrRW (Read-Write)If you use Docker Desktop or other GUI tools (Portainer, Unraid, etc.), you can install directly from Docker Hub without cloning the repository:
nairdah/anchorr or just anchorr8282:8282 (or change as needed)./anchorr-data → /usr/src/app/configWEBHOOK_PORT=8282NODE_ENV=productionBIND_HOST=0.0.0.0If port 8282 is already in use:
Docker Compose: Edit docker-compose.yml
ports:
- "9000:8282" # Change 9000 to your desired port
Docker Run: Change the first port number
docker run -d \
--name anchorr \
--restart unless-stopped \
-p 9000:8282 \ # Use port 9000 on host
-v ./anchorr-data:/usr/src/app/config \
-e WEBHOOK_PORT=8282 \
-e NODE_ENV=production \
nairdah/anchorr:latest
Then access at: http://localhost:9000
cd anchorr
git pull origin main
npm install
# Restart the application (Ctrl+C, then run: node app.js)
cd anchorr
git pull origin main
docker compose up -d --pull always
docker pull nairdah/anchorr:latest
docker stop anchorr
docker rm anchorr
docker run -d \
--name anchorr \
--restart unless-stopped \
-p 8282:8282 \
-v ./anchorr-data:/usr/src/app/config \
-e WEBHOOK_PORT=8282 \
-e NODE_ENV=production \
-e BIND_HOST=0.0.0.0 \
nairdah/anchorr:latest
| Feature | Screenshot |
|---|---|
| Autocomplete | ![]() |
| Search Results | ![]() |
| Request Confirmation | ![]() |
| Jellyfin Notification | ![]() |
Contributions are welcome! See CONTRIBUTING.md for guidelines.
Help make Anchorr accessible to more users by contributing translations! The system automatically detects and loads new languages — no code changes needed.
Quick start: Copy locales/template.json to locales/<language_code>.json, fill in the _meta section, translate the values, and open a PR.
See CONTRIBUTING.md for detailed instructions.
A huge thank you to all the amazing people who have contributed to making Anchorr better! 🎉
This project is released under the Unlicense — it's public domain. Do anything you want with the code!
JavaScript
77.8%
HTML
13.7%
CSS
8.1%