117 lines
6.1 KiB
Markdown
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
|