Files
2026-06-09 18:40:21 +02:00

6.2 KiB

title, created, updated, type, tags, confidence, contested, sources
title created updated type tags confidence contested sources
Koito 2026-06-07 2026-06-07 app
catalogue
music
scrobble
listenbrainz
go
typescript
docker
high false
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
GitHub 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é)

# 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)

# 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

Pages Liées