Files
kaizoku/README.md
T

83 lines
3.6 KiB
Markdown

# Kaizoku
Kaizoku is a local web app for searching, tracking, and downloading anime from Anikoto, AniNeko, and AnimePahe. It keeps the previous ani-cli-web style and management flows, but the downloader no longer uses `ani-cli`, `anipy-cli`, or AllManga/AllAnime.
## Features
- Search anime through the configured provider and tag results with available `SUB` and `DUB` episode languages.
- Choose the active search provider directly from the Search page.
- Prefer provider-supplied search artwork, with a local title-based thumbnail fallback when provider artwork is missing or broken.
- Queue single episodes or batches in subbed or dubbed mode.
- Open result actions in a floating window for watchlist, media type, library name, season, episode range, and download folder choices.
- Fall back across the other configured providers when an episode or stream cannot be resolved on the primary provider.
- Save files with Jellyfin-friendly layout: `TV/Series Name/Season 01/Series Name - S01E01.mp4`.
- Save English external subtitles when the provider exposes usable subtitle tracks.
- Manage watchlists for `Watching`, `Planned`, `Finished`, and `Dropped`.
- Periodically refresh selected watchlists and auto-download newly available episodes.
- Sync watchlist download flags from the filesystem.
- Hand completed libraries to Jellyfin TV or movie folders.
- Export/import watchlist backups.
- Send unified Discord notifications for downloads, refreshes, Jellyfin handoff, and runtime errors.
- Store configuration, queue state, and watchlist data in SQLite under `.kaizoku/`.
## Requirements
- Python 3.12 or newer.
- Node.js and npm for the provider bridge.
- `ffmpeg` available in `PATH`.
Install Node dependencies once:
```sh
npm install
```
Run locally:
```sh
./kaizoku
```
Then open:
```text
http://127.0.0.1:8421/
```
Useful environment variables:
- `ANI_CLI_WEB_HOST=0.0.0.0`
- `ANI_CLI_WEB_PORT=8421`
- `ANI_CLI_WEB_ALLOW_REMOTE=1`
- `ANI_CLI_WEB_AUTH_USERNAME=admin`
- `ANI_CLI_WEB_AUTH_PASSWORD=choose-a-long-random-password`
- `ANI_CLI_WEB_JOB_STDOUT=true`
- `ANI_CLI_WEB_STATE_ROOT=/path/to/state`
The `ANI_CLI_WEB_*` names are kept as compatibility aliases while the app transitions from the previous project.
## Docker
```sh
docker compose up -d --build
```
The compose file mounts:
- `./downloads` to `/downloads`
- `./.kaizoku` to `/app/.kaizoku`
The Docker image installs Python, Node.js, npm, and `ffmpeg`, then runs `npm install --omit=dev` for the provider bridge.
## Download Flow
Kaizoku stores provider-backed show IDs as `provider:id`, for example `anikoto:some-show-slug`. Queue jobs resolve the episode source through `providers/bridge.js`, then `provider_downloader.py` downloads the media with `ffmpeg` into a staging directory. If the primary provider cannot list, resolve, or download a requested episode, Kaizoku searches the same title on the remaining providers and tries the matching episode there. Existing finalization code moves staged files into the configured library layout, preserving data already present in production download folders.
## Data Safety
Kaizoku uses additive SQLite migrations for queue and watchlist schema changes. Upgrades do not delete configuration, watchlists, queue history, or downloaded files. Jellyfin handoff moves only completed library folders that pass the existing readiness checks.
## Provider Source
The Anikoto, AniNeko, and AnimePahe parser modules in `providers/extensions/Anime/` are adapted from TheYogMehta/extensions and retain their GPL/license headers. Kaizoku acts as a local client-side parser/downloader wrapper and does not host media.