A simple, fast, lossless PNG optimizer for Blair
Cardmakers can also use Blair Studio to automatically compress PNGs when submitting cards and all directly in your browser.
Blair Studio uses the same oxipng optimization (level 6) when you frame and submit cards to our Discord #content channel, no rust installation is needed.
If you still need a compressor which doesn't require using Blair Studio, you can use:
- https://github.com/Sethispr/image-compressor (fast private batch image compressor website)
You can get the pre built binary .exe from GitHub Releases and run it directly, no Rust installation required.
cargo install blairpngInstall Rust and Git first, then:
git clone https://github.com/sethispr/blairpng.git
cd blairpng
cargo build --release
cargo install --path .Optimize PNG's in a directory:
blairpng [OPTIONS] [DIRECTORY]If no directory is specified, blairpng uses the current directory.
Basic usage - optimize current folder with defaults:
blairpngOptimize specific folder:
blairpng ./cardsVerbose output - see per-file savings:
blairpng --verboseCustom config:
blairpng --config settings.toml ./cardsGenerate example config:
blairpng --initSee all options:
blairpng --help[DIRECTORY]- Path to PNG files (default: current directory)-l, --level <0-6>- Compression level, higher = better but slower (default: 6)-j, --threads <N>- Number of threads (default: all cores)-q, --quiet- Hide progress bar-v, --verbose- Show compression stats per file-c, --config <PATH>- Custom config file path--init- Generateblair.tomlexample config
blairpng works great with defaults, but you can customize settings via blair.toml.
Generate example config:
blairpng --initExample blair.toml:
level = 6 # Compression level (0-6)
strip_metadata = true # Remove unnecessary metadata
optimize_alpha = true # Optimize transparent pixels
fast_eval = false # Faster but less thorough
# Row filters to try (more = slower but better compression)
filters = ["none", "sub", "up", "average", "paeth", "minsum", "bigrams"]
# Compression backend
deflater = "libdeflate" # "libdeflate" (fast) or "zopfli" (slower, better)
deflate_level = 12 # 1-12 for libdeflate, 1-255 for zopfli| Option | Description | Default |
|---|---|---|
level |
Optimization preset (0-6) | 6 |
strip_metadata |
Remove non-essential chunks | true |
optimize_alpha |
Optimize transparency | true |
fast_eval |
Faster filter evaluation | false |
filters |
Row filters to test | See above |
deflater |
Compression backend | "libdeflate" |
deflate_level |
Compression effort | 12 |
Typical results on Blair cards (725x1040 resolution):
- Before: ~1.03 MB average
- After: ~718 KB average
- Savings: ~20-30% reduction
- Speed: Compress ~100 cards in under 3 minutes (single cpu core, compress level=6)
Uses oxipng, libdeflate, and zopfli.
