Collaborative online pixel canvas with a physical display in my room
Timespan: June - November 2023
Hello! Welcome to my 2nd attempt at giving the Internet a physical form.
Grid World is a 64x64 RGB LED matrix which anyone on the internet can modify. You can draw pictures, write messages, or scribble random pixels.
Reddit's April Fool's event from 2011 (r/place) partly inspired this project. During the event, every registered user could change a pixel on a huge, shared canvas once every 5-10 minutes. The results were beautiful and chaotic, and the open-ended nature of the interactions left plenty of room for unexpected, emergent behavior.
Around 2021, I bought this RGB LED display on AliExpress, intending to mount it in a picture frame and showcase some cool generative art, moving or stationary. Mulling it over, I realized I would quickly get bored of seeing it unless I constantly maintained it — changing what program is drawing, randomly switching images, etc.
The problem is the adaptability of the human mind. I have the capacity to get used to anything, especially if it's all hand-chosen by me. The only thing I cannot easily get used to is the entropy generated by another human being. If people were drawing instead of programs, then I think I would never get bored of it.
In the same way graffiti artists enjoy spraying simply for the joy of seeing their work in public, I thought people would just draw on my canvas if it were made public. Paint on my canvas and be seen by the world!
And it kinda worked! People were uploading like crazy after I posted it on my Tiktok. Visitors coded bots to draw images into the pixels, and someone even wrote a bot which displayed a live clock.
So, here is the website where you, dear reader, can draw on my grid: bit.ly/andygrid
The hardware is only minimally interesting. The matrix is an RGB display panel, typically seen making up large indoor screens in malls or airports. Drawing on the matrix is handled by a Raspberry Pi with a special hat made by Adafruit that makes controlling the screen easy. The Pi is connected to the internet via a USB WiFi dongle, and polls the web canvas's server every few seconds to get the real-time state of Grid World.
For the website to work properly across multiple users at once, I am calling fetch every few seconds from the client-side since my hosting provider does not allow any real-time messaging like Websockets or Server-Sent Events. To avoid conflicting states, I am using a changes-only CRDT model on the server. Users can only push updates to pixels, and cannot overwrite the server's grid with their own. The current Grid World canvas is saved to disk every 5 seconds if any edits were made, and the server's python instance maintains the true grid in memory.
I also had to add some social barriers. In Grid World, drawing is done by clicking, but when debugging I wrote code which allowed drawing via mouse hold-and-drag. When deploying the website, I left this in the code and some people uncommented it for extra privileges. This quickly creates ugly noise marks over everything, so I removed that bit of code. I also had to add a rate limit because within a week the first bots were already being annoying — erasing people's work and filling the whole canvas with a single color.
To make the experience more complete, I also added a camera feed which sends an image of the physical Grid World to the website every 10 seconds. I'm not sure how many other people find this interesting, because I think the physical-ness is the only real novelty of this project, but I think it can't hurt. Some people must be compelled to draw because they know it appears in my room. Because the camera uses an open endpoint in the server, I added an auth key so only my raspberry pi can upload images. This is also why the code is not available, because I do not want some exploiter uploading inappropriate images.
I do not moderate the grid, and I never plan to. Generally, offensive symbols are quickly erased by Good Samaritans, and I quite like the unmoderated feeling of the Grid on an increasingly moderated Internet.
The Grid in my room runs almost real-time — so seeing a pixel change means that somewhere in the world, at that exact moment, someone on their computer had browsed to my site and decided to change a few pixels. I could feel their presence so strongly when I saw changes happening live, and I didn't even know who was doing it. Sublime!
Unlike Reddit, there is no method for communication on Grid World except painstakingly drawing words pixel-by-pixel. However, I hosted Grid World on the same site as my previous project (the InfoGlobe), which featured a text box for uploading messages to my device. I noticed after a few days that Grid World users would talk to each other on the InfoGlobe page using the upload message box, and then go back to Grid World to draw a larger piece together. While not the intended use case, I think it's really cool that the InfoGlobe side gets used that way.
Grid World is great for me because I don't have to go online to receive messages from people, but other people still have to go online to send messages to me. How cool would it be to have a smaller, tactile Grid World that you share with a more intimate group? Think you and your parents, or you and your partner, or a gaggle of friends who are working in different cities. A shared canvas that everyone can draw on without going on the phone or computer. I think that would be really cool.
If you (yes you, dear reader) have any comments/critiques/suggestions for the current Grid World, I am all ears! Shoot me an email, DM, or write me a message on Grid World.
And if you can think of any other ways you would enjoy sharing presence digitally, please let me know and maybe I can build it for you.
Finally, if you control a source of money and are interested, I would love to make a huge one of these. Think, you could have one in your main office that all your employees can participate in, creating a shared sense of space.