A C++ terminal-based podcast episode manager with true color support.
Find a file
2026-01-13 22:51:15 +01:00
src change name to poddis 2026-01-13 22:08:13 +01:00
.gitignore init 2026-01-13 21:08:35 +01:00
CMakeLists.txt Disable FTXUI installation 2026-01-13 22:11:54 +01:00
Makefile add Makefile 2026-01-13 22:11:22 +01:00
README.md updated 2026-01-13 22:51:15 +01:00

Poddis - Modern Terminal Podcast Player

A minimal C++ terminal-based podcast episode manager with playback position tracking and true color support.

Features

  • 🎨 True color support (#ff41aa pink, #f1ff5e yellow)
  • 📊 Interactive statistics view
  • ✓ Episode watch tracking
  • ▶️ Resume playback from last position
  • 🎯 Intuitive keyboard navigation
  • 💾 Auto-save state with MPV integration
  • 🌐 UTF-8 support (åäö)

Dependencies (Arch Linux)

sudo pacman -S gcc cmake mpv openssl

Libraries (auto-downloaded during build):

  • FTXUI (terminal UI)
  • nlohmann/json (JSON handling)

Build & Install

Quick Install

make install

This builds the project and installs poddis to ~/.local/bin/

Manual Build

mkdir build && cd build
cmake ..
make -j$(nproc)

Run

./poddis
# or if installed:
poddis

Directory Structure

Place your podcast episodes in:

~/Movies/podcasts/
├── podcast1/
│   ├── 1.episode.mp4
│   ├── 2.episode.mp4
│   └── 3.episode.mp4
└── podcast2/
    ├── 10.episode.mp4
    └── 11.episode.mp4

Supported formats: .mp4, .mp3, .mkv, .webm

Controls

Main Menu

  • ↑/↓: Navigate podcasts
  • Enter: Select podcast
  • s: Show statistics
  • r: Refresh playback positions
  • q: Quit

Episode Menu

  • ↑/↓: Navigate episodes
  • Enter: Play episode (resumes from last position)
  • m: Mark episode as watched
  • u: Unmark episode
  • r: Refresh positions from MPV
  • q: Back to podcast list

Episode Status Indicators

  • [ ] - Not started
  • [▶ 15m 30s] - In progress (shows resume position)
  • [✓] - Marked as watched

Technical Details

Visual Design

Uses FTXUI library for beautiful terminal rendering with:

  • Box drawing characters
  • True RGB color support
  • Smooth borders and separators
  • Color-coded status indicators

Smart Episode Sorting

Automatically extracts episode numbers from filenames and sorts numerically.

State Persistence

  • Watched status saved in ~/.poddis_state.json
  • Playback positions tracked via MPV's watch_later directory (~/.config/mpv/watch_later/)
  • Uses MD5 hashing (OpenSSL EVP API) to match MPV's file tracking

MPV Integration

Launches MPV in background with:

  • --save-position-on-quit: Saves playback position on exit
  • --watch-later-directory: Stores resume positions
  • Automatic resume from last position when replaying episodes

Clean Build

make clean