init
This commit is contained in:
@@ -1,2 +1,56 @@
|
||||
# kavita-lightnovel-metadata-fetcher
|
||||
|
||||
Pulls metadata (summary, tags, genres, characters, staff, score,
|
||||
cover, links, related series) for light novels from **MangaBaka**,
|
||||
enriched with **MyAnimeList** and **AniList** data, and writes it
|
||||
back to a **Kavita** server through its REST API.
|
||||
|
||||
No file mover, no ComicInfo.xml — the source of truth is Kavita
|
||||
itself. Series are discovered via the Kavita library API.
|
||||
|
||||
## Features
|
||||
|
||||
- Match every series in one or more Kavita libraries against
|
||||
MangaBaka and persist the match in `matches.json` (editable via
|
||||
the web UI).
|
||||
- Update metadata for a single series or all matched series at
|
||||
once. Updates are diff-based:
|
||||
- Locked fields in Kavita are never overwritten.
|
||||
- List fields (tags, genres, characters, writers, …) are merged:
|
||||
new items are added, removed items are dropped.
|
||||
- Cover images are only re-uploaded when MangaBaka's cover URL
|
||||
actually changed.
|
||||
- Characters and authors are synced to Kavita Person records
|
||||
(image, description, MAL/AniList id) via Kavita's `/api/Person`
|
||||
endpoints.
|
||||
- MangaBaka relationships (sequel / prequel / spin-off / …) are
|
||||
mirrored as Kavita series relationships, and every related
|
||||
series that exists in Kavita is added to a shared collection.
|
||||
|
||||
## Environment
|
||||
|
||||
| Variable | Default | Description |
|
||||
| ------------------ | ------------------------- | -------------------------------------------------------- |
|
||||
| `KAVITA_URL` | — | Base URL of the Kavita server, e.g. `http://kavita:5000` |
|
||||
| `KAVITA_API_KEY` | — | API key from Kavita user settings |
|
||||
| `LIBRARY_IDS` | _(empty)_ | Default libraries (CSV of ids). Empty = pick in WebUI. |
|
||||
| `LANGUAGE` | `en` | Series language ISO code (used for `language` field) |
|
||||
| `REQUEST_TIMEOUT` | `30` | HTTP timeout in seconds |
|
||||
| `MATCH_PATH` | `/config/matches.json` | Where to persist the match cache |
|
||||
| `WEB_HOST` | `0.0.0.0` | Bind host for the Flask UI |
|
||||
| `WEB_PORT` | `8080` | Bind port for the Flask UI |
|
||||
|
||||
## Running locally
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
KAVITA_URL=http://localhost:5000 KAVITA_API_KEY=... python main.py
|
||||
```
|
||||
|
||||
Then open <http://localhost:8080/>.
|
||||
|
||||
## Docker
|
||||
|
||||
```bash
|
||||
docker compose -f docker-compose.prod.yml up -d
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user