131 photographs · recursive
Bicycle Crimes, Infinitely
Every picture here is a bicycle that was stolen or stripped for parts in Manhattan. Frames locked to posts with the wheels gone, wheels locked to posts with the frames gone, and a fair amount of whatever was left after that. There are 131 of them.
They are arranged as one image. Zoom in and the opening photograph gets larger until it runs out of real pixels. At exactly that point each cell of it becomes another photograph from the set, chosen to match the colour it replaces, and then those do the same. It never bottoms out into anything that isn't another bicycle.
Built in Claude Code. The mosaic is Python: Pillow and NumPy do the image work, and colours are matched in CIELAB rather than RGB, so a cell gets the photograph that looks closest rather than the one whose numbers are closest. Each picture is indexed three times, cropped left, centre and right, which turns 131 photographs into 393 usable tiles. Nothing is stored. The canvas is 268 million pixels on a side, so a tile is worked out when you ask for it, its coordinate hashed with blake2b so the same spot always yields the same photograph. Flask serves the tiles, OpenSeadragon does the zooming, and the site is Astro on a Cloudflare Worker.
Bicycle Crimes
keep zooming