Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Fuwn/para

Repository files navigation

πŸ—ƒ 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 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.

Things To Come

  • Support for other formats (namely .kwz)
  • Optimizations here and there
  • Friendlier CLI
  • Possible GUI

Getting up and Running

Installation

Install from crates.io

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 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

About

πŸ—ƒ Flipnote Studios .ppm Animation Format Decoder & Utility

Topics

Resources

License

Stars

Watchers

Forks

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /