Example decoder and utilities for Flipnote Studio's .ppm animation format.
This is not remotely optimised, and is for example purposes only
All scripts were written for Python 3.7 and require the numpy module to be installed.
- jaames for completing PPM reverse-engineering and writing this 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
Converts specific ppm frames to standard image formats such as png, gif, jpeg, etc. Requires the Pillow module to be installed.
Usage:
python ppmImage.py <input path> <frame index> <output path>
<frame index>
:
- Specific frame index (e.g.
0
for the first frame) thumb
to get the thumbnail framegif
to encode the whole Flipnote to an animated GIF.
<output path>
:
- Can include placeholders:
{name}
for the input filename (without extention),{ext}
for input extention,{index}
for the item index and{dirname}
for the input file directory.
<input path>
:
-
You can pass glob patterns as the input filepath to batch convert. For example, the following will extract thumbnail images from all the ppms in a directory:
python ppmImage.py "/flipnotes/*.ppm" thumb /flipnotes/{name}.png