I love Apple’s presentation tool, Keynote. In fact, if I had to nominate a single piece of software that was keeping me using Mac OS X, Keynote would be it. I haven’t yet found another tool that lets me throw together great-looking slides as quickly as keynote does.

On the other hand, I also really like using Android. And this is a problem, because Apple’s Keynote Remote app only works on iOS. Keynote Remote is an app that allows you to remote control Keynote from your phone. It also sends down a screen preview, presenter notes, and it also allows you to peek ahead to your next slide. Basically, it’s a killer app for people who want to step out from behind the lectern, and still have their notes and be aware of where they’re up to in their presentation.

And it only runs on iOS.

So this is where I introduce my new project: KAAS, or “Keynote-as-a-Service” is a Python-based HTTP server that lives on the same laptop as you’re presenting from, and exposes a JSON API for doing everything that Keynote Remote does, and potentially more. It’s Apache 2.0-licensed, and it already has a reasonable amount of documentation (though it could use a whole lot more).

I’ve thrown together a basic HTML front-end, with a really bad UI, just so you can see it in action.

In parallel, I’m developing an Android-based keynote remote, called Keymote. Once I release the app, I’ll be selling it for a nominal fee through the Play Store. It’s currently in Alpha testing, but if you want to try it out, let me know, and I’ll grant you access.

So how does KAAS work?

Keynote 5.x (iWork 2009) offers a reasonably comprehensive AppleScript interface* to creating and controlling slideshows with Keynote. It also has a remarkable HTML & JSON export format that, with some basic understanding of the JSON format, allows you to reconstruct how the slideshow will look at each stage of build.

Even better, it tells you when builds will be skipped, or when they’ll be auto-played. In concert, you can use this to determine where Keynote will be after you advance the slideshow, and you can build up build previews (lol) based on the commands in the JSON.

What’s best is that exporting such a HTML & JSON package is exposed through the AppleScript bridge, so it’s easy to do automagically.

In combination, you can use these to replicate the back-end functionality of Keynote remote.

So, if you’re interested in testing out Keymote, or if you want to contribute to KAAS, let me know. I’d be grateful for help and happy testers in any form.

(*Yup, this doesn’t work with Keynote 6.0. It’s apparently a substantial re-write, and Apple have removed the AppleScript interface to the new version. According to this support note, AppleScript support will come back. Hopefully there’ll be something resembling the Export format too.)