I take pictures when I am on vacation. Then I throw away 90% of them, some make the cut to end up on Instagram. Instagram is a great platform, however without an official API to upload images, they make it tough for lazy amateurs to publish their content. There is a popular unofficial
But even before I get there, I need to get the pipeline ready for getting the data out of the memory card of my DSLR and finding the ones that are worthy of posting. I don’t do any editing what so ever – and proudly tag everything with #nofilter. The real reason is image editing is tough and time-consuming. I doubt anyone would have such a workflow, but I find the existing tooling frustrating makes me do boring manual jobs – that too on vacation.
The workflow
Typically when I am on vacation, I would take pictures all day and as soon as I reach the hotel I want to get the pictures off my camera, group them in keep
, discard
,maybe
buckets, upload them to the cloud, post them to Instagram and finally have the memory card cleaned up for the next day. If I get about an hour to do all this – I’m lucky. The most time-consuming part of the workflow is looking at the images and deciding which bucket it belongs. Rest of the parts are easy to automate. So I wanted to take up that part of the workflow first.
This stage of bucketing a few hundred images into keep
maybe
discard
After some digging, I found feh
. It is a lightweight image browser and offers productivity and simplicity. Installing feh
was fairly simple – just install it us if you are on a mac.
brew install feh
Feh acts like any other simple fullscreen image browser,
feh -t # thumbnails
feh -m # montage
Other useful keyboard shortcuts
/ # auto-zoom
Shift+> # rotate clockwise
Shift+< # rotate anti-clockwise
There are tonnes of other options and good enough mouse support as well.
Extending with custom scripts
However the real power is unleashed when you bind any arbitrary unix commands to the number keys. For example:
mkdir keep maybe discard
feh --scale-down --auto-zoom --recursive --action "mv '%f' discard" --action1 "mv '%f' keep" --action2 "mv '%f' maybe" . &
Here is what is going on in the two commands above. First we create three directories. Next we bring up feh
in the directory (.
the current directory in this case) where we have copied the images from the memory card and use right left keys to cycle through the images.
The recursive
flag takes care of going through any subdirectories. The scale-down
and auto-zoom
handles the sizing the images properly. The action
flag allows you to associate arbitrary unix commands with keys 0-9
. And that is incredible!
In the example above hitting the 0
key moves it to the discard
keep
-s are less in numbers and easy to decide, so they are bound to 1. maybe
-s are time sinks, so I bind it to 2. I might do a few more passes on each folder before keep
Taking it to the next level
But to take it to the next level, 1
(keep) aws s3 cp
s3
bucket=`date "+%Y-%m-%d-%s"`
aws s3 mb s3://${bucket}/keep --region us-west-1
aws s3 mv '%f' s3://${bucket}/'%f' &
Note the ampersand at the end of the command – this helps in putting the upload command in the background. That way the upload is not blocking and you can keep going through the images.
This is reasonably stable – even if feh
crashes in the middle of your workflow, the upload commands are queued up and continue in the background.
Here is what the final command looks like. You can put this is a script and add it to your path for accessing quickly.
feh --scale-down --auto-zoom --recursive --action "aws s3 mv '%f' s3://${bucket}/'%f' &" --action1 "mv '%f' keep" --action2 "mv '%f' maybe" . &
This workflow is not for those who do a lot of editing with their pictures. Overallfeh
is fast to load images and provides a lot of extensibility.
Next Steps
The next step would be to configure the lambda function to the S3
upload event and have the unofficial instagram api post the image to instagram. One step remaining would be including the individual hashtags before S3
upload. That way from memory card to instagram can be reduced to just a few keystrokes.
Beyond that, I intend to move feh
part of the pipeline to a raspberry pi. I can plug the raspberry pi to the TV of the hotel I am staying at and cut my computer from the loop. Here’s a short dev.to post I wrote up for setting up my raspberry pi with a TV. It will probably be a few weeks to get everything together. Till then enjoy a very reticent feed from my instagram .
[instagram-feed]