Wardarr is a web application for managing TV show libraries and verifying episodes using TMDB stills.
This is a work in progress and currently in an alpha state. Use at your own risk. Other developers are welcome. I'll eventually get around to making a CONTRIBUTING.md file.
- Started: May 2025 (Just a few days ago!)
- Motivation: This is my first "vibe code" project.
- Known Issues: Expect rough edges and incomplete features.
- Future Plans: Finish this README, release a Docker Compose setup for easier deployment and use. Also, make a pHash of the verified content so you don't have to process the whole CLIP model again. Additionally, make it work with Radarr and Sonarr so you can quickly blacklist wrong content and run the check again. I might make a DB of pHashes for quicker verification and more.
- Node.js: 20.x or higher
- npm or yarn
- Python 3: For the verification script (
scripts/clip-matcher.py) - Python Dependencies: See
requirements.txt(install viapip install -r requirements.txt) - FFmpeg: Must be installed and available in your system's PATH for frame extraction.
- TMDB API Key: You MUST create a
.envfile in the project root with your The Movie Database (TMDB) API key:TMDB_API_KEY=YOUR_ACTUAL_API_KEY_HERE
- GPU (Recommended): While the verification script can run on a CPU, processing will be significantly faster with a dedicated GPU.
- NVIDIA GPUs (CUDA): Generally provide the best performance.
- Apple Silicon (MPS): May work (was tested previously on my M1), but primary development is now Linux/NVIDIA, so MPS support might vary.
- Library Management: Add TV show libraries.
- Directory Browser: Browse file system.
- Show/Season/Episode Browsing: Navigate library structure.
- Episode Verification: Uses TMDB stills and CLIP image similarity to verify episodes.
- Scan History & Status: Track scanned files and view current scan progress.
- Settings: Manage application settings (e.g., reset scan history).
- Frontend: Next.js, React, TypeScript, Tailwind CSS
- Backend: Node.js, Express
- File Handling: Node.js fs module, glob pattern matching
-
Clone the repository:
git clone https://github.com/infiniteloopalchemist/wardarr.git cd wardarr -
Install Node.js dependencies:
npm install # or # yarn install
-
Install Python dependencies (preferably in a virtual environment):
# python -m venv .venv # Optional: Create virtual env # source .venv/bin/activate # Optional: Activate virtual env pip install -r requirements.txt
-
Create
.envfile: Create a file named.envin the project root and add your TMDB API key as shown in the Requirements section. -
Ensure FFmpeg is installed and accessible in your PATH.
-
Start the backend server:
npm run serverThis will start the Express server on port 5000.
-
In a new terminal, start the Next.js frontend:
npm run devThis will start the Next.js dev server on port 3000.
-
Access the application at http://localhost:3000
- Frontend Development: Run
npm run devto start the Next.js development server with hot reloading - Backend Development: Run
npm run dev:serverto start the Express server with nodemon for auto-reloading
GET /api/libraries: Get all librariesPOST /api/libraries: Add a new libraryGET /api/shows?path=...: Get all shows in a libraryGET /api/episodes?path=...: Get all episodes for a showGET /api/browse?path=...: Browse directoriesGET /api/stream?path=...: Stream video files
John "InfiniteLoopAlchemist" Floyd