# Jellypod A Jellyfin plugin that adds podcast support to your media server. ## Quick Install Add this repository URL in Jellyfin (Dashboard → Plugins → Repositories): ``` https://gitea.tourolle.paris/dtourolle/jellypod/raw/branch/master/manifest.json ``` ## Features - Browse and subscribe to podcasts - Automatic episode downloads - Integration with Jellyfin's library system - Post-download script hook for audio processing ## Post-Download Script Hook Jellypod supports running a custom script on each downloaded episode before it's added to your library. This is useful for: - Audio normalization (e.g., using ffmpeg-normalize) - Format conversion - Metadata enhancement - Custom processing workflows ### Configuration In the plugin settings (Dashboard → Plugins → Jellypod): 1. **Post-Download Script Path**: Full path to your script or executable 2. **Script Timeout**: Maximum execution time in seconds (default: 60) ### Script API Your script will be called with two arguments: ```bash script ``` - `input_file`: Path to the downloaded episode (read-only) - `output_file`: Path where your script should write the processed file ### Example Scripts **Audio normalization (bash + ffmpeg):** ```bash #!/bin/bash INPUT="$1" OUTPUT="$2" ffmpeg-normalize "$INPUT" -o "$OUTPUT" -c:a libmp3lame -b:a 128k ``` **Format conversion (bash + ffmpeg):** ```bash #!/bin/bash INPUT="$1" OUTPUT="$2" ffmpeg -i "$INPUT" -c:a aac -b:a 128k "$OUTPUT" ``` ### Behavior - If the script succeeds (exit code 0) and creates the output file, the processed file is added to your library - If the script fails, times out, or doesn't create an output file, the original downloaded file is used instead - All script output (stdout/stderr) is logged for debugging - Leave the script path empty to disable post-processing ## Screenshots ### Podcast Library ![Podcast Library](images/library.png) ### Plugin Settings ![Plugin Settings](images/settings.png) ## Installation ### From Plugin Repository (Recommended) 1. In Jellyfin, go to **Dashboard** → **Plugins** → **Repositories** 2. Click the **+** button to add a new repository 3. Enter: - **Repository Name**: `Jellypod` - **Repository URL**: `https://gitea.tourolle.paris/dtourolle/jellypod/raw/branch/master/manifest.json` 4. Click **Save** 5. Go to **Catalog** tab and find **Jellypod** 6. Click **Install** and restart Jellyfin ### Manual Installation 1. Download the latest release from [Releases](https://gitea.tourolle.paris/dtourolle/jellypod/releases) 2. Extract the contents to your Jellyfin plugins directory: - **Linux**: `~/.local/share/jellyfin/plugins/Jellypod/` - **Windows**: `%LOCALAPPDATA%\jellyfin\plugins\Jellypod\` - **Docker**: `/config/plugins/Jellypod/` 3. Restart Jellyfin ### Building from Source #### Requirements - [.NET SDK 8.0](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) #### Build ```bash dotnet build ``` The plugin DLL will be in `Jellyfin.Plugin.Jellypod/bin/Debug/net8.0/`. ## Development This plugin is based on the [Jellyfin Plugin Template](https://github.com/jellyfin/jellyfin-plugin-template). See the `.vscode` folder for VS Code debugging configuration. ## License This project is licensed under the GPLv3 - see the [LICENSE](LICENSE) file for details. ## Links - **Repository**: https://gitea.tourolle.paris/dtourolle/jellypod