an opiniated photo management app for minimalists
JavaScript Go CSS Shell
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

Pixie: an opiniated photo management app for minimalists.

DEPRECATED in favor of Darktable

In a nutshell

  • small app that you run locally, it loads pictures from given directories
  • use vim-style keybinds to navigate, and add/remove tags to pictures
  • easily create edits of pictures, and optionally tag them the same way.
  • use script to generate export/album directories by finding all pictures matching certain criteria.


Photo storage & workflow ideology.

I like plain simple directories of pictures. I like directories of pictures which I can upload to my albums online, or directories of pictures to stream to my TV (not necessarily the same ones, organised the same way, and not neccesarily the same resolution), and I want to keep a copy of pictures exactly the way they came from my devices (so that syncing is trivial). But I want minimal amount of manual hassle, and minimal redundancy. I especially want no filesystem mess.

I want to have alternative versions of certain images, without polluting my "source" directories, and the ability to select which version of an image goes into which album(s).

I want to be able to add metadata to pictures, but without modifying the pictures themselves, and in a simple, open format. Any picture should be able to appear in 0, 1 or more photo albums (or more generally "exported directories"), without moving or copying files.

When composing albums, I want to filter down (i often make N pictures of the same thing), and select the best pictures, even across different devices (directories representing them), but without messing in the original files directory.

I want software that makes this easier, but doesn't hide anything from me. The process should be transparant and only be a thin layer over standard filesytme structures.

Photo management workflow assumptions.

  1. You have one or more directories that contain the pictures you pull from your devices or friends, and the directories remain untouched (other than the occasional sync to bring it up to date). No renames, file modifications, or deletes that don't have corresponding deletes on the device. This allows for trivial syncing/backups. My directories are named like photos/originals/dieter-sony-dsc
  2. any modifications done to pictures are saved in files in a separate directory. (such as photos/edits/dieter-sony-dsc). The filename of an edit looks like <original-basename>-<name of edit>.<original-extension>.
  3. You assign tags to pictures based on their contents or desired goal (i.e. whether it should go in a certain album or not).
  4. Exported directories (for photo albums for uploading or streaming to media) are generated by looking for files with certain tags in the aforementioned source and edits directories. They can be erased and regenerated at any point. They merely contain symlinks.

For 1 I use rsync, Pixie makes 2 and 3 as quick and easy as possible and the included script takes care of 4.

It is conceivable that with the advent of new technology some of these things may change, however a simple file layout that works on all posix file systems is very valuable (i.e. just directories, files and symlinks).


Install tmsu, Go (aka golang) and graphicsmagick (for gothum) Then:

export GOPATH=~/go
go get
go get
go get
go get
cd ~/go/src/

getting started

  • create a tmsu database (~/.tmsu/default.db must exist, you can do this by typing tmsu files --all)
  • go into the pixie directory
  • copy the template config directory to ~/.pixie
  • update ~/.pixie/config.ini to point to the db and thumbnail directories, and to use your preferred image editor for edits (optional). Note that on Linux you probably already have a thumbnails dir from various desktop apps, it's best to use the existing one, that way multiple apps (incl pixie) can work with the same thumbnails.
  • configure keyboard shortcuts in ~/.pixie/binds. Basically you'll want to add tag/untag pairs for the tags you will use. Make sure this file stays valid json because there's no validation yet.
  • type go run pixie.go
  • load http://localhost:8080 in browser
  • Enter a directory (full path) that contains pictures. You can now start navigating and tagging as per your keybinds.
  • If you want to use the edits feature, then some parent of the path has to be 'originals'. (e.g. if '/foo/bar/originals/john-import-from-camera' contains your pictures, then pixie knows to put edits in '/foo/bar/edits/john-import-from-camera')

Creating edits

use the keybind you defined to trigger the editor. pixie will create the edits dir (and any parent dirs) if needed, and copy the currently focused picture in there (so that you don't accidentially save changes to the original). Pixie makes the tmp file unwriteable, so after your changes, just use the 'save as' feature of your editor and save the image as <original-name>-<description-of-edit>.<ext> (e.g. IMG_20131019_125436-cropped-and-sharpened.jpg). To abort, just exit the editor. Pixie will remove the tempfile and load the edit to the right of your original (there's keybinds to navigate left-right) and allow you to tag the picture just like any other.


The whole point is that after creating edits and tagging files (originals and/or edits), you'll want to create export directories of files matching certain criteria, so that you can then use those export directories to upload to a video sharing site, and stuff like that.

First, make sure exports_dir is set correctly in your config.ini, In ~/.pixie/exports/ you can put config files, one per set of files to export. They only have to contain something like:

title='title of the album (human friendly)
match='tmsu tags to match'

Then run export/ Note that this script requires bash, tmsu, exiv2, and python2