2026-03-29 22:36:02 -04:00
# FreePassport-C Media Player
2026-03-27 21:45:40 -04:00
2026-03-30 15:25:32 -04:00
FreePassport-C Media Player is a low-dependency SDL2 + FFmpeg application inspired by the interactive program guides used on older Cisco and Scientific Atlanta Explorer cable boxes. It turns a local media library into a fullscreen-first virtual cable system with live-seeking channels, a retro guide, and broadcast-style on-screen overlays.
2026-03-27 21:45:40 -04:00
## Features
- Live-TV epoch clock based on `time(NULL)`
- 200 ms black-screen channel tuning delay
- Fullscreen and guide modes
- 5-row Passport-style guide with a 90-minute timeline
- Background decoder thread with a bounded frame queue
- Automatic channel discovery from `./media`
2026-03-30 15:25:32 -04:00
- Randomized per-channel schedules on each launch
- Fullscreen channel banner, theme picker, and about panel
2026-03-27 21:45:40 -04:00
## Layout
- `src/` - application, UI, channel scan, and playback code
- `media/` - channel video files
- `guide-ui.jpg` - visual reference used for proportions and palette
## Controls
- `Up` / `Down` - surf channels
- `Tab` - toggle guide
2026-03-30 15:25:32 -04:00
- `Enter` - tune selected channel from the guide
- `Left` / `Right` - browse guide time
- `0-9` - direct channel number entry
2026-03-29 22:36:02 -04:00
- `i` - show current channel info
2026-03-30 15:25:32 -04:00
- `a` - toggle about panel
- `b` - toggle theme picker
- `f` - toggle fullscreen
2026-03-27 21:45:40 -04:00
- `Esc` - exit guide or quit the app
## Build
2026-03-30 15:25:32 -04:00
Install development packages for SDL2, SDL2_ttf, SDL2_image, and FFmpeg headers before building.
2026-03-27 21:45:40 -04:00
Typical Debian or Ubuntu packages:
```bash
2026-03-30 15:25:32 -04:00
sudo apt install build-essential libsdl2-dev libsdl2-ttf-dev libsdl2-image-dev libavformat-dev libavcodec-dev libswscale-dev libswresample-dev libavutil-dev
2026-03-27 21:45:40 -04:00
```
Then build and run:
```bash
make
./passport-c-media-player
```
2026-03-28 15:25:58 -04:00
## AppImage Build
2026-03-30 15:25:32 -04:00
To create a portable AppImage with the included packaging script:
2026-03-28 15:25:58 -04:00
```bash
make appimage
```
2026-03-30 15:25:32 -04:00
The AppImages for `0.1` are built on Debian 13 using `linuxdeploy` and the repository's included scripts. The build automatically detects your architecture and produces the appropriate AppImage:
2026-03-29 18:57:42 -04:00
2026-03-30 15:25:32 -04:00
- **x86_64**: `FreePassport-C-Media-Player-0.1-x86_64.AppImage`
- **ARM64/aarch64**: `FreePassport-C-Media-Player-0.1-aarch64.AppImage`
2026-03-29 18:57:42 -04:00
Users can run it directly:
2026-03-28 15:25:58 -04:00
```bash
2026-03-30 15:25:32 -04:00
./FreePassport-C-Media-Player-0.1-x86_64.AppImage
2026-03-29 18:57:42 -04:00
# or on ARM devices:
2026-03-30 15:25:32 -04:00
./FreePassport-C-Media-Player-0.1-aarch64.AppImage
2026-03-28 15:25:58 -04:00
```
For a fully portable setup, create a `media/` directory in the same folder as the AppImage and add your channel videos there. The AppImage will automatically detect and load channels from this directory.
2026-03-27 21:45:40 -04:00
## Media
2026-03-30 15:25:32 -04:00
The player scans `./media` for channel directories. Each subdirectory is treated as one channel, and the supported video files inside it are shuffled into a randomized schedule for that channel on each launch.
2026-03-27 21:45:40 -04:00
2026-03-28 00:25:06 -04:00
Optional metadata can be provided with `description.txt` inside each channel directory:
2026-03-27 21:45:40 -04:00
2026-03-28 00:25:06 -04:00
```txt
name=Reading
number=56
description=Books, documentaries, and reading-focused programming.
```
Example layout:
```txt
media/
reading/
description.txt
01-intro.mp4
02-feature.mp4
computers/
description.txt
01-chronicles.mp4
02-demo.mp4
```
2026-03-27 21:45:40 -04:00
## Fonts
The UI tries `BigBlueTermPlus Nerd Font` first, then falls back to common Linux monospace fonts.