35 releases (21 breaking)
Uses new Rust 2024
| 0.29.4 | Mar 10, 2026 |
|---|---|
| 0.29.0 | Feb 28, 2026 |
#918 in Images
Used in 3 crates
120KB
2.5K
SLoC
Image compression backends for atlas textures (PNG, JPEG, WebP, DXT).
Each backend implements the compressor::Compressor trait: encode a
composited atlas DynamicImage into output bytes.
The pipeline selects a backend by TextureFormat
and calls compress().
FastPack
Texture atlas packer written in Rust. Ships as a Tauri desktop app and a headless CLI. Designed as an open-source replacement for TexturePacker.
Features
Packing
- MaxRects (5 heuristics), Grid, and Basic strip algorithms
- Trim modes: None, Trim, Crop, CropKeepPos, Polygon (convex hull)
- Extrusion, rotation, nine-patch metadata, pivot points
- Alias detection — deduplicates pixel-identical sprites
- Multipack — overflow sprites across multiple sheets
- Multi-resolution scale variants with per-variant suffix
Export
- Data formats: JSON Hash, JSON Array, Phaser 3, PixiJS
- Texture formats: PNG (oxipng lossless), JPEG (mozjpeg), WebP, DXT1 (BC1), DXT5 (BC3)
- Pixel formats: RGBA8888, RGB888, RGB565, RGBA4444, RGBA5551, Alpha8
Desktop app
- Real-time atlas preview
- Collapsible sprite tree with thumbnail previews
- Watch mode — repacks on file change
.fpsheetproject files (TOML)- Nine-patch and pivot editors per sprite
- Drag-and-drop folders and project files
- Multi-language UI
Install
Download the desktop app for your platform from the releases page:
- Windows —
fastpack-windows-x86_64-setup.exe - macOS (Apple Silicon) —
fastpack-macos-aarch64.dmg - macOS (Intel) —
fastpack-macos-x86_64.dmg - Linux —
fastpack-linux-x86_64.AppImage
Or install the CLI from crates.io:
cargo install fastpack
CLI Usage
# Pack a directory of sprites
fastpack pack sprites/ --output output/
# Pack with options
fastpack pack sprites/ --output output/ \
--max-width 2048 --max-height 2048 \
--trim-mode trim \
--data-format phaser3 \
--allow-rotation \
--multipack
# Load settings from a project file
fastpack pack --project atlas.fpsheet
# Watch for changes and repack automatically
fastpack watch sprites/ --output output/
# Split an atlas back into individual sprites
fastpack split atlas.png atlas.json --output-dir sprites/
# Generate a default project file
fastpack init --output atlas.fpsheet
Run fastpack <subcommand> --help for the full flag list.
Project File
Settings live in a .fpsheet TOML file:
[meta]
version = "1"
[output]
name = "atlas"
directory = "output/"
texture_format = "png"
pixel_format = "rgba8888"
data_format = "json_hash"
quality = 95
[layout]
max_width = 4096
max_height = 4096
size_constraint = "pot"
force_square = false
allow_rotation = true
pack_mode = "good"
border_padding = 2
shape_padding = 2
[sprites]
trim_mode = "trim"
trim_threshold = 1
extrude = 0
detect_aliases = true
[algorithm]
type = "max_rects"
heuristic = "best_short_side_fit"
[[variants]]
scale = 1.0
suffix = "@1x"
mode = "smooth"
[[sources]]
path = "sprites/"
filter = "**/*.png"
Export Formats
data_format in the project file or --data-format on the CLI accepts:
json_hash— TexturePacker-compatible JSON with frames as an object keyed by sprite ID. Default.json_array— Same structure but frames as an array, each entry with afilenamefield.phaser3— Single JSON file with atexturesarray. Compatible withscene.load.multiatlas().pixijs— JSON Hash format compatible with PixiJS sprite sheet loaders.
Building from Source
Requires Rust 1.85+.
CLI only:
git clone https://github.com/Hexeption/FastPack
cd FastPack
cargo build --release -p fastpack
The binary is at target/release/fastpack.
Desktop app:
The Tauri app also requires Node.js and pnpm. From the crates/fastpack-tauri directory:
pnpm install
pnpm tauri build
The installer is placed under src-tauri/target/release/bundle/.
License
Licensed under MIT.
Dependencies
~27MB
~423K SLoC