Product stills¶
studio stills my-shop turns one product photo into a reviewed set of stills: pack shots, lifestyle scenes and
close details. It explores several art directions, makes candidates across seeds and backends, scores them, and
keeps a varied shortlist for each shot (design).
# docs: no-validate (a project file)
name: Example Shop
brief: An autumn range of glazed planters.
outputs:
stills:
photo: inputs/product.png # a cut-out PNG, or a photo on a plain backdrop
describe: a glazed green planter # what it is, for the prompts
shots: [packshot, lifestyle, detail]
directions: 4 # art directions to explore
candidates: 2 # seeds per direction and shot
keep: 3 # shortlist size per shot
size: [1600, 1600]
A site.yaml project gets stills after studio migrate my-shop --write (the project file).
How a still is made¶
- Directions. A text backend writes divergent art directions: setting, light, palette and mood. With none
(see
studio models), a seeded local composer picks them, and the same seed gives the same set. - Backdrop. A pack shot stands on a seamless sweep in the direction's palette. A lifestyle scene is painted by an image backend; with none, it is drawn from the palette, so the flow runs on any laptop. A detail is the product close and cropped over a softened scene.
- The product is cut out of the photo (rembg when the
mlextra is installed, else a plain-backdrop key) and composited with a contact shadow. Its pixels are never redrawn. - Blending. Where an edit backend can run, one pass matches the scene's light. If it changes the product by
more than
fidelity, the composite is kept instead. - Critics score each candidate: fidelity (how little the product changed), framing (the right share of the frame, nothing cut off) and contrast (the product stands apart). A novelty check keeps near-duplicates off the shortlist.
Reviewing¶
In the Studio app (studio ui), a project with outputs.stills has a Stills tab: the same view, with More like this, Something different, Compare (two side by side) and Pick on each lead still. Outside the app, open stills/board.html. Each shot shows its best candidate large, the rest of its shortlist beside it, and every
other candidate below, best first. Click any candidate to look at it.
| Command | What it does |
|---|---|
studio stills my-shop |
The first set, or fill in what is missing (the directions are kept) |
studio stills my-shop --more <id> |
More seeds in that candidate's direction and shot |
studio stills my-shop --different |
New directions, unlike the ones there, across every shot |
studio stills my-shop --pick <id> |
Mark that candidate as its shot's final |
Every candidate's record (direction, backend, model, prompt, seed and scores) is kept in stills/stills.json, so any
one can be made again. The MCP tool make_stills does the same as the command.
Ads¶
studio ads my-shop makes placement-sized ads from the stills: each shot's pick, or its best if none is picked. The
product is kept whole in every size; where a size needs more backdrop than the still has, its edges are carried
outward and softened. The headline and call to action sit on a band in the brand's accent colour.
# docs: no-validate (a project file)
outputs:
ads:
sizes: [1x1, 4x5, 9x16] # also 16x9 and 1.91x1
headline: Made for slow mornings
cta: Shop the range
shots: [lifestyle, packshot]
width: 1080
Files land in ads/, listed in ads/ads.json. The MCP tool is make_ads.
Listing copy¶
studio listing my-shop writes a title, bullet points and a description to listing/listing.md (and .json).
A text backend writes it from the brief and describe, told never to invent specifications or claims. With no text
backend, a draft is filled from what the project says, with places marked for the rest.
The MCP tool is write_listing.
Video¶
studio video my-shop makes a short product video from the stills: each shot's pick and shortlist, a slow push-in
on each, cross dissolves, and an end card with the ads' headline and call to action. A speech backend reads the
voiceover (ElevenLabs, with ELEVENLABS_API_KEY set); with none, the video is silent. A music file can sit under it.
# docs: no-validate (a project file)
outputs:
video:
seconds: 15
aspect: 9x16
shots: [lifestyle, detail, packshot]
voiceover: listing # the listing's description; or the words themselves; empty for none
music: inputs/bed.mp3 # optional; you need the right to use it
Written to video/video-<aspect>.mp4 with video/video.json. The MCP tool is make_video.
Page layouts¶
studio layouts my-shop writes several product pages from the project's own material: the picked stills and
shortlist, the listing copy, and the ads' headline and call to action. Each layout is arranged differently. A text
backend writes them when one can run; otherwise a local composer arranges the same material in distinct orders.
Every layout is checked against the site spec, and only blocks that build without a GPU are used (hero, intro,
features, gallery, faq, cta).
layouts/board.html shows each layout as a wireframe page with its stills. studio layouts my-shop --pick l2 writes
that layout's sections into outputs.site, keeping the site's other settings and saving the old sections in
layouts/site-before-pick.yaml; then studio build my-shop. The MCP tool is make_layouts.