Ctrl K
ComunidadGuías…

README.md

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# AniKoKo

> Hindi-dub anime, streamed clean. FastAPI scraping backend + zero-build vanilla JS frontend.

Self-hosted aggregator that scrapes DesiDubAnime for metadata and stream sources, normalizes them into one JSON API, and serves them through a lightweight client with HLS playback, embed fallbacks, and downloads.

## Layout

```
backend/   — FastAPI scraping + streaming API
frontend/  — Single-page client (HTML + CSS + vanilla JS)
```

## Quick start

### 1. Backend

```bash
python3 -m venv .venv
source .venv/bin/activate        # Windows: .venv\Scripts\activate
pip install -r requirements.txt
cp backend/.env.example backend/.env   # edit if you need a proxy
python3 -m backend.main
```

API lives at `http://localhost:8000` — docs at `/docs`.

### 2. Frontend

Serve the static files from any HTTP server:

```bash
cd frontend
python3 -m http.server 5500
```

Open `http://localhost:5500`. The frontend talks to `http://localhost:8000` by default. To point it somewhere else, edit the `<meta name="anikoko-api">` tag in `index.html`.

## API

| Endpoint | Purpose |
|----------|---------|
| `GET /api/latest?provider=&page=1` | Latest additions |
| `GET /api/search?q=&provider=` | Search (alias + fuzzy) |
| `GET /api/anime?url=&provider=` | Series detail + episode list |
| `GET /api/sources?url=&provider=` | Per-episode stream sources |
| `GET /api/resolve?url=` | Debug an embed URL resolver |
| `GET /proxy/stream?url=&referer=` | HLS/MP4 streaming proxy |
| `GET /proxy/download?url=&filename=` | Download proxy |
| `GET /proxy/img?url=&referer=` | Image proxy |

## Provider

- **desidubanime** — `https://www.desidubanime.me` (kiranime WordPress theme)

Adding a provider means:
1. copy `backend/scrapers/desidubanime.py` to a new module
2. update selectors / API shapes for the new site
3. register it in `backend/scrapers/registry.py` and `backend/config.py`

## Notes

- HLS playback uses hls.js on the client (loaded from CDN) with native fallback on Safari.
- Vidmoly sources are intentionally filtered out — CDN is rate-limited and stalls playback.
- Metadata comes from WP REST `/wp-json/wp/v2/anime`; episodes come from HTML because kiranime doesn't expose the series→episode relation via REST.

## License

MIT — see LICENSE.