The wall every coding agent hits is visual. Claude Code will scaffold your site, write the CSS, wire the routes — then it needs a hero image, and the run is over. You go hunting for stock photos, the gray placeholder rectangle ships, everyone pretends not to see it.
We removed the wall and gave it one prompt:
Make me a website for this field recorder. I want it to feel really premium.
That sentence is the entire creative brief. No art direction, no model names, no list of required images. What follows is the honest build log — the agent's actual sequence, the contact sheet with per-image timing and cost, and the two things that wobbled.
Total inference for every image on the site: $0.48.

The setup (60 seconds of it)
Claude Code was connected to NinjaChat's MCP server — one hosted URL exposing image and video generation as tools (14 models: Nano Banana Pro, Seedream, GPT Image 2, Veo 3.1, Kling, and so on). The entire install is one command:
claude mcp add --transport http ninjachat https://www.ninjachat.ai/api/mcp \
--header "Authorization: Bearer nj_sk_YOUR_KEY"
The product is TAKT, a four-mic field recorder — fictional, invented for this test, and that disclosure matters: no photo of this device exists anywhere. Every pixel you'll see was generated inside the session.
What the agent did, in order

1. It designed the object before the page. Its first generation wasn't a website asset — it was a product decision: a slim graphite slab, perforated grille, one signal-orange record button, standing on slate in a single raking light. "Premium field recorder" turned into a specific, photographable object.
2. It made that first image the law. Every subsequent generation passed the master shot back as a reference — same device, new scene. This is the difference between six AI images and product photography of one product, and nobody told it to do this. It's the closest thing to taste we've watched an agent perform.
3. It generated exactly what the layout needed — no more. Writing the feature section created three needs (a macro, a context shot, a human-scale shot), so it generated three images: the grille macro, the desk scene, the in-hand shot. Writing the hero band created the need for a wide banner, so it generated one. Six images total, each one pulled into existence by a <section> it was about to write.
4. It wrote the site around its own files. Dark industrial layout, spec table, pre-order CTA — real HTML referencing takt-hero.png and assets/features/ by the filenames the server returned. No human touched an image tool at any point.
The contact sheet
Everything the agent shot, with real generation times and flat prices:

| # | File | Model | Time | Price |
|---|---|---|---|---|
| 01 | takt-hero.png (the master) | Nano Banana Pro | 19s | $0.08 |
| 02 | grille-macro.png | Nano Banana Pro · ref 01 | 28s | $0.08 |
| 03 | desk-scene.png | Nano Banana Pro · ref 01 | 23s | $0.08 |
| 04 | in-hand.png | Nano Banana Pro · ref 01 | 22s | $0.08 |
| 05 | wide-banner.png | Nano Banana Pro · ref 01 | 39s | $0.08 |
| 06 | alt master (exploration) | Nano Banana Pro | 20s | $0.08 |
| — | site/index.html | written, not generated | — | $0.00 |
About four minutes of generation wall-clock inside a roughly fifteen-minute build. The flat pricing matters more than it looks: the agent could afford to explore (exposure 06 was its own alternate take it chose not to use) because a wasted frame costs eight cents, not a re-prompt of your patience.
The result
A launch-ready dark-industrial product site — hero, feature photography, spec band, mobile layout — with the same fictional device in every frame:

What wobbled (the part most build logs delete)
The aluminum drifted. In the desk scene the recorder reads a shade lighter and warmer than the master — reference conditioning holds the design, not the exact color grade under new lighting. On a real project you'd say "match the finish of the master exactly" and spend another $0.08. We left it, because this is a log, not an ad.
The e-ink display invented its own contents. The master shows "REC 00:42" — plausible, but the agent never specified it; the model improvised UI. Charming here; on a real product you'd want the actual interface, which is what the edit tool is for.
Neither wobble needed a human with Photoshop. Both fixes are one sentence and cents — which is the actual finding: failure recovery is inside the same loop as generation.
Reproduce it
claude mcp addwith the command above (key here — a phone-verified account gets a $0.50 starter balance).- Give it a product and a mood, nothing else: "Make me a website for this [thing]. I want it to feel [adjective]."
- If it stalls on visuals, nudge once: "generate the images you need with ninjachat."
- Watch the guardrails so you don't have to: flat prices quoted per run, automatic refunds on failure, and a monthly spending limit the agent cannot cross.
The same workflow runs in Cursor's agent panel — walkthrough in how to generate images in Cursor — and if you're deciding what belongs in an agent's toolbox at all, start with the 8 MCP servers actually worth giving Cursor.
The compressed pitch: coding agents already finish the code. Connected to a creative engine, they finish the job.
Give your agent the same capability: ninjachat.ai/mcp/claude-code →