A decoder and utility for the Flipnote Studios .ppm
animation format.
Why this implementation over the original?
This implementation is
- SIGNIFICANTLY faster,
- implemented in safe Rust (a language with strict type-checking!),
- and being actively updated.
In a 219 frame .ppm
benchmark, running the command
$ para ./ppms/samplememo_02.ppm gif samplememo_02.gif
on a twelve-core,
twenty-four-thread Ryzen 9 processor, para took an average of 368.35 milliseconds,
while ppm-parser took an average of 50.4171397 seconds.
Running the command $ para ./ppms/samplememo_02.ppm 0 samplememo_02.png
on a twelve-core,
twenty-four-thread Ryzen 9 processor, para took an average of 1.875619 milliseconds,
while ppm-parser took an average of 358.2232 milliseconds.
Rust versus Python isn't very fair, however, this benchmark shows the speed improvements that para brings to the table.
- Support for other formats (namely
.kwz
) - Optimizations here and there
- Friendlier CLI
- Possible GUI
Install from crates.io
cargo +nightly install para-cli --force
Prebuilt binaries for x86_64-based Linux systems are available in the releases. If you are using a different operating system or architecture such as macOS or Windows; you'll have to build and install Para yourself!
cargo +nightly install --git https://github.com/Fuwn/para --branch main
If you are building and installing yourself, you must have Rust installed!
usage: para <in> <index option> <out>
index options:
gif
thumb
dump
integer(u16)
$ para ./example.ppm 23 example.png
will output the twenty-fourth frame ofexample.ppm
toexample.png
$ para ./example.ppm thumb example.png
will output the thumbnail ofexample.ppm
toexample.png
$ para ./example.ppm dump example.json
will output the metadata ofexample.ppm
toexample.json
$ para ./example.ppm gif example.gif
will outputexample.ppm
toexample.gif
Prebuilt binaries for the latest release may or may not be found here.
- jaames for completing PPM reverse-engineering and writing the original implementation.
- bricklife, mirai-iro, harimau_tigris, and other members of the Japanese Flipnote community who started reverse-engineering the PPM format almost as soon as the app was released.
- Midmad and WDLMaster for identifying the adpcm sound codec used.
- steven and yellows8 for the PPM documentation on DSiBrew.
- PBSDS for more PPM reverse-engineering, as well as writing hatenatools