🗃
para
What?
A decoder and utility for the Flipnote Studios .ppm
animation format.
the original?
Why this implementation overThis implementation is
- SIGNIFICANTLY faster,
- implemented in safe Rust (a language with strict type-checking!),
- and being actively updated.
Speed
In a two-hundred-forty-four frame .ppm
benchmark running the command $ para ./benchmark.ppm gif benchmark.gif
on a twelve-core, twenty-four-thread Ryzen 9 processor, para took an average of 566.9893 milliseconds, while ppm-parser took an average of 50.4171397 seconds.
Running the command $ para ./benchmark.ppm 0 benchmark.png
on a twelve-core, twenty-four-thread Ryzen 9 processor, para took an average of 8.6251 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.
Things To Come
- Support for other formats (namely
.kwz
) - Optimizations here and there
- Friendlier CLI
- Possible GUI
Getting up and Running
Installation
crates.io
Install from$ cargo +nightly install para-cli --force
Download from releases
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!
Install from self-compile
$ cargo +nightly install --git https://github.com/Fuwn/para --branch main
If you are building and installing yourself, you must have Rust installed!
Usage
usage: para <in> <index option> <out>
index options:
gif
thumb
dump
integer(u16)
Examples
$ 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
Prebuilt binaries for the latest release may or may not be found here.
Credits
- 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