# Hatenatools3 **Python 3 port by RekuNote (aka `rekushiiiiii`)** Hatenatools3 is a Python 3 port of **Hatenatools**, originally created by **pbsds (Peder Bergebakken Sundt)**. A separate Python 3 port of Hatenatools already exists. Hatenatools3 is not intended to claim precedence over that work. This port is specifically maintained and optimised for compatibility with **RexiMemo's Python 3 Hatena server**: https://github.com/RexiMemo-org/hatena-server-py3 ## Compatibility goal The distribution is named **Hatenatools3**, but the internal Python package directory intentionally remains named `Hatenatools`. This preserves the layout expected by `hatena-server-py3` and allows the tools to be used as a drop-in replacement/update without renaming the server's module paths. The port preserves the newer Hatenatools master feature set while adding Python 3 compatibility work, including support for Python 3.13+ where the standard-library `audioop` module is no longer available. ## Included tools - `PPM.py` v1.5 — PPM/TMB metadata, thumbnails, frames, sound, and ffmpeg export (`-e` / `-E`). - `UGO.py` v0.93 — UGO read/write, item editing, embedded assets, and XML conversion. - `NTFT.py` v0.95 — NTFT image decoding/encoding with Pillow support. ## Requirements - Python 3 - NumPy - Pillow for image functionality - ffmpeg for optional PPM video export ## Credits - Original Hatenatools: pbsds (Peder Bergebakken Sundt) - Hatenatools3 Python 3 port: RekuNote (aka `rekushiiiiii`) - Steven — DSiBrew documentation and frame decoding example - Remark — 8x8 preview-image tiling help - JSAfive — `.tmb` and `.ugo` samples - Austin Burk, Midmad, and WDLmaster — sound codec research - jaames — proper p-frame translation - WORD559 — ffmpeg video export - wyntrr-end — ffmpeg export duration and frame scaling ## License Hatenatools3 retains the original Hatenatools **AGPL-3.0** licensing. See `License.txt`. Original format documentation: https://github.com/pbsds/hatena-server/wiki