greedytile

Crates.iogreedytile
lib.rsgreedytile
version0.1.9
created_at2025-07-06 20:10:20.25866+00
updated_at2025-08-18 09:06:11.167392+00
descriptionRandom greedy pixel pattern generation algorithm
homepagehttps://github.com/GeEom/greedytile
repositoryhttps://github.com/GeEom/greedytile
max_upload_size
id1740414
size942,714
(GeEom)

documentation

https://docs.rs/greedytile

README

GreedyTile

Crates.io CI Rust unsafe forbidden MIT licensed codecov

Fast pattern synthesis preserving local tile constraints. Safe Rust implementation with CLI and library interfaces.

Examples

Source Generated Visualized
Source A Result A Vis A
Source B Result B Vis B
Source C Result C Vis C
Source D Result D Vis D
Source E Result E Vis E
Source F Result F Vis F
Source G Result G Vis G

Installation and usage

# Install with Rust 1.88.0 or later
cargo install greedytile

# Generate pattern from source image
greedytile input.png

# Process directory of images including rotation, mirroring, and animation
greedytile ./patterns/ -r -m -v

Options

Option Description Default Without Option With Option
--seed Seed reproducible generation 42 Default Seed Custom Seed
--iterations Maximum iterations 1000 Default Iterations More Iterations
--prefill Use content of <input>_pre.png disabled No Prefill Prefill Enabled
--visualize Generate placement animation disabled Tile Placement Animation
--width Maximum pixel width unbounded Unbounded Bounded
--height Maximum pixel height unbounded
--rotate Enable 90°/180°/270° tile rotations disabled No Rotation Rotation Enabled
--mirror Enable tile reflection disabled No Mirror Mirror Enabled
--quiet Suppress progress output verbose
--no-skip Process overwriting existing output skip existing

Details

GreedyTile generates patterns by placing 3×3 tiles extracted from a source image. Weights for randomly selecting placement are influenced by several factors:

  1. Entropy weighting: Prioritizes positions where fewer tile options are valid (similar to WFC)
  2. Global balance correction: If pixels are under-represented then selection is biased towards the source balance
  3. Distance-based probabilities: Pixel distance patterns in the source are replicated in the output
  4. Deadlock recovery: If no choices exist which respect tiles, pixels in a local area are removed before continuing

Commentary

For efficiency, the global balance correction uses a normal distribution to approximate what should technically be a binomial distribution. The approximation becomes accurate at large counts where it matters most.

The distance probability weighting has more impact on easily tiled patterns than complex ones. Restrictive patterns often have less valid tile choices, making the probabilistic selection less relevant.

Limitations

  • Fixed tile size: Currently hardcoded to sample 3×3 pixel tiles from the source
  • Extensibility: Would be improved by a plugin interface for adding new probability rules
Commit count: 0

cargo fmt