libyaz0 is a library in Python for decompressing and compressing Yaz0/1 compression formats.
Written in Python 3.
Yaz0 is a compression format used in several games from the N64, GC, Wii, 3DS, Wii U, and now the Switch.
A few of those games:
I'd say it's a Nintendo-favorite. :>
--------------------------------------------------------------------------------------------
Example of how Yaz0 compressed data can be decompressed:
--------------------------------------------------------------------------------------------
Example of how decompressed data can be Yaz0 compressed:
--------------------------------------------------------------------------------------------
libyaz0 can also be used to guess the file extension from the decompressed data.
File formats libyaz0 can detect:
--------------------------------------------------------------------------------------------
libyaz0 can also be used as a standalone program. (Download below)
Usage:
--------------------------------------------------------------------------------------------
Download:
You can get libyaz0 using pip:
Or you could get the source code from GitHub.
Github.
Standalone program (Windows).
--------------------------------------------------------------------------------------------
Credits:
Written by AboodXD.
Decompression algorithm based on wszst's.
Special thanks to RoadrunnerWMC for helping with looking up matches for the compression algorithm.
Written in Python 3.
Yaz0 is a compression format used in several games from the N64, GC, Wii, 3DS, Wii U, and now the Switch.
A few of those games:
- The Legend of Zelda: Ocarina of Time.
- Super Mario Sunshine.
- Mario Kart Wii.
- Super Mario 3D Land.
- New Super Mario Bros. U.
- Mario Kart 8.
- Breath of the Wild.
- ARMS.
- Splatoon 2.
I'd say it's a Nintendo-favorite. :>
--------------------------------------------------------------------------------------------
Example of how Yaz0 compressed data can be decompressed:
Code:
from libyaz0 import decompress
# Yaz0 compressed data
data = b"Yaz0\x00\x00\x00\x10\x00\x00\x00\x00\x00" \
b"\x00\x00\x00\xfbThis \x10\x02a \xf8test!"
# Decompress it
decompressed_data = decompress(data)
Code:
>>> decompressed_data.decode('utf-8')
'This is a test!'
--------------------------------------------------------------------------------------------
Example of how decompressed data can be Yaz0 compressed:
Code:
from libyaz0 import compress
# Decompressed data
data = 'This is a test!'.encode('utf-8')
# Compress it
## unk: the 4-bytes value that will be located at 0x8-0xC of the Yaz0 header
### default is 0x00000000
unk = 0
## level: compression level.
### 0: No compression (Fastest)
### 9: Best compression (Slowest)
#### default is 1
level = 9
compressed_data = compress(data, unk, level)
Code:
>>> compressed_data
b'Yaz0\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\xfbThis \x10\x02a \xf8test!'
--------------------------------------------------------------------------------------------
libyaz0 can also be used to guess the file extension from the decompressed data.
File formats libyaz0 can detect:
- BNTX (.bntx)
- BNSH (.bnsh)
- BFLAN (.bflan)
- BFLYT (.bflyt)
- BFLIM (.bflim)
- GTX (.gtx)
- SARC (.sarc)
- Yaz0/SZS (.yaz0)
Code:
from libyaz0 import guessFileExt
# Guess the file extension from the decompressed data
file_extension = guessFileExt(decompressed_data)
--------------------------------------------------------------------------------------------
libyaz0 can also be used as a standalone program. (Download below)
Usage:
- libyaz0 [option...] input
- -o <output>: Output file, if not specified, the output file will have the same name as the intput file
- -c: Compress (Will try to decompress if not specified)
- -level <level>: compression level (1-9) (1 is the default)
0: No compression (Fastest)
9: Best compression (Slowest)
- -unk <unk>: the unknown value that will be located at 0x8-0xC (0x00000000 is the default)
--------------------------------------------------------------------------------------------
Download:
You can get libyaz0 using pip:
Code:
pip install libyaz0==0.4
Or you could get the source code from GitHub.
Github.
Standalone program (Windows).
--------------------------------------------------------------------------------------------
Credits:
Written by AboodXD.
Decompression algorithm based on wszst's.
Special thanks to RoadrunnerWMC for helping with looking up matches for the compression algorithm.
Last edited by AboodXD,