My last post on image editing with NB2 touched on transferring boring black on white text onto surfaces with lifelike application in exciting colors and mediums, but I thought I’d take a second to dive a little deeper into just how I did it exactly for those of you following along at home.

The whole crazy adventure started with a recon droid named Gus (don’t sue me Lucasfilm, I call him a “bot” or “drone” in my books), and a word I designed for Doors to the Stars lingua franca, Trade Pidgin.

Wulan’s name, specifically.

Battered spherical drone hull, half-open to expose a tangle of wiring and a large optical lens assembly, surface scarred with corrosion and impact damage, alien script printed on a white card annotating the lower left corner.
Reference image (@img1).

While I’ve had success with natural language prompts, I seem to get more reliable results for complex operations with JSON (don’t forget to set Thinking Mode to High regardless—Minimal can’t handle the complexity of these prompts). Note that unlike Flux.2 Max, Google hasn’t published an official JSON schema for NB2, so just use semantically logical element names and the model will (usually) figure it out.

Click here to expand for the JSON prompt if you want to try it out yourself.
{
"task": "Create a new image identical to @img2, with the addition of the glyphs shown in @img1 painted onto the surface at the position, scale, and orientation shown.",
"references": {
"_comment": "Two images, one delta. @img2 is the clean base. @img1 is @img2 with the glyphs composited in Photoshop — Vanishing Point filter for perspective, Warp transform for the baseline arc. The spherical distortion is pre-baked into @img1, so the model matches it rather than deriving it from text.",
"base": {
"source": "@img2",
"role": "Base image. Reproduce exactly — do not reframe, do not zoom out, do not alter anything."
},
"glyph_reference": {
"source": "@img1",
"role": "Shows the glyphs to add, at the correct position, scale, and orientation. These are invented fictional characters — do not pattern-match to any known writing system. Reproduce exactly as depicted."
}
},
"edit": {
"_comment": "The edit block is now only about how the glyphs are rendered — not where, not what size, not which way they're warped. All of that is answered by @img1. What the reference can't convey is material quality, color precision, and lighting behavior — so those stay.",

"rendering": {
"_comment": "NB2 defaults to clean printed text. Every clause here pushes against that. The surface conformance note ensures paint reads as applied to real geometry rather than floating above it.",
"value": "Handwritten fluorescent pink paint pen — casual, slightly wobbly, varying stroke weights. Physical paint with texture and thickness conforming to the hull surface features: the seam, the raised bead of epoxy sealant, and the flat plane of the central panel ring. Not a decal, not a blend layer, not a CGI effect."
},
"color": {
"_comment": "NB2 reads 'pink' as magenta or rose. The exclusions and 'hot' are load-bearing.",
"value": "Hot fluorescent pink. Not red, not magenta."
},
"lighting": {
"_comment": "Without this, NB2 lights the glyphs independently of the scene — they float or glow slightly. This anchors the paint strokes to the existing light source and adds the micro-shadow that paint thickness creates on a surface.",
"value": "Strokes lit consistently with the surrounding hull at that location. Not self-illuminated. Subtle shadow from paint thickness on downward and right-facing edges of each stroke."
},
"completeness": {
"_comment": "NB2 sometimes truncates the sequence when glyphs are complex or space feels tight. Flagging partial rendering as a failure condition rather than an acceptable result reduces this.",
"value": "Render the complete uninterrupted sequence. Partial rendering is a failure condition."
}
},
"rendering": {
"_comment": "NB2 drifts toward CGI aesthetics and introduces a purple/violet cast that compounds across edit chains. This block counteracts both. The Hasselblad spec grounds the model in photographic physics.",
"quality": "8K UHD photorealistic",
"style": "Photographic, not CGI or digital art",
"naturalism": "Do not apply effects as overlays. All details ultra high definition photorealistic."
},
"color": {
"_comment": "Helps suppress NB2's pernicious purple/violet cast it adds to everything. 'Flat photographic color' signals raw photograph, not color-graded film still.",
"white_balance": "Neutral white light",
"grading": "Flat photographic color. No color grading applied."
},
"camera": {
"_comment": "f/11 for deep depth of field — this is a detail shot, everything sharp. 80mm keeps perspective natural.",
"spec": "Shot on Hasselblad X2D 100C, 80mm f/11 — deep depth of field, all areas sharp."
}
}
Battered spherical drone hull, half-open to expose a tangle of wiring and a large optical lens assembly, surface scarred with corrosion and impact damage, alien script painted in pink on the lower left of the hull, appearing flat rather than conforming to the surface curve.
Much success!

The geometric pwrsepctive warp isn’t terrible, but it could be better. Sadly, further experimentation didn’t land me better results. I found this odd since I’ve had smashing success adding straight-on views of elements to parts of a spherical object before and it definitely understands 3D geometry, but alien graffiti apparently stymies it somewhat.

So I resorted to old school Warp Transform in Photoshop and fiddled around until I was more satisfied. Then I tweaked the prompt slightly and ran it with this reference image:

{
  "task": "Create a new image from @img2. Add only the glyphs shown in @img1. Make no other changes.",
  "references": {
    "glyph_and_position_reference": {
      "source": "@img1",
      "role": "Glyph accuracy, position, scale, and orientation reference. These are invented fictional characters — do not approximate, do not substitute, do not pattern-match to any known writing system. Reproduce each glyph exactly as depicted, including perspective and warp, at the position, scale, and orientation shown."
    }
  },
  "edit": {
    "glyphs": {
      "rendering": "Handwritten fluorescent pink paint pen — casual, slightly wobbly, varying stroke weights. Physical paint with texture and thickness conforming to the hull surface features: the seam, the raised bead of epoxy sealant, and the flat plane of the central panel ring. Not a decal, not a blend layer, not a CGI effect.",
      "color": "The glyphs appear black in @img1 — disregard that color entirely. Render them in hot fluorescent pink, bright semi-gloss paint pen ink. Not red, not magenta.",
      "geometry": {
        "surface": "The droid is spherical. The glyphs sit just above the equator on the camera-left hemisphere.",
        "lighting": "Strokes lit consistently with the surrounding hull. Not self-illuminated. Subtle shadow from paint thickness on downward and right-facing edges of each stroke.",
        "completeness": "The row is a complete, uninterrupted sequence. Rendering a partial sequence is a failure condition."
      }
    }
  },
  "preservation": "Keep everything else exactly as shown in @img2. Add only the handpainted glyphs.",
  "rendering": {
    "quality": "8K UHD photorealistic",
    "style": "Photographic, not CGI or digital art",
    "detail": "Lifelike material surfaces, physically accurate lighting, photographic depth and texture",
    "naturalism": "Do not apply effects as overlays. All details must be ultra high definition photorealistic."
  },
  "color": {
    "white_balance": "Neutral white light",
    "grading": "Flat photographic color, not cinematic or stylized. No color grading applied."
  },
  "camera": {
    "spec": "Shot on Hasselblad X2D 100C, 80mm f/11, physically accurate optics — deep depth of field, all areas of subject sharp."
  }
}
Reference image (@img1). Prompt in ALT.

Shove that sucker in the oven for sixty seconds and voilà! ‪*\o/*‬

Battered spherical drone hull, half-open to expose a tangle of wiring and a large optical lens assembly, surface scarred with corrosion and impact damage, alien script painted in pink on the lower left of the hull, warped to follow the curve of the surface.
Certainly looks a damn sight better than a blend layer in Photoshop.

I was curious if NB2 can’t perspective warp alien text so awesome because it has never seen it before, or just text in general, so I ran some tests:

But then I tried a physical component and got this…

That perspective is flatter than a surfboard. Where are my curves?!

Which gave me pause, because I’ve successfully slapped objects onto a curved surface before with geometric perspective warp—but it was always on a full sphere, not a detail crop of one quarter. I wondered if maybe the crop of the just the upper left quadrant of the sphere was the culprit…

Anyway, far more experimentation is required, but the great news is when it comes to nailing position and size, 60% of the time my annotated reference image trick works every time.

So I got that going for me.

Oh, and NB2 will make mistakes and do some crazy shit sometimes, because the developers at Google feed it acid, so if you get a wild generation don’t throw up your hands in frustration. Just rerun the prompt and reference images. Sometimes it takes a couple-three attempts.

And a sacrifice. Like an exotic chicken or unblemished turtledove.


Discover more from The Annex

Subscribe to get the latest posts sent to your email.

6 thoughts on “Defacing Droids in Google Nano Banana 2

  1. Ah, I failed on the proper sacrifice. I’ve been giving Claude vegetables instead of fancy birds.

      1. It’s so clear once someone points it out. Not even AI is motivated by carrots and lettuce.

      2. Not just threaten the stick, actually use the stick.

        Words to live by.

Leave a Reply