A C++ terminal-based podcast episode manager with true color support.
| src | ||
| .gitignore | ||
| CMakeLists.txt | ||
| Makefile | ||
| README.md | ||
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 podcastsEnter: Select podcasts: Show statisticsr: Refresh playback positionsq: Quit
Episode Menu
↑/↓: Navigate episodesEnter: Play episode (resumes from last position)m: Mark episode as watchedu: Unmark episoder: Refresh positions from MPVq: 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