🗃 Decoder and utility for the Flipnote Studios .ppm animation format.

Overview

🗃 para

Crate Build Status

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

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

You might also like...
A Rust proc-macro crate which derives functions to compile and parse back enums and structs to and from a bytecode representation

Bytecode A simple way to derive bytecode for you Enums and Structs. What is this This is a crate that provides a proc macro which will derive bytecode

A library and tool for automata and formal languages, inspired by JFLAP
A library and tool for automata and formal languages, inspired by JFLAP

Sugarcubes is a library and application for automata and formal languages. It is inspired by JFLAP, and is intended to eventually to be an alternative to JFLAP.

A stupid macro that compiles and executes Rust and spits the output directly into your Rust code

inline-rust This is a stupid macro inspired by inline-python that compiles and executes Rust and spits the output directly into your Rust code. There

This is a Discord bot written in Rust to translate to and from the Bottom Encoding Standard using bottom-rs and Serenity.
This is a Discord bot written in Rust to translate to and from the Bottom Encoding Standard using bottom-rs and Serenity.

bottom-bot This is a Discord bot written in Rust to translate to and from the Bottom Encoding Standard using bottom-rs and Serenity. Ever had this pro

An implementation of Code Generation and Factoring for Fast Evaluation of Low-order Spherical Harmonic Products and Squares

sh_product An implementation of Code Generation and Factoring for Fast Evaluation of Low-order Spherical Harmonic Products and Squares (paper by John

lightweight and customizable rust s-expression (s-expr) parser and printer

s-expr Rust library for S-expression like parsing and printing parser keeps track of spans, and representation (e.g. number base) number and decimal d

Crates Registry is a tool for serving and publishing crates and serving rustup installation in offline networks.
Crates Registry is a tool for serving and publishing crates and serving rustup installation in offline networks.

Crates Registry Description Crates Registry is a tool for serving and publishing crates and serving rustup installation in offline networks. (like Ver

Simplify temporary email management and interaction, including message retrieval and attachment downloads, using Rust.

Tempmail The Tempmail simplifies temporary email management and interaction, including message retrieval and attachment downloads, using the Rust prog

The simplest way to de-Google your life and business: Inbox, Calendar, Files, Contacts & much more
The simplest way to de-Google your life and business: Inbox, Calendar, Files, Contacts & much more

Bloom The all-in-one private workspace Try it for free! You no longer trust tech monopolies with your data? You are done with your privacy invaded by

Releases(0.1.0)
Owner
Fuwn
Avid Rust Enthusiast... and a containerization advocate. 18. Embedded Systems Engineering Technology, B.S.
Fuwn
A fast llama2 decoder in pure Rust.

llama2.rs ?? This is a Rust implementation of Llama2 inference on CPU The goal is to be as fast as possible. It has the following features: Support fo

Sasha Rush 771 Oct 30, 2023
CLI tool that make it easier to perform multiple lighthouse runs towards a single target and output the result in a "plotable" format.

Lighthouse Groupie CLI tool that make it easier to perform multiple lighthouse runs towards a single target and output the result in a "plotable" form

Polestar 1 Jan 12, 2022
Ampseer examines reads in fastq format and identifies which multiplex PCR primer set was used to generate the SARS-CoV-2 sequencing library they are read from.

Ampseer examines reads in fastq format and identifies which multiplex PCR primer set was used to generate the SARS-CoV-2 sequencing library they are read from.

New England Biolabs Inc. 7 Nov 2, 2022
Thin wrapper around starship.rs to format kakoune status line

kakship is just a thin wrapper around starship to format the status line of kakoune and is meant to be used with the included kakoune script kakship.kak.

Eric Burghard 15 Jun 7, 2022
osu-link is a program which links osu!stable beatmaps to osu!lazer's new store format, saving you disk space.

osu-link is a program which links osu!stable beatmaps to osu!lazer's new store format, saving you disk space.

LavaDesu 2 Nov 8, 2021
3MF (3D Manufacturing Format) support for Rust

3MF (3D Manufacturing Format) support for Rust About This library provides support for 3MF files to programs written in the Rust programming language.

Hanno Braun 21 Dec 17, 2022
A crude tool to convert from Bitwarden json format to lastpass

Pass-Merger A crude tool to convert from Bitwarden json format to lastpass. Steps to Deduplicate entries from Bitwarden Export all passwords from Chro

Usairim Isani 1 Jan 20, 2022
DWARF packaging utility, written in Rust, supporting GNU extension and DWARF 5 package formats.

thorin thorin is an DWARF packaging utility for creating DWARF packages (*.dwp files) out of input DWARF objects (*.dwo files; or *.o files with .dwo

David Wood 19 Nov 16, 2022
Utility for recursively unzipping tuples, Options of tuples and Results of tuples.

Zipped Utility for recursively unzipping tuples, Options of tuples and Results of tuples. Install cargo add zipped Usage This crate is quiet straightf

Glacyr B.V. 2 Dec 4, 2022
Utility to quickly setup Starcraft Broodwar matches between 2 or more bots

BWAIShotgun Utility to quickly setup Starcraft Broodwar matches between 2 or more bots Be aware that all bots will be executed directly, without any l

Dennis Waldherr 5 Nov 25, 2022