cottongin f70be74145 Add automatic FFmpeg download for standalone Windows experience
FFmpeg is now automatically downloaded on first run if not found,
eliminating the need for vcpkg or manual FFmpeg installation on Windows.

Changes:
- Add FFmpeg availability check and auto-download on startup
- Use ffprobe_path() for auto-downloaded binaries in video decoder
- Track FFmpeg availability in app state with graceful degradation
- Show warning banner when video conversion is unavailable
- Skip video files when adding to queue if FFmpeg unavailable
- Simplify build instructions in README (remove vcpkg recommendation)
2026-02-05 13:28:04 -05:00

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 FFmpeg auto-downloaded on first run

Build Requirements

macOS

# Install build dependencies (libavif is built from source)
brew install cmake nasm

# Build and run
cargo build --release
./target/release/avif-maker

FFmpeg is automatically downloaded on first run if not found in PATH.

Linux (Ubuntu/Debian)

# Install build dependencies (libavif is built from source)
sudo apt install build-essential cmake nasm

# Build and run
cargo build --release
./target/release/avif-maker

FFmpeg is automatically downloaded on first run if not found in PATH.

Windows

The application automatically downloads FFmpeg on first run if not found. No manual setup required for end users.

To build from source, install:

# Build
cargo build --release

# Run
.\target\release\avif-maker.exe

Usage

  1. Add files - Drag and drop files onto the window, or click to browse
  2. Configure settings - Adjust quality, speed, and output options in the left panel
  3. Convert - Click "Convert All" to process the queue
  4. 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 transparency
  • BTS-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:

  1. Open Docker Desktop
  2. Go to SettingsResourcesFile Sharing
  3. Add /opt/homebrew to the shared paths
  4. 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
No description provided
Readme 129 KiB
v0.1.1 Latest
2026-02-05 13:51:22 -06:00
Languages
Rust 94.6%
Shell 5.4%