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:

script <input_file> <output_file>
  • 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):

#!/bin/bash
INPUT="$1"
OUTPUT="$2"
ffmpeg-normalize "$INPUT" -o "$OUTPUT" -c:a libmp3lame -b:a 128k

Format conversion (bash + ffmpeg):

#!/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

Plugin Settings

Plugin Settings

Installation

  1. In Jellyfin, go to DashboardPluginsRepositories
  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, picking jellypod_<version>_jf10.9.zip for Jellyfin 10.9.x or jellypod_<version>_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

Build

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 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:

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.

See the .vscode folder for VS Code debugging configuration.

License

This project is licensed under the GPLv3 - see the LICENSE file for details.

S
Description
No description provided
Readme GPL-3.0
683 KiB
2026-09-08 16:51:59 +00:00
Languages
C# 63.7%
HTML 36.3%