Lukas e502dcb8bd Fix NFO 503 error on server reload with config fallback
- Add dynamic config loading in get_nfo_service() dependency
- Handle settings reset during uvicorn reload in development
- Add comprehensive tests for settings priority and fallback behavior
- All 4 unit tests passing (settings priority, config fallback, error cases)
- Update documentation with reload scenario fix
2026-01-18 12:16:05 +01:00
2025-10-12 22:39:51 +02:00
2025-11-01 19:23:32 +01:00
2025-12-15 14:07:04 +01:00
2025-10-12 18:05:31 +02:00
2025-05-31 20:46:30 +02:00
2025-11-15 16:56:12 +01:00
2025-11-15 09:11:02 +01:00

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
  • NFO metadata management with TMDB integration
  • Automatic poster/fanart/logo downloads
  • JWT-based authentication
  • SQLite database for persistence

Quick Start

Prerequisites

  • Python 3.10+
  • Conda (recommended) or virtualenv

Installation

  1. Clone the repository:
git clone https://github.com/your-repo/aniworld.git
cd aniworld
  1. Create and activate conda environment:
conda create -n AniWorld python=3.10
conda activate AniWorld
  1. Install dependencies:
pip install -r requirements.txt
  1. Start the server:
python -m uvicorn src.server.fastapi_app:app --host 127.0.0.1 --port 8000
  1. 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. (Optional) Configure NFO settings with your TMDB API key
  5. Login with your master password

NFO Metadata Setup (Optional)

For automatic NFO file generation with metadata and images:

  1. Get a free TMDB API key from https://www.themoviedb.org/settings/api
  2. Go to Configuration → NFO Settings in the web interface
  3. Enter your TMDB API key and click "Test Connection"
  4. Enable auto-creation and select which images to download
  5. NFO files will be created automatically during downloads

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
GET /api/nfo/check Check NFO status for anime
POST /api/nfo/create Create NFO files
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
TMDB_API_KEY (empty) TMDB API key for metadata
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
No description provided
Readme 181 MiB
Languages
Python 81.6%
JavaScript 13.2%
HTML 3.2%
CSS 1.6%
Shell 0.4%