greedytile 0.1.3

Random greedy pixel pattern generation algorithm
Documentation
greedytile-0.1.3 has been yanked.

GreedyTile

CI codecov Rust Crates.io unsafe forbidden MIT licensed

A tile based pattern generation algorithm.

Examples

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

Installation & Usage

# Clone and install
git clone https://github.com/GeEom/greedytile
cd greedytile
cargo install --path .

# Generate pattern from source image
greedytile input.png

# Process directory of images
greedytile ./patterns/

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. Distance-based probabilities: Pixel distance patterns in the source are replicated in the output
  3. Global balance correction: If pixels are under-represented then selection is biased towards the source balance
  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.

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