--- title: Pinchflat created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, downloads, youtube, yt-dlp, media-server, python, elixir] confidence: high contested: false sources: [https://selfh.st/apps/?tag=downloads, https://github.com/kieraneglin/pinchflat] --- # 📌 Pinchflat > **Téléchargeur YouTube moderne** écrit en Elixir/Phoenix, conçu pour suivre des chaînes et playlists avec une **UI soignée**, des **profils de qualité**, un **système de notifications** (Discord, Telegram, Apprise) et une **intégration native Jellyfin/Plex**. Le petit nouveau qui monte face à TubeSync et ytdl-sub. | Métadonnée | Valeur | | :--- | :--- | | **Site web** | [https://pinchflat.dev](https://pinchflat.dev) | | **GitHub** | [https://github.com/kieraneglin/pinchflat](https://github.com/kieraneglin/pinchflat) | | **License** | MIT | | **Langage** | Elixir (Phoenix LiveView) | | **Étoiles** | 144 ⭐ | | **Dernière MAJ** | 2025-12 | | **Catégorie** | [[cat-downloads\|Downloads]] | ## Description **Pinchflat** est né d'un constat partagé par les self-hosters : `yt-dlp` est puissant mais **l'orchestration autour est pénible** — planifier les synchros, gérer les résolutions, nettoyer les vidéos déjà vues, notifier quand un fichier est prêt, déclencher le scan Jellyfin. Pinchflat encapsule tout ça dans une **seule application Elixir/Phoenix LiveView** élégante, sans la dette d'un vieux projet Python. Chaque **MediaProfile** définit un couple (résolution, format, arguments `yt-dlp` supplémentaires) et chaque **Source** (chaîne, playlist, chaîne d'utilisateur, URL unique) y est rattachée. Pinchflat **surveille la source** selon une fréquence configurable, télécharge les nouvelles vidéos, et applique un **post-traitement** : déplacement, hardlink, déclenchement d'un webhook Jellyfin/Plex, notification Discord. Le tout avec un système de **progression en temps réel** dans l'UI (LiveView = WebSocket). Fonctionnalités distinctives : **tasks concurrentes configurables** (par défaut 2, à monter selon la machine), **re-download** d'une vidéo si on change le profil, **blacklist** par mot-clé, **résolution minimale/maximale**, **cookies YouTube**, **SponsorBlock** (skip des sponsors), **sous-titres** (auto-download ou burn-in), **notifications Apprise** (90+ destinations), et **page de détails** riche (vignette, métadonnées, log de téléchargement). **Points forts** : UI moderne (LiveView = pas de reload), très rapide (Elixir/OTP), bien documenté, MIT, **multi-utilisateurs** avec rôles. **Points faibles** : encore jeune (~144 ⭐), Elixir est plus rare que Python (bus factor à surveiller), pas d'app mobile, pas de gestion native de podcasts/au-delà de YouTube. ## Installation ### Via Docker (recommandé) ```yaml # docker-compose.yml services: pinchflat: image: ghcr.io/kieraneglin/pinchflat:latest container_name: pinchflat restart: unless-stopped environment: - TZ=Europe/Paris - SECRET_KEY_BASE=change-me-very-long-random - DEFAULT_HOST=pinchflat.example.com - DATABASE_PATH=/app/data/pinchflat.db volumes: - ./config:/app/config - ./data:/app/data - /mnt/media/youtube:/downloads # bibliothèque YouTube ports: - "8945:8945" ``` ### Installation manuelle Elixir 1.15+ et OTP 26+. `git clone`, `mix deps.get`, `mix ecto.migrate`, `mix phx.server`. Pour la prod, compilez une release `mix release` et lancez `./bin/pinchflat start`. ## Configuration 1. Créer le compte admin au premier lancement (`http://localhost:8945`). 2. **Media Profile** : créer au moins un profil (ex. "1080p H264" : `-f "bv*[height<=1080]+ba/b" --merge-output-format mp4`). 3. **Source** : coller l'URL d'une chaîne/playlist, choisir le MediaProfile, fréquence (60 min par défaut), dossier de sortie. 4. **Cookies YouTube** (recommandé) : `Settings → Cookies` → coller le contenu de `cookies.txt` (pas besoin de monter un fichier). 5. **Webhook Jellyfin** : `Settings → Webhooks` → `http://jellyfin:8096/Library/Refresh` sur événement `media_downloaded`. 6. **Notifications Apprise** : URL `Apprise://` (Discord, Telegram, Slack, Gotify…). 7. **Reverse proxy** : `pinchflat.example.com` via Caddy/Traefik + Authelia. ## Alternatives ### Open source - [[app-tubesync]] — le "vétéran", Python + Go, plus mature - [[app-ytdl-sub]] — orienté config YAML, idéal pour "subscriptions first" - [[app-metube]] — UI web ponctuelle pour `yt-dlp`, pas de synchro - [[app-hometube]] — pont YouTube ↔ Jellyfin, plus orienté player - [[app-jellyfin]] — media server qui scanne la sortie de Pinchflat - [[app-lidarr]] / [[app-radarr]] — pour la musique/films, orthogonal ### Propriétaires - **YouTube Premium "Library"** — pas de feature équivalente,只能在 YouTube app - **Plex Watch Later** — lié à un compte Plex, pas de gestion fine - **iCloud + Raccourcis** — bricolage sans rapport ## Sécurité - ⚠️ **SECRET_KEY_BASE** : 64 octets random, ne JAMAIS régénérer en prod (invalide les sessions). - ⚠️ **Cookies YouTube** :泄露 = vol de compte Google. Pinchflat les stocke en DB — chiffrer le volume `./data`. - ✅ **HTTPS obligatoire** via reverse-proxy + HSTS. - ✅ **Authentification multi-utilisateurs** avec rôles (admin, viewer). - ⚠️ **Rate-limit YouTube** : configurer des fréquences raisonnables (1h minimum par source). - ⚠️ **Espace disque** : prévoir monitoring — une chaîne 4K peut consommer 50-100 Go/mois. - ✅ **Sauvegardes** : `./data/pinchflat.db` (SQLite) — petit, à inclure dans le backup nocturne. ## Ressources - [Site officiel](https://pinchflat.dev) - [Documentation](https://docs.pinchflat.dev) - [Wiki](https://github.com/kieraneglin/pinchflat/wiki) - [selfh.st — Downloads](https://selfh.st/apps/?tag=downloads) ## Pages Liées - [[cat-downloads]] — Catégorie parente - [[app-tubesync]] — Concurrent mature Python - [[app-ytdl-sub]] — Concurrent orienté subscriptions - [[app-jellyfin]] — Media server cible - [[app-plex]] — Media server cible alternatif - [[recettes-docker-compose]] — Templates Docker - [[securisation-home-lab]] — Bonnes pratiques