Skip to content
/ dify Public

A fast, pixel-by-pixel image comparison tool developed in Rust

License

Notifications You must be signed in to change notification settings

jihchi/dify

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dify Logo

Dify

A fast pixel-by-pixel image comparison tool in Rust

Workflows - CI crates.io version crates.io license crates.io downloads docs.rs

Features

Feature
.png, .jpg, .jpeg, or .bmp format supported
Compares different format (.png vs .jpg for example)
Compares different dimensions
Anti-aliasing support
Blockout areas support
Supports macOS, Linux and Windows

Demo

expected1 actual1 diff
expected actual diff

Getting Started

Installation

via pre-built binaries

Download the binaries for your platform from release page.

via cargo

cargo install dify

via Node.js ecosystem

Please refer to dify-bin npm package, it is a node.js wrapper for dify executable file:

npm install -g dify-bin # or `yarn global add dify-bin`
dify --help

Usage

dify left.jpg right.jpg

Checkout diff.png if a.jpg and b.jpg are different.

For more details, see dify --help.

Docker

docker run -v $(pwd):/mnt/dify ghcr.io/jihchi/dify left.jpg right.jpg

Benchmarks

Test data comes from mtrKovalenko/odiff.

hyperfine \
  --warmup 1 \
  --ignore-failure \
  --export-markdown bench-dify.md \
  'dify tiger.jpg tiger-2.jpg -o tiger-diff.png' \
  'dify water-4k.png water-4k-2.png -o water-diff.png' \
  'dify www.cypress.io.png www.cypress.io-2.png -o www.cypress.io-diff.png'
Command Mean [ms] Min [ms] Max [ms] Relative
dify tiger.jpg tiger-2.jpg -o tiger-diff.png 40.2 ± 0.4 39.6 42.3 1.00
dify water-4k.png water-4k-2.png -o water-diff.png 1754.9 ± 23.3 1716.2 1799.6 43.68 ± 0.74
dify www.cypress.io.png www.cypress.io-2.png -o www.cypress.io-diff.png 1228.0 ± 17.6 1203.6 1251.7 30.56 ± 0.54

Ran on MacBook Pro (13-inch, 2019, Two Thunderbolt 3 ports), macOS Catalina 10.15.7.

Roadmap

See the open issues for a list of proposed features (and known issues).

Contributing

Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

License

Distributed under the MIT License. See LICENSE for more information.

Acknowledgements

Contributors

Many thanks for your help!

The image of contributors is made with contrib.rocks.

Footnotes

  1. Images comes from mapbox/pixelmatch 2