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