Why and how I wrote my own slideshow presentation software
Slideshow meets Game Engine
I created my favorite alternative to Powerpoint, a presentation software that satisfies my specific requirements, and even introduces an innovative feature dubbed “multiplayer presentations”.
To better understand my motivation for ditching Powerpoint, I’ll share some of the grievances I have with it before telling you all about this project.
“This is probably going to be a rant…”
I’m not too fond of Powerpoint
TL/DR:
- user experience: bad, inconsistent across platforms
- inconsistent format when changing computer or OS or app or version
- low productivity compared to what I am used to
- the typical style of presentations is dull
- lacking presenting features, I would like to see
I am not a fan of Powerpoint. I am not a fan of office software in general. It just keeps getting more and more complex, keeps surprising me with annoying bugs, and works against my productivity. It slows me down. If, by contrast, you have never experienced working with a good text editor such as neovim or vscode, creating content in Markdown — you will probably never understand how lightweight and productive that can be. Editors don’t get into your way as much as opinionated, bloated office products do. I feel unfortunate for anyone happy with Microsoft Office. They don’t know what they’re missing.
I hate the point-and-click, copy-and-paste style workflows. I strongly dislike shallow, style-over-substance Powerpoint presentations as much as I hate unproductive, unnecessary meetings, “pepped up” with meaningless bullet points.
The way we present has collapsed into just one presentation style: Slides with bullets, charts, and pictures, with the odd video. Hardly any interaction at all.
As a programmer and researcher, I value precision. Powerpoint presentations still, in 2021, tend to change the way they look when opened on a different computer. Text positioning or text sizes are suddenly a bit off, and so on.
I also value support for multiple platforms. Microsoft currently offers many different versions of Powerpoint: The Windows app, the Android app, the iOS app, the web app — all come with a different set of features, and if you don’t have a Windows computer or Mac handy, you won’t be able to access all the features you might need.
I have spent countless hours trying to “fix the master slides” some creative person shoveled together, not caring about consistent formatting, producing templates that only work in the demo presentation but that are useless the moment you instantiate a template. Suddenly bullet points lose their formatting, change their symbol — and you end up just copying and pasting slides, merely modifying texts, trying not to break anything. This workflow also encourages the creation of multi-master presentations. Copy in a slide from an older presentation, and bam — you have inherited a few more master slides — and the real fun begins.
OK, let’s stop ranting and start doing something about it. But what do I want?
I want something different
My primary uses case and needs — let’s outline them with some bullet points:
- simple slides with bullets
- consistent formatting inside a presentation and across all platforms
- easy slide creation with Markdown formatting
- text files: enable version control tools such as git - complex animations to illustrate complicated stuff
- easy to take with me and present
- no Powerpoint, no “Player” software needed
- better than a simple PDF
- clicker support
- virtual laser-pointer support
- draw mode - easy to share
- no Powerpoint should be required
- better than mere PDF, with PDF as a fallback - INNOVATION: Multi remote presenter mode! (“multiplayer mode”)
- Support for non-linear presentations
Yay, we have a requirement spec 😀! We’ll get to those points later.
Jonathan Blow’s approach
So, a few years ago, I watched Jonathan Blow from Thekla, Inc. create his own slideshow program on Twitch, for reasons similar to mine. Wow, that was refreshing! Jonathan is an indie game developer with quite a following and gives lots of talks — he clearly has a need for great presentation software.
In the live streams, he argues how difficult it is to do simple changes like changing a single slide's background color and how Powerpoint, while growing more and more complex, does little what he actually needs or wants to do. What he had in mind was a presentation program that works fundamentally different than Powerpoint, something built for non-linear presentations: where you can branch off, e.g., in the Q&A time of your talk, into a database of useful slides you keep around and give more interactive presentations than “a memorized bunch of words delivered to the audience”.
This resonated well with me. Jonathan wrote his slideshow program in his own programming language, using (I think) OpenGL (GPU) for rendering, etc. The “slides” are defined in a simple text file, which still leaves open the option of creating a graphical slideshow designer later.
Unfortunately, he never released his software, but I was intrigued.
How to write your own slideshow?
But how would I go about writing my own presentation software then? This lead to many questions and considerations:
What should the end-product be?
- An executable?
- For which platforms? - How to support multiple platforms?
- Cross-compilation?
- Or web?
- Or both? - What programming language to use?
- A framework or low level yet still cross-platform?
- OpenGL? What about audio, then?
- SDL?
Godot engine to the rescue
This is where the idea of using a game engine crossed my mind. A game engine is a framework, usually combined with a GUI editor, to create computer games. Typically, the most common platforms are supported.
It didn’t take long and I was hooked on the powerful, free, and open-source Godot engine.
Using a game engine, the basics of graphics rendering, animations, audio, and even networking are already covered — and my “game” could be exported to all major platforms (Windows, Mac, Linux) out of the box. What’s more, an HTML export for releasing to the web is available, too.
All this power comes in a mere 20 or so megabyte (!) download, is available on all platforms, and was totally usable under Linux on my Chromebook.
I saw a path forward, was hooked, and immersed myself into “game” programming using the Godot engine.
Introducing: Bûllets
Here is what I came up with:
- Bûllets is a slide show software powered by the Godot game engine
- It helps you create beautiful presentations on all platforms (Windows, Mac, Linux) that are 100% self-contained and will look and feel the same on all platforms
- Using plain text with optional easy markup for content makes slide creation a breeze
- If you know how to code, you can create the most complex, interactive animations with sound effects - or even embed Tetris into your slides.
- You can share Bûllets presentations either as native programs or publish them to the web
- PNG/PDF export is supported, too if you need a PDF version
- Bûllets presentations are version control friendly and allow for GitHub collaboration
- And yes, it works with your favorite wireless clicker; it even comes with a laser pointer!
- It is a proof-of-concept
- It is also a hack
The main ideas behind this project:
- You create the slide contents, bullet points, etc. using Markdown
- Yet, you have a graphical editor
- The editor is the Godot editor, a tiny download that doesn’t need to be installed and runs on all platforms.
- The editor is customized for slideshow presentation editing
- When done, you export the presentation
- into standalone executable programs for Windows, Mac, or Linux
- or to HTML for use in the browser
- if you know how to upload the HTML version, e.g., to GitHub (free), then you don’t even need to take the presentation with you
So you can show up anywhere and run or browse to your slideshow program and be sure that it will look and behave exactly as you intended it to be.
You can also share your interactive slideshows, ideally via the web — as sending executable programs is out of fashion these days — or create a PDF version.
While the GitHub project page and the demo presentation go into more detail, I want to share a few highlights.
Showing off: Platformer with touch controls in the slideshow
With regards to interactive presentations and complex animations, this is where a game engine really shines. Below you see a demo of a fully functioning 2D platformer mini-game running inside a slide of a presentation. It even detects when you’re on a device with a touch screen — and displays touch controls:
All this also runs in the browser, as do all other features.
Supporting clickers, controllers, and virtual laser pointers
Of course, Bûllets supports “clickers”, those little remote controls. Being inspired by the computer games context, you can also control your slides with your favorite gamepad or game controller.
It also features a virtual laser pointer that you can vary in size:
Drawing on slides!
To add interactivity, and for illustrating areas of your slides, Bûllets lets you draw on slides:
Embedding audio and video
Here is an example screenshot of an embedded video:
The innovative finale: multiplayer mode!
This feature is part of the reason why I created Bûllets: Especially these days, where we have to present from home, I was faced by a struggle:
Giving a conference talk with my colleague, we would usually have her share her screen and me narrating my part of the presentation. I had to give her auditive cues about when to advance to the next slide, play an audio file, etc.
If there only was a way where I could remote-control her presentation… Well, now there is: with Multiplayer-Mode!
In this mode, up to 3 presenters can join a “room” on a server, directly from within the presentation, like so:
Once connected, all of them get assigned different laser pointer and drawing colors, and all of them can control the presentation. This makes taking over a part of the presentation remotely absolutely pain-free.
Here is a video demoing multiplayer mode:
This feature is a bit more involved, as it requires copying the server executable onto a server machine that’s accessible over the internet. But you only have to deploy one server to run an unlimited number of “rooms”.
So, is this for everyone?
Probably not. Most people shy away from using anything but Microsoft Office and might not have my specific needs or have a higher pain threshold than I have. Also, as with all new tools, there’s a bit of a learning curve involved with it, you’d have to learn to get around in the Godot editor, and I cannot provide support for it.
However, here is a video showing how simple it is to get started if you’re technically inclined:
Anyone really should use the tools they’re comfy with, and if you have found a tool that works for you, more power to you!
If you want to learn more, check out:
- the GitHub project
- the demo presentation featuring a 2D platformer game slide
- or the presentation I prepared for a talk on my RRISC CPU!
- BTW this is the PDF output of that presentation.
Originally published at https://renerocksai.github.io on January 16, 2021.