# Aniworld Download Manager A web-based anime download manager with REST API, WebSocket real-time updates, and a modern web interface. ## Features - Web interface for managing anime library - REST API for programmatic access - WebSocket real-time progress updates - Download queue with priority management - Automatic library scanning for missing episodes - JWT-based authentication - SQLite database for persistence ## Quick Start ### Prerequisites - Python 3.10+ - Conda (recommended) or virtualenv ### Installation 1. Clone the repository: ```bash git clone https://github.com/your-repo/aniworld.git cd aniworld ``` 2. Create and activate conda environment: ```bash conda create -n AniWorld python=3.10 conda activate AniWorld ``` 3. Install dependencies: ```bash pip install -r requirements.txt ``` 4. Start the server: ```bash python -m uvicorn src.server.fastapi_app:app --host 127.0.0.1 --port 8000 ``` 5. Open http://127.0.0.1:8000 in your browser ### First-Time Setup 1. Navigate to http://127.0.0.1:8000/setup 2. Set a master password (minimum 8 characters, mixed case, number, special character) 3. Configure your anime directory path 4. Login with your master password ## Documentation | Document | Description | | ---------------------------------------------- | -------------------------------- | | [docs/API.md](docs/API.md) | REST API and WebSocket reference | | [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) | System architecture and design | | [docs/CONFIGURATION.md](docs/CONFIGURATION.md) | Configuration options | | [docs/DATABASE.md](docs/DATABASE.md) | Database schema | | [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md) | Developer setup guide | | [docs/TESTING.md](docs/TESTING.md) | Testing guidelines | ## Project Structure ``` src/ +-- cli/ # CLI interface (legacy) +-- config/ # Application settings +-- core/ # Domain logic | +-- SeriesApp.py # Main application facade | +-- SerieScanner.py # Directory scanning | +-- entities/ # Domain entities | +-- providers/ # External provider adapters +-- server/ # FastAPI web server +-- api/ # REST API endpoints +-- services/ # Business logic +-- models/ # Pydantic models +-- database/ # SQLAlchemy ORM +-- middleware/ # Auth, rate limiting ``` ## API Endpoints | Endpoint | Description | | ------------------------------ | -------------------------------- | | `POST /api/auth/login` | Authenticate and get JWT token | | `GET /api/anime` | List anime with missing episodes | | `GET /api/anime/search?query=` | Search for anime | | `POST /api/queue/add` | Add episodes to download queue | | `POST /api/queue/start` | Start queue processing | | `GET /api/queue/status` | Get queue status | | `WS /ws/connect` | WebSocket for real-time updates | See [docs/API.md](docs/API.md) for complete API reference. ## Configuration Environment variables (via `.env` file): | Variable | Default | Description | | ----------------- | ------------------------------ | ---------------------- | | `JWT_SECRET_KEY` | (random) | Secret for JWT signing | | `DATABASE_URL` | `sqlite:///./data/aniworld.db` | Database connection | | `ANIME_DIRECTORY` | (empty) | Path to anime library | | `LOG_LEVEL` | `INFO` | Logging level | See [docs/CONFIGURATION.md](docs/CONFIGURATION.md) for all options. ## Running Tests ```bash # Run all tests conda run -n AniWorld python -m pytest tests/ -v # Run unit tests only conda run -n AniWorld python -m pytest tests/unit/ -v # Run integration tests conda run -n AniWorld python -m pytest tests/integration/ -v ``` ## Technology Stack - **Web Framework**: FastAPI 0.104.1 - **Database**: SQLite + SQLAlchemy 2.0 - **Auth**: JWT (python-jose) + passlib - **Validation**: Pydantic 2.5 - **Logging**: structlog - **Testing**: pytest + pytest-asyncio ## License MIT License