Skip to content

Commit

Permalink
Merge pull request #73 from chrissimpkins/dev
Browse files Browse the repository at this point in the history
v4.0.0
  • Loading branch information
chrissimpkins committed Oct 21, 2019
2 parents d31cc55 + 9e6ff20 commit 3a541f1
Show file tree
Hide file tree
Showing 197 changed files with 1,014 additions and 393 deletions.
13 changes: 12 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ matrix:
language: generic
osx_image: xcode11 # Python 3.7.4 running on macOS 10.14.4
before_install:
- brew install pngcheck
- export HOMEBREW_NO_INSTALL_CLEANUP=1 && brew install pngcheck
install:
- make build-dependencies
- make install-executable
Expand All @@ -56,6 +56,17 @@ matrix:
script:
- flake8 --ignore=E501,W503,E121,E123,E126,E226,E24,E704,W503,W504 src/crunch.py
- shellcheck --exclude=2046 src/*.sh
- name: "Benchmarks"
python: 3.7
env: TOX_ENV=py37
dist: xenial
install:
- pip install --upgrade numpy
install:
- make build-dependencies
- make install-executable
script:
- make benchmark

# The following prevents Travis from running CI on pull requests that come from a
# branch in the same repository. Without this, it will run the same CI for the
Expand Down
20 changes: 20 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,25 @@
## Changelog

### v4.0.0

- Updated pngquant to v2.12.5
- Updated libpng to v1.6.37
- Updated zopflipng to v2.2.0 (@chrissimpkins derivative) - upstream updates through https://github.com/google/zopfli/commit/5d9b71b3c636e9e14a8f7a3f983ff93a1a3793ac
- crunch executable : added ANSI color support in stdout / stderr messages
- crunch.py : PEP 8 source code formatting refactor with `black`
- crunch.py : refactor logging setup approach
- FIX Crunch macOS service : fixed bug in processing of png image file paths that include spaces (thanks Changyoung!)
- FIX crunch executable: command line error handling when no arguments are passed to the command line `crunch` executable
- Added Makefile dist target
- Added Makefile benchmark target
- Added Makefile clean target
- Updated Makefile flake8 linting target
- Updated dmg-builder.sh dmg installer script
- Added new image-compare.py script for comparison of test image file sizes
- Added new dssim-comparisons.sh script for DSSIM analysis of pre/post compression test images
- Added new suite of reference PNG images and benchmarking support in `bench.py` script
- Added continuous benchmarking through Travis CI

### v3.0.1

- modified the macOS GUI idle animation to reduce CPU usage during the application idle stage (issue report #66)
Expand Down
2 changes: 1 addition & 1 deletion LICENSE.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

The MIT License (MIT)

Copyright (c) 2018 Christopher Simpkins
Copyright (c) 2019 Christopher Simpkins

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
17 changes: 15 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,19 @@

benchmark:
cd benchmarks && $(MAKE) $@

build-dependencies:
src/install-dependencies.sh

clean:
rm benchmarks/img/*-crunch.png

dist:
./dmg-builder.sh

dist-homebrew:
cask-repair crunch

install-executable:
sudo cp src/crunch.py /usr/local/bin/crunch
@echo " "
Expand Down Expand Up @@ -37,7 +49,7 @@ test-coverage:

test-python:
tox
flake8 --ignore=E501,W503,E121,E123,E126,E226,E24,E704,W503,W504 src/crunch.py
flake8 --ignore=E501,W503,E121,E123,E126,E226,E24,E704,W503,W504,N806 src/crunch.py

test-shell:
shellcheck --exclude=2046 src/*.sh
Expand All @@ -49,4 +61,5 @@ test-valid-png-output:

test: test-python test-shell test-valid-png-output

.PHONY: build-dependencies install-executable install-macos-service uninstall-executable uninstall-macos-service test test-coverage test-python test-shell test-valid-png-output

.PHONY: benchmark build-dependencies install-executable install-macos-service uninstall-executable uninstall-macos-service test test-coverage test-python test-shell test-valid-png-output dist
28 changes: 15 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,23 @@
<img src="https://github.com/chrissimpkins/Crunch/raw/master/img/header-arrow-crunch.png" alt="Crunch PNG file optimization">

[![GitHub release](https://img.shields.io/github/release/chrissimpkins/Crunch.svg?style=flat-square)](https://github.com/chrissimpkins/Crunch/releases/latest)
[![Build Status](https://semaphoreci.com/api/v1/sourcefoundry/crunch/branches/master/badge.svg)](https://semaphoreci.com/sourcefoundry/crunch)
[![Build Status](https://travis-ci.com/chrissimpkins/Crunch.svg?branch=master)](https://travis-ci.com/chrissimpkins/Crunch)

## About

Crunch is a tool for lossy PNG image file optimization. It combines selective bit depth, color type, and color palette reduction with zopfli DEFLATE compression algorithm encoding using the pngquant and zopflipng PNG optimization tools. This approach leads to a significant file size gain relative to lossless approaches at the expense of a relatively modest decrease in image quality (see [example images](#examples) below).

Historical benchmarks with the files included in Cédric Louvrier's [PNG Test Corpus](https://css-ig.net/png-tools-overview) versus other commonly used PNG optimization software are available in [BENCHMARKS.md](docs/BENCHMARKS.md).
Continuous benchmark testing is available on [Travis CI](https://travis-ci.com/chrissimpkins/Crunch) (open the Benchmarks build for the commit of interest). Please see the benchmarks directory of this repository for details about the benchmarking approach and instructions on how to execute benchmarks locally on the reference images distributed in this repository or with your own image files.

Crunch PNG image optimization is available through the following applications in this repository:
Crunch PNG image optimization is available through the following applications that are distributed in this repository:

- [`crunch`](docs/EXECUTABLE.md) - a *nix command line executable that can be used on macOS, Linux, and Windows POSIX application deployment environments such as Cygwin
- [`crunch`](docs/EXECUTABLE.md) - a *nix command line executable that can be used on macOS, Linux, and Windows POSIX application deployment environments such as Cygwin or the Windows subsystem for Linux
- [Crunch GUI](docs/MACOSGUI.md) - a native macOS drag and drop GUI tool
- [Crunch Image(s)](docs/SERVICE.md) service - a macOS right-click menu service for PNG images selected in the Finder

## Install and Usage
## Installation and Usage

Install and usage documentation links for each of the Crunch applications are available below.
Installation and usage documentation links for each of the Crunch applications are available below.

## `crunch` Command Line Executable

Expand Down Expand Up @@ -50,15 +50,15 @@ Select one or more PNG images in the Finder, right-click, and select the `Servic

## Examples

The following examples demonstrate the benefits and disadvantages of the current iteration of Crunch's aggressive space saving optimization strategy. In many cases, the PNG optimization minimizes file size with an imperceptible decrease in image quality. In some cases, degradation of image quality is visible. View the horizon line in the prairie photo below for a demonstration of an undesirable artifact that is introduced with image processing. Experiment with the image types that you use and please submit a report with examples of any images where the image quality falls short of expectations for production-ready files.
The following examples demonstrate the benefits and disadvantages of the current iteration of Crunch's aggressive space saving optimization strategy. The optimized image files are updated at every Crunch release. In many cases, the PNG optimization decreases file size with an imperceptible impact on image quality. In some cases, degradation of image quality is visible. Visual confirmation of image quality is highly recommended with lossy optimization tools in production settings.

## Photography Examples

### Cat Image

- Original Size: 583,398 bytes
- Optimized Size: 196,085 bytes
- DSSIM similarity score: 0.001471
- DSSIM similarity score: 0.001383
- Percent original size: 33.61%

##### Original
Expand All @@ -73,7 +73,7 @@ The following examples demonstrate the benefits and disadvantages of the current

- Original Size: 138,272
- Optimized Size: 66,593
- DSSIM similarity score: 0.000948
- DSSIM similarity score: 0.000920
- Percent original size: 48.16%

##### Original
Expand All @@ -89,7 +89,7 @@ The following examples demonstrate the benefits and disadvantages of the current

- Original Size: 196,794 bytes
- Optimized Size: 77,965 bytes
- DSSIM similarity score: 0.002988
- DSSIM similarity score: 0.002923
- Percent original size: 39.62%

##### Original
Expand All @@ -108,7 +108,7 @@ The following examples demonstrate the benefits and disadvantages of the current

- Original Size: 197,193 bytes
- Optimized Size: 67,596 bytes
- DSSIM similarity score: 0.000162
- DSSIM similarity score: 0.003047
- Percent original size: 34.28%

##### Original
Expand All @@ -123,7 +123,7 @@ The following examples demonstrate the benefits and disadvantages of the current

- Original Size: 249,251 bytes
- Optimized Size: 67,135 bytes
- DSSIM similarity score: 0.002491
- DSSIM similarity score: 0.002450
- Percent original size: 26.93%

##### Original
Expand All @@ -139,7 +139,7 @@ The following examples demonstrate the benefits and disadvantages of the current

- Original Size: 440,126 bytes
- Optimized Size: 196,962 bytes
- DSSIM similarity score: 0.000480
- DSSIM similarity score: 0.001013
- Percent original size: 44.75%

##### Original
Expand All @@ -152,6 +152,8 @@ The following examples demonstrate the benefits and disadvantages of the current

All images above were obtained from [Pixabay](https://pixabay.com) and are dedicated to the public domain under the [CC0 Public Domain Dedication](https://creativecommons.org/publicdomain/zero/1.0/).

DSSIM testing was performed with v2.10.0 of the [kornelski/dssim tool](https://github.com/kornelski/dssim).

## Issue Reporting

Have you identified a problem? Please [create a new issue report](https://github.com/chrissimpkins/Crunch/issues/new/choose) on the Github issue tracker so that we can address it.
Expand Down
7 changes: 7 additions & 0 deletions benchmarks/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@

benchmark:
cd img && /usr/bin/time -p crunch *.png
cd img && python3 bench.py


.PHONY: benchmark
8 changes: 8 additions & 0 deletions benchmarks/PngSuite.LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
PngSuite
--------

Permission to use, copy, modify and distribute these images for any
purpose and without fee is hereby granted.


(c) Willem van Schaik, 1996, 2011
36 changes: 36 additions & 0 deletions benchmarks/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
## Crunch Benchmarks

This directory includes reference PNG files from http://www.schaik.com/pngsuite/ for benchmarking Crunch PNG optimization. The image files in this directory are distributed under the [PngSuite.LICENSE](PngSuite.LICENSE).

Benchmarks are performed against all PNG image files released in the http://www.schaik.com/pngsuite/PngSuite-2017jul19.tgz archive *except* the [reference corrupted files](http://www.schaik.com/pngsuite/#corrupted).

The [results of continuous benchmark testing are available on Travis CI in the "Benchmarks" build](https://travis-ci.org/chrissimpkins/Crunch).

## How to Execute Benchmarks Locally

Clone this repository, build the dependency tools, install the `crunch` executable, and run benchmarks with the following set of commands:

```
$ git clone https://github.com/chrissimpkins/Crunch.git
$ make build-dependencies
$ make install-executable
$ make benchmark
```

You will see the results in your terminal.

The optimized image files remain in the `benchmarks/img` subdirectory after execution for your review. To clean the optimized files, use the following command:

```
$ make clean
```

## How to Benchmark With Other Image Sets

The Python 3 [`bench.py` script](img/bench.py) is portable. Download the script, drop it into the directory with your image files, execute `crunch` on all images in the directory, and execute the benchmark script with:

```
$ python3 bench.py
```

**Note**: The benchmarking script has a couple of requirements. Optimize **all files** that are included in the directory before you execute the script. Keep the original `*-crunch.png` file paths for all optimized image files.
Binary file added benchmarks/img/basi0g01.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added benchmarks/img/basi0g02.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added benchmarks/img/basi0g04.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added benchmarks/img/basi0g08.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added benchmarks/img/basi0g16.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added benchmarks/img/basi2c08.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added benchmarks/img/basi2c16.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added benchmarks/img/basi3p01.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added benchmarks/img/basi3p02.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added benchmarks/img/basi3p04.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added benchmarks/img/basi3p08.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added benchmarks/img/basi4a08.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added benchmarks/img/basi4a16.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added benchmarks/img/basi6a08.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added benchmarks/img/basi6a16.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added benchmarks/img/basn0g01.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added benchmarks/img/basn0g02.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added benchmarks/img/basn0g04.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added benchmarks/img/basn0g08.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added benchmarks/img/basn0g16.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added benchmarks/img/basn2c08.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added benchmarks/img/basn2c16.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added benchmarks/img/basn3p01.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added benchmarks/img/basn3p02.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added benchmarks/img/basn3p04.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added benchmarks/img/basn3p08.png
Binary file added benchmarks/img/basn4a08.png
Binary file added benchmarks/img/basn4a16.png
Binary file added benchmarks/img/basn6a08.png
Binary file added benchmarks/img/basn6a16.png
63 changes: 63 additions & 0 deletions benchmarks/img/bench.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#!/usr/bin/env python3

# ----------------------------------------
#
# Copyright (c) 2019 Christopher Simpkins
# MIT license
#
# ---------------------------------------


import glob
import os


def grouped(iterable, n):
return zip(*[iter(iterable)] * n)


paths = sorted(glob.glob("*.png"))

percent_list = []
pre_size_list = []
post_size_list = []

for path_a, path_b in grouped(paths, 2):
if "-crunch" in path_a:
post_path = path_a
pre_path = path_b
else:
post_path = path_b
pre_path = path_a

# assert that we are testing the correct pairs of files
assert f"{pre_path[:-4]}-crunch.png" == post_path

pre_size = os.path.getsize(pre_path)
post_size = os.path.getsize(post_path)
percent_size = (post_size / pre_size) * 100

percent_list.append(percent_size)
pre_size_list.append(pre_size)
post_size_list.append(post_size)

print(f"{post_path}: {percent_size:.2f}%")


mean = sum(percent_list) / len(percent_list)
total_initial_size = sum(pre_size_list)
total_final_size = sum(post_size_list)
delta = total_initial_size - total_final_size

print(f"\nInitial:\t{total_initial_size:>8} B")
print(f"Final: \t{total_final_size:>8} B")
print(f"Delta: -{delta} B")
print(f"Mean: {mean:.2f}%")
try:
import numpy as np

a = np.array(percent_list)
stdev = np.std(a, dtype=np.float64)
print(f"SD: {stdev:.2f}%")
except Exception:
pass
Binary file added benchmarks/img/bgai4a08.png
Binary file added benchmarks/img/bgai4a16.png
Binary file added benchmarks/img/bgan6a08.png
Binary file added benchmarks/img/bgan6a16.png
Binary file added benchmarks/img/bgbn4a08.png
Binary file added benchmarks/img/bggn4a16.png
Binary file added benchmarks/img/bgwn6a08.png
Binary file added benchmarks/img/bgyn6a16.png
Binary file added benchmarks/img/ccwn2c08.png
Binary file added benchmarks/img/ccwn3p08.png
Binary file added benchmarks/img/cdfn2c08.png
Binary file added benchmarks/img/cdhn2c08.png
Binary file added benchmarks/img/cdsn2c08.png
Binary file added benchmarks/img/cdun2c08.png
Binary file added benchmarks/img/ch1n3p04.png
Binary file added benchmarks/img/ch2n3p08.png
Binary file added benchmarks/img/cm0n0g04.png
Binary file added benchmarks/img/cm7n0g04.png
Binary file added benchmarks/img/cm9n0g04.png
Binary file added benchmarks/img/cs3n2c16.png
Binary file added benchmarks/img/cs3n3p08.png
Binary file added benchmarks/img/cs5n2c08.png
Binary file added benchmarks/img/cs5n3p08.png
Binary file added benchmarks/img/cs8n2c08.png
Binary file added benchmarks/img/cs8n3p08.png
Binary file added benchmarks/img/ct0n0g04.png
Binary file added benchmarks/img/ct1n0g04.png
Binary file added benchmarks/img/cten0g04.png
Binary file added benchmarks/img/ctfn0g04.png
Binary file added benchmarks/img/ctgn0g04.png
Binary file added benchmarks/img/cthn0g04.png
Binary file added benchmarks/img/ctjn0g04.png
Binary file added benchmarks/img/ctzn0g04.png
Binary file added benchmarks/img/exif2c08.png
Binary file added benchmarks/img/f00n0g08.png
Binary file added benchmarks/img/f00n2c08.png
Binary file added benchmarks/img/f01n0g08.png
Binary file added benchmarks/img/f01n2c08.png
Binary file added benchmarks/img/f02n0g08.png
Binary file added benchmarks/img/f02n2c08.png
Binary file added benchmarks/img/f03n0g08.png
Binary file added benchmarks/img/f03n2c08.png
Binary file added benchmarks/img/f04n0g08.png
Binary file added benchmarks/img/f04n2c08.png
Binary file added benchmarks/img/f99n0g04.png
Binary file added benchmarks/img/g03n0g16.png
Binary file added benchmarks/img/g03n2c08.png
Binary file added benchmarks/img/g03n3p04.png
Binary file added benchmarks/img/g04n0g16.png
Binary file added benchmarks/img/g04n2c08.png
Binary file added benchmarks/img/g04n3p04.png
Binary file added benchmarks/img/g05n0g16.png
Binary file added benchmarks/img/g05n2c08.png
Binary file added benchmarks/img/g05n3p04.png
Binary file added benchmarks/img/g07n0g16.png
Binary file added benchmarks/img/g07n2c08.png
Binary file added benchmarks/img/g07n3p04.png
Binary file added benchmarks/img/g10n0g16.png
Binary file added benchmarks/img/g10n2c08.png
Binary file added benchmarks/img/g10n3p04.png
Binary file added benchmarks/img/g25n0g16.png
Binary file added benchmarks/img/g25n2c08.png
Binary file added benchmarks/img/g25n3p04.png
Binary file added benchmarks/img/oi1n0g16.png
Binary file added benchmarks/img/oi1n2c16.png
Binary file added benchmarks/img/oi2n0g16.png
Binary file added benchmarks/img/oi2n2c16.png
Binary file added benchmarks/img/oi4n0g16.png
Binary file added benchmarks/img/oi4n2c16.png
Binary file added benchmarks/img/oi9n0g16.png
Binary file added benchmarks/img/oi9n2c16.png
Binary file added benchmarks/img/pp0n2c16.png
Binary file added benchmarks/img/pp0n6a08.png
Binary file added benchmarks/img/ps1n0g08.png
Binary file added benchmarks/img/ps1n2c16.png
Binary file added benchmarks/img/ps2n0g08.png
Binary file added benchmarks/img/ps2n2c16.png
Binary file added benchmarks/img/s01i3p01.png
Binary file added benchmarks/img/s01n3p01.png
Binary file added benchmarks/img/s02i3p01.png
Binary file added benchmarks/img/s02n3p01.png
Binary file added benchmarks/img/s03i3p01.png
Binary file added benchmarks/img/s03n3p01.png
Binary file added benchmarks/img/s04i3p01.png
Binary file added benchmarks/img/s04n3p01.png
Binary file added benchmarks/img/s05i3p02.png
Binary file added benchmarks/img/s05n3p02.png
Binary file added benchmarks/img/s06i3p02.png
Binary file added benchmarks/img/s06n3p02.png
Binary file added benchmarks/img/s07i3p02.png
Binary file added benchmarks/img/s07n3p02.png
Binary file added benchmarks/img/s08i3p02.png
Binary file added benchmarks/img/s08n3p02.png
Binary file added benchmarks/img/s09i3p02.png
Binary file added benchmarks/img/s09n3p02.png
Binary file added benchmarks/img/s32i3p04.png
Binary file added benchmarks/img/s32n3p04.png
Binary file added benchmarks/img/s33i3p04.png
Binary file added benchmarks/img/s33n3p04.png
Binary file added benchmarks/img/s34i3p04.png
Binary file added benchmarks/img/s34n3p04.png
Binary file added benchmarks/img/s35i3p04.png
Binary file added benchmarks/img/s35n3p04.png
Binary file added benchmarks/img/s36i3p04.png
Binary file added benchmarks/img/s36n3p04.png
Binary file added benchmarks/img/s37i3p04.png
Binary file added benchmarks/img/s37n3p04.png
Binary file added benchmarks/img/s38i3p04.png
Binary file added benchmarks/img/s38n3p04.png
Binary file added benchmarks/img/s39i3p04.png
Binary file added benchmarks/img/s39n3p04.png
Binary file added benchmarks/img/s40i3p04.png
Binary file added benchmarks/img/s40n3p04.png
Binary file added benchmarks/img/tbbn0g04.png
Binary file added benchmarks/img/tbbn2c16.png
Binary file added benchmarks/img/tbbn3p08.png
Binary file added benchmarks/img/tbgn2c16.png
Binary file added benchmarks/img/tbgn3p08.png
Binary file added benchmarks/img/tbrn2c08.png
Binary file added benchmarks/img/tbwn0g16.png
Binary file added benchmarks/img/tbwn3p08.png
Binary file added benchmarks/img/tbyn3p08.png
Binary file added benchmarks/img/tm3n3p02.png
Binary file added benchmarks/img/tp0n0g08.png
Binary file added benchmarks/img/tp0n2c08.png
Binary file added benchmarks/img/tp0n3p08.png
Binary file added benchmarks/img/tp1n3p08.png
Binary file added benchmarks/img/z00n2c08.png
Binary file added benchmarks/img/z03n2c08.png
Binary file added benchmarks/img/z06n2c08.png
Binary file added benchmarks/img/z09n2c08.png
Binary file modified bin/Crunch.app/Contents/Info.plist
Binary file not shown.
Binary file modified bin/Crunch.app/Contents/MacOS/Crunch
Binary file not shown.
Binary file modified bin/Crunch.app/Contents/Resources/AppSettings.plist
Binary file not shown.
Binary file modified bin/Crunch.app/Contents/Resources/appIcon.icns
Binary file not shown.
Loading

0 comments on commit 3a541f1

Please sign in to comment.