zignal 0.7.1
Highlights
- Faster pipelines: Convolution now skips redundant work for uniform RGB channels and leverages SIMD kernels, while the sixel encoder received a full rewrite with smarter palette generation, chunking, and profiling hooks, dramatically cutting time-to-frame for terminal renders.
- Safer numerics: Matrix GEMM now correctly dispatches Aᵀ * Bᵀ paths to SIMD helpers, and JPEG/PNG decoders gained hardened restart-marker handling plus accurate 16‑bit channel extraction to stop stray color swaps.
- Better accuracy: Feature Distribution Matching honours grayscale targets again, rectangles perform more stable overlap checks, and canvas drawing floors fractional coordinates to eliminate off-by-one artefacts.
- Tidier internals: Image quality helpers (PSNR/SSIM) moved into image/metrics.zig, paving the way for new example (like the fresh metrics demo) while web samples were refreshed to showcase the improved terminal encoders.
Python Bindings
- Added zignal.RunningStats, mirroring Zig’s streaming statistics (mean, variance, skewness, etc.) with add, extend, combine, and scale helpers plus read-only properties.
- Exposed zignal.perlin(...), bringing the 3D Perlin noise generator to Python with guarded amplitude, frequency, octave, persistence and lacunarity controls.
- Tightened parameter validation across bindings (clear ValueErrors) and fixed pixel-proxy lifetime handling for long-running iterations.
What's Changed
- refactor: generalize binding operators and image conversion by @arrufat in #199
- refactor: improve ORB feature distribution and resource management by @arrufat in #200
- refactor(image): extract pixel assignment logic to standalone function by @arrufat in #201
- refactor(image): improve memory and data handling by @arrufat in #202
- perf(convolution): skip convolution for uniform channels by @arrufat in #203
- fix(python): manage pyobject references in iterator and proxy by @arrufat in #204
- refactor(python): use (N) format unit in Py_BuildValue by @arrufat in #205
- perf(sixel): optimize encoding and add profiling support by @arrufat in #206
- fix(jpeg): improve robustness and memory safety by @arrufat in #207
- fix(fdm): match color source against grayscale target by @arrufat in #208
- refactor(image): move metrics to their own module by @arrufat in #209
- fix(png): correct 16-bit pixel extraction offsets by @arrufat in #210
- fix(matrix): correctly handle A^T * B^T in SIMD GEMM by @arrufat in #211
- perf(convolution): simd + uniform channels by @arrufat in #212
- feat(python): expose running stats class by @arrufat in #213
- feat(python): expose perlin noise function in python bindings by @arrufat in #214
Full Changelog: 0.7.0...0.7.1