direct-play-nice is a cross-platform CLI tool that converts video files
to profiles more likely to Direct Play across common streaming devices.
Direct Play means the client can play the original media file as-is, without server-side video transcoding. In practice, this is usually the lowest-load, highest-quality playback path for media servers.
Official references:
- Plex: https://support.plex.tv/articles/200250387-streaming-media-direct-play-and-direct-stream/
- Jellyfin codec support (goal is Direct Play): https://jellyfin.org/docs/general/clients/codec-support
- Emby playback methods: https://emby.media/support/articles/DirectPlay-Stream-Transcoding.html
cargo install direct_play_niceConvert one file using the default multi-device profile:
direct_play_nice input.mkv output.mp4Target specific device families:
direct_play_nice --device chromecast,roku input.mkv output.mp4Probe local hardware/codec capabilities:
direct_play_nice --probe-hw --probe-codecs --only-video --only-hw --probe-jsondirect_play_nice supports GPU acceleration in two places:
- Bitmap subtitle OCR (PGS/VobSub/DVD) via ONNX Runtime providers
- H.264/HEVC hardware transcoding via FFmpeg hardware encoders
Project-specific behavior:
--ocr-engine autopreferspp-ocr-v4on modern GPU stacks- legacy NVIDIA (Maxwell-class / compute capability
<= 5) auto-selectspp-ocr-v3for better stability - OCR benchmark evidence in this repo shows full-movie OCR at
87.62 FPS(3.65xrealtime) on a self-hosted Linux GPU run (OCR benchmark report)
Official compatibility and architecture references are collected in the manual: Hardware Acceleration.
Use Sonarr Settings -> Connect -> Custom Script and enable the script on the
On Download event. Point it to the direct_play_nice binary with a config
file:
/path/to/direct_play_nice --config-file /path/to/direct-play-nice-sonarr.tomlExample direct-play-nice-sonarr.toml:
streaming_devices = "all"
servarr_output_extension = "mp4"
servarr_output_suffix = ".fixed"
video_codec = "h264"
video_quality = "1080p"
audio_quality = "192k"
hw_accel = "auto"
sub_mode = "auto"
ocr_engine = "pp-ocr-v4"
ocr_format = "srt"
ocr_write_srt_sidecar = false
skip_codec_check = falseFor the full model matrix and constraints, see SUPPORTED_DEVICES.md.
For advanced usage, read the manual:
- direct-play-nice Book (mdBook)
- AI OCR for bitmap subtitles (setup + runtime notes): Subtitle OCR
- GPU acceleration and supported architecture references: Hardware Acceleration
- Plex auto-refresh workflow: Plex Refresh
- Arr custom-script operation: Sonarr/Radarr Integration
- Hardware probing and diagnostics: Probe and Debug
For Rust API docs (library internals used by the CLI):
cargo doc --no-depsGPL-3.0-only
