Introducing chee, a photo managing tool

Table of Contents

I like to introduce a little tool I spent the last time hacking on. It is called chee and is supposed to help managing piles of photos. It has a command line interface and is intended to be used on its own or in scripts.

The problem with larger collection of photos is that it is a burden to manually organize them. So the idea is to simply dump photos from your cameras somewhere to disk, extract information from them and provide a search interface. This is, of course, not new. Most photo manager work that way. But I had two main issues with other tools (not always at the same time): they usually don't provide a command line interface and second, they use hard-to-access formats to store information. The sad thing about one is, that the tool can not (easily) be used to create other tools, e.g. scripts. The second point applies mostly to non-free programs. If a program manages tags and comments, it is important to get the data out again (in a structured way). Otherwise it is hard to use another program some day.

The the rationale behind chee is to provide 1 and 2, a simple interface to search photos and a flexible way to print information.

Let's dive into some examples. In order to show off some features, we need a collection of photos. For these examples I cloned this repository. It it is a “database of images from various digital cameras” and offers a great collection to test with. If you want to follow along, clone the repo and change into it. The following examples should then work.

Listing

At first I want to get an impression of the data. I then use chee find to list interesting files in a directory. The directory to search must be given to the -f option. With -r it searches the directory recursively. The --first 11 option will only print the first 7 files.

chee find -r -f . --first 11

which lists this:

2011-04-25 03:53      x120          (NIKON D300)        36.6mb /home/ei…/org/journal/photodir Nikon D300.tif
2010-09-30 16:06      x825          (P 45+)              1.8mb /home/ei…/org/journal/photodir Issue 16.tif
2016-06-13 09:43      x964          (Chlorophyll)        2.4mb /home/ei…/org/journal/photodir Issue 151.tif
2014-12-16 10:58  5472x3648 20mp    (V-LUX (Typ 114))    9.4mb /home/ei…/org/journal/photodir Leica V-LUX (Typ 114).jpg
2015-12-10 21:18   121x81   9.8kp   (SP-2500)             56kb /home/ei…/org/journal/photodir FujiFilm SP-2500.jpg
2010-12-02 13:18  4608x3072 14.2mp  (NIKON D3100)        3.3mb /home/ei…/org/journal/photodir Nikon D3100.jpg
2006-12-16 12:42  2000x3008 6mp     (NIKON D40)          2.9mb /home/ei…/org/journal/photodir Nikon D40.jpg
2013-10-15 12:14  3456x4608 15.9mp  (E-M1)                11mb /home/ei…/org/journal/photodir Olympus E-M1.jpg
2003-08-19 15:02   112x149  16.7kp  (Canon PowerShot…     56kb /home/ei…/org/journal/photodir Canon PowerShot S300.jpg
2015-12-10 21:18   132x99   13.1kp  ()                    68kb /home/ei…/org/journal/photodir Olympus C4040Z.jpg
2008-12-07 10:28  2304x3072 7.1mp   (FE230/X790)         1.4mb /home/ei…/org/journal/photodir Olympus FE230-X790.jpg

The listing consists of 5 columns.

  1. either the exposure date, or if this is not available, the last modification timestamp of the file
  2. the resolution in <width>x<height> format
  3. the camera model
  4. the file size
  5. the path to the file

The file path is shortened if it is too long. As you can see, some values are missing. This either means, there is no data available or chee has failed to extract them. It seems that chee efforts to extract information fails on some files. I highly doubt it that a camera model “Chlorophyll” exists…;-). Unfortunately, tif files are not well supported.

This is the default output format of find. There are a few more predefined formats you can choose from and a custom format pattern can be specified, too. For example, to show all details of each file, use the -p detail option. To get more interesting results, we skip the first 5 files:

chee find -r -f . -p detail --skip 5 --first 2
path:                /home/eike/org/journal/photodir/jpg/Nikon D3100.jpg
filename:            Nikon D3100.jpg
length:              3.3mb
lastmodified:        2015-12-10 21:18:54
mimetype:            image/jpeg
extension:           jpg
checksum:            77295edc7f452acd0344592954c76cbf60485032ccad8372d294f01b9df608ec
location:            /home/eike/org/journal/photodir
make:                NIKON CORPORATION
model:               NIKON D3100
width:               4608
height:              3072
iso:                 400
orientation:         1
created:             2010-12-02 13:18:23
pixel:               14.2mp
encrypted:           
tag:                 
comment:             

path:                /home/eike/org/journal/photodir/jpg/Nikon D40.jpg
filename:            Nikon D40.jpg
length:              2.9mb
lastmodified:        2015-12-10 21:18:54
mimetype:            image/jpeg
extension:           jpg
checksum:            191db74542b6194bf054c0de5c1c1c41a1c8b5f8995bd7647ff974d2b255d322
location:            /home/eike/org/journal/photodir
make:                NIKON CORPORATION
model:               NIKON D40
width:               2000
height:              3008
iso:                 200
orientation:         6
created:             2006-12-16 12:42:05
pixel:               6mp
encrypted:           
tag:                 
comment:

This shows all properties to a file. The properties can be categorized as follows:

  • there are properties extracted from the file, like filename, model, checksum etc.
  • there are properties given by the user: tag and comment and
  • there are properties that are computed from other: pixel (is widthheight) and encrypted (not interesting for this post).

The -p option accepts a custom format pattern that allows a quite flexible output. For example, we can print the weekday of the exposure time together with the filename and camera model:

chee find -r -f . --skip 5 --first 2 -p '~#created~fE / ~:file / ~:model ~%'
Do / Nikon D3100.jpg / NIKON D3100 
Sa / Nikon D40.jpg / NIKON D40

The format string is comprised of the following parts:

  • ~#created~fE take the created property and format the date using the E pattern, which means “weekday”.
  • ~:file print the file name. A property can always be abbreviated to a shorter non ambigous term. So ~:file is the same as ~:filename.
  • ~:model print the camera model property
  • ~% print a newline character

More information about format patterns can be found in the manual.

View images

The find command prints listing of files and the view command can be used to start an external viewer with the selection of images.

chee view -f . -r --skip 5 --first 2

This should open the feh image viewer. If it doesn't, please refer to the configuration chapter of the manual to set your image viewer of choice.

Querying

So far we restricted the output using the --first and --skip option. But it is of course much more interesting to restrict the selection based on some property criteria. This is called a query. The query syntax is (hopefully :)) simple and allows to specify checks against the properties of a file.

chee find -r -f . "filename:*nikon*"
2011-04-25 03:53      x120          (NIKON D300)        36.6mb /home/ei…/org/journal/photodir Nikon D300.tif
2010-12-02 13:18  4608x3072 14.2mp  (NIKON D3100)        3.3mb /home/ei…/org/journal/photodir Nikon D3100.jpg
2006-12-16 12:42  2000x3008 6mp     (NIKON D40)          2.9mb /home/ei…/org/journal/photodir Nikon D40.jpg
2014-01-30 16:41  7360x4912 36.2mp  (NIKON D810)        17.7mb /home/ei…/org/journal/photodir Nikon D810.jpg
2002-08-29 17:31  2048x1536 3.1mp   (E995)             762.9kb /home/ei…/org/journal/photodir Nikon E995 (iptc).jpg
2015-12-10 21:18  1280x960  1.2mp   ()                 257.7kb /home/ei…/org/journal/photodir Nikon E900 (2).jpg
2014-04-13 13:42  3000x4000 12mp    (COOLPIX P340)       4.6mb /home/ei…/org/journal/photodir Nikon Coolpix P340.jpg
2014-10-25 09:41  6016x4016 24.2mp  (NIKON D750)        11.5mb /home/ei…/org/journal/photodir Nikon D750.jpg
2014-06-06 17:10  5232x3488 18.2mp  (NIKON 1 V3)         8.4mb /home/ei…/org/journal/photodir Nikon 1 V3.jpg
2016-04-02 18:27  5152x3864 19.9mp  (COOLPIX S3600)        4mb /home/ei…/org/journal/photodir Nikon Coolpix S3600.JPG
2014-02-19 13:47  6000x4000 24mp    (NIKON D3300)        9.8mb /home/ei…/org/journal/photodir Nikon D3300.jpg
2004-01-02 14:26  3008x2000 6mp     (NIKON D100)         2.1mb /home/ei…/org/journal/photodir Nikon D100.jpg
2011-04-25 01:55  4288x2848 12.2mp  (NIKON D90)            3mb /home/ei…/org/journal/photodir Nikon D90.jpg
2001-04-06 11:51   800x600  480kp   (E950)             160.3kb /home/ei…/org/journal/photodir Nikon E950.jpg
2011-03-12 15:36   858x570  489.1kp (NIKON D5000)      256.2kb /home/ei…/org/journal/photodir Nikon D5000.jpg
2004-11-21 21:29  3008x2000 6mp     (NIKON D70)          1.5mb /home/ei…/org/journal/photodir Nikon D70.jpg
2000-12-30 10:18  2048x1536 3.1mp   (E990)                 1mb /home/ei…/org/journal/photodir Nikon E990.jpg
2004-06-29 15:29  1600x1200 1.9mp   (E775)               392kb /home/ei…/org/journal/photodir Nikon E775.jpg
2004-02-22 14:27   126x115  14.5kp  (E5000)               88kb /home/ei…/org/journal/photodir Nikon E5000.jpg
2015-12-10 21:18   600x450  270kp   ()                 301.8kb /home/ei…/org/journal/photodir Nikon E885.jpg
2010-10-21 11:22  2736x3648 10mp    (COOLPIX P7000)        4mb /home/ei…/org/journal/photodir Nikon Coolpix P7000.jpg
2015-12-10 21:18  1280x960  1.2mp   ()                 267.2kb /home/ei…/org/journal/photodir Nikon E900 (1).jpg
2002-08-22 15:38  1920x2560 4.9mp   (E5700)                2mb /home/ei…/org/journal/photodir Nikon E5700.jpg
2014-06-03 16:28  4608x3456 15.9mp  (COOLPIX AW120)      5.7mb /home/ei…/org/journal/photodir Nikon Coolpix AW120.jpg
2011-04-25 03:53  4288x2848 12.2mp  (NIKON D300)         6.4mb /home/ei…/org/journal/photodir Nikon D300.jpg
2003-08-06 18:04   600x391  234.6kp (NIKON D1X)         99.5kb /home/ei…/org/journal/photodir Nikon D1X.jpg
2013-11-23 16:47  6016x4016 24.2mp  (NIKON D610)        15.7mb /home/ei…/org/journal/photodir Nikon D610.jpg
2001-07-21 11:07  1600x1200 1.9mp   (E775)             727.5kb /home/ei…/org/journal/photodir Nikon Coolpix 775.jpg
2010-11-28 17:32  4928x3264 16.1mp  (NIKON D7000)        7.8mb /home/ei…/org/journal/photodir Nikon D7000.jpg

There are the basic operators: :, =, < and > which mean like, equal, greater than and lower than. The like operator can be used with the * wildcard. The search above find all files with nikon in their name. Also, like compares case insensitive. The equal operator doesn't interpret wildcards and compares case sensitive.

These checks (or conditions) can be combined with or, and and not, the default is and. For example:

chee find -r -f . "file:*nikon* pixel>3mp"
2010-12-02 13:18  4608x3072 14.2mp  (NIKON D3100)        3.3mb /home/ei…/org/journal/photodir Nikon D3100.jpg
2006-12-16 12:42  2000x3008 6mp     (NIKON D40)          2.9mb /home/ei…/org/journal/photodir Nikon D40.jpg
2014-01-30 16:41  7360x4912 36.2mp  (NIKON D810)        17.7mb /home/ei…/org/journal/photodir Nikon D810.jpg
2002-08-29 17:31  2048x1536 3.1mp   (E995)             762.9kb /home/ei…/org/journal/photodir Nikon E995 (iptc).jpg
2014-04-13 13:42  3000x4000 12mp    (COOLPIX P340)       4.6mb /home/ei…/org/journal/photodir Nikon Coolpix P340.jpg
2014-10-25 09:41  6016x4016 24.2mp  (NIKON D750)        11.5mb /home/ei…/org/journal/photodir Nikon D750.jpg
2014-06-06 17:10  5232x3488 18.2mp  (NIKON 1 V3)         8.4mb /home/ei…/org/journal/photodir Nikon 1 V3.jpg
2016-04-02 18:27  5152x3864 19.9mp  (COOLPIX S3600)        4mb /home/ei…/org/journal/photodir Nikon Coolpix S3600.JPG
2014-02-19 13:47  6000x4000 24mp    (NIKON D3300)        9.8mb /home/ei…/org/journal/photodir Nikon D3300.jpg
2004-01-02 14:26  3008x2000 6mp     (NIKON D100)         2.1mb /home/ei…/org/journal/photodir Nikon D100.jpg
2011-04-25 01:55  4288x2848 12.2mp  (NIKON D90)            3mb /home/ei…/org/journal/photodir Nikon D90.jpg
2004-11-21 21:29  3008x2000 6mp     (NIKON D70)          1.5mb /home/ei…/org/journal/photodir Nikon D70.jpg
2000-12-30 10:18  2048x1536 3.1mp   (E990)                 1mb /home/ei…/org/journal/photodir Nikon E990.jpg
2010-10-21 11:22  2736x3648 10mp    (COOLPIX P7000)        4mb /home/ei…/org/journal/photodir Nikon Coolpix P7000.jpg
2002-08-22 15:38  1920x2560 4.9mp   (E5700)                2mb /home/ei…/org/journal/photodir Nikon E5700.jpg
2014-06-03 16:28  4608x3456 15.9mp  (COOLPIX AW120)      5.7mb /home/ei…/org/journal/photodir Nikon Coolpix AW120.jpg
2011-04-25 03:53  4288x2848 12.2mp  (NIKON D300)         6.4mb /home/ei…/org/journal/photodir Nikon D300.jpg
2013-11-23 16:47  6016x4016 24.2mp  (NIKON D610)        15.7mb /home/ei…/org/journal/photodir Nikon D610.jpg
2010-11-28 17:32  4928x3264 16.1mp  (NIKON D7000)        7.8mb /home/ei…/org/journal/photodir Nikon D7000.jpg

This finds all files with nikon in the filename that have more than 3 mega pixel. The pixel property is the product of width and height. Values with a suffix of m or mp are interpreted as “mega pixel”.

A condition can be inverted by putting a ! in front of a condition:

chee find -r -f . "file:*nikon* !model:*coolpix* pixel>3mp"
2010-12-02 13:18  4608x3072 14.2mp  (NIKON D3100)        3.3mb /home/ei…/org/journal/photodir Nikon D3100.jpg
2006-12-16 12:42  2000x3008 6mp     (NIKON D40)          2.9mb /home/ei…/org/journal/photodir Nikon D40.jpg
2014-01-30 16:41  7360x4912 36.2mp  (NIKON D810)        17.7mb /home/ei…/org/journal/photodir Nikon D810.jpg
2002-08-29 17:31  2048x1536 3.1mp   (E995)             762.9kb /home/ei…/org/journal/photodir Nikon E995 (iptc).jpg
2014-10-25 09:41  6016x4016 24.2mp  (NIKON D750)        11.5mb /home/ei…/org/journal/photodir Nikon D750.jpg
2014-06-06 17:10  5232x3488 18.2mp  (NIKON 1 V3)         8.4mb /home/ei…/org/journal/photodir Nikon 1 V3.jpg
2014-02-19 13:47  6000x4000 24mp    (NIKON D3300)        9.8mb /home/ei…/org/journal/photodir Nikon D3300.jpg
2004-01-02 14:26  3008x2000 6mp     (NIKON D100)         2.1mb /home/ei…/org/journal/photodir Nikon D100.jpg
2011-04-25 01:55  4288x2848 12.2mp  (NIKON D90)            3mb /home/ei…/org/journal/photodir Nikon D90.jpg
2004-11-21 21:29  3008x2000 6mp     (NIKON D70)          1.5mb /home/ei…/org/journal/photodir Nikon D70.jpg
2000-12-30 10:18  2048x1536 3.1mp   (E990)                 1mb /home/ei…/org/journal/photodir Nikon E990.jpg
2002-08-22 15:38  1920x2560 4.9mp   (E5700)                2mb /home/ei…/org/journal/photodir Nikon E5700.jpg
2011-04-25 03:53  4288x2848 12.2mp  (NIKON D300)         6.4mb /home/ei…/org/journal/photodir Nikon D300.jpg
2013-11-23 16:47  6016x4016 24.2mp  (NIKON D610)        15.7mb /home/ei…/org/journal/photodir Nikon D610.jpg
2010-11-28 17:32  4928x3264 16.1mp  (NIKON D7000)        7.8mb /home/ei…/org/journal/photodir Nikon D7000.jpg

This excludes all files that were taken by a Coolpix model. As a last example, we can compare properties agains each other. The following example finds photos whose height is greater than its width:

chee find -r -f . "file:*nikon* pixel>3mp height>'width"
2006-12-16 12:42  2000x3008 6mp     (NIKON D40)          2.9mb /home/ei…/org/journal/photodir Nikon D40.jpg
2014-04-13 13:42  3000x4000 12mp    (COOLPIX P340)       4.6mb /home/ei…/org/journal/photodir Nikon Coolpix P340.jpg
2010-10-21 11:22  2736x3648 10mp    (COOLPIX P7000)        4mb /home/ei…/org/journal/photodir Nikon Coolpix P7000.jpg
2002-08-22 15:38  1920x2560 4.9mp   (E5700)                2mb /home/ei…/org/journal/photodir Nikon E5700.jpg

If you want to view this selection, simply replace the find command with the view command.

I think this is enough for now. The query syntax is explained in detail in the manual.

Being faster: using the index

If you followed along you probably noticed that traversing the directory each time is very time consuming. Especially when using the -p detail pattern, since a checksum of each file must be created. Thus every file that is displayed must be read once completely to create the checksum (it is not if not asked for). Therefore, like other photo managers, chee can create a database to improve query performance.

There are two modes for this: global and repository mode.

The global mode stores the database in your home directory. It uses absolute path names to your files. This allows to index directories anywhere on the filesystem and is useful if the location of your files doesn't change often.

In repository mode, you choose a repository directory and create a .chee directory in there. This .chee is used to store the database. Then only files below the repository directory can be indexed and the database will only store path names relative to the repository directory. This allows to freely move/copy the repository directory. All commands must be executed in or below the repository directory.

For this example, I use repository mode. So I create the .chee folder first:

mkdir -p .chee

Then add all directories to the index, searching recursively for files:

chee add -q '!ext:tif*' -r *
Add /home/eike/org/journal/photodir/bmp/16color-10x10.bmp … Added
Add /home/eike/org/journal/photodir/bmp/256color-10x10.bmp … Added
Add /home/eike/org/journal/photodir/gif/mspaint-10x10.gif … Added
Add /home/eike/org/journal/photodir/gif/photoshop-8x12-32colors-alpha.gif … Added
Add /home/eike/org/journal/photodir/jpg/Leica V-LUX (Typ 114).jpg … Added
Add /home/eike/org/journal/photodir/jpg/FujiFilm SP-2500.jpg … Added
Add /home/eike/org/journal/photodir/jpg/Nikon D3100.jpg … Added
Add /home/eike/org/journal/photodir/jpg/Nikon D40.jpg … Added
Add /home/eike/org/journal/photodir/jpg/Olympus E-M1.jpg … Added
Add /home/eike/org/journal/photodir/jpg/Canon PowerShot S300.jpg … Added
Add /home/eike/org/journal/photodir/jpg/Olympus C4040Z.jpg … Added
.....

This takes a while. The output is quite long, I cut it here for reading convenience. Also, I excluded all tif files, since they are not well supported yet anyways.

Now you can replay all the examples, just remove the -f and -r options. Chee queries by default the index that has now been created. You should see the same results (almost same, the results are sorted when using the index), just much faster:

{ time chee find "file:*nikon* !model:*coolpix* pixel>3mp" } 2>&1
2000-12-30 10:18  2048x1536 3.1mp   (E990)                 1mb /home/ei…/journal/photodir/jpg Nikon E990.jpg
2002-08-22 15:38  1920x2560 4.9mp   (E5700)                2mb /home/ei…/journal/photodir/jpg Nikon E5700.jpg
2002-08-29 17:31  2048x1536 3.1mp   (E995)             762.9kb /home/ei…/journal/photodir/jpg Nikon E995 (iptc).jpg
2004-01-02 14:26  3008x2000 6mp     (NIKON D100)         2.1mb /home/ei…/journal/photodir/jpg Nikon D100.jpg
2004-11-21 21:29  3008x2000 6mp     (NIKON D70)          1.5mb /home/ei…/journal/photodir/jpg Nikon D70.jpg
2006-12-16 12:42  2000x3008 6mp     (NIKON D40)          2.9mb /home/ei…/journal/photodir/jpg Nikon D40.jpg
2010-11-28 17:32  4928x3264 16.1mp  (NIKON D7000)        7.8mb /home/ei…/journal/photodir/jpg Nikon D7000.jpg
2010-12-02 13:18  4608x3072 14.2mp  (NIKON D3100)        3.3mb /home/ei…/journal/photodir/jpg Nikon D3100.jpg
2011-04-25 01:55  4288x2848 12.2mp  (NIKON D90)            3mb /home/ei…/journal/photodir/jpg Nikon D90.jpg
2011-04-25 03:53  4288x2848 12.2mp  (NIKON D300)         6.4mb /home/ei…/journal/photodir/jpg Nikon D300.jpg
2013-11-23 16:47  6016x4016 24.2mp  (NIKON D610)        15.7mb /home/ei…/journal/photodir/jpg Nikon D610.jpg
2014-01-30 16:41  7360x4912 36.2mp  (NIKON D810)        17.7mb /home/ei…/journal/photodir/jpg Nikon D810.jpg
2014-02-19 13:47  6000x4000 24mp    (NIKON D3300)        9.8mb /home/ei…/journal/photodir/jpg Nikon D3300.jpg
2014-06-06 17:10  5232x3488 18.2mp  (NIKON 1 V3)         8.4mb /home/ei…/journal/photodir/jpg Nikon 1 V3.jpg
2014-10-25 09:41  6016x4016 24.2mp  (NIKON D750)        11.5mb /home/ei…/journal/photodir/jpg Nikon D750.jpg
chee find "file:*nikon* !model:*coolpix* pixel>3mp"  2,00s user 0,10s system 188% cpu 1,117 total

vs.

{ time chee find -r -f . "file:*nikon* !model:*coolpix* pixel>3mp" } 2>&1
2010-12-02 13:18  4608x3072 14.2mp  (NIKON D3100)        3.3mb /home/ei…/org/journal/photodir Nikon D3100.jpg
2006-12-16 12:42  2000x3008 6mp     (NIKON D40)          2.9mb /home/ei…/org/journal/photodir Nikon D40.jpg
2014-01-30 16:41  7360x4912 36.2mp  (NIKON D810)        17.7mb /home/ei…/org/journal/photodir Nikon D810.jpg
2002-08-29 17:31  2048x1536 3.1mp   (E995)             762.9kb /home/ei…/org/journal/photodir Nikon E995 (iptc).jpg
2014-10-25 09:41  6016x4016 24.2mp  (NIKON D750)        11.5mb /home/ei…/org/journal/photodir Nikon D750.jpg
2014-06-06 17:10  5232x3488 18.2mp  (NIKON 1 V3)         8.4mb /home/ei…/org/journal/photodir Nikon 1 V3.jpg
2014-02-19 13:47  6000x4000 24mp    (NIKON D3300)        9.8mb /home/ei…/org/journal/photodir Nikon D3300.jpg
2004-01-02 14:26  3008x2000 6mp     (NIKON D100)         2.1mb /home/ei…/org/journal/photodir Nikon D100.jpg
2011-04-25 01:55  4288x2848 12.2mp  (NIKON D90)            3mb /home/ei…/org/journal/photodir Nikon D90.jpg
2004-11-21 21:29  3008x2000 6mp     (NIKON D70)          1.5mb /home/ei…/org/journal/photodir Nikon D70.jpg
2000-12-30 10:18  2048x1536 3.1mp   (E990)                 1mb /home/ei…/org/journal/photodir Nikon E990.jpg
2002-08-22 15:38  1920x2560 4.9mp   (E5700)                2mb /home/ei…/org/journal/photodir Nikon E5700.jpg
2011-04-25 03:53  4288x2848 12.2mp  (NIKON D300)         6.4mb /home/ei…/org/journal/photodir Nikon D300.jpg
2013-11-23 16:47  6016x4016 24.2mp  (NIKON D610)        15.7mb /home/ei…/org/journal/photodir Nikon D610.jpg
2010-11-28 17:32  4928x3264 16.1mp  (NIKON D7000)        7.8mb /home/ei…/org/journal/photodir Nikon D7000.jpg
chee find -r -f . "file:*nikon* !model:*coolpix* pixel>3mp"  16,35s user 0,98s system 167% cpu 10,369 total

More …

Thanks for reading so far, I hope it gives a good first impression on chee. Chee is still in development but quite useful to me already. You can check it out on github there is a download link and some install instructions. Feedback/questions is most welcome, of course! You can drop me a mail to eikek at posteo.de or open an issue.

Next: Little working with chee

Date: 2016-07-26

Author: Eike

Created: 2016-10-19 Mi 01:12

Validate