125 lines
5.4 KiB
Markdown
125 lines
5.4 KiB
Markdown
---
|
|
title: PodFetch
|
|
created: 2026-06-07
|
|
updated: 2026-06-07
|
|
type: app
|
|
tags: [catalogue, downloads, podcast, rust, web-player, audio]
|
|
confidence: medium
|
|
contested: false
|
|
sources:
|
|
- https://selfh.st/apps/?tag=downloads
|
|
- https://github.com/SamTV12345/PodFetch
|
|
---
|
|
|
|
# 🎙️ PodFetch
|
|
> Gestionnaire de podcasts self-hosted écrit en Rust : téléchargement automatique, lecteur web intégré, avec une UI moderne pensée pour l'écoute en continu.
|
|
|
|
| Métadonnée | Valeur |
|
|
| :--- | :--- |
|
|
| **Site web** | https://podfetch.netlify.app |
|
|
| **GitHub** | https://github.com/SamTV12345/PodFetch |
|
|
| **License** | GPL-2.0 |
|
|
| **Langage** | Rust (backend) + React (frontend) |
|
|
| **Étoiles** | 34 ⭐ |
|
|
| **Dernière MAJ** | 2025 |
|
|
| **Catégorie** | [[cat-downloads]] |
|
|
|
|
## Description
|
|
|
|
PodFetch est né comme une **alternative moderne à Podgrab**, un projet de podcast downloader qui stagnait. L'auteur (Samuel Schwanzer) a voulu reconstruire from scratch avec une stack solide : **backend Rust** (rapide, peu gourmand, binaire statique) + **frontend React** (UI réactive), le tout empaqueté en conteneur Docker léger (~80 Mo).
|
|
|
|
Fonctionnellement, PodFetch fait trois choses : **s'abonner** à des podcasts via leur flux RSS iTunes-compatible, **télécharger** automatiquement les nouveaux épisodes (avec stratégie de rétention configurable : ne garder que les N derniers, ou tout l'historique), et **lire** dans le navigateur via un lecteur web HTML5 avec position de lecture persistée, vitesse variable, et création de playlists manuelles.
|
|
|
|
Les différenciations clés : **multi-utilisateurs** (chacun ses abonnements et son historique), **chapitres** lus depuis le flux (M4A), **OPML import/export** pour migrer depuis Pocket Casts/AntennaPod, et un **mode « anonymous listening »** si on veut juste chercher et écouter un épisode sans s'abonner. Le projet supporte aussi le **gPodder API** pour synchroniser avec des clients mobiles compatibles.
|
|
|
|
Pour les amateurs de podcasts francophones, c'est une alternative crédible à [[app-nextcloud]] (qui fait podcast via app tierce) ou à des services comme Podcast Addict (Android) en mode self-hosted.
|
|
|
|
## Installation
|
|
|
|
### Docker Compose (recommandé)
|
|
|
|
```yaml
|
|
# docker-compose.yml
|
|
services:
|
|
podfetch:
|
|
image: ghcr.io/samtv12345/podfetch:latest
|
|
container_name: podfetch
|
|
restart: unless-stopped
|
|
ports:
|
|
- "8077:8080"
|
|
environment:
|
|
- TZ=Europe/Paris
|
|
- PUID=1000
|
|
- PGID=1000
|
|
- DATABASE_URL=sqlite:///config/podfetch.db
|
|
volumes:
|
|
- ./config:/config
|
|
- /data/podcasts:/downloads
|
|
```
|
|
|
|
### Installation manuelle
|
|
|
|
```bash
|
|
git clone https://github.com/SamTV12345/PodFetch
|
|
cd PodFetch
|
|
# Backend Rust
|
|
cargo build --release
|
|
./target/release/podfetch &
|
|
# Frontend
|
|
cd frontend && npm install && npm run build
|
|
# Servir derrière Caddy/Nginx
|
|
```
|
|
|
|
## Configuration
|
|
|
|
- **Abonnement** : URL du flux RSS ou recherche iTunes directement dans l'UI.
|
|
- **Référentiel de podcasts** : ajoute automatiquement les nouveaux épisodes selon un cron interne (par défaut, toutes les heures).
|
|
- **Rétention** : choisir entre « garder tout », « N derniers épisodes », ou « effacer après lecture ».
|
|
- **Multi-users** : compte admin + comptes invités avec droits distincts (lecture seule, abonnement personnel).
|
|
- **OPML** : import/export pour migrer depuis un autre podcatcher.
|
|
- **gPodder API** : activable pour synchroniser avec AntennaPod (Android).
|
|
- **Notifications** : webhook optionnel (Discord, Telegram) à chaque nouvel épisode.
|
|
|
|
## Alternatives
|
|
|
|
### Open Source
|
|
|
|
- **Podgrab** — ancêtre, plus maintenu, plus de releases.
|
|
- **Kasts** (KDE) — client desktop Linux, pas self-hosted serveur.
|
|
- **gPodder** — serveur + client, mature, UI austère.
|
|
- **Castopod** — plus orienté créateurs de podcasts (statistiques, federation ActivityPub).
|
|
- **Pinepods** — multi-users + listen-sync, stack similaire (Rust + React).
|
|
- **Audiobookshelf** — gère podcasts aussi, mais orienté livres audio avant tout.
|
|
|
|
### Propriétaires (ce que PodFetch remplace)
|
|
|
|
- **Pocket Casts** (premium) — multi-device sync, pas self-hosted.
|
|
- **Podcast Addict** (Android) — puissant, mais Android-only et sans serveur perso.
|
|
- **Spotify Podcasts** — non-exportable, dépend d'un abonnement.
|
|
- **Overcast** (iOS) — UX imbattable, pas de backend self-hosted.
|
|
|
|
## Sécurité
|
|
|
|
- **Pas d'auth obligatoire par défaut** : à activer dès qu'on expose l'UI ; le lecteur permet de chercher n'importe quel podcast public.
|
|
- **Volumes en lecture seule** pour le frontend, le backend Rust a besoin d'écrire dans `./config` et `./downloads`.
|
|
- **RSS feeds** : PodFetch les parse, les malformés peuvent faire planter l'indexeur, garder des logs.
|
|
- **Bus factor 1** : un seul contributeur principal (SamTV12345), projet en croissance, à surveiller.
|
|
- **GPL-2.0** : plus restrictif que MIT/Apache, vérifiez la compatibilité avec votre stack si vous voulez forker.
|
|
|
|
## Ressources
|
|
|
|
- Repository : https://github.com/SamTV12345/PodFetch
|
|
- Démo : https://podfetch.netlify.app
|
|
- Annonce : https://www.reddit.com/r/selfhosted/comments/126ul2t/
|
|
- gPodder API spec : https://gpodder.net/api/
|
|
|
|
## Pages Liées
|
|
|
|
- [[cat-downloads]] — catégorie parente
|
|
- [[app-audiobookshelf]] — gestion livres audio + podcasts
|
|
- [[app-nextcloud]] — peut stocker les MP3 aussi
|
|
- [[app-traefik]] — reverse proxy HTTPS
|
|
- [[app-authentik]] — SSO multi-users
|
|
- [[recettes-docker-compose]] — templates
|
|
- [[securisation-home-lab]] — bonnes pratiques
|