Interactive CLI for finding recoverable hidden Twitch VOD playlists and downloading them with ffmpeg.
The app asks for a streamer name, finds recent streams, searches for a playable VOD playlist, lets you choose quality, and downloads the result.
- Finds recent Twitch streams by streamer name
- Searches recoverable hidden VOD playlists
- Lists streams in an interactive paginated menu
- Lets you choose an available quality, or always selects the best quality
- Downloads M3U8 URLs and local playlist files
- Rebuilds playlists with absolute segment URLs when needed
- Tries to recover unmuted segments automatically
- Optionally validates playlist segments before downloading
- Plays playlists with a known HLS-capable command when one is available
- Python 3.13+
uv- Network access to Twitch and playlist hosts
- Optional:
ffmpegandffprobeavailable inPATH - Optional:
ffplay,mpv, VLC, or MPC-HC for playback from the menu
ffmpeg and ffprobe are resolved from PATH first. If they are not installed locally, the app
uses static-ffmpeg as a fallback.
Additional requirements for specific workflows:
git- required foruv tool install git+...anduvx --from git+...make- required for development commands
Useful commands:
uv tool install .
uv tool install git+https://github.com/hu553in/vod-recovery.git
vod-recovery
uv tool upgrade vod-recovery
uv tool uninstall vod-recoveryUseful commands:
uvx --from . vod-recovery
uvx --from git+https://github.com/hu553in/vod-recovery.git vod-recoveryUseful commands:
make install-deps
uv run vod-recovery
make test
make checkSettings are stored in the platform-specific user config directory provided by platformdirs.
The settings.toml file is created with defaults on first run.
| Name | Default | Description |
|---|---|---|
check_segments |
false |
Validate segment availability before downloading |
always_best_quality |
false |
Select the best available quality automatically |
default_directory |
user downloads directory | Download output directory |
default_video_format |
.mp4 |
Output container format |
playback_command |
"" |
Playback command or path; blank means auto |
Supported output containers: .mp4, .mkv, .mov, .avi, .ts.
When playback_command is blank, the app tries known HLS-capable players in this order:
ffplay -> mpv -> vlc -> mpc-hc64 -> mpc-hc
You can set playback_command to a command, command with arguments, executable path, or macOS
.app bundle path.
Examples:
ffplay
mpv --force-window=yes
/Applications/VLC.app
The app does not use the operating system's default media application because many default apps cannot play remote HLS/M3U8 streams reliably.
VOD recovery searches known Twitch VOD playlist domains around the stream start timestamp. The app checks the exact timestamp first, then nearby seconds. It warns when a stream is older than 60 days because recovery is usually unlikely after that point. The M3U8 search stops after 60 seconds.
Before downloading, the app can:
- select an available quality
- rewrite playlist segment URLs to absolute URLs
- build a local playlist for unmuted segments
- validate segment availability when
check_segmentsis enabled
- Recovery depends on playlist and segment availability outside this project.
- Twitch and third-party metadata endpoints can change without notice.
- The app is local and single-user in scope.
- Generated playlists and downloads are written only under the configured output directory.