Skip to content

dragonflylee/switchfin

Repository files navigation

Switchfin

icon

Switchfin is third-party PC player for Jellyfin that provides a native user interface to browse and play movies and series.

build download nightly

This project is in its early stages so expect bugs.

Screenshots

Home Library
Home Library
Search Episode
Search Episode
Music
Music

Features

  • Completely native interface
  • Supported media items: movies, series, seasons, episodes
    • Direct play and transcoding
  • Remote browser for Webdav/Apache/Nginx/FTP server
  • Base 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
    • Optionally force software decoding when hardware decoding has issues.

Input mapping during playback

  • A Play/Pause
  • B Stop during
  • Y Toggle OSD
  • X Show Menu
  • R/L Seek +/-
  • L Stick Button Toggle Speed Select
  • R Stick Button Toggle Video Quality Select
  • + Show video profile

FAQ

  1. Q: Subtitles didn't display? A: Put any ttf file at /switch/Switchfin/subfont.ttf
  2. Q: How to play media files on webdav server? A: Edit config file config.json
{
  "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:[email protected]/media"
    },
    {
      "name": "rclone",
      "url": "http://192.168.1.5:8000"
    }
  ]
}
  • example for using rClone setup HTTP server
rclone serve http --addr :8000 --read-only /media/downloads

TODO list

  • Movie view
  • Series detail
  • Search page
  • Websocket connection (Syncplay)
  • danmu plugin integration

Develop

git clone https://github.com/dragonflylee/switchfin.git --recurse-submodules --shallow-submodules

Building for Switch

To build for Switch, a standard development environment must first be set up. In order to do so, refer to the Getting Started guide.

sudo dkp-pacman -S switch-dev switch-glfw switch-libwebp switch-curl switch-libmpv
cmake -B build_switch -DPLATFORM_SWITCH=ON -DBUILTIN_NSP=ON
make -C build_switch Switchfin.nro -j$(nproc)
# for debug
nxlink -a <YOUR IP> -p Switchfin/Switchfin.nro -s Switchfin.nro --args -d -v

Building for 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

Thanks to

  • @xfangfang for wiliwili
  • @devkitpro and switchbrew for libnx
  • @natinusala and XITRIX for borealis
  • @proconsule for nxmp
  • @averne for great work of FFmpeg hwaccel backend
  • @averne deko3d backend of mpv