Image Gallery

Every image on this page was produced by glove-image in a single scripted run — no hand-picking, no retries, no touch-ups. The prompt, the pipeline trace and the dollar cost under each one are read back from that image's recorded Recipe, so what you see is what actually happened.

The brief: a fictional Nairobi accessories label shooting an SS26 campaign. Two inventory items, one model, five locations. It is the shape of work a product stylist does by hand, and it is where a single generate_image tool stops being enough.

How one image was made

Start with the mechanism. Nothing below is a diagram someone drew — it is one asset's lineage, rendered. Library definitions on the left feed the pipeline stages in the middle; the last stage hands a finished prompt to the image model on the right.

library — defined oncepipeline — ran in orderfinal prompt$0.0392character · amaraa Kenyan woman in her late 20s, warm darkbrown skin, short natural afro, delicategold hoop earrings, wearing a fitted creamlinen jumpsuit and tan leather sandalscharacter · kiondo-totea handwoven Kenyan kiondo tote bag innatural cream sisal with a band ofburnt-orange and black geometric pattern,tan leather handles and tan leather trim atscene · Kilimani rooftopa Kilimani rooftop terrace in Nairobi atgolden hour, low warm sun, potted palms andbougainvillea, the city skyline andjacaranda canopy soft in the backgroundstyleDirectiveeditorial fashion catalog photography,natural daylight, shallow depth of field,full-body framing, sharp product detailexpand-charactersExpanded 2 character(s).expand-scenesExpanded scene "kilimani-rooftop".style-directivenegative-defaultsfit-to-modelNo negative-prompt slot — folded intothe prompt as an Avoid clause.prompt → modelAmara walking, carrying the kiondotote on her shoulder, looking offcamera Characters (keep thesedescriptions exact): Amara: aKenyan woman in her late 20s, warmdark brown skin, short naturalafro, delicate gold hoop earrings,wearing a fitted cream linenjumpsuit and tan leather sandals

The thing to notice is where the words come from. The agent supplied one line of intent — Amara walking, carrying the kiondo tote on her shoulder, looking off camera — and everything else was spliced in from the library by the pipeline. The character paragraph is copied verbatim, which is the entire mechanism behind consistency: the model is not remembering Amara between turns, it is being told about her identically every single time.

The inventory

A shoot starts from the client's product photos. Here they are generated as stand-ins, but in a real workflow they would be imported with glove_image_import and pinned to a character as its identity reference — which is what keeps the bag the same bag downstream.

library.tstypescript
// A product is a character too — a durable visual identity with
// reference images. Define it once; every later shot re-splices it.
glove_image_character_save({
  name: "kiondo-tote",
  appearance:
    "a handwoven Kenyan kiondo tote bag in natural cream sisal with a band of " +
    "burnt-orange and black geometric pattern, tan leather handles and trim",
  ref_images: [{ asset: "img_...", label: "packshot" }],
})

One model, one product, five locations

The same two characters against five different scenes. Only the scene argument changes between these calls — the model and the bag are never re-described.

shoot.tstypescript
for (const scene of ["kilimani-rooftop", "karura-forest", "maasai-market",
                     "nairobi-street", "nairobi-national-park"]) {
  await glove_image_generate({
    intent: "Amara walking, carrying the kiondo tote on her shoulder, looking off camera",
    characters: ["amara", "kiondo-tote"],
    scene,
  });
}

Look at the gold hoops, the cream linen, the tan sandals, and the burnt-orange band on the bag across all five frames. That is not luck and it is not a seed — it is the same sentences arriving at the model five times.

The matrix collapses

Add a second inventory item and the whole grid comes for free — it is a loop over two lists, not n×m prompt-writing sessions.

And because characters compose, both products can share a frame without either drifting:

Replaying a recipe

Every generated asset stores how it was made. “Same shot, but at dusk” is therefore one call against the original — glove_image_regenerate replays the recorded characters, scene, style and params through the current pipeline, with the tweak appended to the original intent.

revision.tstypescript
glove_image_regenerate({ asset: "img_...", tweak: "at dusk, city lights just coming on" })

The practical consequence is that a client revision costs one line rather than a reconstruction of the original brief — and if a character's definition has been corrected in the meantime, the replay picks that up automatically.

Editing without losing the frame

A colourway change is not a regeneration — it is an edit against the existing image, which records its parent so any frame's ancestry stays recoverable.

One line changes the whole look

Identical intent, identical characters, identical scene. The only difference is the styleDirective in the pipeline — which is how a single catalog gets re-shot for a different channel without rewriting a single prompt.

pipeline.tstypescript
pipeline: [
  expandCharacters(),
  expandScenes(),
  styleDirective("shot on grainy 35mm film, muted kodak portra palette, soft halation"),
]

What the whole page cost

Spend is metered on every model-touching call and attributed by source, so a shoot can be priced instead of estimated.

SourceRequestsTokens in → outCost
generate1822,51424,608$0.7423
edit11,3371,306$0.0391
total1923,85125,914$0.7814

19 images for $0.78. The agent can read the same figures mid-conversation with glove_image_usage, and a host can stream them into billing through the onUsage callback.

The full design is in the image workflows guide, and examples/image-studio in the repository is a runnable agent that produces work like this from plain conversation.