ninfs (formerly fuse-3ds) is a FUSE program to extract data from Nintendo game consoles. It works by presenting a virtual filesystem with the contents of your games, NAND, or SD card contents, and you can browse and copy out just the files that you need.
Requires Python 3.6.1+. Supports Windows (7 or later), macOS, and Linux.
- Mount a NAND backup and browse CTRNAND, TWLNAND, and others, and write back to them without having to extract and decrypt them first.
- Browse decrypted SD card contents. Dump installed games and saves, or copy contents between two system's SD contents.
- Extract a game's files out of a CIA, CCI (".3ds"), NCCH, RomFS, raw CDN contents, just by mounting them and browsing its files. Or use the virtual decrypted file and start playing the game in Citra right away.
--boot9argument (if set)
BOOT9_PATHenvironment variable (if set)
boot9_prot.bincan also be used in all of these locations.
~" means the user's home directory.
~/3ds" would mean
/Users/username/3dson macOS and
CDN, CIA, and NCCH mounting may need SeedDB for mounting NCCH containers of newer games (2015+) that use seeds. SeedDB is checked in order of:
--seeddbargument (if set)
SEEDDB_PATHenvironment variable (if set)
How to install
- Using the installer - Includes ninfs and WinFsp. This is the easiest way to use the application.
- Standalone version - Extract and run ninfsw.exe (or ninfs.exe to have a console attached).
- Use as Python module - Requires WinFsp.
py -3 -mpip install ninfs==2.0a9
- macOS users need macFUSE.
- Standalone release - Open the disk image, optionally copy to the Applications folder, and run ninfs.
- Use as Python module -
python3 -mpip install ninfs==2.0a9
- Install as a pip module -
python3 -mpip install --user ninfs==2.0a9
--useris not required if you are using a virtualenv.
- To use the gui, make sure tkinter is installed. This is
python3-tkon Debian/Ubuntu and
- Arch Linux git version is out of date but can be found in AUR (normal and with gui).
Supported file types
- CTR Cart Image - .3ds, .cci.
- CDN contents - cetk, tmd, and contents.
- CTR Importable Archive - .cia.
- Executable Filesystem - .exefs, exefs.bin.
- Nintendo 3DS NAND backup - nand.bin.
- NCCH - .cxi, .cfa, .ncch, .app.
- Read-only Filesystem - .romfs, romfs.bin.
- SD Card Contents - Nintendo 3DS from SD.
- Installed SD Title Contents - *.tmd and *.app files.
- 3DSX Homebrew - .3dsx.
- Nintendo DSi NAND backup - nand_dsi.bin.
- Nintendo DS ROM image - .nds, .srl.
- iQue Player NAND backup (read-only) - nand.bin.
- Nintendo Switch NAND backup - rawnand.bin.
Graphical user interface
A GUI can be used by specifying the type to be
gui. It controls mounting and unmounting. Examples:
- Windows -
py -3 -mninfs gui
- *nix -
python3 -mninfs gui.
- Run a mount script by using "
mount_cci game.3ds mountpoint).
-hto view arguments for a script.
- If it doesn't work, the other way is to use
<python-cmd> -mninfs <type>. Examples:
- Windows -
py -3 -mninfs cci game.3ds mountpoint
- *nix -
python3 -mninfs cci game.3ds mountpoint
- Windows -
- Windows users can use a drive letter like
F:as a mountpoint. Or use
*and a drive letter will be automatically chosen.
- Developer-unit contents are encrypted with different keys, which can be used with
--devwith CCI, CDN, CIA, NANDCTR, NCCH, and SD.
- Windows - Press Ctrl+C in the command prompt/PowerShell window.
- Linux - Run from terminal
fusermount -u /path/to/mount
- macOS (two methods):
- Right-click on the mount and choose "Eject "drive name"".
- Run from terminal
diskutil unmount /path/to/mount
# 3DS game card dump. mount_cci game.3ds mountpoint # Contents downloaded from CDN. mount_cdn cdn_directory mountpoint # CDN contents with a specific decrypted titlekey. mount_cdn --dec-key 3E3E6769742E696F2F76416A65423C3C cdn_directory mountpoint # CIA. mount_cia game.cia mountpoint # ExeFS. mount_exefs exefs.bin mountpoint # 3DS NAND backup with essential.exefs embedded. mount_nandctr nand.bin mountpoint # 3DS NAND backup with an OTP file (Counter is automatically generated). mount_nandctr --otp otp.bin nand.bin mountpoint # 3DS NAND backup with OTP and CID files. mount_nandctr --otp otp.bin --cid nand_cid.bin nand.bin mountpoint # 3DS NAND backup with OTP file and a CID hexstring. mount_nandctr --otp otp.bin --cid 7468616E6B7334636865636B696E6721 nand.bin mountpoint # DSi NAND backup (Counter is automatically generated). mount_nandtwl --console-id 5345445543454D45 nand_dsi.bin mountpoint # DSi NAND backup with a Console ID hexstring and specified CID hexstring. mount_nandtwl --console-id 5345445543454D45 --cid 576879446F657344536945786973743F nand_dsi.bin mountpoint # DSi NAND backup with a Console ID file and specified CID file. mount_nandtwl --console-id ConsoleID.bin --cid CID.bin nand_dsi.bin mountpoint # iQue Player NAND backup. mount_nandbb nand.bin mountpoint # Switch NAND backup. mount_nandhac --keys prod.keys rawnand.bin mountpoint # Switch NAND backup in multiple parts. mount_nandhac --keys prod.keys -S rawnand.bin.00 mountpoint # Switch NAND encrypted partition dump. mount_nandhac --keys prod.keys --partition SYSTEM SYSTEM.bin mountpoint # NCCH container (.app, .cxi, .cfa, .ncch). mount_ncch content.cxi mountpoint # RomFS. mount_romfs romfs.bin mountpoint # Nintendo 3DS directory from an SD card. mount_sd --movable movable.sed "/path/to/Nintendo 3DS" mountpoint # Nintendo 3DS directory from an SD card with an SD key hexstring. mount_sd --sd-key 504C415900000000504F4B454D4F4E21 "/path/to/Nintendo 3DS" mountpoint # Nintendo DS ROM image (NDS/SRL, mount_nds also works). mount_srl game.nds mountpoint # 3DSX homebrew application. mount_threedsx boot.3dsx mountpoint
- wwylele's 3ds-save-tool can be used to extract game saves and extra data (DISA and DIFF, respectively).
- wwylele's save3ds is a tool to interact with 3DS save files and extdata. Extracting and importing works on all platforms. The FUSE part only works on macOS and Linux.
- OSFMount for Windows can mount FAT12/FAT16/FAT32 partitions in NAND backups.
- roothorick's BUSEHAC is a Linux driver for encrypted Nintendo Switch NANDs.
- Maschell's fuse-wiiu can be used to mount Wii U contents.
- koolkdev's wfslib has wfs-fuse to mount the Wii U mlc dumps and usb devices.
fuse-3ds demonstration with Pokémon Ultra Moon (ihaveamac)
- Mac application is now signed and notarized by Apple.
- Fix not showing all drive letters in the Windows GUI mount, only A and B.
- Always set write bit in mounts (except SD).
- This makes it easier to deal with files that have been copied out of the mount, since chmod won't be required to set the write bit.
- Include Internet Access Policy for Little Snitch.
- Fix DMG build not properly copying the application.
- Update WinFSP url.
ninfs is under the MIT license. fuse.py is under the ISC license (taken from setup.py).
Special thanks to @Jhynjhiruu for adding support for iQue Player NAND backups.
Special thanks to @Stary2001 for help with NAND crypto (especially TWL), and @d0k3 for SD crypto.
OTP code is from Stary2001/3ds_tools, and is under the MIT license.