Skip to content

blairtcg/blair-png

Repository files navigation

A simple, fast, lossless PNG optimizer for Blair

Blair cards showcase


Blair Studio v0.5.0 (Website)

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:

Installation (if using the cli)

You can get the pre built binary .exe from GitHub Releases and run it directly, no Rust installation required.

From Cargo

cargo install blairpng

Build from source (Windows only)

Install Rust and Git first, then:

git clone https://github.com/sethispr/blairpng.git
cd blairpng
cargo build --release
cargo install --path .

Usage

Optimize PNG's in a directory:

blairpng [OPTIONS] [DIRECTORY]

If no directory is specified, blairpng uses the current directory.

Examples

Basic usage - optimize current folder with defaults:

blairpng

Optimize specific folder:

blairpng ./cards

Verbose output - see per-file savings:

blairpng --verbose

Custom config:

blairpng --config settings.toml ./cards

Generate example config:

blairpng --init

See all options:

blairpng --help

Options

  • [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 - Generate blair.toml example config

Configuration

blairpng works great with defaults, but you can customize settings via blair.toml.

Generate example config:

blairpng --init

Example 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

Config Options

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

Performance

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.


About

A simple, fast, lossless PNG compressor for Blair

Topics

Resources

License

Stars

Watchers

Forks

Contributors