EveryPolitician bot illustrations

In 2016 I started doing a bunch of illustrations for mySociety’s EveryPolitician project to accompany what would be fundamentally technical articles (I was being paid to write the articles; I did the illustrations for fun). Software-related topics are notoriously hard to illustrate because they are abstract, but Tony, the project lead, proposed a personification of “the bot” that was executing much of the code. It was a great idea. I finalised the initial character in its cartoon form first, and then built a POV-Ray model with that as the reference... and had a blast. The primary illustrations were in a challenging but ultimately fun 3 × 1 letterbox format that suited Medium, where the articles were being posted.

hand-drawn EP bot

The unusual thing about these images is that they were all made in a text editor, not a 3D modeller (in some places a bitmap image file is included, for screenshots or logos). That is, I typed them in, using POV-Ray’s scene description language and constructive solid geometry (CSG). My basic 3D-trigonometry is a bit rusty but I can still do things like this for fun (it’s a mostly useless skill). There remain a few people out there who still take an interest in POV-Ray, so I’ve linked to the .pov source files and added some notes below... but really, these days the only reason for creating images in such a text-based way is if you’re generating them programmatically.

Rendered images

Click on an image for the full-size version on GitHub.

rendered image of bot with untextured clones and mySociety and GitHub logos on floor
Bot intro scene-001.pov
rendered image of bot with GitHub screenshot
Bot with GitHub activity scene-002.pov
rendered image of bot amongst conveyor belts with GitHub-branded blocks
Bot at work scene-003.pov
rendered image of bot viewed from below
Bot above scene-004.pov
rendered image of bot looking at many screens showing GitHub and mySociety logos
Bot and screens scene-005.pov
rendered image of bot standing in a body of water, emanating ripples on the surface
Bot with ripples scene-006.pov
rendered image of bot so close to 'camera' that it's out of focus
Bot bumps camera scene-007.pov
rendered image of silver bot before flames, like the T-101 Terminator
Terminator bot (i) scene-008.pov
rendered image of silver bot close up with glowing red eyes, like the T-101 Terminator
Terminator bot (ii) scene-008a.pov
rendered image of bot facing away from mirror
Bot with mirror (i) scene-009.pov
rendered image of bot looking into mirror
Bot with mirror (ii) scene-009a.pov
rendered image of bot floating in space amongst asteroid chunks
Bot in space scene-010.pov
rendered image of bot looking at luminous green JSON data
Bot with JSON data scene-011.pov
rendered image of bot looking at GutHub deployment screenshot
Bot views deployment scene-012.pov
rendered image of bot riding on conveyor with blocks branded with GitHub logo
Bot on conveyor scene-013.pov
rendered image of bot playing on one of three playground swings
Swinging bot scene-014.pov
rendered image of bot alongside Gundamcat cutout, throwing shadows on wall
Bot with Gundamcat cut-out scene-015.pov
rendered image of bot surveying one day's GitHub activity
Bot 1-day push+commit activity scene-016.pov
rendered image of bot reflected in many specular spheres
Bot and reflective spheres scene-017.pov
rendered image of bot surrounded by un-textured clones
Bot clones scene-018.pov
rendered image of bot viewed through screen with a name writting in different languages
Bot and names (i18n: Abe Kenshiro) scene-019.pov
rendered image of bot with different hands, suggesting replacement is possible
Bot with replacement hands scene-020.pov
rendered image of bot in the mouth of a tunnel, viewed from within
Bot in tunnel scene-021.pov
rendered image of bot rendered like da Vinci's Vitruvian Man
Vitruvian bot scene-022.pov
rendered image of bot on narrow path in red mist with towers of blocks with GitHub logos on them
Red mist bot scene-023.pov
rendered image of bot trapped in one of several large glass spheres
Bot in glass sphere scene-024.pov
rendered image of bot in wallpaper-like pattern
Wallpaper bot scene-025.pov
rendered image of bot standing on twitter logo
Twitter bot scene-027.pov
rendered image of bot with a hook contraption
Bot with webhook scene-028.pov
rendered image of bot with rubies swirling around
Ruby bot (i) scene-029.pov
rendered image of bot inside lage ruby gem
Ruby bot (ii) scene-030.pov
rendered image of bot rendered with WikiData coloured logo
Wikidata bot scene-031.pov
rendered image of bot amongst HTML code
Bot with multiple HTML layers scene-032.pov
rendered image of bot with some white bot maquettes lying/standing nearby
Bot with scattered clones scene-033.pov
rendered image of bot riding on a blue arrow like a surfboard
Bot on twitter arrows
rendered image of bot riding on an old map with red borders and old lettering
Bot on a map scene-035.pov
Bot on the OGP map (Paris 2016) scene-ogp.pov

Tech notes

The image with GitHub’s Gundamcat is the only one that isn’t pure POV-Ray rendering: the lens flare was added in PhotoShop in an attempt to make the drab image a little more interesting.

Probably the most complex thing in these scenes is the coil of the web-hook and I didn’t work that out by myself. Joining it to the cylinder took a bit of jiggery-pokery.

My favourite image is the Vitruvian bot because it’s playfully exploiting the nature of the CSG with which the bot is built (sadly, that image was never used). But floating in space is neat too because all those asteroid chunks are “simply” one call to an isosurface function (specifically, POV-Ray’s crackle pattern) — it’s demonstrating the mind-boggling (to me) truth that POV-Ray is mostly about calculating the edges of functions in 3D space, and making them look good.

The 3D trig I mentioned at the top of this page is most clearly demonstrated by laying out the circle of coloured studs (the mySociety logo) on the cylindrical surface of the bot’s back. If you know trigonometry then that isn’t remarkable, but being able to do things like that springs to mind whenever people berate what they were taught in school maths for its uselessness. (See also: Pythagoras’s theorem).

The “busy day” image (which shows the bot surveying its GitHub activity for the day: dark blue for a pull request, light blue for a commit) is potentially an example of how programmatically generating these images could make sense. However, this was a one-off hack so I just walloped the numbers into the source and did not use the GitHub API to get them. POV-Ray does support animation (with its clock running from 0 to 1) so it would be possible to run that over a range of dates. You’d need a little patience because it takes a while to render, but it’s certainly do-able.

The OGP map bot was used for a presentation at the Open Government Partnership summit at the end of 2016 (and this blog post). It was made as an animation — hence the clock in its POV-Ray source. The animation here is from a slightly tweaked version of that source code... the bot is translated z an extra -0.4 to stop its antenna being cropped.