Character turnaround sheet on a 4:1 strip, sliced into references

One 4:1 Nano Banana 2.1 image on Sume as a four-view character sheet at $0.15 (2K), sliced into four squares and fed back as input_references. Steps and cost.

4 min readSume
All posts

A 4:1 image fits four square views side by side (front, three-quarter, side, back), which makes a cheap character sheet: $0.15 at 2K on Sume against $0.60 for four 2K squares. Slice it into four squares and pass them as input_references on later calls so each new scene starts from the same character.

Steps and cost

Character sheet then three scenes, Nano Banana 2.1 at 2K (read 2026-10-09)
StepImagesPrice eachTotal
4:1 sheet1$0.15$0.15
Scenes using the sliced references3$0.15$0.45
All steps4$0.60

Step 1: the sheet

Ask for four evenly spaced views on a plain background so the slice lines fall on empty space.

import os, requests

body = {
    "model": "google/nano-banana-2.1",
    "prompt": "Character sheet, one cartoon fox in a red scarf, four views side by side: front, three-quarter, side, back, plain grey background",
    "aspect_ratio": "4:1",
    "resolution": "2K",
}
r = requests.post(
    "https://api.sume.com/v1/images",
    headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"},
    json=body, timeout=60,
)
print(r.status_code)  # 200 = image body, 202 = job envelope
if r.status_code == 200:
    out = r.json()
    print(out["data"][0]["url"], out["usage"]["cost"])

Step 2: slice and reuse

Slice at width divided by four. Host the slices at public HTTPS URLs, then pass one or more as references.

from PIL import Image
img = Image.open("sheet.png")
w, h = img.size
q = w // 4
for i in range(4):
    img.crop((i * q, 0, (i + 1) * q, h)).save(f"fox-{i + 1}.png")
# upload fox-*.png somewhere public (HTTPS), then:
refs = [{"type": "image_url", "image_url": {"url": u}} for u in [
    "https://example.com/fox-1.png", "https://example.com/fox-3.png"]]

Gotchas

  • Google lists multi-turn character consistency as an improvement in Nano Banana 2.1 (Gemini API changelog, read 2026-10-09). Sume calls are independent requests, so the sliced references carry the character, not a chat history.
  • Read the input_references range from the model's descriptor before you send many.
  • Inspect the sheet: views can drift between panels, and a drifted panel is a bad reference.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume