A premium, community-driven platform for automated anime management and downloading. Built with a modern, high-performance architecture and a stunning user interface.
Note
This repository includes code that was generated or assisted by AI tools. All contributions should still be reviewed, tested, and maintained by humans.
- Sub-per-Sub Catch-up: Periodic series monitoring. Automatically detects and downloads missing episodes even for late subscriptions.
- Hierarchical Multi-Season Tracking: Advanced logic to handle series with multiple seasons, ensuring correct naming (S1, S2, etc.) and global episode synchronization.
- Multilingual Metadata: Choose your preferred language/region (Spanish, English, etc.) during setup for all series titles and descriptions.
- Native Internationalization (i18n): Fully localized interface in English and Spanish with automatic browser detection.
- Proactive Session Cleanup: Automatically terminates Crunchyroll streaming sessions after each download to prevent the dreaded
TOO_MANY_ACTIVE_STREAMSerror. - Smart Rate Limiting: Built-in mandatory cooldowns and connection management to ensure account safety and API compliance.
- Cross-Service Sync: Advanced matching logic that synchronizes catalog metadata with local library storage to prevent duplicate downloads.
- Real-time Monitoring Dashboard: Integrated widget for tracking automated check history, download volume, and system uptime.
- Granular Roles: Permission management for Administrators, Contributors, and Standard Users.
- Audit Logs: Full traceability of all administrative actions.
- Interactive Setup Wizard: A 4-step initial setup to configure your database (SQLite/MySQL), API keys (TMDB/TVDB), and credentials.
- Modern UI/UX: Ultra-responsive dark mode interface with fluid micro-animations and integrated image editors.
Before starting, ensure your environment meets the following criteria for a smooth experience:
- System: Windows 10/11 or Linux (Ubuntu/Debian recommended).
- Node.js: v22.0.0 or later (Required for native execution).
- pnpm: v10 or later (Corepack recommended).
- FFmpeg: v5.0 or later (Must be in your system's PATH).
- Git: Required for cloning submodules.
- MKVToolNix (
mkvmerge): Must be in your system's PATH. - DRM (Optional): At least one functional CDM (Widevine/Playready) is required to download protected content in high quality.
- Docker (Recommended): Docker Desktop or Engine with Docker Compose v3+.
- Clone the repository:
git clone --recursive https://github.com/CrunchyDL/CrunchyDL.git cd CrunchyDL - Configure DRM (Optional but recommended):
Place your CDM files in the following folders (created automatically or manually):
widevine/: Client blob and private key (or.wvdfile).playready/:bgroupcert.datandzgpriv.dat.
- Start with Docker:
docker-compose up -d
- Complete the Setup:
Visit
http://localhost:3001and follow the Setup Wizard to initialize your administrator account and services.
If you prefer to run the application directly on your host system (Windows or Linux) without Docker, follow these steps:
- Node.js: v22 or later.
- pnpm: v10 or later.
- FFmpeg: Must be installed and in your system's PATH.
- Git: For cloning and submodules.
- MKVToolNix (
mkvmerge): Must be installed and in your system's PATH. - DRM Tools (Windows): Either mp4decrypt or shaka-packager must be in your PATH for decryption to work.
We provide helper scripts to automate the build and dependency installation:
Windows (PowerShell):
.\scripts\setup-native.ps1Linux (Bash):
bash scripts/setup-native.sh- Initialize Submodules:
git submodule update --init --recursive - Frontend Build:
cd frontend && pnpm install --frozen-lockfile && pnpm run build - Prepare Backend: Copy
frontend/dist/*tobackend/public/ - Backend Setup:
cd backend && pnpm install --frozen-lockfile - Submodule Build:
cd backend/multi-downloader-nx && pnpm install --frozen-lockfile && pnpm run tsc false false - Start Server:
cd backend && node index.js
Once the setup is complete, you can start the server using the launchers in the root directory:
- Windows: Double-click
run-windows.bat - Linux: Run
bash run-linux.sh
Visit http://localhost:3001 to use the application.
CrunchyDL can translate an available English subtitle into the translated subtitle languages selected in Settings. The normal subtitle priority still controls default track order: if a translated language is also in the priority list, it is handled before other translated extras. Official subtitles are never duplicated.
The setup wizard and Settings page offer an explicit translation toggle plus two optional providers. You may leave translation disabled, enable either provider, or configure both with automatic failover:
- DeepL API Free: the most accurate provider in normal use. It requires a key and has a monthly character quota.
- LibreTranslate: open source and self-hostable, or usable through a remote LibreTranslate-compatible API. A local instance avoids external quotas, but requires an additional service and uses generic Spanish rather than separate
es-ESandes-419models. Translation quality can contain mistakes. - NLLB Local: local AI translation using Meta's NLLB model through the bundled optional service. It is heavier than LibreTranslate and downloads the model on first start, but it runs locally and does not use an external quota. NLLB-Translate tends to translate more literally, so subtitles can contain wording errors or unnatural phrasing.
Keys entered in the setup wizard are stored encrypted and work for Docker and native installations. You can rotate providers, URLs, keys, translated target languages, and optional .ass export later in Settings. Exported translated .ass files are muxed into the video and copied to a subtitles/ subfolder inside the series folder.
If you enable .ass export, the translated subtitle file can be edited manually after download. This is useful for fixing literal or awkward lines from NLLB-Translate or LibreTranslate so the subtitles read naturally.
To run the bundled optional LibreTranslate service in Docker with English and Spanish models:
docker compose --profile libretranslate up -d --buildUse http://libretranslate:5000 as the LibreTranslate URL inside the Docker setup wizard when the web app runs in Docker. For a native LibreTranslate service, the usual URL is http://localhost:5000. For a hosted API, enter the API base URL and optional API key in Settings.
To run the bundled optional NLLB service in Docker:
docker compose --profile nllb up -d --buildUse http://nllb:5001 as the NLLB URL inside the Docker setup wizard when the web app runs in Docker. For a native/local NLLB service, use http://localhost:5001. The default Docker service uses facebook/nllb-200-distilled-600M and stores the model cache in data/nllb-cache.
To run LibreTranslate natively with only the English and Spanish models:
pip install libretranslate
libretranslate --load-only en,esFor direct CLI use or environment-based overrides, see .env.example. Useful overrides include SUBTITLE_TRANSLATION_ENABLED, SUBTITLE_TRANSLATION_PROVIDERS, LIBRETRANSLATE_URL, LIBRETRANSLATE_API_KEY, NLLB_TRANSLATE_URL, and NLLB_MODEL. DeepL API Free currently allows up to 500,000 translated characters per month.
The server keeps full verbose output in the console, but logs/server.log is compact by default to avoid huge text files. In compact mode, the file stores stderr, warnings/errors, lifecycle messages, failed requests, and completion events.
Optional environment variables:
SERVER_FILE_LOG_MODE=compact|all|off(default:compact)SERVER_LOG_MAX_BYTES=5242880(default: 5 MB before rotation)SERVER_LOG_MAX_FILES=3(default: keepserver.log.1toserver.log.3)SERVER_LOG_MAX_LINE_CHARS=2000(default: truncate very long lines)SERVER_LOG_PATH=/custom/path/server.log(default:logs/server.log)
For a more integrated experience on Windows and Linux, we provide a lightweight System Tray launcher that allows you to start the server and open the web interface from your taskbar.
The Launcher also includes an administrator interface with service controls, repository selection, live system metrics, library counters, disk usage, and console access.
Before using it for the first time, you need to compile the binary:
Windows:
- Double-click
build-launcher.bat
Linux:
- Run
bash build-launcher.sh
Once built, you can start it using:
- Windows: Double-click
start-launcher.bator runlauncher-bin/crunchydl-launcher.exe - Linux: Run
launcher-bin/crunchydl-launcher(ensure it has execute permissions:chmod +x)
Right-click the orange icon in your system tray to access the menu.
This application uses the multi-downloader-nx core for decryption. To enable high-quality downloading (1080p+), you must provide your own CDM (Content Decryption Module) files.
- Widevine: Recommended for most content. Put your files in the root
/widevinefolder. - Playready: Supported for specific streams. Put your files in the root
/playreadyfolder.
Important
Legal Disclaimer: This software is intended for personal, educational, and research purposes ONLY. We do not provide any copyrighted content, decryption keys, or bypasses for digital rights management. The user is solely responsible for obtaining the necessary credentials and CDM files from their own legal devices and complying with the Terms of Service of any platform accessed.
| Layer | Technologies |
|---|---|
| Frontend | React 18, Vite, Vanilla CSS, Lucide Icons, i18next |
| Backend | Node.js, Express, Undici, FFmpeg |
| Database | SQLite (default) / MySQL (optional) |
| Infrastructure | Docker & Docker Compose |
If you like the project and want to support its development, you can buy me a coffee:
You can also see our list of amazing Donors.
Join our Discord Server to get support, share suggestions, or just chat with other users!
Licensed under the PolyForm Noncommercial 1.0.0. Personal and hobbyist use is permitted; commercial use is strictly prohibited.
See the LICENSE file for more details.

