← Files FrameoARCHIVED FILE
skills/product-photoshoot/SKILL.md
4.48 KB · Oct 10, 2026 · 06:03 UTC
---
name: product-photoshoot
description: "Packshots on several backgrounds or scenes, lifestyle shots, hero banners and carousel sets from a few product photos."
---
Needs: 2–5 product photos on any background; the brand's look in a sentence; which set they need
Credits: about 180 for a 10-image set (images ~18 each), plus a retake allowance of 15%
Time: 10–20 minutes
## When
E-commerce and ads: a clean packshot set, lifestyle scenes, a hero banner, a carousel, a
restyle of an old shot. Not for video (`ugc-product-video`) or a moving spin
(`product-spin`).
## Ask first
1. **Photos** — 2–5, through `show_upload` from the user's device or `import_media_url` from web links (images attached to the chat do not reach Frameo, and `create_upload_url` is for clients that send the file themselves); the more angles the better.
2. **Set** — packshots / lifestyle / hero / carousel / restyle, and how many.
3. **Look** — the brand in a sentence, a reference image if they have one, aspect ratio.
Say the rough cost in the same turn as the questions; the user's yes comes with the plan (Steps, **The plan first.**).
## Steps
**Before any paid step.** The project: `list_projects` (or `create_project`) gives the `project_id`
and, when the project has several modules, the `module_id`; every call below that takes a project —
`estimate_cost` included — gets that same pair; without it those tools answer `project_needed`. The
quote: one `estimate_cost(items=[…])` prices a stage in one call, with the same project, model,
size and number of `image_urls` or `reference_image_urls` (`reference_count`) as each generate call, and returns a `quote_id` per item plus the total. Each generate call
then passes its own item's `quote_id` and `confirmed_by_user=true`. A quote is single-use and lasts
15 minutes, so a long plan is priced stage by stage, right before each stage runs; a stage that
comes to more than the user approved is asked about again first. Generate calls return
`generation_ids`; `wait_task` returns the links, and `show_generations` shows each stage's running
and finished work in one card where the chat app displays Frameo cards: all the stage's ids at
once, before its first `wait_task`, and the finished result with `final: true`.
**The plan first.** Before the first paid call, the plan goes to the user in the chat as plain
text: what will be made, in order, one line per generation (for a script, the shot list; for a
set, each shot), with each line's credits and the total. The credits come from
`estimate_cost(items=[…])`, up to 10 items a call, so a long plan takes several calls; those
quotes may expire unused, since each stage is quoted again right before it runs. Nothing is
generated until the user says yes. The user can drop or change lines; a changed line is priced
again.
**Review (on by default).** Every image is checked before the set is handed over, following
`review-shots`: its checklist and steps come from `get_skill("review-shots")`, loaded before
step 1, and the checks here are its steps 0, 1 and 4. Each preview is compared with the product
photos — the label, its lettering, the shape and the colour — and with the shot's pattern,
including whole hands in an in-hand shot; a failed shot is retaken once. The checks are free; a
retake is paid like the shot it replaces, from the retake allowance the plan carries as its own
line for the user to approve. The user can turn the review off.
**1. One test (~18).** `generate_image` with `image_urls=[product photos…]` (the cleanest first
— it is the base) and a prompt for the first shot in the set; `image_model` from
`list_models(kind="image")` if the user names one. `wait_task`, show it; fix the product's
fidelity before the batch (more photos, a tighter prompt).
**2. The set (~18 each).** One `generate_image` per shot, each with its own quote, same
`image_urls`, prompts from the recipe patterns (`hero-shot`, `flatlay`, `in-hand`, `on-desk`, `minimalist-white`,
`luxury`, `kitchen-scene`, `angles-set`) — `get_skill` on any of them for the pattern. Then review the set.
**3. Size.** There is no image upscale; for print or large use, ask for `image_resolution`
at generation (and `image_model` from `list_models(kind="image")`).
**4. Deliver.** The links, the review note per shot, and `open_in_frameo` — every image is on
the canvas in one row.
## Done
The image set in the Frameo project.
`open_in_frameo` on the result opens the project in the Frameo app, where every take sits on
the canvas, ready for retakes and edits.
## Files
None.
SHA-256: 469d463baf3144e343a1d5737b1953be6cef2a3f4fbe302de7b13a68684d019a