Skip to content

Latest commit

 

History

413 Commits

Folders and files

Repository files navigation

AutoAnimeDownloader

Automatically downloads your anime from your Anilist or MyAnimeList watching list.

Syncs with Anilist and MyAnimeList (one or more accounts — or none at all), scrapes Nyaa for matching torrents, and downloads them with a built-in BitTorrent client — all unattended, from a single self-contained binary (no external torrent client to install or configure). Includes an embedded Svelte web UI for monitoring, torrent management and configuration.

CI


Table of Contents


Features

  • Automatic Downloads — monitors your Anilist watching list and downloads new episodes as they air
  • Multi-account Anilist — sync several usernames at once; an episode is only deleted once every account has watched it
  • MyAnimeList lists — sync public MyAnimeList lists alongside (or instead of) Anilist; titles and episodes are still resolved through Anilist, so both count as accounts for the download and delete rules
  • Standalone animes — track anime that is in no Anilist list (search + add from the UI), with manual watch progress. An Anilist account is optional; the app runs fine with none
  • Batch / season packs — when the Nyaa search returns a pack that covers what's missing, it downloads the pack instead of episode by episode (capped by a configurable torrent size ceiling)
  • Embedded BitTorrent client — downloads and seeds internally (via rain); no qBittorrent or other external client required
  • Download queue — concurrent-download limit with a queue, manual prioritization, pause/resume/announce/delete per torrent or in bulk
  • Disk-space guard — stops adding torrents below a configurable free-space percentage; free/total space shown on the dashboard
  • Smart torrent picking — configurable ranking (fansub, resolution, source, codec, audio, health), ignore list, minimum seeders, size ceilings and adaptive Nyaa pagination
  • Jellyfin-ready library — completed episodes are hardlinked into your library folder (optionally with Jellyfin naming) while the original keeps seeding
  • Webhook notifications — fire templated webhooks on new episode / download completed / download failed, optionally batched into one message per time window
  • Manual magnet paste — bypass the search and hand a magnet link straight to the client, per episode or per anime
  • Web UI — monitoring, live torrent management, configuration and logs in the browser
  • CLI — command-line interface for scripting and advanced users
  • Real-time Updates — WebSocket support for live status in the UI
  • Self-contained — frontend and torrent client embedded in the binary, no separate server needed
  • Cross-platform — Linux (amd64/arm64) and Windows

Screenshots

Dashboard Anime Status Configuration
Dashboard Anime Status Configuration

Requirements

  • A completed anime path — the library folder. It's the only required setting; the download/seeding directory (<completed_anime_path>/.torrents) is derived from it, so the two always share a filesystem
  • Anilist and/or MyAnimeList account(s) (usernames only, no password needed; a MyAnimeList list must be public) — optional: without one you can still add animes manually as standalone

That's it — the BitTorrent client is built in, so there is no qBittorrent (or any other torrent client) to install or configure.

Upgrading from a very old (qBittorrent-based) version? completed_anime_path is now required, and the download directory lives nested inside it (<completed_anime_path>/.torrents). The automatic migration off the old save_path has been removed — if you are coming from a version that still had save_path, move that folder's contents into <completed_anime_path>/.torrents yourself before starting, or the torrents will re-download from scratch.

Ports: the embedded client listens on a default port range (20000–30000) and finds peers via DHT/PEX. There is no automatic port forwarding (UPnP/NAT-PMP); forwarding a port is optional and only improves inbound connectivity.

Installation

Arch Linux (AUR)

# using yay
yay -S autoanimedownloader-bin

# using paru
paru -S autoanimedownloader-bin

After install, the systemd user service starts automatically. Access the web UI at http://localhost:8091.

Linux (other distros)

One-liner — downloads the latest release for your architecture, verifies its checksum and runs make install-user (~/.local/bin, no sudo). Run it again to update:

curl -fsSL https://raw.githubusercontent.com/icarosuper/AutoAnimeDownloader/master/install.sh | bash

Or by hand: grab the zip for your architecture from the latest release — AutoAnimeDownloader_Linux_x86_v*.zip (x86_64) or AutoAnimeDownloader_Linux_Arm64_v*.zip (ARM64).

unzip AutoAnimeDownloader_Linux_x86_v*.zip
cd AutoAnimeDownloader_Linux_x86_v*
make install-user          # ~/.local/bin, no sudo
# or:
sudo make install-global   # /usr/local/bin, system-wide

This installs:

  • autoanimedownloader-daemon — main daemon with embedded web UI
  • autoanimedownloader — command-line interface
  • systemd user service (starts automatically)

Access the web UI at http://localhost:8091.

Uninstall: use the counterpart of how you installed.

make uninstall-user
# or:
sudo make uninstall-global

Windows

Download AutoAnimeDownloader_Windows_v*.exe from the latest release and run it — no installation needed.

Access the web UI at http://localhost:8091. It runs in the foreground — there is no Windows installer or background service yet.

See all releases for older versions.

Usage

Web UI

Open http://localhost:8091 in your browser.

  • Status (#/) — daemon status, start/stop, force check, download speed, disk space, and the anime list; click an anime for its episodes and per-episode actions
  • Add anime (#/add) — search Anilist and track an anime that is in no list
  • Downloads (#/downloads) — live torrents grouped by anime: pause, resume, re-announce, prioritize, delete (single or bulk)
  • Config (#/config) — library path, Anilist and MyAnimeList usernames, download rules, torrent search tuning
  • Priorities (#/priorities) — fansub/resolution/source/codec/audio ranking and ignore list
  • Notifications (#/notifications) — webhook presets and test firing
  • Logs (#/logs) — tail the daemon log with level filter and search

CLI

autoanimedownloader status          # check daemon status
autoanimedownloader loop start      # start the download loop
autoanimedownloader loop stop       # stop the download loop
autoanimedownloader check           # force a check for new episodes
autoanimedownloader config get      # view current configuration
autoanimedownloader animes          # list monitored anime
autoanimedownloader logs --lines 50 # view recent logs

See the CLI Guide for the full reference.

Building from Source

Prerequisites: Go 1.25+, Bun (not npm), make (Linux/macOS/WSL), Docker (only for the cross-platform make build)

The frontend must be built before the Go binaries, as it's embedded into the daemon.

git clone https://github.com/icarosuper/AutoAnimeDownloader.git
cd AutoAnimeDownloader

# Linux/macOS/WSL (cross-builds all platforms via Docker)
make build

# Any platform, no Docker — builds for the host only
cd src/internal/frontend && bun install && bun run build && cd ../../..
go build -o build/autoanimedownloader-daemon ./src/cmd/daemon
go build -o build/autoanimedownloader ./src/cmd/cli

See the Build Guide for full details including cross-compilation and Docker builds.

Configuration

Configure through the web UI or CLI. Settings are stored in:

  • Linux: ~/.autoAnimeDownloader/config.json
  • Windows: %APPDATA%\.autoAnimeDownloader\config.json

Key settings:

Setting Description
Completed Anime Path Jellyfin library — the only required setting. Episodes are hardlinked into it; torrents download and seed in <path>/.torrents
Anilist Usernames One or more Anilist usernames to sync (optional)
MyAnimeList Usernames One or more MyAnimeList usernames to sync (optional; the list must be public)
Check Interval How often to check for new episodes (minutes)
Download / Delete Statuses Which list statuses (CURRENT, COMPLETED, …) and media statuses (RELEASING, FINISHED, …) are eligible for download or auto-deletion
Max Episodes per Anime Ceiling of kept episodes per anime, and the width of the pack-selection window
Max Concurrent Downloads How many torrents download at once; the rest wait in the queue
Min Free Disk % Below this, no new torrent is added
Max Batch / Episode Torrent Size Size ceilings (GiB) dropping oversized results from the search
Min Seeders / Max Search Pages Nyaa result floor and how deep the paginated search may go
Rename files to a standard format Name the library hardlink Anime Name - E05.mkv, batch packs included (useful for Plex/Jellyfin)
Notifications Webhook presets and the batching window

Full field-by-field reference: Config Reference.

Troubleshooting

Daemon won't start

  • Check if port 8091 is in use: ss -tlnp | grep 8091
  • Make sure the completed anime path is set
  • Check service logs: systemctl --user status autoanimedownloader

Downloaded but nothing shows up in the library

  • The library filesystem must support hardlinks (exFAT/FAT32 and some SMB shares don't) — the daemon rejects such a path on save
  • Check the logs for Organize: messages: autoanimedownloader logs --search Organize

Anime not found on Nyaa

  • The anime title from Anilist may not match Nyaa's naming — paste a magnet directly on the anime's detail page (per anime or per episode)
  • Relax or adjust the subtitle group / resolution filters

No torrents matching filters

  • Check your priority lists (resolution, fansub) and the ignore list on #/priorities
  • Lower min_seeders or raise the size ceilings — results below/above them are dropped before ranking

Downloads stuck as "queued"

  • That's the concurrency limit (max_concurrent_downloads); raise it, or prioritize a torrent from the Downloads screen

Nothing is being added anymore

  • Free space minus the queue's remaining write may be below min_free_disk_gb — the dashboard shows a low-disk warning while that's the case

Frontend not loading

Contributing

Contributions are welcome! See the Development Guide for details.

License

Licensed under the GNU General Public License v3.0 — see LICENSE for details.

Credits