1 unstable release
0.1.0 | Mar 23, 2022 |
---|
#1231 in Encoding
31KB
564 lines
🗃 para
What?
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.
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
Prebuilt binaries for x86_64-based Linux systems and Windows are available in the releases. If you are using a different operating system or architecture such as macOS, you'll have to build and install the tool yourself!
$ cargo install --git https://github.com/Usugata/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
License
Dependencies
~10–19MB
~243K SLoC