Kodi media center : configuration avancée et automatisation
Configurez Kodi en profondeur : base de données centralisée, transcodage, DLNA, accès distant sécurisé et scripts d'automatisation.
Kodi media center : configuration avancée et automatisation
Ce guide suppose que Kodi 21.x (Omega) est déjà installé. On va couvrir la configuration avancée : base de données MySQL partagée entre plusieurs instances Kodi, accès distant sécurisé, intégration DLNA/UPnP, gestion fine des sources réseau, extensions de scraping avancées, et automatisation avec des scripts.
Pré-requis
- Kodi 21.3 Omega installé et fonctionnel
- Accès SSH ou terminal sur la machine hôte
- Connaissances de base en réseau (IP, ports, pare-feu)
- Un NAS ou serveur de fichiers pour le stockage centralisé (recommandé)
- MariaDB/MySQL si vous voulez une base partagée multi-instances
1 — Installation headless sur un serveur Linux
Sur un serveur Ubuntu/Debian sans interface graphique, Kodi peut tourner en mode headless via son API JSON-RPC.
## Installer Kodi depuis le PPA officiel
sudo add-apt-repository ppa:team-xbmc/ppa
sudo apt update
sudo apt install kodi kodi-headless
## Créer un utilisateur dédié
sudo useradd -r -m -d /var/lib/kodi -s /usr/sbin/nologin kodi
## Créer le service systemd
sudo tee /etc/systemd/system/kodi-headless.service << 'EOF'
[Unit]
Description=Kodi Media Center (headless)
After=network-online.target
Wants=network-online.target
[Service]
User=kodi
Group=kodi
Type=simple
ExecStart=/usr/bin/kodi-standalone
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
## Activer et démarrer
sudo systemctl daemon-reload
sudo systemctl enable —now kodi-headless2 — Base de données MySQL/MariaDB centralisée
Si vous avez plusieurs appareils avec Kodi (salon, chambre, bureau), une base centralisée permet de partager la bibliothèque et la progression de lecture entre toutes les instances.
Installer MariaDB
## Sur le serveur qui hébergera la base de données
sudo apt install mariadb-server
sudo mysql_secure_installationRépondez "Y" à toutes les questions de sécurisation.
Créer l'utilisateur Kodi
sudo mysql -u root -p— Créer l'utilisateur avec accès réseau
CREATE USER 'kodi'@'%' IDENTIFIED BY 'motdepasse_solide_ici';
— Kodi crée ses propres bases, il faut des droits larges
GRANT ALL ON *.* TO 'kodi'@'%';
FLUSH PRIVILEGES;
EXIT;Ouvrir MariaDB au réseau local
## Éditer la configuration MariaDB
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnfModifiez la ligne bind-address :
## Remplacer 127.0.0.1 par l'IP du serveur ou 0.0.0.0
bind-address = 0.0.0.0sudo systemctl restart mariadbConfigurer chaque instance Kodi
Créez ou éditez le fichier advancedsettings.xml dans le dossier userdata de Kodi :
- Linux :
~/.kodi/userdata/advancedsettings.xml - Windows :
%APPDATA%\Kodi\userdata\advancedsettings.xml - macOS :
~/Library/Application Support/Kodi/userdata/advancedsettings.xml - LibreELEC :
/storage/.kodi/userdata/advancedsettings.xml
<advancedsettings>
<videodatabase>
<type>mysql</type>
<host>192.168.1.100</host>
<port>3306</port>
<user>kodi</user>
<pass>motdepasse_solide_ici</pass>
</videodatabase>
<musicdatabase>
<type>mysql</type>
<host>192.168.1.100</host>
<port>3306</port>
<user>kodi</user>
<pass>motdepasse_solide_ici</pass>
</musicdatabase>
<videolibrary>
<importwatchedstate>true</importwatchedstate>
<importresumepoint>true</importresumepoint>
</videolibrary>
</advancedsettings>Remplacez 192.168.1.100 par l'IP de votre serveur MariaDB.
Au prochain démarrage de Kodi, la base sera créée automatiquement sur le serveur MySQL. Toutes les instances pointant vers le même serveur partageront la même bibliothèque.
Point critique : toutes les instances doivent utiliser exactement les mêmes chemins réseau (SMB ou NFS) pour les sources. Sinon les fichiers seront dupliqués dans la base.
3 — Sources réseau optimisées
NFS (recommandé pour la performance)
NFS offre des débits supérieurs à SMB, surtout pour le streaming 4K.
Sur le serveur NFS :
sudo apt install nfs-kernel-server
## Créer les exports
sudo tee -a /etc/exports << 'EOF'
/srv/media/films 192.168.1.0/24(ro,sync,no_subtree_check,no_root_squash)
/srv/media/series 192.168.1.0/24(ro,sync,no_subtree_check,no_root_squash)
/srv/media/musique 192.168.1.0/24(ro,sync,no_subtree_check,no_root_squash)
EOF
sudo exportfs -ra
sudo systemctl restart nfs-kernel-serverDans Kodi, ajoutez la source avec le protocole NFS : nfs://192.168.1.100/srv/media/films
SMB (compatibilité Windows)
Si vos fichiers sont sur un partage Windows ou un NAS Synology/QNAP :
smb://192.168.1.100/media/filmsPour de meilleures performances SMB, ajoutez dans advancedsettings.xml :
<advancedsettings>
<cache>
<buffermode>1</buffermode>
<memorysize>104857600</memorysize>
<readfactor>4</readfactor>
</cache>
</advancedsettings>Ca alloue 100 Mo de buffer mémoire et lit en avance 4x la vitesse de lecture. Utile pour le 4K sur un réseau un peu lent.
4 — API JSON-RPC et contrôle distant
Kodi expose une API JSON-RPC complète. Activez-la dans Paramètres > Services > Contrôle :
- Autoriser le contrôle distant via HTTP : activé
- Port : 8080
- Nom d'utilisateur : kodi
- Mot de passe : un mot de passe fort
Tester l'API
## Vérifier que Kodi répond
curl -s -u kodi:motdepasse \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"JSONRPC.Ping","id":1}' \
http://192.168.1.50:8080/jsonrpc
## Réponse attendue : {"id":1,"jsonrpc":"2.0","result":"pong"}Exemples d'utilisation
## Lister les films récemment ajoutés
curl -s -u kodi:motdepasse \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"VideoLibrary.GetRecentlyAddedMovies","params":{"limits":{"end":5},"properties":["title","year","rating"]},"id":1}' \
http://192.168.1.50:8080/jsonrpc | jq .
## Lancer la lecture d'un fichier
curl -s -u kodi:motdepasse \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"Player.Open","params":{"item":{"file":"/srv/media/films/Inception.mkv"}},"id":1}' \
http://192.168.1.50:8080/jsonrpc
## Mettre en pause
curl -s -u kodi:motdepasse \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"Player.PlayPause","params":{"playerid":1},"id":1}' \
http://192.168.1.50:8080/jsonrpc5 — DLNA/UPnP : streamer vers d'autres appareils
Kodi peut agir comme serveur et client UPnP/DLNA.
Activation : Paramètres > Services > UPnP/DLNA
- Partager les médiathèques vidéo et musique via UPnP : activé
- Autoriser le contrôle de Kodi via UPnP : activé
Vos fichiers Kodi deviennent alors visibles depuis n'importe quel client DLNA du réseau (TV Samsung/LG, VLC, BubbleUPnP sur Android, etc.).
6 — Reverse proxy Nginx avec HTTPS
Pour accéder à l'interface web de Kodi depuis l'extérieur de manière sécurisée.
server {
listen 443 ssl http2;
server_name kodi.mondomaine.fr;
ssl_certificate /etc/letsencrypt/live/kodi.mondomaine.fr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/kodi.mondomaine.fr/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket pour les notifications temps réel
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}## Obtenir le certificat SSL
sudo certbot —nginx -d kodi.mondomaine.fr
## Tester la config
sudo nginx -t
sudo systemctl reload nginx7 — Hardening sécurité
Restreindre l'accès à l'API
Par défaut, l'API de Kodi n'a aucune restriction IP. Avec le pare-feu :
## Autoriser l'API uniquement depuis le réseau local
sudo ufw allow from 192.168.1.0/24 to any port 8080 proto tcp comment 'Kodi JSON-RPC'
## Bloquer le port depuis l'extérieur (si pas déjà fait par défaut)
sudo ufw deny 8080/tcpMot de passe fort obligatoire
Jamais de "kodi" / "kodi" comme identifiants. Générez un mot de passe :
openssl rand -base64 16
## Exemple de sortie : aB3xZ9qR7mK2wL5pDésactiver Zeroconf si inutile
Zeroconf (Avahi/Bonjour) diffuse la présence de Kodi sur le réseau. Si vous n'en avez pas besoin :
Paramètres > Services > Général > Activer Zeroconf : désactivé
8 — Scripts d'automatisation
Script de mise à jour automatique de la bibliothèque
#!/bin/bash
## update-kodi-library.sh
## Lance un scan de la bibliothèque vidéo via l'API
KODI_HOST="192.168.1.50"
KODI_PORT="8080"
KODI_USER="kodi"
KODI_PASS="votre_mot_de_passe"
## Scanner les nouveaux fichiers vidéo
curl -s -u "${KODI_USER}:${KODI_PASS}" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"VideoLibrary.Scan","id":1}' \
"http://${KODI_HOST}:${KODI_PORT}/jsonrpc" > /dev/null
## Scanner la musique aussi
curl -s -u "${KODI_USER}:${KODI_PASS}" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"AudioLibrary.Scan","id":2}' \
"http://${KODI_HOST}:${KODI_PORT}/jsonrpc" > /dev/null
echo "[$(date '+%Y-%m-%d %H:%M')] Scan de la bibliothèque lancé"chmod +x update-kodi-library.sh
## Lancer un scan toutes les 6 heures via cron
crontab -e
## Ajouter :
0 */6 * * * /home/user/update-kodi-library.sh >> /var/log/kodi-scan.log 2>&1Script de nettoyage de la bibliothèque
#!/bin/bash
## clean-kodi-library.sh
## Supprime les entrées dont les fichiers n'existent plus
KODI_HOST="192.168.1.50"
KODI_PORT="8080"
KODI_USER="kodi"
KODI_PASS="votre_mot_de_passe"
curl -s -u "${KODI_USER}:${KODI_PASS}" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"VideoLibrary.Clean","params":{"showdialogs":false},"id":1}' \
"http://${KODI_HOST}:${KODI_PORT}/jsonrpc" > /dev/null
echo "[$(date '+%Y-%m-%d %H:%M')] Nettoyage de la bibliothèque lancé"Script de sauvegarde de la configuration
#!/bin/bash
## backup-kodi.sh
## Sauvegarde le dossier userdata de Kodi
KODI_USERDATA="$HOME/.kodi/userdata"
BACKUP_DIR="/backup/kodi"
DATE=$(date '+%Y%m%d_%H%M')
mkdir -p "${BACKUP_DIR}"
tar czf "${BACKUP_DIR}/kodi-userdata-${DATE}.tar.gz" \
-C "$(dirname ${KODI_USERDATA})" \
"$(basename ${KODI_USERDATA})" \
—exclude='Thumbnails' \
—exclude='temp'
## Garder uniquement les 7 dernières sauvegardes
ls -t "${BACKUP_DIR}"/kodi-userdata-*.tar.gz | tail -n +8 | xargs -r rm
echo "[$(date '+%Y-%m-%d %H:%M')] Sauvegarde créée : kodi-userdata-${DATE}.tar.gz"9 — Extensions avancées recommandées
- Trakt : synchronise votre historique de lecture avec trakt.tv. Permet de tracker ce que vous avez vu/pas vu, même entre plusieurs appareils non reliés par MySQL
- Artwork Beef : télécharge des artworks supplémentaires (logos, bannières, fanarts) pour enrichir la bibliothèque
- Library Auto Update : programme des scans automatiques de la bibliothèque sans script externe
- Watchdog : surveille les dossiers en temps réel et met à jour la bibliothèque dès qu'un fichier est ajouté ou supprimé
Installation depuis le dépôt officiel Kodi : Extensions > Télécharger > catégorie appropriée.
10 — Dépannage
Kodi ne trouve pas mes fichiers en NFS
Vérifiez que le service NFS est actif et les exports corrects :
## Sur le serveur
sudo exportfs -v
## Doit lister vos dossiers partagés
## Depuis le client, tester le montage
sudo mount -t nfs 192.168.1.100:/srv/media/films /mnt/test
ls /mnt/testSi erreur "access denied" : vérifiez que l'IP du client est dans la plage autorisée dans /etc/exports.
La base MySQL ne se connecte pas
## Tester la connexion depuis le client Kodi
mysql -u kodi -p -h 192.168.1.100
## Si "Can't connect" : vérifier le pare-feu
sudo ufw status | grep 3306
## Si absent :
sudo ufw allow from 192.168.1.0/24 to any port 3306 proto tcp
## Vérifier que MariaDB écoute bien sur toutes les interfaces
ss -tlnp | grep 3306
## Doit montrer 0.0.0.0:3306 et pas 127.0.0.1:3306Saccades en 4K sur Raspberry Pi
Le Pi 4 gère le 4K HEVC (H.265) par décodage matériel, mais le H.264 4K est trop lourd. Vérifications :
## Sur LibreELEC, vérifier la mémoire GPU allouée
vcgencmd get_mem gpu
## Recommandé : au moins 256 Mo
## Vérifier la température (throttling à 85°C)
vcgencmd measure_tempSi les saccades persistent, vérifiez que le fichier est en HEVC et pas en H.264. Pour les fichiers H.264 4K, le transcodage côté serveur (avec Plex ou Jellyfin) reste la meilleure option.
L'interface web ne répond pas
## Vérifier que le port est ouvert
ss -tlnp | grep 8080
## Vérifier que le service Kodi tourne
systemctl status kodi-headless
## Consulter les logs
tail -50 ~/.kodi/temp/kodi.logLes métadonnées ne se téléchargent pas
Le scraper TMDb nécessite un accès internet. Vérifiez :
## Tester la résolution DNS
nslookup api.themoviedb.org
## Tester l'accès à l'API
curl -s -o /dev/null -w '%{http_code}' https://api.themoviedb.org/3/movie/550?api_key=demo
## Doit retourner 401 (clé invalide mais serveur joignable)Si vous êtes derrière un proxy, configurez-le dans Paramètres > Système > Internet.
Aller plus loin
Kodi supporte nativement les PVR (enregistreur vidéo personnel) pour la télévision en direct. Avec un tuner TNT USB et l'extension TVHeadend, vous pouvez regarder et enregistrer la TV directement dans Kodi. C'est un sujet à part entière, mais ça transforme Kodi en vrai décodeur maison.
Autre piste : coupler Kodi avec Sonarr (séries) et Radarr (films) pour automatiser complètement la gestion de votre médiathèque. Ces outils surveillent les sorties, téléchargent automatiquement, renomment les fichiers selon la convention attendue par Kodi, et déclenchent un scan de la bibliothèque. L'infrastructure media center parfaite, mais ça demande un serveur dédié.
À lire aussi
Créer son media center avec Kodi : le guide pas à pas
Transformez votre PC, Raspberry Pi ou TV en un vrai media center avec Kodi. Installation, configuration et premiers pas pour les débutants.
OpenWrt : flash, config réseau et hardening complet
Guide technique pour flasher OpenWrt 25.12.0 sur un routeur, configurer VLANs, DNS, firewall, VPN WireGuard et sécuriser l'ensemble.
Flasher OpenWrt sur son routeur : le guide pas à pas
Remplacez le firmware de votre routeur par OpenWrt pour débloquer des fonctions cachées. Guide complet pour débutants, étape par étape.