K7 Media Server

Serveur multimédia
K7 est un serveur multimédia (vidéo & musique) auto-hébergé pour un petit cercle de famille et d'amis et développé par Kaybi.
Le nom vient de la prononciation française
/ka.sɛt/(cassette). L'idée est de ramener cette sensation d'étagère à la maison : cassettes audio, VHS, tout ce qui vous appartient et local.
SOMMAIRE
1. Efficience
K7 est une alternative aux principaux serveurs multimédias comme Emby, Jellyfin et Plex. Son installation, sa configuration et son utilisation demeurent simples et efficientes. Son développement, en cours, s'orientent à présent plus particulièrement sur la disponibilité des clients pour les différentes plateformes.
Caractéristiques
Noyau
- Open source (AGPL-3.0) - votre serveur, vos règles, pas de verrouillage du fournisseur
- Simple à déployer - aucune pile complexe requise
- Films, séries télévisées et musique : une étagère pour tout ce que vous possédez déjà localement (d'autres types peuvent arriver)
- Authentification locale + 2FA en option + OIDC en option - fonctionne hors ligne à la maison, branchez votre fournisseur d'identité lorsque vous avez besoin de SSO
- Mode invité - accès limité en option sans compte personnel (contrôlé par l'administrateur)
- Transcodage (ffmpeg, HLS) - jouer n'importe où, même lorsque le client ou le réseau ne peut pas gérer le fichier d'origine
- Fédération - liez deux instances K7 (la vôtre et celle d'un ami) pour partager et diffuser des médias et des métadonnées distants sans dupliquer les fichiers
Clients
- Web, Android (téléphone + TV), Windows, iOS, Mac, Linux (GTK4 expérimental) - même interface utilisateur partout (Blazor WASM ou MAUI + Blazor)
- Entièrement navigable au clavier - navigation spatiale sur l'ensemble de l'application
- Télécommande - piloter la lecture sur un appareil (téléviseur, téléphone, navigateur) à partir d'un autre client connecté sur le même serveur
- Chromecast (Web et Android uniquement) - diffuse des vidéos et de la musique sur n'importe quel appareil pris en charge
- OpenSubsonic - connectez des applications comme Symfonium ou Feishin avec un mot de passe d'application (Paramètres -> Clients externes)
- Les versions iOS et Mac existent mais ne sont pas testées par le mainteneur (pas de matériel Apple)
Personnalisation
- Valeurs par défaut à l'échelle du serveur : l'administrateur peut définir des valeurs par défaut pour presque toutes les personnalisations (mise en page d'accueil, lecteur vidéo, lecture, sélection de piste, etc.) ; chaque utilisateur peut les remplacer dans ses propres paramètres
- Page d'accueil personnalisée - épinglez ce qui compte pour vous au lieu d'un tableau de bord unique
- Navigation personnalisée - raccourcis facultatifs (groupes de bibliothèques, collections, listes de lecture, pages d'applications) sous forme de ligne d'accueil ou de barre de bureau sous le menu supérieur
- Filtres multimédias globaux : masquez le contenu que vous ne souhaitez jamais voir sur l'ensemble de l'application
- Préférences de lecture : qualité, sous-titres, saut d'intro, vignettes de la barre de recherche, etc., afin que chaque session de visionnage semble correcte
- Restrictions de bibliothèque et de profil : affinez qui peut accéder à quoi au-delà des simples règles de partage
- Métadonnées modifiables avec verrous de champ - corrigez ou remplacez les titres, les descriptions et plus encore, verrouillez les champs individuels afin que les actualisations des métadonnées n'écrasent pas vos modifications
Votre espace
- Listes de lecture, collections, historique, statistiques, avis - un seul endroit pour « votre » coin de l'étagère, pas enfoui dans les écrans d'administration
- Listes de lecture dynamiques - listes basées sur des règles (genre, année, nombre de lectures, artiste, etc.) qui se réévaluent à mesure que votre bibliothèque s'agrandit, comme une mixtape qui se met à jour
- Téléchargements hors ligne - prenez des médias sur des clients natifs et synchronisez la progression lorsque vous êtes de nouveau en ligne
Découverte musicale (AudioMuse AI)
- Intégration facultative avec AudioMuse AI auto-hébergé - radios d'ambiance, pistes similaires, chemins sonores et listes de lecture créées à partir d'une invite de texte, ainsi qu'une recherche en langage naturel dans la bibliothèque
- Maintient la découverte assistée par l'IA sur l'infrastructure que vous contrôlez ; désactivée par défaut jusqu'à ce que vous connectiez votre serveur AudioMuse
Social
- Sync Play - regardez ou écoutez ensemble à distance, comme si vous étiez sur le même canapé
- Profils partagés - suivez une série en couple (ou n'importe quel groupe) avec des statistiques et un historique fusionnés sur chaque compte
- Contrôles de visibilité - séparez ce que vous partagez et ce que vous acceptez de voir, par type de contenu (historique de lecture, avis, collections, listes de lecture, listes de lecture dynamiques) de et vers qui vous voulez : personne, votre serveur local, serveurs fédérés, personnes spécifiques
Administration
- Tableau de bord, diagnostics, tâches d'arrière-plan - voyez ce que fait le serveur sans SSH
- Notifications sortantes - règles de webhook personnalisables (filtres d'événements, modèles de charge utile) pour brancher K7 sur vos propres outils
- Outil d'importation - migrez depuis Plex, Jellyfin, Spotify et plus encore (outils/K7.Importer).
2. Pré-requis
2.1. Dossiers médias
Des dossiers qui contiennent tes médias à lire et à classer sur K7, (peuvent communs avec d'autres logiciels somme Jellyfin si installé), devront être créés suivant ton choix, groupés et classés suivant les formats du type Films, Séries, et Musique. Ces dossiers doivent être joignables par le logiciel Jellyfin sur ta machine ou sur un support connecté ou en réseau. Tu peux aussi dédier un RAID/Volume au stockage de ces médias.
2.2. Transcodage
Le transcodage est le processus de conversion d'un fichier multimédia (vidéo ou audio) ou d'une information d'un format de codage à un autre, en passant par une étape de décodage puis de réencodage. Cette opération est essentielle pour assurer la compatibilité entre le fichier source et l'appareil ou la plateforme de lecture, ou pour optimiser la taille et la qualité du fichier en ajustant la résolution, le débit binaire ou le codec.
Pour que le transcodage matériel puisse s’opérer, ton processeur (CPU) devra être doté d’une unité de traitement graphique – iGPU ou à défaut une carte graphique. La configuration proposée pour cet article sera pour les processeurs Intel équipés de la technologie Intel Quick Sync Video.
2.3. Accès serveur
L'accès au serveur K7 est nativement conçu pour un accès sur ton réseau local sur port 7080.
Pour un accès à distance afin de partager ta médiathèque sur internet, tu devras configurer un Nom De Domaine avec le Proxy inversé.
3. Installation
La pré-configuration peut être opérée avec deux méthodes :
Soit avec le terminal, en téléchargeant et installant le dossier proposé sur le GitHub (méthode classique Linux). Cependant, ce type d'installation ne te permettra pas d'intervenir et/ou de modifier directement sur l'application par sa tuile.
Soit (conseillé) en copiant-collant ce fichier YAML adapté pour ZimaOS (avec celui proposé sur le site du développeur). Ouvre la bascule.
YAML
K7 Media Server
networks:
k7-network:
external: false
ipam: {}
name: k7-network
services:
k7-server:
container_name: k7-server
depends_on:
postgres:
condition: service_healthy
deploy:
resources:
limits:
cpus: "2.00"
memory: 4GB
reservations:
cpus: "0.00"
memory: 256MB
devices:
- /dev/dri:/dev/dri
environment:
- Database__Provider=Postgres
- Database__UserID=postgres
- Database__Password=Zima-123456
- Database__Server=postgres
- Database__Port=5432
- Database__Name=K7
- Security__ApiKeys__HashSecret=kVvjBYelv18zKP5mN2xvY07TgAyshdhC
- Paths__Config=/data/config
- Paths__Metadatas=/data/metadatas
- Paths__Logs=/data/logs
- Paths__Transcoding=/data/transcoding
- PUID=999
- PGID=1000
- Security__ForceHttps=False
- TZ=Europe/Paris
- K7_SETUP_TOKEN=i0HUpw9nOuSIH0PTqLz4xmQlBzB4ARwn
healthcheck:
interval: 5s
retries: 3
start_period: 60s
test:
- CMD
- curl
- -fsS
- http://127.0.0.1:7080/alive
timeout: 3s
hostname: k7-server
image: ghcr.io/kaybi-gh/k7:latest
labels:
icon: https://cdn.jsdelivr.net/gh/selfhst/icons/svg/k7.svg
networks:
- k7-network
ports:
- mode: ingress
protocol: tcp
published: "7080"
target: 7080
restart: unless-stopped
security_opt:
- no-new-privileges:true
volumes:
- type: bind
source: /DATA/AppData/k7/k7-data
target: /data
- type: bind
source: /DATA/Media
target: /media
x-casaos:
ports:
- container: "7080"
description:
en_us: WebUI port (7080)
volumes:
- container: /data
description:
en_us: Data at /data
- container: /media/movies
description:
en_us: Data at /media/movies
postgres:
container_name: k7-postgres
deploy:
resources:
limits:
cpus: "1.00"
memory: 4GB
reservations:
cpus: "0.00"
memory: 256MB
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=Zima-123456
- POSTGRES_DB=K7
- TZ=Europe/Paris
healthcheck:
interval: 5s
retries: 5
test:
- CMD-SHELL
- pg_isready -U postgres
timeout: 3s
hostname: k7-postgres
image: postgres:18-alpine
networks:
- k7-network
ports:
- mode: ingress
protocol: tcp
published: "5432"
target: 5432
restart: unless-stopped
security_opt:
- no-new-privileges:true
volumes:
- source: /DATA/AppData/k7/k7-postgres-data
target: /var/lib/postgresql
type: bind
x-casaos:
architectures:
- amd64
- arm64
author: kaybi-gh
category: Media
description:
en_us: "K7 is a self-hosted media server for a small circle of family and
friends. The name comes from the French pronunciation /ka.sɛt/
(cassette). The idea is to bring back that feeling of a shelf at home:
audio tapes, VHS, everything yours and local."
developer: kaybi-gh
hostname: ""
icon: https://cdn.jsdelivr.net/gh/selfhst/icons/svg/k7.svg
index: /
is_uncontrolled: false
main: k7-server
port_map: "7080"
scheme: http
tagline:
en_us: Self-hosted media server for a small circle of family and friends.
title:
custom: K7
en_us: K73.1. Formulaire
Sur l'onglet Formulaire,
(1) k7-Server
(2) Monter
- /DATA/AppData/k7/k7-data=/data configuration de l'application, ne pas modifer
Il te faut monter les Volumes ou Dossiers dans lesquels sont tes médias. Il est inutile de monter dossier par dossier si ceux-ci sont situés dans un même volume. La correspondance de la colonne conteneur peut être personnalisé à ta guise et afin de te permettre d'identifier les volumes ou dossiers mappés sur la Web-UI de K7 (ex. /Films, /Series, /Musique etc.)
- /DATA/Media=/Media : si situé dans ZimaOS-HD [ne pas mapper l'ensemble du volume système, mais uniquement le(s) dossier(s)]
- /media/Volume2=/MEDIAS2 : si situé sur un volume
- /media/192.168.1.20/Media=/Serveur2 : si tes médias ont situés sur une machine montée sur ton ZimaOS
- Etc.
Au niveau de Environnement Variables
(3) Security__ApiKeys__HashSecret=génère ta propre clé sur par exemple ce site
(4) K7_SETUP_TOKEN=génère ta propre clé sur par exemple ce site
Copie-colle sur un bloc-note le K7_SETUP_TOKEN, tu en auras besoin pour la première connexion.
(5) Indique aussi tes PGID et PUID (autorisation d'accès aux dossiers médias).
Optionnel : tu peux, si tu le souhaites, changer le mot de passe de la Base de Données (DB) sur les onglets k7-server et postgres.
(6) Appareils
Ouvre "Avancé (afficher plus") et laisse /dev/dri/ sur la section Appareils, (si ton CPU est doté d'un iGPU ou carte graphique adjointe Intel).
Infos sur ton matériel GPU à commandes terminal.
Pour un GPU NVIDIA : voir la ligne de "Prise en charge"
3.2. Installer
Valide avec le bouton Installer et patiente le temps du chargement de l'image et de la création du dossier de configuration jellyfin dans AppData.
3.3. Autoriser ZFW
Autorise le port 7080 si tu as installé ZFW.
4. CONFIGURATION
4.1. Création du compte
Clique sur la nouvelle tuile créée Jellyfin, et le nouvel onglet te demande de créer ton compte administrateur.
Indique un (1) Nom + (2) un email optionnel + (3) un mot de passe à confirmer (avec exigeances de sécurité) et,
(4) Indique le Setup token créé précédemment à Environnement Variables
(5) Et, pour finir "Create local admin account"
4.2. Administration
Sur la page d'atterrissage, sélectionne sur l'icône Profil (en haut à droite), Administration (1).
(2) Sélectionne Default experience et General. Sélectionne Français et Save (puis rafraichis la page sur le navigateur).
(3) Descends sur Trancodage et vérifie (tester l'encodeur) que ton matériel est bien reconnu.
4.3. Bibliothèques
1. Nouvelle librairie
Toujours dans Administration générale, pour créer des bibliothèques, ouvre Contenu, (1) Bibliothèque et le bouton (2) + Nouvelle librairie (en haut à droite de la page).
Sélectionne le (3) type de média de la librairie à créer et Suivant,
(4) Indique un nom puis, sélectionne (5) le dossier correspondant (tu retrouveras les dossiers montés identifiés par le nom donné sur le Formulaire à Container). Vérifie aussi les configurations proposées par défaut (langue, indexation, capacités et traitement etc). Et, Suivant,
Vérifie, à présent sur le récapitulatif et Créer la librairie
2. Groupe de Bibliothèques
Chaque librairie est composé avec un seul dossier. Cette fonctionnalité te permet de regrouper plusieurs libraires (dossiers) pour créer une seule bibliothèque pour la navigation.
4.4. Autres fonctionnalités
L'onglet Administration permet de configurer le serveur K7 dans son ensemble : Création de Bibliothèque, Création et gestion des utilisateurs, Expérience (organisation visuelle et paramètres de lecture), Activité (historique et statistiques, Santé (diagnostique de scan et corrections) et Intégration pour les communications externes.
L'onglet Utilisateur est inhérent aux réglages personnalisés à chaque utilisateur avec principalement la configuration de l'Expérience et le Contenu.
5. Utilisation
Tu trouveras la liste des clients sur la page releases du GitHub de kaybi-gh/k7.
Actuellement, sont disponibles à l'installation les clients Android / Android TV, Windows, Linux et iOS.











