A helpful Discord bot for requesting media via Jellyseerr and receiving Jellyfin notifications for new content in your library.
Features β’ Quick Start β’ Configuration β’ Commands β’ Docker β’ Changelog β’ Contributing β’ Discord
π¬ Discord Server
Before anything else, I invite you to join my Discord server for faster help, discussions, and important information such as an organizd list of known bugs that are currently being tracker or planned features scheduled for future releases!
This helps avoid duplicate requests and keeps eveβ¦
A helpful Discord bot for requesting media via Jellyseerr and receiving Jellyfin notifications for new content in your library.
Features β’ Quick Start β’ Configuration β’ Commands β’ Docker β’ Changelog β’ Contributing β’ Discord
π¬ Discord Server
Before anything else, I invite you to join my Discord server for faster help, discussions, and important information such as an organizd list of known bugs that are currently being tracker or planned features scheduled for future releases!
This helps avoid duplicate requests and keeps everyone informed about whatβs coming next!
Join Here:
I also have a dedicated channel on the r/JellyfinCommunity server (if you are already a member): Join me here
π Features
-
π Media Search: Search for movies and TV shows with
/searchcommand - you can then request it later within the message embed -
π₯ Trending Content: Browse weekly trending movies and TV shows with
/trendingcommand -
π€ One-Click Requests: Directly request media to Jellyseerr with
/requestcommand -
πΊ Smart TV Handling: Choose specific seasons when searching for TV series using
/search, or request all the seasons at once with/request -
ποΈ Server and Quality: Choose which Radarr or Sonarr instance to request to, and which quality profile
-
π« Duplicate Detection: Automatically checks if content already exists in Jellyseerr before allowing requests
-
π·οΈ Tag Selection: Select Radarr/Sonarr tags when requesting media for better organization and categorization
-
π¬ Jellyfin Notifications: Automatic Discord notifications when new media is added to your library
-
π Library Filtering and Mapping: Choose which Jellyfin libraries send Discord notifications and on what channel
-
π€ User Mapping: Map Discord users to Jellyseerr accounts so requests appear from the correct user
-
π Role-Based Permissions: Control who can use bot commands through Discord roles (allowlist/blocklist)
-
π Private Notifications: Optional PM when your requested content becomes available on Jellyfin
-
π» Ephemeral Mode: Make bot responses visible only to the command user
-
π Multi-Language Support: Fully translated interface with automatic language detection
-
π¨ Rich Embeds: Beautiful, detailed embeds with:
-
Movie/TV show posters and backdrops
-
Director/Creator information
-
IMDb ratings and links
-
Runtime, genres, and synopsis
-
Quick action buttons (IMDb, Letterboxd, Watch Now)
-
π Autocomplete Support: Intelligent autocomplete for search queries with rich metadata
-
βοΈ Web Dashboard: User-friendly web interface for configuration with auto-detection
π Prerequisites
Before getting started, ensure you have:
-
β A running Jellyfin server
-
β A running Jellyseerr instance
-
β A Discord account with a server where you have admin privileges
-
β API keys from:
-
The Movie Database (TMDB) - Required
-
OMDb API - Optional, but recommended for richer data
-
β Node.js v18+ or Docker & Docker Compose
π Quick Start
1οΈβ£ Clone and Install
git clone https://github.com/nairdahh/anchorr.git
cd anchorr
npm install
2οΈβ£ Start the Application
node app.js
The web dashboard will be available at http://localhost:8282
3οΈβ£ Configure via Web Dashboard
- Open
http://localhost:8282in your browser - Fill in your Discord Bot credentials, API keys, and service URLs
- Click the test buttons to verify connections
- Start the bot using the dashboard button
4οΈβ£ Invite Bot to Discord
Generate an OAuth2 URL in Discord Developer Portal:
- OAuth2 β URL Generator
- Scopes:
bot,applications.commands - Permissions: Send Messages, Embed Links
- Copy generated URL and open in browser
5οΈβ£ Configure Jellyfin Webhook
In Jellyfin Dashboard β Webhooks:
- Click + to add new Discord webhook
- Enter URL:
http://<bot-host>:<port>/jellyfin-webhook - Example:
http://192.168.1.100:8282/jellyfin-webhook - Save and youβre done! π
βοΈ Configuration
Configuration is managed through a web dashboard at http://localhost:8282/. However, you can also configure it programmatically.
π³ Docker Deployment
Deploying with Docker is the recommended method for running Anchorr. You can use Docker Compose (the easiest way) or run the container manually.
Method 1: Docker Compose
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)
Method 2: Manual Docker Run
# 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 \
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 mode
Example for Unraid: When adding the container in Unraid Community Apps, add this volume mapping in the "Path" section:
- Container Path:
/usr/src/app/config - Host Path:
/mnt/user/appdata/anchorr - Access Mode:
RW(Read-Write)
Method 3: Install Directly from Docker Hub
If you use Docker Desktop or other GUI tools (Portainer, Unraid, etc.), you can install directly from Docker Hub without cloning the repository:
- Open Docker Desktop β Images (or search in your GUI)
- Search for
nairdah/anchorror justanchorr - Pull the latest image
- Create a new container with these settings:
-
Port:
8282:8282(or change as needed) -
Volume:
./anchorr-dataβ/usr/src/app/config -
Environment variables:
-
WEBHOOK_PORT=8282 -
NODE_ENV=production -
Restart policy: Unless stopped
Using a Different Port
If 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
π Updates
Node.js Installation
cd anchorr
git pull origin main
npm install
# Restart the application (Ctrl+C, then run: node app.js)
Docker Compose
cd anchorr
git pull origin main
docker compose up -d --pull always
Docker Manual Run
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 \
nairdah/anchorr:latest
πΈ Screenshots (a bit outdated for now)
| Feature | Screenshot |
|---|---|
| Autocomplete | |
| Search Results | |
| Request Confirmation | |
| Jellyfin Notification |
π€ Contributing
Contributions are welcome! See CONTRIBUTING.md for guidelines.
π Adding Translations
Help make Anchorr accessible to more users by contributing translations! The system now automatically detects and loads new languages.
Quick start:
npm run create-translation es "EspaΓ±ol" "Your Name"
See TRANSLATION_GUIDE.md for detailed instructions.
π₯ Contributors
A huge thank you to all the amazing people who have contributed to making Anchorr better! π
π License
This project is released under the Unlicense β itβs public domain. Do anything you want with the code!