📦 crunchmania

A Python decompressor for Crunch-Mania files from the Amiga era.
The format
Crunch-Mania was a file cruncher for the Commodore Amiga, written by Thomas Schwarz and released between 1989 and 1994. It was designed for in-place decompression: the compressed data is read backward and the output is written backward, so a file can be decompressed into the same memory it occupies.
There are four format variants, identified by a 4-byte magic at offset 0:
| Magic | Mode | Delta | Description |
|---|---|---|---|
CrM! |
Standard | No | Fixed Huffman + VLC |
CrM2 |
LZH | No | Dynamic Huffman per block |
Crm! |
Standard | Yes | Standard + delta encoding |
Crm2 |
LZH | Yes | LZH + delta encoding |
The lowercase m variants apply a cumulative byte delta as a post-processing
step, used for sample data where adjacent bytes tend to have similar values.
Several Amiga demos and games used obfuscated copies of the format with
different magic bytes (Iron, DCS!, MSS!, etc). These are detected and
handled transparently.
The 14-byte header is followed by the packed data stream, which is read from the end toward the start using an LSB-first bit reader initialized from the last 6 bytes of the packed block.
Installation
pip install crunchmania
CLI usage
# Show file info
crunchmania info packed_file.crm
# Decompress a file
crunchmania unpack packed_file.crm output_file
# Scan a file for embedded CrM blocks
crunchmania scan amiga_disk.adf
Library usage
from crunchmania import unpack, parse_header
data = open("packed_file.crm", "rb").read()
# Inspect the header
header = parse_header(data)
print(f"{header.magic!r}, {header.packed_size} -> {header.unpacked_size}")
# Decompress
output = unpack(data)
License
WTFPL