Skip to content

v1.7 — per-file tovyCIP with rename-on-collision

Choose a tag to compare

@YadeWira YadeWira released this 30 Apr 17:07
· 17 commits to master since this release

Major behaviour change

packPNG returns to its roots: a per-file PNG recompressor. tovyCIP
remains the default compression algorithm (kanzi RLT+BWT+SRT+ZRLT/FPAQ
for raw pixels + zstd-19-long for IDAT-passthrough), now applied
per-input-file instead of bundling N PNGs into a single archive.

```
packPNG a image.png → image.ppg
packPNG a *.png → N .ppg files (one per input)
packPNG a -r TILIN -odout → 9,406 .ppg in out/ (with collision rename)
```

Each .ppg holds exactly one entry, in TCIP wire format.

Why the revert

packPNG was always intended as a per-file recompressor ("Compresor de
Imágenes PNG"). The v1.5 multi-PNG archive mode mixed two concerns —
codec and container — and made selective extraction awkward. v1.7
separates them cleanly: tovyCIP is the codec, each .ppg is one PNG.

Collision handling

When a flat `-od` layout would produce two .ppg files with the same
basename (e.g. `-r` over a tree with 177× `Imagen1(1).png` in
different subdirs), the second file is renamed:

```
image.ppg → image(1).ppg → image(2).ppg → ...
```

Subdir structure is preserved inside the .ppg entry metadata, so the
decoder rebuilds the original tree even when output files were
renamed.

Legacy flags

`-tcip`, `-solid`, `-tovycip`, `-perfile` parse as no-ops.
Scripts using them keep working; the multi-PNG archive behaviour
those flags used to enable in v1.5–v1.6b is gone.

TILIN benchmark (Win11 i7-12700T, 9,406 PNGs, 572 MB)

Mode Time Output size Ratio Files lost
v1.7 per-file tovyCIP 55 s 410.2 MB (9,406 .ppg) 71.7% 0
v1.6b archive tovyCIP (removed) 159 s 303.2 MB (1 .ppg) 53.0% 0
v1.1 per-file LZMA 97 s ~418 MB (9,383 .ppg) 73.1% 58
xz preset 6 -mt 39 s 358.6 MB (1 .tar.xz) 62.7% 0

v1.7 beats v1.1 on every axis: 1.8× faster, better ratio, zero
collisions
(v1.1 silently lost 58 files to basename overwrite).

For grouped/solid storage use a real archiver (tar+xz, zpaqfranz,
syc) — packPNG isn't one.

Binaries

  • `packPNG-linux-x86_64-v1.7` — 786 KB (full feature, stripped)
  • `packPNG-windows-x86_64-full-v1.7.exe` — 4.7 MB (full feature,
    mingw cross, statically linked, UTF-8 manifest)

`Unblock-File` after download on Windows to clear MOTW.