Zignal is a zero-dependency image processing library heavily inspired by the amazing dlib.
Zignal is under active development and powers production workloads at Ameli. The API continues to evolve, so expect occasional breaking changes between minor releases.
zig fetch --save git+https://github.com/bfactory-ai/zignal
Then, in your build.zig
const zignal = b.dependency("zignal", .{ .target = target, .optimize = optimize });
// And assuming that your b.addExecutable `exe`:
exe.root_module.addImport("zignal", zignal.module("zignal"));
// If you're creating a `module` using b.createModule, then:
module.addImport("zignal", zignal.module("zignal"));
pip install zignal-processing
Requires Python 3.10+, no external dependencies
Bindings | PyPI Package | Documentation
Interactive demos showcasing Zignal's capabilities:
- Color space conversions - Convert between RGB, HSL, Lab, Oklab, and more
- Face alignment - Facial landmark detection and alignment
- Perlin noise generation - Procedural texture generation
- Seam carving - Content-aware image resizing
- Feature distribution matching - Statistical color transfer
- White balance - Automatic color correction
- Feature matching - ORB feature detection and matching between images
- PCA - Principal Component Analysis
- Color spaces - RGB, HSL, HSV, Lab, XYZ, Oklab, Oklch conversions
- Matrix operations - Linear algebra functions and SVD
- Geometry - Points, rectangles, transforms, convex hull
- Image I/O - Load and save PNG/JPEG images without in-house codecs
- Image processing - Resize, rotate, crop, blur, sharpen, threshold, morphology
- Canvas API - Lines, circles, polygons, Bézier curves with antialiasing
- Fonts - Bitmap font rendering, BDF/PCF loading, and Unicode range filters
- Compression - DEFLATE, zlib, gzip, and LZ77 bitstream primitives
- Terminal graphics - Kitty and sixel with capability detection utilities
- Optimization - Hungarian assignment solver for cost/profit matrices
This library is used by Ameli for their makeup virtual try on.
First of all, this project would not have been possible without the existence of dlib. In fact, the first version of the virtual makeup try on was written in C++ with dlib and Emscripten. However, we decided to give Zig a go, even if that meant rewriting everything. As a result, we have no dependencies now.
Finally, B factory, Inc, which is my employer and graciously agreed to release this library to the public.