Files
2026-06-09 18:40:21 +02:00

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

  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 → Webhookshttp://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

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