19 September 2017

Projection Mapping Pixelache

by Krisjanis Rijnieks, Helsinki 13 September 2017


This is a short story about the software behind the Projection Mapping with the Raspberry Pi workshop. It is an interesting fact that the first edition of the workshop was a collaboration with Pixelache in the context of the Click festival 2014 in Helsingor, Denmark. Now the workshop is a part of the Pixelache festival 2017, Local and Decentralized, programme. The following is a story from the perspective of the author of the software, the holder of the workshop and member of Pixelache, Krisjanis Rijnieks.

It started in year 2013, after visiting the Resonate festival in Belgrade, Serbia. It was full of workshops and one of them was about running openFrameworks, the open source creative coding toolkit, on the Raspberry Pi minicomputer. I was studying at the Media Lab Helsinki that time, using openFrameworks for my personal and study projects. Raspberry Pi was something new at the time, some of my friends were even saying it would render Arduino useless, although today both of the platforms are running side by side just fine. Using openFrameworks with Raspberry Pi seemed like a good idea, especially using this combination for permanent installations where one would usually go with a Mac Mini or similar. In worst cases it would not be possible to afford a Mac Mini and personal computer would be used instead. I was mostly worried about the latter. What if I could do permanent projection mapping installations without sacrificing my own computer? I would still like to read my emails while the installation is running somewhere else.

After coming back from the festival, I spent time on exploring the Raspberry Pi. It has a very active online community and finding answers to technical questions as well as setup guides was not an issue. I managed to install openFrameworks on the Pi and was very satisfied while looking at my first compiled example application. I have seen it working at the workshop in Belgrade, but was still surprised and partly did not believe that it really works until I managed to get it to the point myself.

The next step would be to create an openFrameworks addon which I always wanted to do. As a student and rather beginner in the field of C++ programming, I felt lack of experience, but then, I also believed that the only way to get the experience is to just do it. Do what? A projection mapping addon for openFrameworks that works on the Raspberry Pi. Why? At the time many projects, I was involved in, needed projection mapping. I would usually use my Mac laptop with a copy of MadMapper projection mapping software. It would all run just fine. I would even say “too easy” as the combination just worked. A Mac, anything one can imagine (or not) as an openFrameworks application, and MadMapper. Sometimes you would need to blend two projectors together, you would use BlendyVJ. The tools were there. I was questioning myself a lot, why another projection mapping tool?

The challenge. I wanted to learn and see how far one can go with a simple open source project. I think that it was also Helsinki, the birthplace of the open source Linux kernel, that gave me extra amounts of confidence that this is the way to go. It went slow at first. The simple tests passed. Mapping video texture on 3D objects, generative textures, even remote control. Some of the initial tests were even more advanced as the software today. It was not that there were no openFrameworks addons or software for projection mapping, there was nothing of the kind that would run on the Raspberry Pi minicomputer.

The first big milestone in the development of the addon was a proposed workshop at the Click festival in Helsingor, Denmark. It was May 2014 when I released the first usable version of ofxPiMapper on GitHub. The workshop was a collaboration with Pixelache Helsinki. Projection Mapping with the Raspberry Pi was it's title and, surprisingly, it has not been changed since then. During the workshop I wanted to show all the steps needed to get the Raspberry Pi to a state where one could do projection mapping with it. Unfortunately some parts of it were very slow and participants could play around with projection mapping only at the end of the second day of the workshop. These were good learnings that helped to shape the structure and content of all the following ones. The workshop was a good way to test the usability aspects of the software as well. It was crashing very often, I was trying to write down every scenario I could reproduce in order to fix it during and after the workshop.

Then I decided to make my master's thesis topic out of it. The master's thesis is done now and you can read it online (visit It was another challenge as it involved explaining the process in a written form and there were a lot of parts to describe. At some point the codebase of the software started to get hard to manage. I realized that in order to create sophisticated software it is not enough to learn one or even more programming languages. This is how object oriented design patterns became a part of my thesis. They helped me a lot. Especially the way how the Command Pattern can be used in order to enable undo functionality.

Graduating was a challenge. Especially because of trying to get the last credits while residing in another European city–Berlin. But it was not impossible and after graduating there was a place for an obvious question: what next? I did not create an open source project just because I needed a topic for my master's thesis. Also the response from the users of the software was encouraging to continue to work on the project. So I did.

There were many phases of development of the project, including every-day approach where you would try to improve the code every day, even if it would mean only five lines of code or a minor improvement. So far this tactic proved the most effective. The hardest part is to restart it again once three days in a row are dropped. A week without a break is the best possible motivator to go on.

Another important part of the development cycle would be the workshops which are great for user tests and also for getting a bit of funding for the project. Another source of income would be projects which would also benefit from having an open source projection mapping tool. It would mean that I could also cut down on hardware expenses in terms of using Raspberry Pi instead of a Mac and ofxPiMapper as an alternative to MadMapper. For projects with smaller budgets it is a lifesaver, literally, as instead of throwing out money to buy robots, extra human hours can be paid.

This year has been special in terms of Projection Mapping with the Raspberry Pi workshops as I promised myself to run a workshop a month this year. So far August was the one being without a workshop as I decided to take my first three-month vacation and go to Georgia (the one in Europe) instead. Without taking my laptop with me. October seems to be fixing August as there are two workshops scheduled already.

The workshops usually take two days. It might seem a lot of time, but it is just enough for an intro actually. The content of the workshop focuses on getting it to work first. Then we dive into the main specialty of the software, the possibility to build generative visuals and use them for projection mapping, all as a single openFrameworks app. This is what I love about openFrameworks that it let's you create a single application for any project by combining its core with community maintained addons and custom code. In an usual scenario you would have the generative part made in openFrameworks (or Processing), use MadMapper to projection map it, and sometimes even BlendyVJ and MaxMSP for sound processing and playback, not if your solution is built as a coherent application with openFrameworks. It also makes setting up a permanent installation much easier as only one app has to be scheduled to launch on reboot, and one does not have to worry about the sequence of programs starting up.

As for now the main problem is the lack of time for the development of the software. There are still some steps to be done in order to make it modular and easier to improve. There are pending features for a longer while now. In order to get there, some life fixes have to be done. Becoming a cyborg is not an option, probably because I am one already. Chuckles. Have to go through a pair of maintenance procedures soon and things will run smoothly again.

As for a broader future perspective, dome mapping is the next challenge. I have tried a couple of tools out there and realized that a sophisticated openFrameworks addon for that is what the community, including me, needs. That is another thing holding me back from the development of ofxPiMapper, but I see it as a good thing as starting something anew, always gives you fresh ideas in other fields.

I am happy to have the opportunity to run the Projection Mapping with the Raspberry Pi workshop at the Pixelache 2017 festival as Pixelache was part of the workshops getting started back in 2014. It has been three years, and it is exciting to look back and see how far it has gone. Although i feel like I don't see the tip of the mountain yet. So there is a long way to go ahead also. Thanks to all who helped to make it happen and to the one's who joined!



Krisjanis Rijnieks has been working with digital media since Macromedia Flash 4. Between then and now he managed to try out painting, drawing, illustration, VJing, 3D modelling, Flash, creative coding, projection mapping and digital fabrication. He studied painting at the Latvian Academy of Arts and Brera Academy of Fine Arts in Milan; later, new media at the Media Lab Helsinki. Most of the time he has been freelancing, lately working on projects related to creative coding, projection mapping and digital fabrication. Has spent some time at the Fab Lab Berlin while developing a resource management system for fablabs and makerspaces. He is author of the book Cinder–Begin Creative Coding, although in his work he prefers to use the openFrameworks creative coding toolkit. His main project now is the development of an open source addon for openFrameworks which let’s one use the Raspberry Pi minicomputer for serious projection mapping projects.