# 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 ``` ## Supported Jellyfin Versions Jellypod is released as two builds from the same source. The repository manifest lists both, and Jellyfin picks the right one for your server automatically: | Jellyfin server | Build | Target framework | | --------------- | -------------- | ---------------- | | 10.9.x | `*_jf10.9.zip` | .NET 8 | | 12.0 and newer | `*_jf12.zip` | .NET 10 | If you install manually, download the build matching your server — a build installed on the wrong server will fail to load. ## 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), picking `jellypod__jf10.9.zip` for Jellyfin 10.9.x or `jellypod__jf12.zip` for Jellyfin 12.0 and newer 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) for the Jellyfin 10.9 build - [.NET SDK 10.0](https://dotnet.microsoft.com/en-us/download/dotnet/10.0) for the Jellyfin 12.0 build #### Build ```bash dotnet build # both targets dotnet build -f net8.0 # Jellyfin 10.9 only dotnet build -f net10.0 # Jellyfin 12.0 only ``` The plugin DLL will be in `Jellyfin.Plugin.Jellypod/bin/Debug/net8.0/` or `Jellyfin.Plugin.Jellypod/bin/Debug/net10.0/`. #### Packaging `build.yaml` is the [jprm](https://github.com/oddstr13/jellyfin-plugin-repository-manager) config for the Jellyfin 10.9 build. The Jellyfin 12.0 config is derived from it at release time, so the two cannot drift apart: ```bash sed -e 's/^targetAbi:.*/targetAbi: "12.0.0.0"/' \ -e 's/^framework:.*/framework: "net10.0"/' \ -e 's/^dotnet_framework:.*/dotnet_framework: "net10.0"/' \ build.yaml > build.jf12.yaml ``` ## 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