Files
wiki/Catalogue-Self-Hosted/apps/app-koito.md
T
2026-06-09 18:40:21 +02:00

119 lines
6.2 KiB
Markdown

---
title: Koito
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, music, scrobble, listenbrainz, go, typescript, docker]
confidence: high
contested: false
sources:
- https://selfh.st/apps/?tag=Music+Streaming
- https://github.com/gabehf/Koito
- https://koito.io/
---
# 🎌 Koito (小糸)
> Scrobbler moderne compatible **ListenBrainz** écrit en Go + TypeScript : UI soignée, import massif depuis Maloja/LastFM/ListenBrainz/Spotify, et **relais** transparent vers un autre scrobbler pendant la phase beta.
| Métadonnée | Valeur |
| :--- | :--- |
| **Site web** | [https://koito.io](https://koito.io/) |
| **GitHub** | [https://github.com/gabehf/Koito](https://github.com/gabehf/Koito) |
| **License** | MIT |
| **Langage** | Go (67.3 %), TypeScript (31.3 %) |
| **Étoiles** | ≈810 ⭐ (41 sur selfh.st/apps) |
| **Dernière MAJ** | 2026-06-01 (v0.3.2) |
| **Catégorie** | [[cat-music]] |
## Description
**Koito** (小糸, homophone de *koi to* « avec amour ») est un scrobbler pour **ListenBrainz** conçu par `@gabehf`. Le projet est né d'une frustration avec **Maloja** (l'autre scrobbler auto-hébergé de référence) : le développeur a préféré **reconstruire** que contribuer, principalement pour des raisons d'UI et de design. Koito se positionne comme une **alternative moderne** : design themeable, statistiques élaborées, compatibilité totale avec l'écosystème ListenBrainz (et tout ce qui scrobble vers une URL ListenBrainz custom : Navidrome, [[app-multi-scrobbler]], [[app-koito]] lui-même, etc.).
Koito a une particularité rare : il peut fonctionner en **mode relais** (relay). Au lieu de remplacer brutalement votre setup actuel, vous pouvez pointer votre scrobbleur existant (Last.fm, Maloja, etc.) vers Koito, qui relaie ensuite vers la destination finale. Cela permet de tester Koito **sans risque** pendant son développement. C'est d'ailleurs ce que fait le développeur en interne.
Fonctionnalités clés : import depuis **Maloja**, **ListenBrainz**, **LastFM** et **Spotify** (historique complet), UI React soignée, page de stats avec visualisations, support des « love »/feedback, compatibilité native avec tout client Subsonic (Navidrome, [[app-lightweight-music-server]], Gonic, etc.) qui pousse vers une URL ListenBrainz custom, refetch automatique des pochettes manquantes au démarrage, support natif des clients MPRIS (Linux desktop), backend rapide en Go. La v0.3 a introduit un **refactor d'image cache** et un redesign UI complet (layout cards, mobile responsive). Koito embarque aussi sa propre API et supporte l'authentification utilisateur.
## Installation
### Docker (recommandé)
```yaml
# docker-compose.yml
services:
koito:
image: gabehf/koito:latest
container_name: koito
ports:
- "4110:4110"
volumes:
- ./koito:/etc/koito
restart: unless-stopped
environment:
- KOITO_LISTEN_ADDR=0.0.0.0:4110
- KOITO_IMAGE_CACHE_DIR=/etc/koito/cache
- KOITO_DB_PATH=/etc/koito/koito.db
```
Lancement : `docker compose up -d`, puis `http://localhost:4110`. Créez votre premier utilisateur via la CLI du conteneur (`docker exec -it koito koito create-user ...`).
### Manuelle (Go + npm)
```bash
# Backend
git clone https://github.com/gabehf/Koito.git
cd Koito
go build -o koito ./cmd/api
./koito --config /etc/koito/config.toml
# Frontend
cd client
npm install && npm run build
```
## Configuration
Koito utilise un fichier `config.toml` (ou variables d'environnement préfixées `KOITO_`) :
- `listen_addr` : `0.0.0.0:4110`
- `db_path` : chemin SQLite (par défaut `/etc/koito/koito.db`)
- `image_cache_dir` : dossier cache des pochettes/albums
- `scrobble_threshold`, `scrobble_interval` : comme sur les autres scrobblers
- `import_sources` : `listenbrainz`, `lastfm`, `maloja`, `spotify`
- `theme` : `light`, `dark`, `auto`
- `enable_relay` : `true` pour fonctionner comme proxy transparent
- `timezone` : pour les stats
Backend de stockage : **SQLite uniquement** (depuis la v0.3, le code Postgres a été retiré pour simplifier le déploiement). Pour la prod à fort volume, restez sur Maloja ou Listens.co.
## Alternatives
**Open Source :** **Maloja** (Python, le plus mature auto-hébergé), **ListenBrainz server** (officiel, MetaBrainz), [[app-multi-scrobbler]] (agrégateur qui pousse vers ListenBrainz), **lastfm-to-listenbrainz** (sync ponctuel), **listenbrainz-export** (backup), **WebScrobbler**, **Pano Scrobbler** (Android, source côté client), **ScrobbleMyLastfm** (Node), **switchify** (script de migration Last.fm → LB), **ytm-to-scrobbler** (YouTube Music → scrobble).
**Propriétaire (que cette app remplace) :** Last.fm Pro (≈3 $/mois) qui fournit des stats et charts avancés, **Spotify Wrapped** (annuel seulement, fermé), **Lastify** (cloud), **Pano Scrobbler Premium** (cloud sync). Koito vous offre un dashboard moderne **gratuit, self-hosted et compatible avec l'écosystème ListenBrainz ouvert** (projet MetaBrainz/MusicBrainz).
## Sécurité
- Koito n'a pas d'auth intégrée sur l'API HTTP par défaut : **obligatoire** de mettre un reverse proxy (Traefik/Caddy) avec **Authelia**, **Authentik** ou **basic auth** devant l'UI `4110`.
- L'API ListenBrainz écoute sur le même port : protégez-la avec un token d'API fort ou limitez l'accès au LAN.
- Volume `./koito` à sauvegarder (base SQLite = tout l'historique). Pas de réplication : prévoir un cron `sqlite3 .backup`.
- Restez sur l'image taguée (`:latest` ici mais vous pouvez figer `v0.3.2`) car le projet est **explicitement « unstable »** (avertissement du README).
- Le `image_cache_dir` peut devenir volumineux : prévoyez un job de nettoyage périodique.
## Ressources
- [Dépôt GitHub](https://github.com/gabehf/Koito)
- [Site officiel](https://koito.io/)
- [Guide d'installation](https://koito.io/guides/installation/)
- [Guide d'import](https://koito.io/guides/importing/)
- [Démarrage public](https://koito.mnrva.dev/)
- [ListenBrainz](https://listenbrainz.org/) — écosystème compatible
## Pages Liées
- [[cat-music]] — Catégorie Music
- [[recettes-docker-compose]] — Templates Docker Compose
- [[app-multi-scrobbler]] — Agrégateur complémentaire
- [[app-navidrome]] — Source Subsonic qui scrobble vers Koito
- [[securisation-home-lab]] — Reverse proxy + auth