v1.7 — per-file tovyCIP with rename-on-collision
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.