Uploading screenshots with Captured
Almost every time I take a screenshot, it’s because I want to show something to someone, and an ideal way to do this is to just paste them a link to the screenshot. To make life easy, I’m therefore happy for the default behaviour of my computer to be that if I take a screenshot, it automatically gets uploaded to the Web. Of course, there might be one time in a hundred where I’m capturing something sensitive, but as long as it’s not too painful to disable the uploading in these cases, I’m happy.
Many other people seem to like that workflow, and there are plenty of nice apps out there that attempt to solve this problem. On OSX there are options like Skitch, Jing and Upshot that all provide options along these lines.
Unfortunately I also throw some other requirements into the mix that really reduces the number of suitable apps. Here are the factors that, for me, need to be fulfilled to get the perfect screenshot setup:
- The upload should require no additional steps. I don’t want to have to click any buttons or press any keys to confirm. I just want the screenshot to upload automatically.
- The file should be uploaded to my own server for the purposes of:
- Speed. This precludes the use of a third-party service like Imgur, where transfer time seems to be noticeably slower than an upload to my own server.
- Persistence. The URLs need to last as long as I do (or longer). If the files are on my own server I can try and make sure they stay available forever more. A service like Imgur on the other hand may stop working at any time. It may change the format of its URLs or do various other things to cause my old screeshot links to break.
- Control. Because the files are on my own server I can take complete control of what happens to them. I can back them up however I want, I can set up redirects on them if I ever decide to change the URL format, access a complete list of every screenshot I ever uploaded, and more.
- Because it’s uploading to my own server, it needs to be able to upload in a way that works with public key authentication. Ideally it would also use a robust and secure tool like
scp
orrsync
to do the transfer. - The filename of the screenshot should be meaningful, timestamped format like
paulherron_screenshot_at_2014-02-10_151418.png
, which includes the date and time to the nearest second. I think a timestamp is a great option as this provides useful information about the file at a glance. I’ve seen so many other naming formats used in other apps – an MD5 hash, a cumulative count of all the screenshots you’ve uploaded so far – none of which tell the recipient anything useful about the link they’ve received. These formats can also cause their own problems: for example using an MD5 hash means that the alphabetical sorting of your screenshots is lost. Using a timestamped format is also a good way of being quite sure filename are unique (even if you’re taking screenshots from multiple devices). Plus, it keeps your screenshots in alphabetical order: handy when viewing them all in your file browser or via thels
command. - Use the built-in OSX screenshot tool, so it’s possible to do the usual stuff like deciding whether you want to capture the entire screen, or just a portion of it.
With those requirements in mind, here are couple of different setups I’ve found to work well.
Honourable mention: Captured from the Mac App Store
Captured is a little menu-bar app that’s well worth buying. It provides a nice, simple interface with easily accessible options like enabling it and disabling it, and viewing your recent screenshots.
It’s a great app but, bearing in mind that big list of requirements above, I couldn’t quite get it to behave the way I wanted. It’s a really good option if you just want to upload to Imgur or Dropbox. In theory it can also support uploading to your own server, although I personally had problems getting it to authenticate properly with my server. Ultimately though I knew it wouldn’t support manual formatting of the screenshot’s filename, which is something I really wanted. So, it was on to a different option…
The (nearly) perfect solution: Captured, the open source version
Alongside its more visual and polished counterpart, Captured also exists in the form of an open source project, available on GitHub.
it is really intended for the commandline savvy
It’s a little more involved to set up but the trade-off is that, with a little configuration, it can hit all of the above requirements. If you follow the installation instructions you’ll end up with a configuration file at ~/.captured.yml
, and into the end of that file I throw something like the following:
The beauty here is that Captured is just running whatever commands you specify, so you have complete control over how it uploads and how it names things. With the above setup that means getting a URL back in the following format:
http://paulherron.com/screenshots/screenshot_at_2014-02-15_135029.png
The only minor disadvantage is that this version of Captured isn’t quite as integrated with the OS as the version from the app store is. You can’t quickly control settings via a menu icon for example, so managing the app is a case of doing things through the command line. So for example viewing your recent screenshots is a case of running:
captured --history
This works just fine for me though, and I’m pleased to have a screenshot app that works exactly as I want it to. Hopefully the above configuration could be useful to you too!