pelican-persona
Turn the Jetty "Pelly" logo into an on-brand persona mascot for an ICP — same flat bold-outline brand identity, a new wardrobe + accent color — then rebuild it as a clean, scalable SVG (plus a deck PNG and optional transparent variants). Repeatable for any…
6 steps · start to finish.
- 1Step 1
Generate the persona (nano-banana as an EDITOR, not a generator)
▶The single biggest lever: feed the real logo + bold-outline base as
image_inputand ask for the smallest change. Redrawing "from scratch" makes the model over-illustrate (3D, gradients, hallucinated text); editing a reference keeps it on-model.python3 gen.py nano scratch/{persona}-1.png "ref-pelly-up-bold.png,ref-pelly-logo.png" <<'EOF' Image 1 = the LOCKED Jetty "Pelly" style to match: a pelican in the BOLD navy-outline (#0A1230) flat sticker style on a cream (#FAF8F3) background, with the large iconic orange (#FFAA00) gular-pouch beak and simple minimal two-leg feet. Image 2 = the original logo (canonical beak + feet). Match image 1's exact drawing style, outline weight, beak and feet. Now render the {persona} persona: dress Pelly in {wardrobe}; use {accent_hex} as the ONLY accent color; {props}. NO hoodie-if-not-asked, NO code, NO terminal, NO scene clutter. Flat colors only, no shading, no gradients, no text. Full body centered on cream. EOFGenerate 4–6 variations (re-run with small nudges: beak angle, head height, accessory size). nano-banana is stochastic — variety comes from re-running, not from one perfect prompt.
Simpler single-ref route (proven 2026-06-27, Canada Day + Operator-formal + Champion-formal): you don't always need the two-reference
gen.pysetup. Render justpelly-up.svg→ a 1024² white-bg PNG (rsvg-convert -w 1024 -h 1024 -b '#ffffff' pelly-up.svg -o in.png) and feed it as the loneimage_inputtogoogle/nano-banana(POST/v1/models/google/nano-banana/predictions, headerPrefer: wait, body{"input":{"prompt":...,"image_input":["data:image/png;base64,…"],"output_format":"png"}}). It keeps the bill/eye/feet on-model and edits in the wardrobe cleanly. Build the JSON in Python that reads+base64s the file — passing the base64 via argv blows ARG_MAX on ~1MB PNGs. The prompt MUST pin "flat-vector, thick dark navy outlines, solid flat colors, no gradients/shading" or it drifts painterly. Targeted pose tweaks work by feeding the prior output back ("straighten the neck / lift the head slightly, keep EVERYTHING else identical"). nano-banana occasionally returns a failed/empty generation — just re-run. - 2Step 2
Inspect every output (visual gate)
▶Open each and check against the rubric below. Regenerate per-issue, feeding the previous best back in as image 1 so the next round keeps what worked. Beak + feet are the usual failures:
- 3Step 3
Lock the winner
▶cp scratch/{persona}-N.png scratch/{persona}-FINAL.png
- 4Step 4
Rebuild as SVG (palette-snap → trace)
▶Do not trace the raw raster — its anti-aliased, slightly-off colors trace into mud. First snap every pixel to the exact brand palette, then trace. vectorize.py does both, with a smooth pipeline ON by…
- 5Step 5
Optimize + transparent variants
▶The raw vtracer SVG is ~220–350KB of noisy paths. Optimize it — roughly halves the size, tidies the markup, no visible change:
- 6Step 6
Place
▶Design system: copy {persona}.svg (and -transparent.svg) → design-systems/assets/pelicans/ and add a card to design-systems/personas.html (match the existing card markup; accent tag class carries the…