- Add year property to Serie entity with name_with_year - Add year column to AnimeSeries database model - Add get_year() method to AniworldLoader provider - Extract year from folder names before fetching from API - Update SerieScanner to populate year during rescan - Update add_series endpoint to fetch and store year - Optimize: check folder name for year before API call
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
- Clone the repository:
git clone https://github.com/your-repo/aniworld.git
cd aniworld
- Create and activate conda environment:
conda create -n AniWorld python=3.10
conda activate AniWorld
- Install dependencies:
pip install -r requirements.txt
- Start the server:
python -m uvicorn src.server.fastapi_app:app --host 127.0.0.1 --port 8000
- Open http://127.0.0.1:8000 in your browser
First-Time Setup
- Navigate to http://127.0.0.1:8000/setup
- Set a master password (minimum 8 characters, mixed case, number, special character)
- Configure your anime directory path
- Login with your master password
Documentation
| Document | Description |
|---|---|
| docs/API.md | REST API and WebSocket reference |
| docs/ARCHITECTURE.md | System architecture and design |
| docs/CONFIGURATION.md | Configuration options |
| docs/DATABASE.md | Database schema |
| docs/DEVELOPMENT.md | Developer setup guide |
| 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 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 for all options.
Running Tests
# 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
Description
Languages
Python
78.5%
JavaScript
14.7%
HTML
3.3%
CSS
2.9%
Shell
0.4%
Other
0.2%