Skip to content

zignal 0.7.1

Choose a tag to compare

@arrufat arrufat released this 24 Oct 14:27
· 38 commits to master since this release

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