6.1 KiB
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 |
| GitHub | https://github.com/kieraneglin/pinchflat |
| License | MIT |
| Langage | Elixir (Phoenix LiveView) |
| Étoiles | 144 ⭐ |
| Dernière MAJ | 2025-12 |
| Catégorie | cat-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é)
# 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
- Créer le compte admin au premier lancement (
http://localhost:8945). - Media Profile : créer au moins un profil (ex. "1080p H264" :
-f "bv*[height<=1080]+ba/b" --merge-output-format mp4). - Source : coller l'URL d'une chaîne/playlist, choisir le MediaProfile, fréquence (60 min par défaut), dossier de sortie.
- Cookies YouTube (recommandé) :
Settings → Cookies→ coller le contenu decookies.txt(pas besoin de monter un fichier). - Webhook Jellyfin :
Settings → Webhooks→http://jellyfin:8096/Library/Refreshsur événementmedia_downloaded. - Notifications Apprise : URL
Apprise://(Discord, Telegram, Slack, Gotify…). - Reverse proxy :
pinchflat.example.comvia 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
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