GPL-3.0 License
Nut is a multi-purpose utility to organize, manage, and install Nintendo Switch files (NSP, NSZ, XCI, XCZ). It has the ability to act as a USB and network server for Tinfoil.
The GUI has the ability to set the most common configuration options, see the below images. You can also create a custom configuration by creating conf/nut.conf
. The format should mirror nut.default.conf.
The IP/Port/User/Password are the information needed to login to the NUT server. To the right of those, you can also see a USB Status
indicator, indicating whether a Tinfoil client is connected via USB with the server.
THe body shows a table containing a list of files that were detected by NUT from the scanned paths. It shows the title count, file name, title ID, title type and title size for each scanned file.
The footer shows the progress information of any file that is currently being downloaded from the server.
NUT has the ability to interact with Google Drive. For this to work, you will need to download a credentials.json
, using the guide found here. Once you have this file placed either in NUT's root or conf directory, click the Setup GDrive OAuth button in the GUI and follow the prompts. You will be able to access your GDrive through Tinfoil via the gdrive:/
protocol after copying credentials.json
and token.json
to /switch/tinfoil
on your microSD card. (This is automatically done if you connect Tinfoil to nut)
tinfoil_driver.exe
and nut.exe
from here.tinfoil_driver.exe
in the previous step.nut.exe
. You should be presented with a GUI as shown in the picture above.3.9.7
)requirements.txt
libusb
, python3-pip
& python3-pyqt5
packagescurl
with the openssl backend - install libssl-dev
(ie, apt install libssl-dev libcurl4-openssl-dev
)pip3 install -r requirements.txt
. If you previously tried installing pycurl and get the error libcurl link-time ssl backend (openssl) is different from compile-time ssl backend (none/other)
, uninstall it, make sure to follow step 2 again (installing curl with the openssl backend), and pip3 install pycurl --no-cache-dir
/etc/udev/rules.d/99-switch.rules
using your favorite editor and reload (udevadm control --reload
). Note: you may need to Disable MTP within Tinfoil and replace the group user with another that exists on your system. (based on this comment)SUBSYSTEM=="usb", ATTRS{idVendor}=="057e", ATTRS{idProduct}=="3000", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="27e2", GROUP="plugdev"
python3 nut_gui.py
to launch the application. (python3 nut.py
for CLI)brew install [email protected] pyqt@5
)brew install pyenv pyenv-virtualenv
and follow install directions)libusb
(brew install libusb
)curl
with the openssl backend (brew uninstall --ignore-dependencies curl && brew install curl
)pyenv install 3.9.7 && pyenv global 3.9.7
)brew info [email protected]
).pyenv root
).$HOME/.pyenv/versions/3.9.7/lib/python3.9/site-packages
) and create an file named homebrew.pth
containing the path for Homebrew Python's site packages directory (ie. /opt/homebrew/lib/python3.9/site-packages
)cd $HOME/.pyenv/versions/3.9.7/lib/python3.9/site-packages && echo "/opt/homebrew/lib/python3.9/site-packages" >> homebrew.pth
pyenv virtualenv --system-site-packages --python=/opt/homebrew/bin/python3.9 nut && source activate nut
)pip install wheel
)on M1:
PYCURL_SSL_LIBRARY=openssl LDFLAGS="-L/opt/homebrew/opt/openssl/lib" CPPFLAGS="-I/opt/homebrew/opt/openssl/include" pip install pycurl --no-cache-dir
on Intel:
PYCURL_SSL_LIBRARY=openssl LDFLAGS="-L/usr/local/opt/openssl/lib" CPPFLAGS="-I/usr/local/opt/openssl/include" pip install pycurl --compile --no-cache-dir
pip install -r requirements.txt
)python nut.py
for CLI. Run python3 nut_gui.py
to launch the application (this will only work if PyQT from Homebrew was succesfully installed via directions above)$ docker build --tag nut https://github.com/blawar/nut.git
$ docker run --rm -it --network=host --env=DISPLAY --volume=/tmp/.X11-unix:/tmp/.X11-unix --volume="$PWD:$PWD" --workdir="$PWD" --user=$(id -u):$(id -g) nut
This software is licensed under the terms of the GPLv3, with exemptions for specific projects noted below. You can find a copy of the license in the LICENSE file.
Exemptions:
Contributions are welcome, and there is a pre-commit hook - run pip3 install -r requirements_dev.txt