Installing Podspine¶
Podspine ships a single static binary (plus a Docker image). It needs ffmpeg
and ffprobe on your PATH at runtime — every method below assumes they're
installed (the scripts and the Homebrew formula help with this).
Pick whichever fits your setup:
| Method | Best for | Command |
|---|---|---|
| Docker | Servers / homelab (recommended) | docker run … ghcr.io/schubydoo/podspine |
| Install script | Linux / macOS, no package manager | curl … \| bash |
| PowerShell | Windows | irm … \| iex |
| Homebrew | macOS / Linux | brew install schubydoo/podspine/podspine |
| Scoop | Windows | scoop install podspine |
| Nix | NixOS / Nix users | nix profile install github:schubydoo/podspine |
| Cargo | Rust users / from source | cargo binstall --git … podspine |
Docker¶
The primary path for running Podspine as a server — see the
Deploying guide for volumes, compose, and reverse-proxy setup.
ffmpeg is bundled in the image.
docker run -v /path/to/audiobooks:/library:ro -v podspine-data:/data \
-p 8080:8080 -e PODSPINE_BASE_URL=http://<your-lan-ip>:8080 \
ghcr.io/schubydoo/podspine:latest
Linux / macOS (script)¶
Downloads the signed binary for your OS/arch, verifies its SHA-256 against the
release checksums.txt, and installs to ~/.local/bin:
Overrides (environment variables):
| Var | Default | Purpose |
|---|---|---|
PODSPINE_VERSION |
latest release | Pin a specific release tag, e.g. X.Y.Z |
PODSPINE_INSTALL_DIR |
~/.local/bin |
Install location (uses sudo only if it isn't writable) |
# Pin a specific version (replace X.Y.Z) and install system-wide:
curl -fsSL https://raw.githubusercontent.com/schubydoo/podspine/main/install.sh \
| PODSPINE_VERSION=X.Y.Z PODSPINE_INSTALL_DIR=/usr/local/bin bash
Uninstall (removes the binary only — never your library or data dir):
Windows (PowerShell)¶
Installs podspine.exe under %LOCALAPPDATA%\Programs\podspine and adds it to
your user PATH:
Same overrides apply ($env:PODSPINE_VERSION, $env:PODSPINE_INSTALL_DIR).
Uninstall:
The binary is Sigstore-signed but not Authenticode-signed, so SmartScreen may warn on first run — the installer clears the mark-of-the-web after verifying the checksum.
Homebrew¶
macOS and Linux. The formula pulls the release binary and declares ffmpeg as a
dependency:
brew install schubydoo/podspine/podspine
# or, to keep the tap around for upgrades:
brew tap schubydoo/podspine
brew install podspine
brew upgrade podspine tracks new releases.
Scoop (Windows)¶
Nix¶
With flakes enabled:
# Run without installing:
nix run github:schubydoo/podspine -- --library ./books
# Install into your profile:
nix profile install github:schubydoo/podspine
On NixOS, the flake also exposes a module — add Podspine as a service:
{
inputs.podspine.url = "github:schubydoo/podspine";
# in your configuration:
services.podspine = {
enable = true;
library = "/srv/audiobooks";
baseUrl = "http://nas.lan:8080";
};
}
Cargo¶
Podspine is not published to crates.io (the workspace is publish = false), so
Cargo installs come from the Git repo.
With cargo-binstall — fetches the
prebuilt release binary, no compiling:
Or build from source (cargo install):
Or from a checkout:
git clone https://github.com/schubydoo/podspine && cd podspine
cargo build --release # target/release/podspine
Verifying a download¶
Every release ships a cosign-signed checksums.txt and SLSA provenance. To
verify a binary you downloaded manually:
cosign verify-blob --bundle checksums.txt.sigstore.json checksums.txt
sha256sum -c checksums.txt # (from the dir holding the downloaded files)
gh attestation verify ./podspine-vX.Y.Z-linux-amd64 --owner schubydoo
The install scripts do the SHA-256 check for you; see SECURITY.md for the full verification story.
Installing ffmpeg¶
Podspine needs ffmpeg (which provides ffprobe) at runtime:
| Platform | Command |
|---|---|
| Debian/Ubuntu | apt install ffmpeg |
| Fedora | dnf install ffmpeg |
| Arch | pacman -S ffmpeg |
| macOS | brew install ffmpeg |
| Windows | winget install Gyan.FFmpeg or scoop install ffmpeg |
Docker, Homebrew, and Nix installs pull it in for you.