Releases: NinjaCheetah/WiiPy
v1.5.0: More Info and LZ77 Compression
It's been a whopping 4 months since the last release! I figured it was about time to get some of the new features I've been working on pushed out, so it's time for another release!
Changelog:
Info
- More files are accepted as valid TMDs, Tickets, or WADs. Files matching the patterns
tmd.bin
,tmd.*
,ticket.bin
, andcetk
will now be accepted, as well as WAD files with any file name thanks to the header being read. - 4-character ASCII Title ID formatting has been improved.
- When viewing info for a boot2 WAD or TMD, the required IOS line will now be hidden, and the title version will include
(boot2vX)
after the plain version number. - When viewing info for an entire WAD, real signature checks will be run on the certificates, TMD, and Ticket, and signing info will be displayed.
- For TMDs and Tickets, the
Fakesigned:
line will be replaced bySignature:
with a value ofValid (Unmodified <TMD/Ticket>)
,Invalid (Modified <TMD/Ticket>)
, orFakesigned
. - For the WAD as a whole, the
Fakesigned:
line will be replaced bySigning Status:
with a value ofLegitimate (Unmodified TMD + Ticket)
,Illegitimate (Modified TMD + Ticket)
,Piratelegit (Unmodified TMD, Modified Ticket)
,Edited (Modified TMD, Unmodified Ticket)
, orFakesigned
. - These changes have no effect on TMDs or Tickets on their own, and the
Fakesigned:
line will continue to be used.
- For TMDs and Tickets, the
- Channel names will be displayed for WADs containing channels.
EmuNAND
- Added new subcommand
emunand info
, which will provide you with a summary of the IOSes and Titles installed to an EmuNAND, as well as the System Menu version and how much storage is being used. This command will also read the TMDs of installed titles and inform you of any IOSes that are required by an installed title but are not installed themselves. - Added new subcommand
emunand install-missing
, which will automatically detect all required IOSes for the titles installed to an EmuNAND and download and install them for you. This command will attempt to detect if it's being used on a Wii or vWii EmuNAND based on the installed System Menu, and will fall back on assuming it's for the Wii if that fails. The option--vwii
will override this behavior and force it to install vWii IOSes.
WAD/TMD Editing
- When editing WADs or TMDs, you can now use symbols as part of a new Title ID.
- When editing WADs containing channels, you can now change the name of the channel that it contains.
NUS
- You can now specify a custom NUS endpoint URL using the
-e
/--endpoint
argument. - Command updated to be compatible with changes from libWiiPy v0.5.X -> v0.6.0.
New Command: lz77
- The new
lz77
command can be used to compress and decompress files using the LZ77 compression algorithm, which is used fairly frequently on the Wii. - Note: While decompression is quick, libWiiPy's current compression implementation can be very slow. libWiiPy supports two compression levels, but because of how slow the compression is already, WiiPy only exposes the lower of the two compression levels at this time.
More details about specific commands can be obtained by looking at the --help
for each of them.
These builds were based off of the main branch of libWiiPy as of 2025-03-28, and are using the release version of libWiiPy v0.6.0 as a result.
v1.4.0: New Commands Galore
It's been quite a while now, but I'm happy to finally announce the release of a new WiiPy update! There are numerous new features here, including three entirely new commands and a handful of new subcommands for the existing ones.
Changelog:
General
- WiiPy now has support for development encrypted WADs across the board, thanks to libWiiPy v0.5.2.
- The syntax of many commands has been updated to a new standard format, so you can expect most commands to not have syntax changes in the future. Specific changes to syntax will not be documented in this changelog, so if you're having trouble with a command that worked before please check the
--help
for that command. - Error messages have been entirely redesigned. This means that you should no longer see Python tracebacks during normal use, and instead should see proper error messages with a description of the problem and the solution.
New Command: cios
- The new
cios
command can be used to build a cIOS from a provided base, cIOS map, and cIOS modules directory. Seewiipy cios --help
for more information. - Supports building both Wii and vWii cIOSes.
EmuNAND
- Fixed uninstalling titles from an EmuNAND.
Info
- Info is now more verbose across the board.
- 4 character ASCII Title IDs (ex.
HAZA
) are now shown for applicable titles. - Retail/development signing is now detected correctly (previously all titles would appear as retail signed).
- Development signed titles will now be noted as using the development common key as opposed to the retail one (change in libWiiPy).
- The index of the boot content is now shown when looking at TMD or WAD info.
- The title type is now detected correctly, and will no longer always show
System
regardless of the actual type (change in libWiiPy). - The title region will now correctly display as
None
instead ofJapan
for system titles. - Title regions now use their three letter code (
JPN
,USA
,EUR
,KOR
) to denote the region. - The installed size of a WAD is now shown, in both MB and blocks (change in libWiiPy).
New Command: setting
- The new
setting
command can be used to encrypt, decrypt, or generate the Wii'ssetting.txt
file. Seewiipy setting --help
for more information. - Setting generation generates a new and valid
setting.txt
file based on a provided serial number and console region.
New Command: tmd
- The new
tmd
command can be used to edit the properties of a TMD and remove content from its content records. Seewiipy tmd --help
for more information. - The
remove
subcommand allows for removing content from the TMD's content records either by index or Content ID. - The
edit
subcommand allows for editing the TMD's Title ID, required IOS version, and title type.
NUS
- Fixed a bug where using
--version
when downloading only a TMD wouldn't actually change the TMD version downloaded.
WAD
- The
wad
command underwent a number of changes, enough that they will be put into their own sections. - General
- Content ordering issues have been resolved, so you should no longer see unexpected results when packing or unpacking WADs.
- New Subcommand:
add
- The new
add
subcommand allows for adding new content to a WAD file directly. - Defaults to generating a random Content ID and specifying the content as type "Normal", but a custom CID and type can be supplied instead.
- The new
- New Subcommand:
convert
- The new
convert
subcommand allows for re-encrypting a WAD currently using any valid key to instead use a different key. - Accepts WADs using the retail common key, the development common key, and the vWii key, and supports re-encrypting to the same three options.
- Re-encrypted WADs are fakesigned by default, and the certificate issuer information in the TMD and Ticket is changed when going between retail<->development, to ensure that the correct key can be used to decrypt it later.
- The new
- New Subcommand:
remove
- The new
remove
subcommand allows for removing existing content from a WAD file directly. - Content can be removed by either its index or Content ID.
- The new
- New Subcommand:
set
- The new
set
subcommand allows for replacing existing content in a WAD file with new content, without needing to unpack it. - The Content ID and type are kept the same as the previous content by default, but new values can be specified.
- The new
More details about specific commands can be obtained by looking at the --help
for each of them.
Additional Note: The theme
command present in the final development builds of v1.4.0 is stubbed out in the final release, as it was not ready to be shipped. This command will take time to finish as it requires additional features in libWiiPy first, and has been omitted to prevent further delays to v1.4.0. It is present again in development builds of v1.5.0.
These builds were based off of the main branch of libWiiPy as of 2024-11-16, and are using the development version of libWiiPy v0.5.3 as a result.
v1.3.0: Major Refinements and New Features
In a similar story to libWiiPy v0.5.0, this release was meant to be another bugfix and was originally meant to be v1.2.2, but with all of the additions to libWiiPy, a handful of new features were picked up along the way, making this worthy of a bigger version number increase.
Changelog:
- All U8 archives can now be extracted properly, and repacked U8 archives are now much closer to official Nintendo-made archives.
- Hash checks can now be skipped when extracting a WAD by passing
--skip-hash
. - Many, many minor bugs have been squished behind the scenes thanks to fixes in libWiiPy.
- New command,
emunand
, with the subcommandtitle
, for installing and uninstalling titles to/from an existing EmuNAND. This supports single WAD files and bulk installs. More subcommands offering more EmuNAND features will be added in the future. - New command,
fakesign
, for directly fakesigning a TMD, Ticket, or WAD. This can be done in-place, or can be directed to output to a specific file. - New command,
iospatch
, for applying patches to IOS WADs. These include patching the fakesigning bug back in, patching in access to ES_Identify, patching in access to /dev/flash, and patching in support for downgrading titles. There is also an experimental patch for disabling the need for the DVD drive to initialize, which is useful on Wii Us where the drive has been removed. This patch is experimental, and may cause unintended side effects on some consoles. - New command,
info
, which can gather and then display info about a TMD, Ticket, or WAD file.
More details about these specific commands can be obtained by looking at the help for each of them, by passing --help
.
These builds were based off of the main branch of libWiiPy as of 2024-08-12, and are using the release version of libWiiPy v0.5.0 as a result.
v1.2.1: Hotfix
Further improvements to overall system stability and other minor adjustments have been made to enhance the user experience.
Changelog:
- The error message "Title has no Ticket, so content will not be decrypted!" will no longer incorrectly be printed during NUS downloads where you have chosen to pack the downloaded title into a WAD. This error message is meant for when you're downloading to a folder and no ticket exists, and meant nothing in the context of WAD packing.
- libWiiPy change: WADs with content stored in a different order than intended (where the content index stored in the TMD does not match the actual index of that content when going in order) are now packed properly. Note that prior to this release, WADs packed this was would unpack properly, they just couldn't be packed.
Known Issues:
- libWiiPy: There are some known issues with the u8 module, meaning that some U8 archives may not extract correctly. This is being looked into and will hopefully be fixed soon.
These builds were based off of the main
branch of libWiiPy as of 2024-07-21, and are using a development version of libWiiPy v0.4.2 as a result.
v1.2.0: Major NUS Command Updates
More minor issues have been addressed, and the NUS command has been massively upgraded.
Changelog:
- The NUS command now has two subcommands,
title
andcontent
, for handling downloading either an entire title (this is the old behavior of justnus
in v1.1.0) or just a specific content from a title. - The new
nus title
subcommand supports downloading a title to a directory using-o
/--output
, or, as long as a Ticket is available, can pack it directly into a WAD like in previous versions using-w
/--wad
. When downloading to a directory, contents are automatically decrypted if a Ticket is available. - The new
nus content
subcommand supports downloading a single content from a title to a file by specifying the Title ID and Content ID for the content you want to download. If a Ticket is available for that title, you can use-d
/--decrypt
to instead save the decrypted version of that content. - Verbose output is now the default and only option for NUS downloads.
--null-sigs
has been removed from the WAD subcommand as it was added in a misunderstanding, because the behavior it was trying to replicate was actually fakesigning.- Added
--fakesign
to the WAD subcommand for packing, which fakesigns the TMD and Ticket of the WAD being packed.
Known Issues:
- libWiiPy: There are some known issues with the u8 module, meaning that some U8 archives may not extract correctly. This is being looked into and will hopefully be fixed soon.
These builds were based off of the main
branch of libWiiPy as of 2024-07-17, and are using the release version of libWiiPy v0.4.1 as a result.
v1.1.0: Major Bugfix Release
Some major issues were discovered in WiiPy and libWiiPy since the release of WiiPy v1.0.0/v1.0.1, and this release addresses all known major bugs in both.
Changelog:
- WAD files and U8 archives can now both be extracted to an existing empty directory (as opposed to requiring the specified directory to not already exist)
- The NUS subcommand now uses the Wii U NUS endpoint by default (the old behavior can be restored by using
--wii
, however this change should only improve speeds and have no other impacts) - The NUS subcommand now offers verbose output for downloads using
--verbose
(however this option will be removed in v1.2.0 as verbose output is planned to become the default and only behavior) - The WAD subcommand now supports
--null-sigs
to nullify the TMD and Ticket signatures during packing - libWiiPy change: IOS WADs made using legacy tools (NUS Downloader, Sharpii, etc.) will now extract properly with the WAD subcommand
- libWiiPy change: All WADs packed use adjusted calculations for the content region size in the WAD header, creating consistency with legacy tools
These builds were based off of the main
branch of libWiiPy as of 2024-07-07, and are using a development version of libWiiPy v0.4.0 as a result.
v1.0.1: Minor Fixes and Improvements
Further improvements to overall system stability and other minor adjustments have been made to enhance the user experience.
Changelog:
- Rewrote WAD module, now displays more clear error messages when attempting to pack a WAD
- WAD module now uses a
libWiiPy.title.Title()
for packing instead of the legacy method (this makes it match unpacking) - NUS module now supports
-o
or--output
to specify a file name or path to output to, if you don't want to use the default<tid>-<version>.wad
format, or want the file somewhere other than the same directory as the exectuable
These builds were built off of the main
branch of libWiiPy as of 2024-06-27, and are using a development version of libWiiPy v0.4.0 as a result.
v1.0.0: Hello, command lines!
WiiPy is officially getting its first release! Recently rewritten to use Python's built-in argparse
module, I've now deemed it ready for the general public to use and... enjoy?
Features:
- Packing and unpacking WAD files
- Downloading titles from the NUS
- Packing and unpacking U8 archives
- Decompressing ASH files (compression support will be added when supported by libWiiPy)
These builds were built off of the main
branch of libWiiPy as of 2024-06-24, and are using a development version of libWiiPy v0.4.0 as a result.