Initial vault setup
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
---
|
||||
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
|
||||
Reference in New Issue
Block a user