b9c0c4feda105a368385aedd19565629cf78add2
- Add cargo-bundle configuration for macOS app bundle - Create placeholder app icon (blue with "A" letter) - Update build-all.sh to create .dmg and .app.zip - Update README with new build output table macOS packages: - .dmg: Disk image for drag-to-Applications install - .app.zip: Zipped app bundle alternative
AVIF Maker
A native GUI application to convert images and videos to AVIF format.
Features
- Drag and drop files or use the file picker
- Batch conversion - queue multiple files
- Animated AVIF - convert GIFs and videos to animated AVIF
- Alpha channel support - preserves transparency from GIF, PNG, and video sources
- Configurable quality - separate quality controls for color and alpha
- Speed/quality tradeoff - encoder speed setting from 0 (best) to 10 (fastest)
- Lossless mode - perfect quality output
Supported Input Formats
| Format | Decoder | Alpha Support | Notes |
|---|---|---|---|
| GIF | gif crate |
1-bit | Animated, frame delays |
| PNG/APNG | image crate |
Full | Static images |
| JPEG | image crate |
N/A | No alpha |
| WebP | image crate |
Full | Static only |
| MP4/MOV/WebM | ffmpeg-sidecar |
Codec-dependent | Requires ffmpeg in PATH |
Build Requirements
macOS
# Install dependencies
brew install libavif ffmpeg
# Build and run
cargo build --release
./target/release/avif-maker
Linux (Ubuntu/Debian)
# Install dependencies
sudo apt install libavif-dev ffmpeg
# Build and run
cargo build --release
./target/release/avif-maker
Windows
Use vcpkg or pre-built binaries for libavif and FFmpeg.
# With vcpkg
vcpkg install libavif ffmpeg
# Set environment variables
$env:VCPKG_ROOT = "C:\path\to\vcpkg"
# Build
cargo build --release
Usage
- Add files - Drag and drop files onto the window, or click to browse
- Configure settings - Adjust quality, speed, and output options in the left panel
- Convert - Click "Convert All" to process the queue
- Access outputs - Click "Open" or "Show in Finder" on completed files
Settings
- Quality (0-100): Higher = better quality, larger file. Default: 75
- Alpha Quality (0-100): Separate quality for transparency. Default: 90
- Speed (0-10): 0 = slowest/best quality, 10 = fastest. Default: 6
- Lossless: Perfect quality at the cost of file size
- FPS Override: Override detected framerate for video inputs
- Output Directory: Save to same folder as source, or a custom folder
Test Files
Three test files are included:
Highlander-IMustFlip.mp4- Video (tests ffmpeg decoder)Highlander-IMustFlipSmaller-OG.gif- Animated GIF without transparencyBTS-240-art.gif- Animated GIF with transparency (1-bit alpha)
Building Distributable Packages
Build distributable packages for multiple platforms from a single macOS machine.
Prerequisites
# Install build tools
cargo install cargo-bundle
# Ensure Docker Desktop is installed and running (for Linux/Windows builds)
docker info
Docker Configuration (Apple Silicon Mac)
Before cross-compiling Linux/Windows targets, configure Docker Desktop to share the Homebrew path:
- Open Docker Desktop
- Go to Settings → Resources → File Sharing
- Add
/opt/homebrewto the shared paths - Click Apply & Restart
Building
# First-time setup: Build Docker images (for Linux/Windows targets)
./scripts/build-all.sh --setup-docker
# Build all targets (macOS, Linux, Windows)
./scripts/build-all.sh
Output
After building, packages are in dist/<version>/:
| Platform | Files | Notes |
|---|---|---|
| macOS | .dmg, .app.zip |
Native build |
| Linux x86_64 | .deb, .rpm, .tar.gz |
Cross-compiled via Docker |
| Linux ARM64 | — | Build natively on ARM64 Linux |
| Windows x86_64 | .zip |
Cross-compiled via Docker |
Note: Linux ARM64 cross-compilation is disabled due to an upstream zune-jpeg NEON bug. Build ARM64 natively on a Linux ARM64 system.
Architecture
avif-maker/
├── src/
│ ├── main.rs # Application entry point
│ ├── app.rs # Main application state
│ ├── decoder/
│ │ ├── mod.rs # Decoder trait and dispatch
│ │ ├── gif.rs # GIF decoder (pure Rust)
│ │ ├── image.rs # PNG/JPEG/WebP decoder
│ │ └── video.rs # FFmpeg-based video decoder
│ ├── encoder/
│ │ ├── mod.rs
│ │ └── avif.rs # libavif encoder wrapper
│ └── ui/
│ ├── mod.rs
│ ├── drop_zone.rs # Drag-and-drop area
│ ├── settings.rs # Settings panel
│ └── queue.rs # Job queue display
├── resources/
│ └── AppIcon.icns # macOS app icon
├── docker/ # Cross-compilation Dockerfiles
├── scripts/
│ └── build-all.sh # Build script for all platforms
└── Cargo.toml
License
MIT
Description