Show HN: isometric.nyc – giant isometric pixel art map of NYC
139 points
2 hours ago
| 15 comments
| cannoneyed.com
| HN
cannoneyed
2 hours ago
[-]
Hey HN!

I wanted to share something I built over the last few weeks: isometric.nyc is a massive isometric pixel art map of NYC, built with nano banana and coding agents.

I didn't write a single line of code.

Of course no-code doesn't mean no-engineering. This project took a lot more manual labor than I'd hoped!

I wrote a deep dive on the workflow and some thoughts about the future of AI coding and creativity:

http://cannoneyed.com/projects/isometric-nyc

reply
cannoneyed
18 minutes ago
[-]
Sorry about the hug of death - while I spent an embarassing amount of money on rented H100s, I couldn't be bothered to spend $5 for Cloudflare workers... Hope you all enjoy it, it should be back up now
reply
ivangelion
5 minutes ago
[-]
Want to thank you for taking the time to write up the process.

I know you'll get flak for the agentic coding, but I think it's really awesome you were able to realize an idea that otherwise would've remained relegated to "you know what'd be cool.." territory. Also, just because the activation energy to execute a project like this is lower doesn't mean the creative ceiling isn't just as high as before.

reply
bigwheels
1 hour ago
[-]
Very impressive result! are you taking requests for the next ones? SF :D Tokyo :D Paris :D Milan :D Rome :D Sydney :D

Oh man...

reply
cannoneyed
6 minutes ago
[-]
Really want to do SF next. Maybe the next gen of models will be reliable enough to automate it but this took WAY too much manual labor for a working man. I’ll get the code up soon if people wanna fork it!
reply
xnx
1 hour ago
[-]
I see you used Gemini-CLI some but no mention of Antigravity. Surprising for a Googler. Reasons?
reply
cannoneyed
42 minutes ago
[-]
I used antigravity a bit, but it still feels a bit wonky compared to Cursor. Since this was on my own time, I'm gonna use the stuff that feels best. Though, by the end of the project I wasn't touching an IDE at all.
reply
ChrisArchitect
1 hour ago
[-]
Appreciate that writeup. Very detailed insights into the process. However those conclusions left me on the fence about whether I 'liked' the project. The conclusions about 'unlocking scale' and commodity content having zero value. Where does that leave you and this project? Does it really matter that much that the project couldn't exist without genAI? Maybe it shouldn't exist then at all. As with alot of the areas AI touches, the problem isn't the tools or use of them exactly, it's the scale. We're not ready for it. We're not ready for the scale of impact the tech touches in multitude of areas. Including the artistic world. The diminished value and loss of opportunities. We're not ready for the impacts of use by bad actors. The scale of output like this, as cool as it is, is out of balance with the loss of huge chunk of human activity and expression. Sigh.
reply
cannoneyed
40 minutes ago
[-]
At the risk of rehashing the same conversation over and over again, I think this is true of every technology ever.

Personally I'm extremely excited about all of the creative domains that this technology unlocks, and also extremely saddened/worried about all of the crafts it makes obsolete (or financially non-viable)...

reply
dreadlordbone
1 hour ago
[-]
Does it really matter that much that a sewage treatment plant couldn't exist without automated sensors? Maybe it shouldn't exist then at all.
reply
dormento
1 hour ago
[-]
Not working here, some CORS issue.

Firefox, Ubuntu latest.

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://isometric-nyc-tiles.cannoneyed.com/dzi/tiles_metadat.... (Reason: CORS header ‘Access-Control-Allow-Origin’ missing). Status code: 429.

Edit: i see now, the error is due to the cloudflare worker being rate limited :/ i read the writeup though, pretty cool, especially the insight about tool -> lib -> application

reply
flaviolivolsi
1 hour ago
[-]
Not working here either. Two different errors with two different browsers on Arch.

- Chromium: Failed to load tiles: Failed to fetch

- Zen: Failed to load tiles: NetworkError when attempting to fetch resource.

reply
cannoneyed
39 minutes ago
[-]
Yeah I'm gonna blame Claude (and my free plan) for this one. Fixing!
reply
cannoneyed
29 minutes ago
[-]
Cloudflare caching should be back. Turns out that there were a lot of tiles being served, who could have seen that coming?
reply
jen20
39 minutes ago
[-]
Same in Safari on macOS here, FWIW.
reply
cannoneyed
48 minutes ago
[-]
Author here: Just got out of some meetings at work and see that HN is kicking my cloudflare free plan's butt. Let me get Claude to fix it, hold tight!
reply
cannoneyed
28 minutes ago
[-]
We should be back online! Thanks for everyone's patience, and big thanks to Claude for helping me debug this and to Cloudflare for immediately turning the website back on after I gave them some money
reply
tptacek
1 hour ago
[-]
So, wait: this is just based on taking the 40 best/most consistent Nano Banana outputs for a prompt to do pixel-art versions of isometric map tiles? That's all it takes to finetune Qwen to reliably generate tiles in exactly the same style?

Also, does someone have an intuition for how the "masking" process worked here to generate seamless tiles? I sort of grok it but not totally.

reply
NAR8789
13 minutes ago
[-]
I think the core idea in "masking" is to provide adjacent pixel art tiles as part of the input when rendering a new tile from photo reference. So part of the input is literal boundary conditions on the output for the new tile.

Reference image from the article: https://cannoneyed.com/img/projects/isometric-nyc/training_d...

You have to zoom in, but here the inputs on the left are mixed pixel art / photo textures. The outputs on the right are seamless pixel art.

Later on he talks about 2x2 squares of four tiles each as input and having trouble automating input selection to avoid seams. So with his 512x512 tiles, he's actually sending in 1024x1024 inputs. You can avoid seams if every new tile can "see" all its already-generated neighbors.

You get a seam if you generate a new tile next to an old tile but that old tile is not input to the infill agorithm. The new tile can't see that boundary, and the style will probably not match.

I don't think his infill model really cares about tile sizes though, and I doubt it really needs full adjacent tiles to match style. I'm a bit curious why he didn't do something like just generate new tiles one at a time, but expand the input area by 50 pixels on just those sides that have neighbors. Feels like that would sidestep the input selection headache.

reply
cannoneyed
3 minutes ago
[-]
That’s exactly right - the fine tuned Qwen model was able to generate seamless pixels most of the time, but you can find lots of places around the map where it failed.

More interestingly, not even the biggest smartest image models can tell if a seam exists or not (likely due to the way they represent image tokens internally)

reply
blintz
51 minutes ago
[-]
I was most surprised by the fact that it only took 40 examples for a Qwen finetune to match the style and quality of (interactively tuned) Nano Banana. Certainly the end result does not look like the stock output of open-source image generation models.

I wonder if for almost any bulk inference / generation task, it will generally be dramatically cheaper to (use fancy expensive model to generate examples, perhaps interactively with refinements) -> (fine tune smaller open-source model) -> (run bulk task).

reply
cannoneyed
26 minutes ago
[-]
In my experience image models are very "thirsty" and can often learn the overall style of an image from far fewer models. Even Qwen is a HUGE model relatively speaking.

Interestingly enough, the model could NOT learn how to reliably generate trees or water no matter how much data and/or strategies I threw at it...

This to me is the big failure mode of fine-tuning - it's practically impossible to understand what will work well and what won't and why

reply
blintz
3 minutes ago
[-]
I see, yeah, I can see how if it's like 100% matching some parts of the style, but then failing completely on other parts, it's a huge pain to deal with. I wonder if a bigger model could loop here - like, have GPT 5.2 compare the fine-tune output and the Nano Banana output, notice that trees + water are bad, select more examples to fine-tune on, and the retry. Perhaps noticing that the trees and water are missing or bad is a more human judgement, though.
reply
honeycrispy
6 minutes ago
[-]
This is kind of beautiful. Great work! I mean it.
reply
lagniappe
1 hour ago
[-]
Failed to load tiles: NetworkError when attempting to fetch resource.
reply
xnx
1 hour ago
[-]
> This project is far from perfect, but without generative models, it couldn’t exist. There’s simply no way to do this much work on your own,

Maybe, though a guy did physically carve/sculpt the majority of NYC: https://mymodernmet.com/miniature-model-new-york-minninycity...

reply
cannoneyed
25 minutes ago
[-]
This project is awesome, and I love that there are people who are driven enough to make something with so much craft, attention, and duration.

That being said I have three kids (one a newborn) - there's no possible way I could have done this in the before times!

reply
pavel_lishin
1 hour ago
[-]
Huh, the linked instagram account is no longer available :/
reply
ggsp
48 minutes ago
[-]
I still see it at https://www.instagram.com/minninycity04, with two video posts
reply
lionsdan
1 hour ago
[-]
reply
fwip
1 hour ago
[-]
I got a recommended video in Youtube just the other day, where a bunch of users made NYC in Minecraft at a 1:1 scale: https://www.youtube.com/watch?v=ZouSJWXFBPk

Granted, it was a team effort, but that's a lot more laborious than a pixel-art view.

reply
ChrisArchitect
53 minutes ago
[-]
Related:

New York City is being recreated at 1:1 scale inside Minecraft

https://news.ycombinator.com/item?id=46665589

reply
cyrusradfar
1 hour ago
[-]
Insane outcome. Really thoughtful post with insights across the board. Thanks for sharing
reply
sanufar
53 minutes ago
[-]
Seems to have been hugged to death as of now
reply
cannoneyed
24 minutes ago
[-]
Should be back after some help from Claude and some money to Cloudflare
reply
tehlike
1 hour ago
[-]
Some people reported 429 - otherwise known as HN hug of death.

You probably need to adjust how caching is handled with this.

reply
cannoneyed
2 minutes ago
[-]
Yup the adjustment was giving cloudflare 5 bucks :)
reply
jesse__
1 hour ago
[-]
> Slop vs. Art

> If you can push a button and get content, then that content is a commodity. Its value is next to zero.

> Counterintuitively, that’s my biggest reason to be optimistic about AI and creativity. When hard parts become easy, the differentiator becomes love.

Love that. I've been struggling to succinctly put that feeling into words, bravo.

reply
NelsonMinar
16 minutes ago
[-]
I agree this is the interesting part of the project. I was disappointed when I realized this art was AI generated - I love isometric handdrawn art and respect the craft. But after reading the creator's description of their thoughtful use of generative AI, I appreciated their result more.
reply
squigz
1 hour ago
[-]
Hugged to death? :(
reply
cannoneyed
21 minutes ago
[-]
Should be back online now!
reply
RationPhantoms
1 hour ago
[-]
Seems so. Shame! Really wanted to see this.
reply
tptacek
1 hour ago
[-]
You really, really do. It's quite something.
reply
k1rd
1 hour ago
[-]
Really nice.
reply
detectivestory
1 hour ago
[-]
beautiful!
reply