Skip to content

Repository files navigation

AnimeWatcher

Docker Pulls Docker Image Version Docker Image Size Build & Publish .NET 10 License: MIT

AnimeWatcher is a self-hosted anime tracker. It monitors your favorite anime via the AniList API and sends you push notifications through Pushover when new episodes air, a new season starts, a sequel is announced, or a season finishes.

Anime Library

Features

  • 🔍 Search AniList — find any anime and add it to your watchlist with one click
  • 👁️ Background monitoring — polls AniList on a configurable interval (rate-limit aware)
  • 🔔 Pushover notifications — new episode, season started, new season announced, season finished
  • ⚙️ Global + per-anime preferences — override notification types for individual anime
  • 📖 Change history — see every episode and season change the monitor detected
  • 🌐 Synopsis translation — translate synopses in place (RTL languages supported)
  • 💾 Automatic backups — scheduled ZIP backups of the databases with retention pruning, plus export/import of your watchlist as JSON
  • 🔐 Flexible authentication — require login always, bypass it for your local network, or disable it entirely
  • 🚀 Fast UI — Blazor Interactive Auto (server-rendered first paint, WebAssembly after), response compression, and layered caching

Screenshots

Search Anime details
Search Details
Home Settings
Home Settings

Quick Start with Docker

The image is published on Docker Hub: albahadly/animewatcher.

docker run -d \
  --name animewatcher \
  -p 8111:8111 \
  -v animewatcher-data:/app/data \
  -v animewatcher-animedb:/app/animedb \
  -v animewatcher-keys:/home/appuser/.aspnet/DataProtection-Keys \
  -v animewatcher-logs:/app/logs \
  albahadly/animewatcher:latest

Then open http://localhost:8111.

Or with Docker Compose:

services:
  animewatcher:
    image: albahadly/animewatcher:latest
    container_name: animewatcher
    ports:
      - "8111:8111"
    volumes:
      - animewatcher-data:/app/data
      - animewatcher-animedb:/app/animedb
      - animewatcher-keys:/home/appuser/.aspnet/DataProtection-Keys
      - animewatcher-logs:/app/logs
    restart: unless-stopped

volumes:
  animewatcher-data:
  animewatcher-animedb:
  animewatcher-keys:
  animewatcher-logs:

See DOCKER.md for the full deployment guide: building the image yourself, SQL Server instead of SQLite, reverse proxy / HTTPS setup, backups, and troubleshooting.

First-run setup

  1. Open the app and register an account (authentication is required by default; you can relax this later under Settings → Security).
  2. Go to Settings and enter your Pushover User Key and App Token (create an application at pushover.net to get a token), then send a test notification.
  3. Use Search Anime to find shows and click Monitor This Anime.
  4. Done — the background service checks AniList on your configured interval and notifies you of changes.

Run from Source

Requires the .NET 10 SDK.

git clone https://github.com/albahadly/AnimeWatcher.git
cd AnimeWatcher
dotnet run --project AnimeWatcher/AnimeWatcher.csproj

The server hosts both the API and the client UI (default: http://localhost:5272).

Run the tests with:

dotnet test

Configuration

Setting Where Notes
Check interval, Pushover keys, notification types Settings page (stored in DB) Not environment variables — configured in the UI
Authentication mode Settings → Security Always required (default), local-network bypass, or disabled
Backups Settings → Database Interval, retention, manual backup/restore
ConnectionStrings__DefaultConnection Environment variable Identity (login) database. Defaults to SQLite; a Server=... connection string switches to SQL Server
ASPNETCORE_URLS Environment variable Listening URL, http://+:8111 in the Docker image

Data locations (Docker): anime data in /app/animedb/anime.db, identity in /app/data/identity.db, logs in /app/logs, backups alongside the anime DB. In development everything lives in the project folder.

Tech Stack

  • .NET 10 / C# 14 — ASP.NET Core Minimal APIs
  • Blazor Web App (Interactive Auto) — server-side rendering + WebAssembly client
  • EF Core 10 — SQLite (anime data); SQLite or SQL Server (identity)
  • Serilog — console + rolling file logs
  • Bootstrap 5 — UI
  • AniList GraphQL API — anime metadata; Pushover — notifications; MyMemory — translation

Solution Layout

AnimeWatcher/                # Server host: API endpoints, background services, server components
  Endpoints/                 # Minimal API endpoints (anime, settings, backup, translate, version)
  Services/                  # AniList client, cache, monitoring loop, Pushover, backups
  Data/                      # DbContexts + EF Core entities
  Components/                # Server-side Razor components (layout, Identity pages)
  Shared/                    # DTOs shared by the server

AnimeWatcher.Client/         # Blazor WebAssembly client
  Pages/                     # Interactive pages (Search, Monitored, AnimeDetails, Settings)
  Models/                    # Client-side mirror of the shared DTOs

AnimeWatcher.Tests/          # xUnit tests (monitoring service behavior)

API Overview

The server exposes a REST API under /api (used by the Blazor client):

  • GET /api/anime/search?query=... — search AniList
  • GET /api/anime/details/{aniListId} / seasons/{aniListId} / recommendations/{aniListId}
  • GET /api/anime/monitored / unmonitored — your watchlist
  • POST /api/anime/monitor / DELETE /api/anime/monitor/{aniListId} — add/remove
  • PUT /api/anime/preferences/{aniListId} — per-anime notification preferences
  • GET /api/anime/changes / season-changes — change history
  • GET /api/anime/export / POST /api/anime/import — watchlist JSON export/import
  • GET|PUT /api/settings/monitoring — global settings; POST /api/settings/test-notification
  • /api/settings/db/* — backup create/list/download/restore
  • POST /api/translate — synopsis translation proxy
  • GET /health — health check; GET /api/version — app version

Contributing

Issues and pull requests are welcome. Before submitting changes, see .github/copilot-instructions.md for the project's architecture rules and conventions (DTO synchronization, caching invalidation, logging, etc.), and run dotnet test.

License

This project is licensed under the MIT License.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages