Mothbun Goes to BLINK
A rabbit, a holiday, and a light festival
A friend has a weathered concrete rabbit in their yard. For one holiday it got dressed up as Mothman, and the look was too good to leave alone. Mothbun is a small side-scrolling game built around it: long upright ears, mossy stone, dark indigo bat wings, glowing red eyes.
Level 1 takes place during BLINK, the light festival where artists project animation onto historic buildings across Cincinnati and Covington. Mothbun runs past Music Hall in Over-the-Rhine, along the river with the Roebling Bridge lit up behind, past Mother of God Church in Covington and the great Art Deco arch of Union Terminal, while the facades light up around it.
How it plays
It's an auto-runner, built for one thumb. The street scrolls on its own. Tap to jump, and hold to spread the wings and glide. Everything in the way is something Cincinnatians love to complain about.
Riders on rental e-scooters come straight at you, eyes on their phones. You can jump them, or use Mothbun's eyes: the eye button fires a red-eye glare that sends a rider tumbling off the scooter.
Pedal wagons full of people raising cups roll down the street the same way you're going, just slower. Run into one and it costs you, but jump onto the canopy and you can run across the roof. Now and then the streetcar rings its bell and rolls in. Make the jump onto its roof and it's the longest ride in the game. Miss it and you've run into a streetcar. Glowing orbs of projected light are there to collect, and three hits ends the run.
The run is about a minute long, from Music Hall to Mother of God. At the church, Mothbun slows to a stop and the facade lights up in a full projection show with fireworks before the score tally. Sound effects, including the streetcar bell, are synthesized in code with Web Audio. The only sound file is the background music.

Projections drawn in code
The buildings were generated deliberately dark and flat, so the light shows aren't baked into the art. Every frame, the game draws an abstract pattern (rising color bands, pulsing rings, sweeping stripes, flipping tiles), masks it to the building's silhouette, and screen-blends it over the facade so it reads as light rather than paint. The patterns are original and don't copy any real BLINK artist's work.
The windows switch on and off too. Lit glass and the cream stone trim share the exact same palette colors, so color alone can't tell them apart. A cleanup script separates them by shape: solid blocks at least three pixels tall are glass, and thin lines are trim. Each building ends up as a lights-off facade, a lit-windows layer, and a list of window rectangles the game dims one at a time. When a projection starts, most of the windows go dark so the show can read. The Roebling Bridge gets shows too, masked to just its two stone towers so the blue cables stay dark.

The art pipeline
All the art started in ChatGPT on a solid green background. Generated "pixel art" is rarely on a true pixel grid, so a set of Python scripts does the cleanup:
- Key out the green and remove the green fringe along the edges
- Detect the underlying pixel grid and downscale onto it
- Scale each building against the rabbit's 86 pixel standing height
- Reduce the palette to about 40 colors and night-grade everything except the lit windows
The character sheet goes through the same steps, plus aligning every frame on the red eye and the feet so the animation doesn't wobble. The scooters, pedal wagon, and streetcar are animation strips that get split into frames and sized so the game works: a rider about Mothbun's height so a full jump clears them, and roofs low enough to land on.
How it's built
The game is TypeScript drawing to a plain HTML canvas, with no game engine. An auto-runner needs gravity, a jump, and some rectangle collision checks, and writing those directly keeps the whole game small. It runs at a fixed internal height of 560 art pixels, with the width following the screen's aspect ratio, and scales up with crisp nearest-neighbor pixels. Every gameplay number (jump height, glide strength, how fast it speeds up) lives in one tuning file. Vite handles the build, and Vercel redeploys on every push.

What's next
- More Cincinnati and Covington landmarks for the middle of the run
- A sidewalk and street with some texture
