NXMP Nintendo Switch Media Player

nxmp-banner.jpg


NXMP is an open-source Nintendo Switch media player based on MPV and FFMPEG, supporting a wide range of media file formats and codecs.
NXMP is coded by @proconsule54 and @darkxex

It support HTTP,FTP,SFTP,Samba,NFS streaming and it also support Enigma2 decoders. Starting from 0.7.0 Version it features HW Decoding for H264,HEVC,VP9,VP8,MPEG2 up to 4K HDR@30fps


Project repository|Stable Build
Stable: v0.9.3



Features:
  • HW Decoding (since v0.7.0) for (H264,HEVC,VP9,VP8,MPEG2)
  • Extense support of media file formats and codecs, including audio too as well​
  • Touch and controller support, control the MP as you want​
  • Video deinterlace support
  • Advanced image settings, configure the brightness and color options, change aspect ratio and rotate the screen​
  • Custom subtitles, you can configure options like color, text size and position to your preferences​
  • Full sound EQ, allow adjust the sound equalizer to your preferences, you can define presets too​
  • Chapters navigator with titles support​
  • Selector of Video/Audio/Subtitle tracks during play​
  • Playlist queue, allow to enque desired files on a playlist for non-stop play​
  • Resume play, you can continue your videos where you previusly stop it​
  • Watch status, watched videos are marked as green on file explorer​
  • Shadermania, you can apply any shader compatible with MPV to NXMP​



Media sources supported:
  • Nintendo Switch SD Card
  • USB drive attached to dock or Switch with USB C adapter (FAT, NTFS and EXT4, up to 32 drives)
  • HTTP/S files through network
  • FTP and SFTP files
  • Samba (SMB) files shared throught network
  • NFS
  • Enigma2 (allow to view TV channel from satellite decoders compatible with this protocol)


Screenshoots:

2021110300034400.jpg2021110300031500.jpg2021110300032100.jpg2021110300023000.jpg



Post here any kind of bug/suggestions.
Enjoy!

Thanks to libusbhsfs https://github.com/DarkMatterCore/libusbhsfs for USB drives support
Thanks to @averne for HW Decoding FFMpeg! and for many many hints
Thanks to @bodyXY for the banner and the icons!
Thanks to @Godorowski for player UI design and releated icons
Thanks to @Chocola for beta testing a player guide
 
Last edited by proconsule54,
i will check network connection deeper, special chars and : on password may lead to problem.
Post automatically merged:

Also a i am trying to port deko3d hw acceleration from mpv 0.3.6 to mpv 0.3.9. need deep tests
Awesome , thanks mate! :bow:
on a side note , UPnP works perfectly fine in the new version. Currently i use that till you get a chance to check the direct network path.
 
Awesome , thanks mate! :bow:
on a side note , UPnP works perfectly fine in the new version. Currently i use that till you get a chance to check the direct network path.
Also try the new network entry, you can see the syntax on nxmp github page, this entry support special chars and so on on password
 
  • Like
Reactions: nWo and SamyKn
Also try the new network entry, you can see the syntax on nxmp github page, this entry support special chars and so on on password
Hey mate,
Thanks for the update, here are my test results using github page sample config:

1) SMB ==> does not work at all , still throws "Error Connecting" and here is my very simple config

[NAS SMB]
server = 10.0.1.5
type = smb
username = admin
password = xxxxxxxxxx
path = \\10.0.1.5\Multimedia (I also tried various path types like \\Multimedia without server address but still no luck) :sad:


2) FTP ==> this partially works.
It connects to my FTP server :grog:but what's weird is , syntax didn;t like any of the path i put. I changed it to the root folder to make it work which is not a big deal.

[NAS FTP]
server = 10.0.1.5
type = sftp
username = admin
password = xxxxxxxx
path = /
port = 22



Maybe i used wrong path format, thanks again for your help :bow:
 
  • Like
Reactions: proconsule54
Hey mate,
Thanks for the update, here are my test results using github page sample config:

1) SMB ==> does not work at all , still throws "Error Connecting" and here is my very simple config

[NAS SMB]
server = 10.0.1.5
type = smb
username = admin
password = xxxxxxxxxx
path = \\10.0.1.5\Multimedia (I also tried various path types like \\Multimedia without server address but still no luck) :sad:


2) FTP ==> this partially works.
It connects to my FTP server :grog:but what's weird is , syntax didn;t like any of the path i put. I changed it to the root folder to make it work which is not a big deal.

[NAS FTP]
server = 10.0.1.5
type = sftp
username = admin
password = xxxxxxxx
path = /
port = 22



Maybe i used wrong path format, thanks again for your help :bow:
use / instead of \ for SMB share.
In your case if not a swcond level path you can use Multimedia alone without slash
 
@DarkMatterCore with 0.2.9 libusbhsfs the drive that was not working with last commit , works as reported by @Dmxjall81
The same drive works with the libusbhsfs 0.2.10 example application. I'm not saying it couldn't be a problem within the library, but I personally find that hard to believe after looking at their logfile myself:

Code:
[2025-12-05 17:32:34.099125884] /source/usbhsfs_manager.c:90:usbHsFsInitialize -> libusbhsfs v0.2.10 starting. Built on 2025-12-02 20:42:52 UTC.
[2025-12-05 17:32:34.099163428] /source/usbhsfs_manager.c:94:usbHsFsInitialize -> Build type: GPL.
[2025-12-05 17:32:34.099175024] /source/usbhsfs_manager.c:100:usbHsFsInitialize -> Horizon OS version: 21.0.1.
[2025-12-05 17:32:34.099696376] /source/usbhsfs_utils.c:148:usbHsFsUtilsAtmosphereHasService -> Exosphère API version info:
- Release version: 1.10.0.
- PKG1 key generation: 20 (0x15).
- Target firmware: 21.0.1.
[2025-12-05 17:32:34.099769488] /source/usbhsfs_manager.c:115:usbHsFsInitialize -> Running under SX OS: no.
[2025-12-05 17:32:34.100096880] /source/usbhsfs_manager.c:604:usbHsFsManagerAtmosphereThreadFunc -> Interface available event triggered at startup (UMS devices already available).
[2025-12-05 17:32:34.100223916] /source/usbhsfs_manager.c:764:usbHsFsManagerResetMassStorageDevices -> usbHsQueryAvailableInterfaces returned 1 interface(s) matching our filter.
[2025-12-05 17:32:34.100240972] /source/usbhsfs_manager.c:780:usbHsFsManagerResetMassStorageDevices -> Resetting USB Mass Storage device with interface 1346437120.
[2025-12-05 17:32:34.498314232] /source/usbhsfs_manager.c:621:usbHsFsManagerAtmosphereThreadFunc -> Interface available event triggered.
[2025-12-05 17:32:34.498327336] /source/usbhsfs_manager.c:630:usbHsFsManagerAtmosphereThreadFunc -> Current drive count: 0.
[2025-12-05 17:32:34.498455984] /source/usbhsfs_manager.c:824:usbHsFsManagerAddConnectedDriveContexts -> usbHsQueryAvailableInterfaces returned 1 interface(s) matching our filter.

...

[2025-12-05 17:32:34.503860812] /source/usbhsfs_scsi.c:403:usbHsFsScsiStartDriveLogicalUnit -> Starting LUN #0 from drive with interface ID 1346502656.

...

[2025-12-05 17:32:34.870352132] /source/usbhsfs_scsi.c:562:usbHsFsScsiStartDriveLogicalUnit -> Capacity (interface 1346502656, LUN 0): 0x3A3817D5C00 byte(s).
[2025-12-05 17:32:34.870370072] /source/usbhsfs_scsi.c:591:usbHsFsScsiStartDriveLogicalUnit -> Successfully started LUN #0 from drive with interface ID 1346502656.

...

[2025-12-05 17:32:34.906786504] /source/usbhsfs_mount.c:562:usbHsFsMountParseMasterBootRecordPartitionEntry -> Found GPT partition entry at LBA 0x1 (interface 1346502656, LUN 0).

...

[2025-12-05 17:32:43.268907028] /source/usbhsfs_mount.c:1160:usbHsFsMountRegisterDevoptabDevice -> Available device ID: 0 (interface 1346502656, LUN 0, FS 0).
[2025-12-05 17:32:43.269748856] /source/usbhsfs_mount.c:747:usbHsFsMountParseGuidPartitionTableEntry -> Successfully registered NTFS volume at LBA 0x64800 (interface 1346502656, LUN 0).

...

[2025-12-05 17:32:43.391084824] /source/usbhsfs_mount.c:528:usbHsFsMountParseMasterBootRecordPartitionEntry -> Found empty partition entry (interface 1346502656, LUN 0). Skipping.
[2025-12-05 17:32:43.391910532] /source/usbhsfs_mount.c:528:usbHsFsMountParseMasterBootRecordPartitionEntry -> Found empty partition entry (interface 1346502656, LUN 0). Skipping.
[2025-12-05 17:32:43.392701504] /source/usbhsfs_mount.c:528:usbHsFsMountParseMasterBootRecordPartitionEntry -> Found empty partition entry (interface 1346502656, LUN 0). Skipping.
[2025-12-05 17:32:43.393533400] /source/usbhsfs_manager.c:941:usbHsFsManagerInitializeAndAddDriveContextToList -> Reallocating drive context pointer array from 0 to 1 (interface 1346502656).
[2025-12-05 17:32:43.394333888] /source/usbhsfs_manager.c:844:usbHsFsManagerAddConnectedDriveContexts -> Successfully added drive with ID 1346502656 to drive context list.
[2025-12-05 17:32:43.395163132] /source/usbhsfs_manager.c:851:usbHsFsManagerAddConnectedDriveContexts -> Added 1 drive context(s).
[2025-12-05 17:32:43.395976880] /source/usbhsfs_manager.c:652:usbHsFsManagerAtmosphereThreadFunc -> Signaling status change event.

...

"Signaling status change event" marks the point at which the library signals the user event it creates to let its parent application know about any UMS volume changes. And judging by the rest of their logfile + what they told me they saw on the screen, the example application is indeed detecting the UMS volume change and acting accordingly.

I'm also sure this is the problematic Seagate drive they've been talking about because the logfile makes it clear:

Code:
[2025-12-05 17:32:34.503057620] /source/usbhsfs_request.c:242:usbHsFsRequestGetStringDescriptor -> String descriptor data (interface 1346502656, language ID 0x0409, index 0x02):
10035300650061006700610074006500
[2025-12-05 17:32:34.503076964] /source/usbhsfs_drive.c:651:usbHsFsDriveGetUtf8StringFromStringDescriptor -> Converted string (interface 1346502656, language ID 0x0409, index 0x02): "Seagate".
[2025-12-05 17:32:34.503331868] /source/usbhsfs_request.c:242:usbHsFsRequestGetStringDescriptor -> String descriptor data (interface 1346502656, language ID 0x0409, index 0x03):
1A0345007800700061006E00730069006F006E00200053005700
[2025-12-05 17:32:34.503350796] /source/usbhsfs_drive.c:651:usbHsFsDriveGetUtf8StringFromStringDescriptor -> Converted string (interface 1346502656, language ID 0x0409, index 0x03): "Expansion SW".

I simply don't know what to tell you. I wish to further debug this issue, but if it just works under the example application, there's not much I can do.

Here's an idea: link NXMP against the debug version of libusbhsfs (latest commit) and ask @Dmxjall81 to run it and test their Seagate drive -- they should end up with a libusbhsfs.log file in their SD card root directory. If the behavior doesn't match what we're seeing here, then something else must be going on.
 
Last edited by DarkMatterCore,
use / instead of \ for SMB share.
In your case if not a swcond level path you can use Multimedia alone without slash
Ohh you are a legend :bow::grog::grog:
in the SMB i put only Multimedia without any / or \ , works like a charm , happy days!!! :grog::grog:
i created some other similar clones for other folders.... :bow::grog:.
 
Good news, since i am recompiling stuff i also made some tests, i ported video hw decoding to from 0.36 to 0.39 mpv.
porting was so easy since the code made by @averne for mpv is terrific (in my opinion one of the best effort on switch scene)!
I just made some changes on meson build system and on mpv init (since from 0.37 mpv uses by default strong shaders for scaling that eat all GPU power) and is working very very well. i will provide a patch for it soon (libplacebo is untouched, maybe i will port on it in the future but is a bit hard).

I will post soon a 0.9.3 version with mpv updated when i get rid of usb drive bug
Post automatically merged:

Here is the patch if someone want to try it out.

Code:
/opt/devkitpro/meson-cross.sh switch ../crossfile.txt build     -Dlibmpv=true -Dcplayer=false -Dtests=false -Dplain-gl=enabled -Ddeko3d=enabled -Dlua=enabled -Diconv=disabled

Code:
meson compile -C build
meson install -C build

this patch is for mpv 0.39
 

Attachments

Last edited by proconsule54,
  • Like
Reactions: ber71 and Blythe93

[0.9.3]​

Added​

  • Support for FW 21.0.0 ABI changes
  • CBZ CBR file support
  • Updated mpv from 0.36 to 0.39

https://github.com/proconsule/nxmp/releases/tag/v0.9.3


This release uses libusbhsfs 0.2.9 , i am in the processo of updating code for filesystem so the bug i have with 0.2.10 will gone for sure in future version but i want to have a stable release for users on FW 21 on github so i released it.
 
it says that version 9.3 supports touch "ouch and controller support, control the MP as you want" . But when I run 9.3 and play a video file, there is no OSD for stoppping, pausing, fast forward, reverse and etc for a media file. Tapping on a file that's playing also does not do anything. I do have touch enabled and in the config file I see that touch screen is also enabled. Not sure what I am missing.
 
  • Like
Reactions: proconsule54
it says that version 9.3 supports touch "ouch and controller support, control the MP as you want" . But when I run 9.3 and play a video file, there is no OSD for stoppping, pausing, fast forward, reverse and etc for a media file. Tapping on a file that's playing also does not do anything. I do have touch enabled and in the config file I see that touch screen is also enabled. Not sure what I am missing.
I will check it, thanks for reporting
 
it says that version 9.3 supports touch "ouch and controller support, control the MP as you want" . But when I run 9.3 and play a video file, there is no OSD for stoppping, pausing, fast forward, reverse and etc for a media file. Tapping on a file that's playing also does not do anything. I do have touch enabled and in the config file I see that touch screen is also enabled. Not sure what I am missing.
I tried too , there is no touch support.

@proconsule54 , is it a big deal or too hard to implement a feature like resume playing for a file that has been played before?
 
  • Like
Reactions: proconsule54
Enable database in Settings for resume
quick one mate
can i load IPTV playlist? like xtreme code API in the app? not a m3u file but server side controlled like xtreme code. Thanks!
- i tried to add the URL including username and pass but no luck with the stream URL.
- I tried Enigma also in the form of below but also no luck :sad:
=====> http://xxxxxxxxx/get.php?username=xxxxxxxxx&password=xxxxx <=====

I tried your github sample as well but no good for Xtreme Code
[Enigma2]
e2address=http://xxxxxxx


Not sure if i have to use super old enigma config with telnet but appreciate your help :grog:
 
Last edited by SamyKn,
Yo i would like to know does this app like do 5.1 audio out from the dock like i tried it on my denon but I was getting stereo on pure direct using a dts hd ma and dolby true hd source and yes the surround sound is enabled from the settings of the switch.
Post automatically merged:

Yo i would like to know does this app like do 5.1 audio out from the dock like i tried it on my denon but I was getting stereo on pure direct using a dts hd ma and dolby true hd source.
 
How can easily send http link from Android to nxmp?
Run FTPD (FTP Server) on switch, the connect to your switch via FTP client
After you can edit the NXMP config file directly and add your http link.
i took a sample video showing the process , you can use any ftp client you want
 
Last edited by SamyKn,
Sure i can add folder, but adding link to file would be also nice. I found that tsvitch can play single video file over http by editing a favourite channel link.
 
Sure i can add folder, but adding link to file would be also nice. I found that tsvitch can play single video file over http by editing a favourite channel link.
what do you mean by watching a file over http? you mean an online video file over internet?

Btw , the video i put here is not for adding the folder , for easily editing the config file to add your URL
 

Site & Scene News

Popular threads in this forum