Archive of https://github.com/RaringM/switchfin — Third-party native Jellyfin client for PC/PS4/PSVita/Nintendo Switch
https://github.com/RaringM/switchfin
- C++ 69.8%
- Java 11.4%
- Python 9.2%
- C 3.7%
- Shell 3%
- Other 2.8%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Merge dragonflylee/switchfin dev at
|
||
| .github | ||
| .vscode | ||
| app | ||
| cmake | ||
| debian | ||
| images | ||
| library | ||
| resources | ||
| scripts | ||
| tests/ps5 | ||
| .clang-format | ||
| .gitignore | ||
| .gitmodules | ||
| CHANGELOG.md | ||
| CMakeLists.txt | ||
| LICENSE | ||
| README.md | ||
Switchfin
Switchfin is third-party PC player for Jellyfin that provides a native user interface to browse and play movies and series.
This project is in its early stages so expect bugs.
Screenshots
| Home | Library |
|---|---|
![]() |
![]() |
| Search | Music |
![]() |
![]() |
| Series | Episode |
![]() |
![]() |
Features
Media Playback
- Browse and play movies, series, seasons, episodes, music albums, and playlists
- Live TV with channel guide and program recommendations
- Direct play and server-side transcoding, with auto-detection
- Full audio track, subtitle track, and chapter selection
- Based on MPV Player
- Container formats: MKV, MOV, MP4, AVI
- Video codecs: H.264, H.265, VP8, VP9, AV1
- Audio codecs: Opus, FLAC, MP3, AAC, AC-3, E-AC-3, TrueHD, DTS, DTS-HD
- Subtitle codecs: SRT, VTT, SSA/ASS, DVDSUB
- Hardware-accelerated decoding; fallback to software decoding when needed
Remote File Browser
- Browse and play media from external sources:
- WebDAV · HTTP(S) · SFTP · FTP · local filesystem
- Manage multiple remote sources with add/edit/remove
Additional Features
- Danmaku (弹幕) — integration with jellyfin-plugin-danmu
- Download — save media for offline viewing, with series batch download
- MirrorPlay — remote playback control via WebSocket (browse on phone, play on big screen)
- Dashboard — monitor server sessions, activities, and device status; restart and rescan libraries
- Search — full-text search with suggestions across all media types
- 14 languages — English, 简体中文, 繁體中文, 日本語, 한국어, Deutsch, Français, Español, Português, Русский, Čeština, Türkçe, Українська, Tiếng Việt
- External drive support on Nintendo Switch via libusbhsfs
Input Mapping (Playback)
| Gamepad | Keyboard | Description |
|---|---|---|
| A | Space | Play / Pause |
| B | Esc | Stop |
| Y | O | Toggle OSD |
| X | F4 | Show Menu |
| R / L | [ / ] | Seek forward / backward |
| + | F1 | Show video profile |
| R stick | F2 | Toggle video quality |
| L stick | F3 | Toggle playback speed |
Keyboard bindings can be customized in Settings.
{
"setting": {
"key_last": "pgup",
"key_next": "pgdn",
"key_volume_up": "0",
"key_volume_down": "9",
"key_danmaku": "d",
"key_video_profile": "f1",
"key_video_quality": "f2",
"key_video_speed": "f3",
"key_setting": "f4",
"key_refresh": "f5",
"key_forward": "]",
"key_rewind": "[",
"key_video_osd": "o",
"key_video_pause": "space"
}
}
System Requirements
| Platform | Requirement |
|---|---|
| Windows | Windows 7 or later with DirectX 11.1 support |
| macOS | Intel or Apple Silicon, macOS 10.15 or later |
| Linux | x86_64 / arm64v8 with OpenGL 3.0+, Flatpak recommended |
FAQ
Q: Subtitles don't display on Nintendo Switch?
A: Place a .ttf font file at /switch/Switchfin/subfont.ttf.
Q: How do I play media from a WebDAV / SFTP / HTTP server?
A: Edit config.json and add entries under remotes:
{
"remotes": [
{
"name": "local",
"url": "file:///switch"
},
{
"name": "xiaoya",
"passwd": "guest_Api789",
"url": "webdav://192.168.1.5:5678/dav",
"user": "guest"
},
{
"name": "rpi",
"url": "sftp://pi:raspberry@192.168.1.5/media"
},
{
"name": "rclone",
"url": "http://192.168.1.5:8000"
}
]
}
Example: using rclone to serve files over HTTP:
rclone serve http --addr :8000 --read-only /media/downloads
Q: The app won't open on macOS? A: Run the following in Terminal to remove the quarantine attribute:
sudo xattr -rd com.apple.quarantine /Applications/Switchfin.app
Development
git clone https://github.com/dragonflylee/switchfin.git --recurse-submodules --shallow-submodules
Nintendo Switch
Set up the devkitPro environment, then:
sudo dkp-pacman -S switch-dev switch-glfw switch-libwebp switch-curl switch-libmpv
cmake -B build_switch -DPLATFORM_SWITCH=ON
make -C build_switch Switchfin.nro -j$(nproc)
# Debug with nxlink
nxlink -a <YOUR_IP> -p Switchfin/Switchfin.nro -s Switchfin.nro --args -d -v
Linux / macOS / Windows (Desktop)
Ensure mpv, libcurl, libwebp, and their development headers are installed, then:
cmake -B build -DPLATFORM_DESKTOP=ON
cmake --build build
Windows (MinGW64)
pacman -S ${MINGW_PACKAGE_PREFIX}-cc ${MINGW_PACKAGE_PREFIX}-ninja ${MINGW_PACKAGE_PREFIX}-cmake
cmake -B build_mingw -G Ninja -DPLATFORM_DESKTOP=ON
cmake --build build_mingw





