HiAPI
Blog

Tutoriale

Mantenere la coerenza dei personaggi con Nano-Banana su hiapi: un workflow utilizzabile per storyboard e e-commerce

La tecnica della character bible (bibbia del personaggio) mantiene stabile lo stesso volto, lo stesso outfit e la stessa atmosfera in scenari completamente diversi — dimostrato end-to-end su Nano-Banana tramite l'endpoint asincrono /v1/tasks di hiapi, con un budget attuale stimato di $0.41.

Jun 16, 2026
Mantenere la coerenza dei personaggi con Nano-Banana su hiapi: un workflow utilizzabile per storyboard e e-commerce

Riepilogo

Se hai mai provato a generare un personaggio ricorrente — una mascotte per uno storyboard, un testimonial di marca, una modella per il virtual try-on e-commerce — conosci già la modalità di fallimento: ogni rendering è "una persona che più o meno sembra la stessa", e appena metti due frame fianco a fianco la differenza salta all'occhio in modo doloroso. La serie Nano-Banana su hiapi è ottimizzata proprio per questo problema. Questo articolo è il workflow che uso effettivamente:

  • Tre modelli Nano-Banana su hiapi, tutti con il tag di coerenza del personaggio: nano-banana (fisso $0.05), nano-banana-2 (1K / 2K / 4K rispettivamente $0.036 / $0.057 / $0.086) e nano-banana-pro (1K e 2K a $0.057, 4K a $0.10). Tutti e tre sono task asincroni dietro POST /v1/tasks.
  • Il trucco è la character bible, non l'immagine di riferimento. Una stringa descrittiva densa, ripetibile e deterministica, concatenata come prefisso a ogni prompt per scena. Niente image-to-image, niente fine-tuning, niente LoRA. Sopravvive agli aggiornamenti dei modelli ed è estremamente facile da versionare nel controllo del codice sorgente.
  • Due dimostrazioni in questo articolo, entrambe renderizzate in tempo reale tramite hiapi: una sequenza storyboard di quattro immagini con la stessa protagonista ("Mira") in luci e luoghi completamente diversi; e una sequenza e-commerce di tre immagini con la stessa modella ("Aria") che completa un cambio d'abito.
  • Tutti e sette i rendering Nano-Banana costano $0.35. Un rendering aggiuntivo di Mira in fascia Pro per il confronto affiancato costa $0.057. Budget totale stimato per l'articolo: $0.41.

Cosa significa davvero "coerenza del personaggio" nella pratica

La coerenza non è una singola proprietà — è un piccolo insieme di proprietà che devono valere simultaneamente attraverso più rendering perché il risultato sembri la stessa persona:

  1. Geometria del volto. Distanza degli occhi, lunghezza del naso, larghezza della mascella, volume delle guance.
  2. Segni distintivi di pelle e capelli. Tono, lentiggini o nei, colore e consistenza dei capelli.
  3. Abbigliamento e accessori. Quella specifica giacca, quel specifico berretto, quella specifica cintura portautensili.
  4. Atmosfera. Il repertorio di posture ed espressioni — il modo in cui questo personaggio si presenta.

Quando il prompt è sufficientemente denso, i modelli Nano-Banana su hiapi gestiscono bene i punti 1, 2 e 3. Il punto 4 spetta a te — l'autore — inserendo indizi di postura ed espressione nella character bible, non solo l'aspetto fisico.

I tre modelli Nano-Banana su hiapi

Estratto dal catalogo /api/pricing in tempo reale al momento della scrittura:

Modello Fascia di risoluzione Prezzo (USD/immagine) Motivo di scelta
nano-banana Solo proporzioni, nessun parametro di risoluzione Fisso $0.05 Iterazione rapida. Il modello con cui abbozzare il personaggio.
nano-banana-2 1K / 2K / 4K $0.036 / $0.057 / $0.086 Output 4K, capacità molto migliore di rendering di testi piccoli. Con la policy attuale la fascia 2K costa più della 1K.
nano-banana-pro 1K / 2K / 4K $0.057 / $0.057 / $0.10 Dettagli più nitidi, micro-caratteristiche più profonde, la conservazione dell'identità più tenace nei cambi di scena drastici.

Tutti e tre accettano input.prompt più input.aspect_ratio. Le varianti Pro e -2 accettano anche input.resolution (uno tra 1K / 2K / 4K). Il nano-banana a prezzo fisso rifiuta il campo resolution con un 400 — impostalo solo quando hai scelto un modello a fasce.

La mia regola empirica:

  • Itera la bible su nano-banana-2 in fascia 1K — $0.036 è attualmente il più economico dei tre.
  • Renderizza i lotti di produzione su nano-banana-2 in 1K o 2K. A 2K il prezzo è $0.057, uguale a Pro, quindi se ti serve comunque il 2K vale la pena provare Pro.
  • Per gli scatti principali — il frame che finisce in homepage, nel media kit, nel lookbook stampato — usa nano-banana-pro.

La tecnica della character bible

La character bible è un paragrafo denso che concateni come prefisso a ogni prompt di quel personaggio. Deve essere abbastanza specifico da non lasciare al modello spazio per vagare, ma non così prescrittivo da non lasciarti spazio per la scena.

Questa è l'esatta bible che ho scritto per il personaggio storyboard di questo articolo:

MIRA = (
    "Mira, a 28-year-old field engineer of mixed Filipina–Polish "
    "heritage, warm olive skin, narrow oval face, dark almond eyes "
    "with light crow's-feet, thick straight black eyebrows, a small "
    "mole on the right cheek, shoulder-length wavy black hair tied "
    "loosely behind, rust-orange beanie with a small embroidered "
    "antenna patch, dust-faded denim jacket over a graphite grey "
    "t-shirt, dark cargo trousers, scuffed brown leather work boots, "
    "a battered yellow toolbelt, friendly determined expression. "
    "Cinematic photography, 35mm lens look, natural film grain, "
    "neutral colour grade."
)

Questa bible ha sei scelte deliberate:

  1. Darle un nome. "Mira" dà al modello un handle stabile. Anche se il nome non appare nell'immagine, averlo nel prompt sembra ancorare l'identità.
  2. Background misto esplicito, con entrambe le metà nominate. "Una donna" o "asiatica" è vago. "Filippina–polacca" costringe il modello a una fusione facciale concreta.
  3. Occhi, sopracciglia, capelli e pelle descritti individualmente. Non affidarti a "bella" o "naturale". Scrivi la geometria in modo chiaro.
  4. Un segno facciale distintivo. Il neo sulla guancia destra. Anche se occasionalmente si sposta, la presenza di questo segno spinge il modello in uno spazio identitario specifico.
  5. L'abbigliamento è nominato, non descritto in modo vago. "Berretto in maglia color ruggine con una piccola toppa ricamata a forma di antenna" è ripetibile. "Cappello" no.
  6. Un sigillo di stile fotografico alla fine. "Cinematic photography, 35mm lens look, natural film grain, neutral colour grade." Questo mantiene coerente il linguaggio della luce tra scene altrimenti completamente diverse.

Il prompt per scena è quindi solo: bible + separatore + un breve paragrafo di scena. Uso " | Scene: " come separatore. Si legge chiaramente nei log e il modello tratta la seconda parte come una nuova richiesta.

Chiamare l'endpoint dei task asincroni di hiapi

Tutti i modelli immagine su hiapi seguono lo stesso schema asincrono: POST /v1/tasks per creare, GET /v1/tasks/{taskId} per il polling, e in caso di successo leggi data.output[0].url per ottenere l'immagine renderizzata. Gli URL di output sono a breve scadenza (con expireAt), quindi scarica subito i byte nel tuo storage.

import os, json, subprocess, time

API = "https://api.hiapi.ai/v1/tasks"
TOKEN = os.environ["HIAPI_TOKEN"]


def submit(model: str, prompt: str, aspect_ratio: str,
           resolution: str | None = None) -> str:
    payload = {
        "model": model,
        "input": {"prompt": prompt, "aspect_ratio": aspect_ratio},
    }
    # Only nano-banana-pro and nano-banana-2 accept `resolution`.
    # The flat-priced nano-banana returns 400 on the extra field.
    if resolution and model in ("nano-banana-pro", "nano-banana-2"):
        payload["input"]["resolution"] = resolution

    r = subprocess.run(
        ["curl", "-s", "-X", "POST", API,
         "-H", f"Authorization: Bearer {TOKEN}",
         "-H", "Content-Type: application/json",
         "-d", json.dumps(payload)],
        capture_output=True, text=True, timeout=70,
    )
    data = json.loads(r.stdout)
    return data["data"]["taskId"]


def wait(task_id: str, timeout_s: int = 600) -> str:
    deadline = time.time() + timeout_s
    while time.time() < deadline:
        r = subprocess.run(
            ["curl", "-s", f"{API}/{task_id}",
             "-H", f"Authorization: Bearer {TOKEN}"],
            capture_output=True, text=True, timeout=40,
        )
        task = json.loads(r.stdout)["data"]
        if task["status"] == "success":
            return task["output"][0]["url"]
        if task["status"] == "fail":
            raise RuntimeError(task["error"])
        time.sleep(6)
    raise RuntimeError(f"timeout: {task_id}")


def render(model, scene, ratio, bible, resolution=None):
    prompt = f"{bible} | Scene: {scene}"
    return wait(submit(model, prompt, ratio, resolution))

Per Nano-Banana, un intervallo di polling di 6 secondi è un default appropriato — in una buona giornata una singola immagine si completa in circa 10–60 secondi. Un polling più aggressivo spreca solo round-trip.

Demo A — Uno storyboard di quattro inquadrature con lo stesso personaggio

Il senso dello storyboard è tutto qui: la storia è ciò che cambia tra i pannelli — la protagonista è la costante. Genererò un character sheet e due scatti di scena, tutti usando esattamente la stessa bible di Mira.

Passo 1 — Visualizzare la bible

Prima di commettere la bible nel repository, renderizza un character sheet con essa. È il modo più economico per scoprire se la bible è sufficientemente ancorata.

sheet = render(
    "nano-banana", aspect_ratio="3:2", bible=MIRA, scene=(
        "a character model sheet on a clean white studio background, "
        "three views of Mira side by side — three-quarter view facing "
        "left, full profile facing right, three-quarter back view — "
        "same outfit, same hairstyle, same toolbelt, even neutral "
        "studio lighting, no shadows, no text labels."
    ),
)

Qui è successo qualcosa di degno di nota: nonostante la bible specifichi esplicitamente "Cinematic photography, 35mm lens look", il modello ha prodotto un character sheet in cartone animato 3D. Questa è la modalità di fallimento più comune quando si chiede un "model sheet" o "character sheet" — quei token trascinano l'estetica verso i riferimenti dell'industria dell'animazione presenti nel training set. Ci sono due modi per gestirlo:

  • Accettarlo. Il character sheet è un documento di riferimento della bible, non parte del deliverable pubblicato. Abbigliamento, accessori e proporzioni generali sono visibili, che è esattamente ciò di cui hai bisogno.
  • Resistere aggiungendo nel frammento di scena "shot on Kodak Portra 400, full-frame DSLR, no illustration, no toon, no 3D render" — di solito sufficiente per riportarlo al fotorealismo.

Qui ho scelto l'opzione 1, perché i successivi due scatti di scena sono i frame di produzione.

Passo 2 — Mettere la stessa Mira in due ambienti completamente diversi

workshop = render("nano-banana", "3:2", MIRA, scene=(
    "Mira in a cluttered repair workshop, leaning over a wooden "
    "workbench under a single warm hanging bulb, reading a circuit "
    "schematic on tablet, soldering iron beside her, walls lined "
    "with scavenged parts, late evening, focused expression."
))

rooftop = render("nano-banana", "3:2", MIRA, scene=(
    "Mira on a city rooftop in cold overcast morning light, kneeling "
    "to bolt a small antenna mast to a ledge, wind moving her hair, "
    "distant grey buildings, breath barely visible, concentrated "
    "working expression."
))

Le due scene non hanno nulla in comune dal punto di vista ambientale — la calda luce al tungsteno di uno spazio interno angusto contro la fredda luce diurna di un tetto aperto. Ma il berretto color ruggine con la toppa a forma di antenna è identico, la giacca di jeans è identica, la cintura portautensili è identica, e il volto in entrambe le immagini si legge come la stessa giovane donna. È la bible che fa il suo lavoro.

Cosa è cambiato tra le scene (e cosa no)

Proprietà Officina Tetto
Temperatura della luce Tungsteno caldo Cielo nuvoloso freddo
Postura Seduta, china In ginocchio
Sfondo Interno disordinato Tetto urbano aperto
Ora del giorno Notte fonda Prima mattina
Berretto ✅ Stesso color ruggine + toppa ✅ Identico
Giacca di jeans ✅ Stessa lavatura ✅ Identica
Cintura portautensili ✅ Stessa pelle gialla ✅ Identica
Geometria del volto ✅ Identica ✅ Identica
Neo Presente sulla guancia destra Presente (leggermente più tenue)

L'ultima riga è la più importante. In due condizioni di luce completamente diverse, quel piccolo neo resta sulla guancia destra. È esattamente il segnale che vuoi.

Demo B — Una sequenza e-commerce di tre scatti con la stessa modella

L'e-commerce è la più difficile delle due dimostrazioni di questo articolo. La modella deve apparire letteralmente identica attraverso più angolazioni e cambi d'abito, perché i clienti del brand metteranno mentalmente a confronto A/B queste foto nella pagina di dettaglio prodotto. Anche una piccola deriva rompe l'illusione.

Questa è la bible di Aria:

ARIA = (
    "Aria, a 26-year-old fashion catalogue model of Korean descent, "
    "soft warm undertone skin, oval face with slightly defined "
    "cheekbones, thin straight black eyebrows, dark brown almond "
    "eyes, small natural lips with a faint warm pink, a single "
    "beauty mark just below the left eye, centre-parted glossy "
    "black hair falling straight to mid-back, ears pierced with a "
    "single small gold stud each side, no other jewellery, calm "
    "neutral expression, even soft studio lighting from front-left, "
    "clean light grey seamless paper backdrop, full-body framing, "
    "50mm portrait lens look, neutral colour balance, slight matte "
    "film finish."
)

Questa bible fa tre cose che la bible di Mira non fa:

  • Blocca luce e sfondo. Una modella da catalogo deve vivere su uno sfondo grigio pulito e con una luce da studio piatta frontale-sinistra. Scrivendo entrambe nella bible, ogni rendering parte da lì.
  • Specifica l'inquadratura. "Full-body framing, 50mm portrait lens look" si riproduce coerentemente in tutte e tre le immagini.
  • Blocca lo spazio negativo. "Nessun altro gioiello" è una breve frase che impedisce a Nano-Banana di improvvisare collane o orologi in metà dei rendering.

Passo 1 — Scatto principale frontale

frontal = render("nano-banana", "3:4", ARIA, scene=(
    "full-body straight-on frontal e-commerce shot, Aria standing "
    "relaxed with arms at sides, wearing a structured rust-olive "
    "wool blazer (single-breasted, two buttons, notch lapel, no "
    "pattern) over a plain ivory crew-neck t-shirt and straight-leg "
    "dark indigo denim jeans, simple white leather sneakers, clean "
    "look-book composition."
))

Una nota onesta sul rendering della giacca: il prompt chiedeva rust-olive (ruggine olivastro), e Nano-Banana l'ha interpretato come un caldo marrone tabacco. I nomi di colore specifici in stile Pantone ("rust-olive", "burnt sienna", "ultramarine") non sono riproducibili in modo affidabile nella generazione. Se ti serve un colore fedele al brand, renderizza prima l'immagine base, poi esegui un image-to-image su un modello specializzato nel colore — oppure acquista un'immagine campione con colore preciso solo per lo scatto principale usando nano-banana-pro e accetta il prezzo.

Passo 2 — Angolazione a tre quarti, stesso abbigliamento

side = render("nano-banana", "3:4", ARIA, scene=(
    "full-body three-quarter angle from her right, Aria standing "
    "relaxed, wearing the same structured rust-olive wool blazer "
    "(single-breasted, two buttons, notch lapel, no pattern) over "
    "a plain ivory crew-neck t-shirt and straight-leg dark indigo "
    "denim jeans, simple white leather sneakers, hands by her "
    "sides, look-book lighting."
))

Questa è esattamente la parte in cui le dimostrazioni di coerenza del personaggio falliscono sempre: la stessa persona, ruotata. Il volto deve restare coerente, l'acconciatura deve restare coerente, e anche il modo in cui l'abito cade su di lei deve restare coerente. Viste fianco a fianco, le due foto si leggono come lo stesso servizio fotografico — la stessa modella, lo stesso call sheet, la stessa sedia del trucco. È il risultato che ti serve.

Passo 3 — Stessa modella, abbigliamento completamente diverso

swap = render("nano-banana", "3:4", ARIA, scene=(
    "full-body straight-on frontal e-commerce shot, Aria standing "
    "relaxed with arms at sides, now wearing an oversized "
    "camel-coloured double-breasted wool overcoat (mid-thigh length, "
    "wide lapels, large mother-of-pearl buttons) over a black "
    "turtleneck and straight-leg charcoal trousers, black ankle "
    "boots, look-book lighting."
))

Questa è la dimostrazione che vale a Nano-Banana il tag di coerenza del personaggio. Stesso volto, stesso neo sotto l'occhio sinistro, stessa lunghezza e riga dei capelli, stessi orecchini a perno in oro, stesso repertorio di posture — cambiano solo l'abito e la silhouette. Se stai costruendo un flusso di virtual try-on, un generatore automatico di lookbook o uno shooting PDP in produzione di massa, è esattamente la trasformazione che eseguirai migliaia di volte.

Quando usare Nano-Banana-Pro

Ho renderizzato un'immagine extra di Mira su nano-banana-pro in fascia 1K, stima attuale: $0.057, solo per ancorare il compromesso costo-qualità:

Stessa bible di Mira. Stesso separatore " | Scene: ". È cambiato solo il nome del modello. Paghi $0.007 in più per immagine (i $0.057 di Pro contro i $0.05 di Nano-Banana fisso) e in pratica ottieni:

  • Micro-dettagli più nitidi — singoli capelli, trama del denim, la toppa ricamata sul berretto.
  • Migliore conservazione dei marcatori identitari meno evidenti — la forma degli occhi e l'arco delle sopracciglia si leggono più come il resto della serie di Mira.
  • Migliore rendering di testi piccoli. Se la tua scena richiede un'insegna, un'etichetta o un logo leggibile a dimensione miniatura, Pro è quello che vuoi.

Per scenari ad alto volume (come centinaia di frame al giorno di storyboard o generazione procedurale di cataloghi), la fascia 1K di nano-banana-2 a $0.036 è il default appropriato. Pro costa $0.057 sia in 1K che in 2K, uguale al 2K di nano-banana-2, quindi usalo dove ti serve il 2K o i frame principali — copertine, immagini principali del lookbook, one-pager di marketing.

Budget attuale stimato per questo articolo

Rendering Modello Fascia Stima attuale
Copertina (Mira alla centrale solare) Nano-Banana 16:9 fisso $0.05
Character sheet Nano-Banana 3:2 fisso $0.05
Storyboard 1 —— Officina Nano-Banana 3:2 fisso $0.05
Storyboard 2 —— Tetto Nano-Banana 3:2 fisso $0.05
E-commerce —— Frontale Nano-Banana 3:4 fisso $0.05
E-commerce —— Laterale Nano-Banana 3:4 fisso $0.05
E-commerce —— Cambio d'abito Nano-Banana 3:4 fisso $0.05
Immagine di confronto Pro Nano-Banana-Pro 3:2, 1K $0.057
Totale $0.41

Otto immagini, un Bearer token, un endpoint HTTP, nessun SDK da assemblare, nessun account upstream da gestire — è a questo che serve hiapi.

Regole pratiche a cui torno sempre

  1. Scrivi la bible una volta sola, tienila nel controllo del codice sorgente, in un modulo di costanti. Trattala come qualsiasi altra stringa di configurazione. Versionala.
  2. Un nome per ogni bible. "Mira", "Aria". Anche se il modello non mostra mai il nome, averlo nel prompt è un handle stabile.
  3. Scegli tre marcatori identitari e affidati pesantemente a essi. Per Mira sono il berretto con la toppa a forma di antenna, la cintura portautensili gialla e quel neo. Per Aria sono il neo, i capelli con riga centrale e gli orecchini a perno in oro. Se questi tre sopravvivono in un rendering, il personaggio è sopravvissuto.
  4. Non fidarti dei nomi di colore in stile Pantone. "Rust-olive" è derivato verso il marrone tabacco. Se il colore conta, renderizza prima e correggi a valle, oppure usa Pro e scatta deliberatamente immagini campione del brand.
  5. Metti il sigillo di stile fotografico alla fine della bible. "Cinematic 35mm" o "50mm portrait lens, slight matte film finish" — metterlo per ultimo gli permette di sopravvivere al troncamento dei prompt lunghi.
  6. Renderizza prima il character sheet e aspettati che derivi verso il cartone animato. È normale. Il character sheet è per te, non per la pubblicazione. Per gli scatti di produzione usa la stessa bible più un frammento di prompt in scena per mantenere il fotorealismo.
  7. Usa nano-banana-2 in 1K ($0.036) per bozze e produzione di massa, e nano-banana-pro ($0.057 sia in 1K che in 2K) per gli scatti principali e tutto ciò che richiede 2K. Costruisci un piccolo scheduler lato client che selezioni il modello dal parametro quality e inoltri la risoluzione corretta.
  8. Il nano-banana a prezzo fisso rifiuta resolution. Filtra quel campo lato client in base al nome del modello. Questo è un 400 imparato a proprie spese.

Questo è il workflow. Prendi una bible, scegli tre marcatori identitari, costruisci frammenti di scena, avvia tramite POST /v1/tasks, e la stessa persona uscirà dall'altra parte di ogni rendering.

Preferisci l'approccio con immagine di riferimento a una bible testuale? Ideogram 3.0 Character blocca invece il personaggio da un'immagine di riferimento caricata, e la sua guida ai prompt mostra le stesse tecniche su mascotte, pagine di libri di fiabe e modifiche con maschera.

Inizia a creare con artefatti IA persistenti

Ottieni la tua chiave API e chiama modelli di immagini, video e audio tramite un'unica API basata sui task.

Leggi la documentazione API