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

117 lines
6.1 KiB
Markdown

---
title: TubeSync
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, downloads, youtube, media-server, sync, go, yt-dlp]
confidence: high
contested: false
sources: [https://selfh.st/apps/?tag=downloads, https://github.com/meeb/tubesync]
---
# 📺 TubeSync
> Synchronise vos chaînes et playlists YouTube vers un répertoire local et **met à jour automatiquement votre serveur média** (Jellyfin, Plex, Emby) une fois les médias téléchargés. Le "Plex AutoPilot" des chaînes YouTube.
| Métadonnée | Valeur |
| :--- | :--- |
| **Site web** | [https://tubesync.com](https://tubesync.com) |
| **GitHub** | [https://github.com/meeb/tubesync](https://github.com/meeb/tubesync) |
| **License** | AGPL-3.0 |
| **Langage** | Python + Go (worker) |
| **Étoiles** | 166 ⭐ |
| **Dernière MAJ** | 2025-12 |
| **Catégorie** | [[cat-downloads\|Downloads]] |
## Description
**TubeSync** répond à une question simple : "comment suivre 30 chaînes YouTube sans avoir à lancer manuellement `yt-dlp` chaque semaine ?". C'est un **agrégateur de chaînes YouTube** qui ajoute des sources (chaînes, playlists, chaînes d'utilisateurs), les **scrute périodiquement**, et **télécharge automatiquement** les nouvelles vidéos dans une arborescence propre, prête à être **scannée par Jellyfin/Plex/Emby** comme n'importe quelle médiathèque locale.
Chaque **source** a sa propre configuration : dossier de destination, format (`video` / `audio` / `custom`), résolution max, fréquence de synchronisation, "days to keep" (rotation), et tâches post-téléchargement (déplacer, hardlink, déclencher un webhook). TubeSync supporte aussi les **cookies YouTube** montées en volume pour contourner les limitations de rate-limit imposées aux non-connectés, ainsi que **SponsorBlock** et **metadata JSON** à côté de chaque fichier.
Côté architecture : back-end **Django 4 (Python)**, worker **Go** pour le téléchargement via `yt-dlp` (le plus rapide à cet usage), base **SQLite** par défaut (PostgreSQL possible), interface web soignée exposant un dashboard temps réel des tâches. Le tout est publié en image **Docker** unique (multi-stage) et tourne sur un Raspberry Pi 4 sans sourciller pour quelques dizaines de chaînes.
**Points forts** : UI claire, granularité par source, support natif de Jellyfin/Plex, AGPL-3.0.
**Points faibles** : pas d'application mobile, mono-instance (pas de multi-utilisateurs natif), scraping YouTube de plus en plus fragile (rotations de tokens, parfois il faut régénérer les cookies).
## Installation
### Via Docker (recommandé)
```yaml
# docker-compose.yml
services:
tubesync:
image: ghcr.io/meeb/tubesync:latest
container_name: tubesync
restart: unless-stopped
environment:
- TZ=Europe/Paris
- PUID=1000
- PGID=1000
- SECRET_KEY=change-me-long-random-string
- ALLOWED_HOSTS=*
- DB_ENGINE=sqlite
volumes:
- ./config:/app/config
- ./downloads:/downloads # bibliothèque YouTube
- ./cache:/app/cache
ports:
- "4848:4848"
```
### Installation manuelle
Python 3.10+, `yt-dlp` récent, `ffmpeg`. Cloner le dépôt, `pip install -r requirements.txt`, lancer `python src/manage.py migrate` puis `gunicorn` ou `daphne` pour la partie ASGI. Le worker Go se compile avec `go build ./cmd/worker`.
## Configuration
1. Accéder à `http://localhost:4848`, créer le compte admin au premier lancement.
2. **Ajouter une source** : URL de chaîne ou playlist YouTube → TubeSync résout la liste des vidéos existantes.
3. **Choisir le type de média** : `video` (par défaut, format MKV/MP4), `audio` (extraction en MP3/Opus), ou `custom` (arguments `yt-dlp` bruts).
4. **Cookies YouTube** (recommandé) : exporter `cookies.txt` depuis un navigateur connecté, monter dans `./config/cookies.txt` → contourne le rate-limit "Sign in to confirm you're not a bot".
5. **Webhook Jellyfin/Plex** : URL `http://jellyfin:8096/Library/Refresh` → déclenchée après chaque import.
6. **Days to keep** : supprime automatiquement les vidéos > X jours (utile pour les chaînes d'actu).
7. **Reverse proxy** : `tubesync.example.com` via Traefik/Caddy, idéalement derrière Authelia (l'UI permet de déclencher des downloads manuels).
## Alternatives
### Open source
- [[app-ytdl-sub]] — basé sur `yt-dlp` + config YAML, plus orienté "subscriptions"
- [[app-pinchflat]] — interface moderne, conçu pour le téléchargement YouTube à la demande
- [[app-hometube]] — pont YouTube ↔ Jellyfin avec player intégré
- [[app-metube]] — clone léger de NewPipe côté serveur (UI web pour `yt-dlp`)
- **ytdl-material** — fork UI Material, aujourd'hui peu maintenu
- **youtube-dl-server** — wrapper minimal, abandonné
### Propriétaires
- **Plex Watch Later** — fermé, lié à un compte Plex
- **Jellyfin YouTube Plugin** — recherche/lecture, **pas de download persistant**
- **iCloud + YouTube Premium** — hors sujet mais illustre le "synchro cloud propriétaire"
## Sécurité
- ⚠️ **Cookies YouTube** : critique,泄露 = vol de compte Google. Monter en **read-only**, permissions 0400.
- ⚠️ **SECRET_KEY Django** : régénérer absolument avant l'exposition Internet.
-**HTTPS obligatoire** via Traefik/Caddy + HSTS.
-**Authentification** : compte unique + SSO (Authelia/Authentik) recommandé.
- ⚠️ **Rate-limit YouTube** : espacer les sources, sinon YouTube bloque l'IP pendant 24h.
- ⚠️ **Espace disque** : 1 chaîne très active (Veritasium, etc.) = 1 To/an. Surveiller.
- ⚠️ **Sauvegardes** : `./config` contient la DB et les sources, à inclure dans le backup.
## Ressources
- [Site officiel](https://tubesync.com)
- [Documentation](https://github.com/meeb/tubesync#readme)
- [Wiki](https://github.com/meeb/tubesync/wiki)
- [selfh.st — Downloads](https://selfh.st/apps/?tag=downloads)
## Pages Liées
- [[cat-downloads]] — Catégorie parente
- [[app-pinchflat]] — Concurrent YouTube downloader
- [[app-ytdl-sub]] — Concurrent orienté subscriptions
- [[app-jellyfin]] — Media server cible typique
- [[app-plex]] — Media server cible alternatif
- [[recettes-docker-compose]] — Templates Docker
- [[securisation-home-lab]] — Bonnes pratiques