#ppm #flipnote #flipnotestudio #nintendo-dsi #nintendo-hacking

nightly app para-cli

Decoder and utility for the Flipnote Studios .ppm animation format

1 unstable release

0.1.0 Mar 23, 2022

#1120 in Encoding

MIT license

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 of example.ppm to example.png
  • $ para ./example.ppm thumb example.png will output the thumbnail of example.ppm to example.png
  • $ para ./example.ppm dump example.json will output the metadata of example.ppm to example.json
  • $ para ./example.ppm gif example.gif will output example.ppm to example.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

MIT License

Dependencies

~18–28MB
~251K SLoC