Initial vault setup
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
---
|
||||
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
|
||||
Reference in New Issue
Block a user