For those of you who've been following this project since last summer, today is an awesome day: Jeremy Williams just launched his Game Frame Kickstarter. Jeremy--a friend of Tested who you may have heard on our podcast--first showed us his Game Frame prototype when it brought it to our office last year for video demo. It was just a fun personal project--Jeremy loves 8-bit pixel art and wanted to find a way to display it on his walls. And that's what's so great about this project; he wanted something that didn't exist, so he made it. And taught himself more about Arduino programming and LED electronics along the way. There was no plan to make more than just the one; Jeremy's in the making-shit-that's-cool business, not the empire business. It was the feedback from you guys in that first Show and Tell that inspired Jeremy to keep iterating on his prototype and design a Game Frame that would be cheaper to build and easier to use. And based on our conversations with Jeremy since last summer, it was task much easier said than done.
I asked Jeremy to share the story of the new Game Frame and explain some of the technical challenges he had to tackle to make this project a reality.
Let's start with the beginning. In conceptualizing the game frame, what were your goals and how did it inform the technologies and design you chose for it?
It's called pixel art, so why not frame it? There are really two factors, at least for me: nostalgia and artistic merit. The earliest game sprites are powerful purely as memory triggers. Just seeing them is enough to make me smile about the "good 'ol days," when arcades were rotting our youth, MTV played videos, and email was something you sent on a BBS. A roll of quarters at age 10, in 1984, was worth its weight in gold -- but I'd rather have the quarters. I played the hell out of Defender, Joust, Frogger, Burgertime, Tron. I can still hear the sound of an arcade. That's just part of growing up in that generation. So I thought it would be cool to blow up some of that early art just to remind me of my youth.
But there's also the pure artistry of it all. I've noticed that whenever computers are involved, people's artistic radar gets scrambled. From video games, to the demo scene, to Pixar, computer assisted mediums just haven't gotten their due recognition. With pixel art it's especially frustrating because it's so accessible. The problem with more modern computer-assisted crafts is most people can't grok the creative process, but with pixel art you can. It's painting with squares, and the best examples of this are an expression of sheer cleverness and minimalism. Maybe people don't generally think of old game art as something that has inherent value outside of the game, but I do. I can watch the four frames of the Joust buzzard walk cycle any day, and always be inspired.
As for Game Frame tech, it turns out that if you want to frame early arcade sprites you need at least 16x16 resolution. That will get you comfortably to about year 1984, plus lots of NES content. Since I already had experience making an Arduino/microSD project, that was the most comfortable path, and the limitations of the Arduino chip map nicely to that number of pixels.
What were the technical or design hurdles to getting the specific look you wanted, and figuring out the electronics for the system?
"Pixel art is painting with squares, and the best examples of this are an expression of sheer cleverness and minimalism."
Oh, man. For starters, the original prototype used LED strips that I cut and soldered into a grid. This took about four hours, and was obviously not acceptable for mass production. The Game Frame only became a serious possibility when I sourced a newly fabricated 16x16 LED grid from China. It made assembly practical, and the frame was based around its dimensions.
The original prototype ran on Raspberry Pi because code existed to display bitmaps on LED grids. Using Arduino meant writing that code myself, but I'm not a ninja coder. Thankfully code did already exist for displaying BMP files on LCD, and also separately for driving LED strips (thanks Adafruit!). I just had to connect the two techniques, and teach the code about the grid structure. By sheer luck, these particular LEDs buffer colors in nearly the same format as BMP files (a-ha!), so it really wasn't that bad.
Early on, I couldn't find the right diffusion material for the screen. Most plastics I tried were either too opaque or too transparent. It wasn't until I took an LED down to San Francisco's art mecca, Flax, that someone directed me toward various weights of vellum. That ended up being perfect.
The first prototype we saw a year ago looked great and ran on a Raspberry Pi. In designing the current version for Kickstarter, what refinements did you want to make and how did you get there?
The transition from Raspberry Pi to Arduino was a big one, and it's such an improvement. Now it boots instantly, maximizes system resources, and doesn't need to be on stinking Wi-Fi. I hated that about the prototype. Now you just put your graphics on a microSD card, and away you go.
The original frame was really flimsy. It was cut from acrylic, sagged when hung up, and literally held the LEDs in place with a sheet of cardboard. It had screws all around the edges; really embarrassing. The new frame is 5mm wood, super sturdy, and is much more pleasing to handle.
"The biggest frame challenge was producing the thick interior mesh that isolates each LED light to its own pixel."
The biggest frame challenge -- easily -- was producing the thick interior mesh that isolates each LED light to its own pixel. Early versions used 30 pieces of crisscrossed paper, but these were time-consuming to assemble and prone to heat problems. I tried laser cutting special model airplane Styrofoam, but it couldn't handle the thin width of the walls between all 256 shafts. I got quotes from several CNC, laser cutting, and injection molding companies, and the ones that said it was even possible were cost prohibitive. I was about to ditch the project when I found one of those great partners that turns everything around. His innovative process produces a perfect, thin, opaque mesh from a single piece of plastic. Thank goodness for ingenuity.
Let's talk about the art. How does the Game Frame process art, and what kind of animations can it show? Would it be possible to string several Game Frames together?
Game Frame loves 24-bit BMP files. It eats those for breakfast, lunch, and dinner. I know, it would be awesome if it supported PNG, animated GIF, or played Matroska files. That would be super sweet, but we're talking about a 16 Mhz Arduino here. (Sorry, I'm being preemptively defensive.) The fact is, BMP is the most efficient format for this purpose, and allows for the best animation frame rates.
If you just want to show a single image, you just name your graphic 0.bmp and drop it into a folder with a name of your choosing. You're done. If you want to create an animation, just add more files (e.g. 1.bmp, 2.bmp, etc.); thousands of frames if you want. It will loop through them until it's time to transition to the next folder. However, the real fun comes when you add a special text file. This unlocks a bunch of animation controls that I hope people really dig into, like frame rate and moving your images across the screen. One of my favorite techniques is to make a film strip style graphic, with each frame of animation above one another in a tall, high resolution file. Then, you display it with instructions to scroll 16 pixels every frame, essentially projecting each "animation cell" like a movie projector does film. Since the SD card doesn't have to seek for new files, you can achieve the best frame rates with this method (around 24 fps). You can literally convert video to 16x16 and show it this way.
Stringing multiple Game Frames together is enticing. Due to memory constraints, one motherboard can't really drive more than its own pixels, and pushing enough power for multiples would be dicey at best. Out of the box, you could certainly setup the order of animations on SD and then turn on multiple Game Frames simultaneously. That would get you most of the way there, though they might fall out of sync over time. If this was a problem, you could add code to send/receive trigger signals from the expansion pins I exposed on the PCB, and use that to get perfect sync.
How can someone design their own 8-bit style art to put on the Game Frame?
Easy. Just buy a 6502 chip from eBay, learn assembly language... no, wait. Fire up an image editor and make a 16x16 image. Click around, save it out. Done. There are actually some great tools expressly made for pixel painting, including a good one I use on the iPad called Pixaki. It supports layers and outputs them as a Photoshop PSD file. There's also the excellent "The Grix" app by my brothers at eBoy.
"Creating pixel art at this resolution is like writing a haiku. Anyone can do it in a matter of minutes, but it really makes you appreciate the good stuff."
Creating pixel art at this resolution is like writing a haiku. Anyone can do it in a matter of minutes, but it really makes you appreciate the good stuff.
After the Kickstarter, what are your plans for the Game Frame design? Is it something that you hope users will modify and hack to iterate on the idea?
For starters, I just can't wait to see what animations people make. I'll have to setup a forum for that, where people can share tips and artwork. Beyond that, I'll release the source code. It's an interesting platform, and I'd love to see hackers transform it. There are expansion pins on the back that people can use to connect game controllers or other i/o devices. There's even an Arduino NES controller library, so you could hook up a gamepad in about an hour with the right tools. Maybe someone will make games, an email notifier, twitter reader, or just code some abstract graphic patterns. This is all theoretical, and who knows if the Kickstarter will even succeed -- let alone get into the right hacker hands -- but I'm hopeful. Should someone modify the source code, it's pretty easy for anyone else to update their Game Frame firmware as long as they have a USB FTDI adapter.
The Game Frame reward is only available for backers in the US. Any hope for people living elsewhere to get one?
This is a big point of frustration for me too! Unfortunately, distributing electronics outside the US requires both CE and RoHS certification, which is crazy expensive. Like, cancel-the-whole-project expensive. I will continue to research options, but I can't ship Internationally until I can make it work financially. In the meantime, I suppose there's nothing stopping someone else from shipping them overseas.
Update: Jeremy has now opened up a reward level for international backers and shipping!
Photos courtesy Jeremy Williams