Update to Frameo.AI
Snapshot Oct 24, 2026 · 13:00 UTC · version 1.2.5
Collection source: downloaded plugin package.
Instructions updated for product-photoshoot
Full description — Now says: Product stills from a few photos or a description: packshots, lifestyle scenes, close-ups with hands, hero banners, carousels, ad packs, on-model shots,...
Observed in instructions or declared skills. Runtime behavior has not been tested.
Up to 10 plugins free · no card required.
All fields and original values.
Full description
Oct 8, 2026 · 18:02 UTC
Packshots on several backgrounds or scenes, lifestyle shots, hero banners and carousel sets from a few product photos.
Oct 24, 2026 · 13:00 UTC
Product stills from a few photos or a description: packshots, lifestyle scenes, close-ups with hands, hero banners, carousels, ad packs, on-model shots, conceptual stills and restyles. Use for e-commerce listings and ad stills; for video...
Skill instructions
Oct 8, 2026 · 18:02 UTC
"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 ...
Oct 24, 2026 · 13:00 UTC
"Product stills from a few photos or a description: packshots, lifestyle scenes, close-ups with hands, hero banners, carousels, ad packs, on-model shots, conceptual stills and restyles. Use for e-commerce listings and ad stills; for vide...
Supporting files
Oct 8, 2026 · 18:02 UTC
[{"relative_path":"agents/openai.yaml","size_in_bytes":372},{"relative_path":"assets/icon.svg","size_in_bytes":345}]
Oct 24, 2026 · 13:00 UTC
[{"relative_path":"agents/openai.yaml","size_in_bytes":375},{"relative_path":"assets/icon.svg","size_in_bytes":345},{"relative_path":"references/angles.md","size_in_bytes":1743},{"relative_path":"references/modes.md","size_in_bytes":4032...
Compare saved observations
Download comparison JSONSKILL.md text changes
− removed · + added
--- before +++ after @@ -1,31 +1,42 @@ --- name: product-photoshoot -description: "Packshots on several backgrounds or scenes, lifestyle shots, hero banners and carousel sets from a few product photos." +description: "Product stills from a few photos or a description: packshots, lifestyle scenes, close-ups with hands, hero banners, carousels, ad packs, on-model shots, conceptual stills and restyles. Use for e-commerce listings and ad stills; for video, use `ugc-video` or a camera-move preset." --- -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`). +E-commerce and ads: catalog packshots, lifestyle scenes, close-ups with hands, hero banners, +carousels, ad packs, a generated model wearing or using the product, conceptual stills, and a +restyle of an old shot. Not for video (`get_skill("ugc-video")` in its product format, or a camera move: +`list_presets(category="camera-movements")`, then `get_presets` for the chosen move, such as +`get_presets(["product-spin"])` or `get_presets(["topdown-dive"])`, with `generate_video` from a +start frame made as the preset's notes say), and not for a video cover +(`thumbnail-set`). ## 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.**). +1. **The product** — 2–5 photos (`show_upload` for files on the user's device, `import_media_url` for a web link; images attached to the chat reach Frameo only through `import_attachments`, in apps that pass them such as ChatGPT, and `create_upload_url` is for clients that send the file themselves); the more angles the better. With no photos, a + description precise enough to draw from: category, shape, material, colour, label text and + one distinguishing feature. +2. **Mode and count** — packshot, lifestyle, close-up with a person, hero banner, carousel, ad + pack, on-model, conceptual or restyle, and how many (3 by default). Close-up with a person, + on-model and restyle need a photo. +3. **Look** — the brand in a sentence, its colours, a reference image if they have one, and the + aspect ratio (1:1 by default). + +Ask everything in one turn, and say the rough cost in the same turn. When the user says to go +ahead without questions and has given photos or a usable description, ask nothing: 3 variants, +a clean studio packshot unless the brief points to another mode, 1:1, colours taken from the +product. Say that choice in one sentence; the plan with its credits still needs the user's yes +(Steps, **The plan first.**). Lenses, lighting terms and prompt wording are the skill's choices; +don't ask the user about them. ## 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 +`estimate_cost` included — gets that same pair; without the project those tools answer `project_needed`, and without the +module of a project that has several, `module_needed`, which lists its modules. 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 @@ -33,7 +44,7 @@ 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`. +once, before its first `wait_task`; the card updates itself as the work finishes, so the same ids are not shown again. **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 @@ -46,32 +57,57 @@ **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. +photos — the label, its lettering, the shape and the colour — and with the shot's mode, including +whole hands in a close-up; the label's lettering is read with `view_image(url, resolution="high")`, +since a preview is too small to catch a wrong letter. A carousel or an ad pack is first checked as +a set (the same palette, light and surface on every slide), and only a slide that breaks the set +is fixed. A failed shot gets one refinement (step 3). The checks are free; a refinement is paid +like the shot it fixes, from the retake allowance the plan carries as its own line for the user +to approve. The user can turn the review off. + +**0. Mode and prompts (free).** Read the chosen mode in +`get_skill_file(skill_id="product-photoshoot", path="references/modes.md")`: what it needs, its aspect ratio and its rules. Build every prompt +from `get_skill_file(skill_id="product-photoshoot", path="references/prompt-template.md")`: the named sections in order, the product-fidelity +rules, and one `[AVOID]` block put together from +`get_skill_file(skill_id="product-photoshoot", path="references/negative-prompts.md")`. Each variant differs in composition, scene or light, +not by a word. A packshot or conceptual scene can start from a product-shot preset +(`list_presets(category="product-shots")`, then `get_presets` for the chosen ones, their `{…}` +slots filled in); the fidelity rules and the `[AVOID]` block still go on the end. Exact words on +an image (a headline, a price the user gave) are added afterwards with `run_ffmpeg` and an `.ass` +sidecar, or in the editor, never generated. **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. +— it is the base) and the first shot's prompt; `image_model` from `list_models(kind="image")` if +the user names one. `wait_task`, show it, and fix the product's fidelity before the batch (more +photos, a tighter `[SUBJECT]`). With a description and no photos, this first image becomes the +product: every later shot passes its link as `image_urls`, so the set shows one product, and only +the scene, light and camera change. + +**2. The set (~18 each).** One `generate_image` per shot, each with its own quote, the same +`image_urls` and the same aspect ratio. A turnaround of front, three-quarter, side and back +follows `get_skill_file(skill_id="product-photoshoot", path="references/angles.md")`. Then review the set. + +**3. Refine (only for a defect seen or a change the user names).** Follow +`get_skill_file(skill_id="product-photoshoot", path="references/refinement.md")`: fix the single weakest issue, with the latest result of that +same shot as the only `image_urls`, keeping its composition, subject and aspect ratio. At most two +refinements per shot, the review's included; each is quoted and charged like a shot. A vague +"I don't like it" gets one question about what to change, never a guessed fix. -**3. Size.** There is no image upscale; for print or large use, ask for `image_resolution` +**4. 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. +**5. Deliver.** The links, the review note per shot, one sentence naming the mode, the ratio and +any fix made, and `open_in_frameo` — every image is saved in the project. ## 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. +`open_in_frameo` on the result opens the project in the Frameo app, where every take is ready for retakes and edits. ## Files -None. +- `references/modes.md` — the nine modes: what each needs, its aspect ratio and its rules. +- `references/prompt-template.md` — the named prompt sections and the product-fidelity rules. +- `references/negative-prompts.md` — the `[AVOID]` blocks and when each applies. +- `references/refinement.md` — fixing one weak point in a finished shot, with the wording per issue. +- `references/angles.md` — a four-angle turnaround (front, three-quarter, side, back), each built on the front image.
Full technical diff · 3 changed fields
changed /description
"Packshots on several backgrounds or scenes, lifestyle shots, hero banners and carousel sets from a few product photos."
"Product stills from a few photos or a description: packshots, lifestyle scenes, close-ups with hands, hero banners, carousels, ad packs, on-model shots, conceptual stills and restyles. Use for e-commerce listings and ad stills; for video, use `ugc-video` or a camera-move preset."
changed /included_files
[
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 372
},
{
"relative_path": "assets/icon.svg",
"size_in_bytes": 345
}
][
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 375
},
{
"relative_path": "assets/icon.svg",
"size_in_bytes": 345
},
{
"relative_path": "references/angles.md",
"size_in_bytes": 1743
},
{
"relative_path": "references/modes.md",
"size_in_bytes": 4032
},
{
"relative_path": "references/negative-prompts.md",
"size_in_bytes": 1883
},
{
"relative_path": "references/prompt-template.md",
"size_in_bytes": 2922
},
{
"relative_path": "references/refinement.md",
"size_in_bytes": 2006
}
]changed /skill_md_contents
"---\nname: product-photoshoot\ndescription: \"Packshots on several backgrounds or scenes, lifestyle shots, hero banners and carousel sets from a few product photos.\"\n---\n\nNeeds: 2–5 product photos on any background; the brand's look in a sentence; which set they need\nCredits: about 180 for a 10-image set (images ~18 each), plus a retake allowance of 15%\nTime: 10–20 minutes\n\n## When\n\nE-commerce and ads: a clean packshot set, lifestyle scenes, a hero banner, a carousel, a\nrestyle of an old shot. Not for video (`ugc-product-video`) or a moving spin\n(`product-spin`).\n\n## Ask first\n\n1. **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.\n2. **Set** — packshots / lifestyle / hero / carousel / restyle, and how many.\n3. **Look** — the brand in a sentence, a reference image if they have one, aspect ratio.\n\nSay the rough cost in the same turn as the questions; the user's yes comes with the plan (Steps, **The plan first.**).\n\n## Steps\n\n**Before any paid step.** The project: `list_projects` (or `create_project`) gives the `project_id`\nand, when the project has several modules, the `module_id`; every call below that takes a project —\n`estimate_cost` included — gets that same pair; without it those tools answer `project_needed`. The\nquote: one `estimate_cost(items=[…])` prices a stage in one call, with the same project, model,\nsize 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\nthen passes its own item's `quote_id` and `confirmed_by_user=true`. A quote is single-use and lasts\n15 minutes, so a long plan is priced stage by stage, right before each stage runs; a stage that\ncomes to more than the user approved is asked about again first. Generate calls return\n`generation_ids`; `wait_task` returns the links, and `show_generations` shows each stage's running\nand finished work in one card where the chat app displays Frameo cards: all the stage's ids at\nonce, before its first `wait_task`, and the finished result with `final: true`.\n\n**The plan first.** Before the first paid call, the plan goes to the user in the chat as plain\ntext: what will be made, in order, one line per generation (for a script, the shot list; for a\nset, each shot), with each line's credits and the total. The credits come from\n`estimate_cost(items=[…])`, up to 10 items a call, so a long plan takes several calls; those\nquotes may expire unused, since each stage is quoted again right before it runs. Nothing is\ngenerated until the user says yes. The user can drop or change lines; a changed line is priced\nagain.\n\n**Review (on by default).** Every image is checked before the set is handed over, following\n`review-shots`: its checklist and steps come from `get_skill(\"review-shots\")`, loaded before\nstep 1, and the checks here are its steps 0, 1 and 4. Each preview is compared with the product\nphotos — the label, its lettering, the shape and the colour — and with the shot's pattern,\nincluding whole hands in an in-hand shot; a failed shot is retaken once. The checks are free; a\nretake is paid like the shot it replaces, from the retake allowance the plan carries as its own\nline for the user to approve. The user can turn the review off.\n\n**1. One test (~18).** `generate_image` with `image_urls=[product photos…]` (the cleanest first\n— it is the base) and a prompt for the first shot in the set; `image_model` from\n`list_models(kind=\"image\")` if the user names one. `wait_task`, show it; fix the product's\nfidelity before the batch (more photos, a tighter prompt).\n\n**2. The set (~18 each).** One `generate_image` per shot, each with its own quote, same\n`image_urls`, prompts from the recipe patterns (`hero-shot`, `flatlay`, `in-hand`, `on-desk`, `minimalist-white`,\n`luxury`, `kitchen-scene`, `angles-set`) — `get_skill` on any of them for the pattern. Then review the set.\n\n**3. Size.** There is no image upscale; for print or large use, ask for `image_resolution`\nat generation (and `image_model` from `list_models(kind=\"image\")`).\n\n**4. Deliver.** The links, the review note per shot, and `open_in_frameo` — every image is on\nthe canvas in one row.\n\n## Done\n\nThe image set in the Frameo project.\n`open_in_frameo` on the result opens the project in the Frameo app, where every take sits on\nthe canvas, ready for retakes and edits.\n\n## Files\n\nNone.\n"
"---\nname: product-photoshoot\ndescription: \"Product stills from a few photos or a description: packshots, lifestyle scenes, close-ups with hands, hero banners, carousels, ad packs, on-model shots, conceptual stills and restyles. Use for e-commerce listings and ad stills; for video, use `ugc-video` or a camera-move preset.\"\n---\n\n## When\n\nE-commerce and ads: catalog packshots, lifestyle scenes, close-ups with hands, hero banners,\ncarousels, ad packs, a generated model wearing or using the product, conceptual stills, and a\nrestyle of an old shot. Not for video (`get_skill(\"ugc-video\")` in its product format, or a camera move:\n`list_presets(category=\"camera-movements\")`, then `get_presets` for the chosen move, such as\n`get_presets([\"product-spin\"])` or `get_presets([\"topdown-dive\"])`, with `generate_video` from a\nstart frame made as the preset's notes say), and not for a video cover\n(`thumbnail-set`).\n\n## Ask first\n\n1. **The product** — 2–5 photos (`show_upload` for files on the user's device, `import_media_url` for a web link; images attached to the chat reach Frameo only through `import_attachments`, in apps that pass them such as ChatGPT, and `create_upload_url` is for clients that send the file themselves); the more angles the better. With no photos, a\n description precise enough to draw from: category, shape, material, colour, label text and\n one distinguishing feature.\n2. **Mode and count** — packshot, lifestyle, close-up with a person, hero banner, carousel, ad\n pack, on-model, conceptual or restyle, and how many (3 by default). Close-up with a person,\n on-model and restyle need a photo.\n3. **Look** — the brand in a sentence, its colours, a reference image if they have one, and the\n aspect ratio (1:1 by default).\n\nAsk everything in one turn, and say the rough cost in the same turn. When the user says to go\nahead without questions and has given photos or a usable description, ask nothing: 3 variants,\na clean studio packshot unless the brief points to another mode, 1:1, colours taken from the\nproduct. Say that choice in one sentence; the plan with its credits still needs the user's yes\n(Steps, **The plan first.**). Lenses, lighting terms and prompt wording are the skill's choices;\ndon't ask the user about them.\n\n## Steps\n\n**Before any paid step.** The project: `list_projects` (or `create_project`) gives the `project_id`\nand, when the project has several modules, the `module_id`; every call below that takes a project —\n`estimate_cost` included — gets that same pair; without the project those tools answer `project_needed`, and without the\nmodule of a project that has several, `module_needed`, which lists its modules. The\nquote: one `estimate_cost(items=[…])` prices a stage in one call, with the same project, model,\nsize 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\nthen passes its own item's `quote_id` and `confirmed_by_user=true`. A quote is single-use and lasts\n15 minutes, so a long plan is priced stage by stage, right before each stage runs; a stage that\ncomes to more than the user approved is asked about again first. Generate calls return\n`generation_ids`; `wait_task` returns the links, and `show_generations` shows each stage's running\nand finished work in one card where the chat app displays Frameo cards: all the stage's ids at\nonce, before its first `wait_task`; the card updates itself as the work finishes, so the same ids are not shown again.\n\n**The plan first.** Before the first paid call, the plan goes to the user in the chat as plain\ntext: what will be made, in order, one line per generation (for a script, the shot list; for a\nset, each shot), with each line's credits and the total. The credits come from\n`estimate_cost(items=[…])`, up to 10 items a call, so a long plan takes several calls; those\nquotes may expire unused, since each stage is quoted again right before it runs. Nothing is\ngenerated until the user says yes. The user can drop or change lines; a changed line is priced\nagain.\n\n**Review (on by default).** Every image is checked before the set is handed over, following\n`review-shots`: its checklist and steps come from `get_skill(\"review-shots\")`, loaded before\nstep 1, and the checks here are its steps 0, 1 and 4. Each preview is compared with the product\nphotos — the label, its lettering, the shape and the colour — and with the shot's mode, including\nwhole hands in a close-up; the label's lettering is read with `view_image(url, resolution=\"high\")`,\nsince a preview is too small to catch a wrong letter. A carousel or an ad pack is first checked as\na set (the same palette, light and surface on every slide), and only a slide that breaks the set\nis fixed. A failed shot gets one refinement (step 3). The checks are free; a refinement is paid\nlike the shot it fixes, from the retake allowance the plan carries as its own line for the user\nto approve. The user can turn the review off.\n\n**0. Mode and prompts (free).** Read the chosen mode in\n`get_skill_file(skill_id=\"product-photoshoot\", path=\"references/modes.md\")`: what it needs, its aspect ratio and its rules. Build every prompt\nfrom `get_skill_file(skill_id=\"product-photoshoot\", path=\"references/prompt-template.md\")`: the named sections in order, the product-fidelity\nrules, and one `[AVOID]` block put together from\n`get_skill_file(skill_id=\"product-photoshoot\", path=\"references/negative-prompts.md\")`. Each variant differs in composition, scene or light,\nnot by a word. A packshot or conceptual scene can start from a product-shot preset\n(`list_presets(category=\"product-shots\")`, then `get_presets` for the chosen ones, their `{…}`\nslots filled in); the fidelity rules and the `[AVOID]` block still go on the end. Exact words on\nan image (a headline, a price the user gave) are added afterwards with `run_ffmpeg` and an `.ass`\nsidecar, or in the editor, never generated.\n\n**1. One test (~18).** `generate_image` with `image_urls=[product photos…]` (the cleanest first\n— it is the base) and the first shot's prompt; `image_model` from `list_models(kind=\"image\")` if\nthe user names one. `wait_task`, show it, and fix the product's fidelity before the batch (more\nphotos, a tighter `[SUBJECT]`). With a description and no photos, this first image becomes the\nproduct: every later shot passes its link as `image_urls`, so the set shows one product, and only\nthe scene, light and camera change.\n\n**2. The set (~18 each).** One `generate_image` per shot, each with its own quote, the same\n`image_urls` and the same aspect ratio. A turnaround of front, three-quarter, side and back\nfollows `get_skill_file(skill_id=\"product-photoshoot\", path=\"references/angles.md\")`. Then review the set.\n\n**3. Refine (only for a defect seen or a change the user names).** Follow\n`get_skill_file(skill_id=\"product-photoshoot\", path=\"references/refinement.md\")`: fix the single weakest issue, with the latest result of that\nsame shot as the only `image_urls`, keeping its composition, subject and aspect ratio. At most two\nrefinements per shot, the review's included; each is quoted and charged like a shot. A vague\n\"I don't like it\" gets one question about what to change, never a guessed fix.\n\n**4. Size.** There is no image upscale; for print or large use, ask for `image_resolution`\nat generation (and `image_model` from `list_models(kind=\"image\")`).\n\n**5. Deliver.** The links, the review note per shot, one sentence naming the mode, the ratio and\nany fix made, and `open_in_frameo` — every image is saved in the project.\n\n## Done\n\nThe image set in the Frameo project.\n`open_in_frameo` on the result opens the project in the Frameo app, where every take is ready for retakes and edits.\n\n## Files\n\n- `references/modes.md` — the nine modes: what each needs, its aspect ratio and its rules.\n- `references/prompt-template.md` — the named prompt sections and the product-fidelity rules.\n- `references/negative-prompts.md` — the `[AVOID]` blocks and when each applies.\n- `references/refinement.md` — fixing one weak point in a finished shot, with the wording per issue.\n- `references/angles.md` — a four-angle turnaround (front, three-quarter, side, back), each built on the front image.\n"Full snapshot data
{
"description": "Product stills from a few photos or a description: packshots, lifestyle scenes, close-ups with hands, hero banners, carousels, ad packs, on-model shots, conceptual stills and restyles. Use for e-commerce listings and ad stills; for video, use `ugc-video` or a camera-move preset.",
"included_files": [
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 375
},
{
"relative_path": "assets/icon.svg",
"size_in_bytes": 345
},
{
"relative_path": "references/angles.md",
"size_in_bytes": 1743
},
{
"relative_path": "references/modes.md",
"size_in_bytes": 4032
},
{
"relative_path": "references/negative-prompts.md",
"size_in_bytes": 1883
},
{
"relative_path": "references/prompt-template.md",
"size_in_bytes": 2922
},
{
"relative_path": "references/refinement.md",
"size_in_bytes": 2006
}
],
"name": "product-photoshoot",
"skill_md_contents": "---\nname: product-photoshoot\ndescription: \"Product stills from a few photos or a description: packshots, lifestyle scenes, close-ups with hands, hero banners, carousels, ad packs, on-model shots, conceptual stills and restyles. Use for e-commerce listings and ad stills; for video, use `ugc-video` or a camera-move preset.\"\n---\n\n## When\n\nE-commerce and ads: catalog packshots, lifestyle scenes, close-ups with hands, hero banners,\ncarousels, ad packs, a generated model wearing or using the product, conceptual stills, and a\nrestyle of an old shot. Not for video (`get_skill(\"ugc-video\")` in its product format, or a camera move:\n`list_presets(category=\"camera-movements\")`, then `get_presets` for the chosen move, such as\n`get_presets([\"product-spin\"])` or `get_presets([\"topdown-dive\"])`, with `generate_video` from a\nstart frame made as the preset's notes say), and not for a video cover\n(`thumbnail-set`).\n\n## Ask first\n\n1. **The product** — 2–5 photos (`show_upload` for files on the user's device, `import_media_url` for a web link; images attached to the chat reach Frameo only through `import_attachments`, in apps that pass them such as ChatGPT, and `create_upload_url` is for clients that send the file themselves); the more angles the better. With no photos, a\n description precise enough to draw from: category, shape, material, colour, label text and\n one distinguishing feature.\n2. **Mode and count** — packshot, lifestyle, close-up with a person, hero banner, carousel, ad\n pack, on-model, conceptual or restyle, and how many (3 by default). Close-up with a person,\n on-model and restyle need a photo.\n3. **Look** — the brand in a sentence, its colours, a reference image if they have one, and the\n aspect ratio (1:1 by default).\n\nAsk everything in one turn, and say the rough cost in the same turn. When the user says to go\nahead without questions and has given photos or a usable description, ask nothing: 3 variants,\na clean studio packshot unless the brief points to another mode, 1:1, colours taken from the\nproduct. Say that choice in one sentence; the plan with its credits still needs the user's yes\n(Steps, **The plan first.**). Lenses, lighting terms and prompt wording are the skill's choices;\ndon't ask the user about them.\n\n## Steps\n\n**Before any paid step.** The project: `list_projects` (or `create_project`) gives the `project_id`\nand, when the project has several modules, the `module_id`; every call below that takes a project —\n`estimate_cost` included — gets that same pair; without the project those tools answer `project_needed`, and without the\nmodule of a project that has several, `module_needed`, which lists its modules. The\nquote: one `estimate_cost(items=[…])` prices a stage in one call, with the same project, model,\nsize 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\nthen passes its own item's `quote_id` and `confirmed_by_user=true`. A quote is single-use and lasts\n15 minutes, so a long plan is priced stage by stage, right before each stage runs; a stage that\ncomes to more than the user approved is asked about again first. Generate calls return\n`generation_ids`; `wait_task` returns the links, and `show_generations` shows each stage's running\nand finished work in one card where the chat app displays Frameo cards: all the stage's ids at\nonce, before its first `wait_task`; the card updates itself as the work finishes, so the same ids are not shown again.\n\n**The plan first.** Before the first paid call, the plan goes to the user in the chat as plain\ntext: what will be made, in order, one line per generation (for a script, the shot list; for a\nset, each shot), with each line's credits and the total. The credits come from\n`estimate_cost(items=[…])`, up to 10 items a call, so a long plan takes several calls; those\nquotes may expire unused, since each stage is quoted again right before it runs. Nothing is\ngenerated until the user says yes. The user can drop or change lines; a changed line is priced\nagain.\n\n**Review (on by default).** Every image is checked before the set is handed over, following\n`review-shots`: its checklist and steps come from `get_skill(\"review-shots\")`, loaded before\nstep 1, and the checks here are its steps 0, 1 and 4. Each preview is compared with the product\nphotos — the label, its lettering, the shape and the colour — and with the shot's mode, including\nwhole hands in a close-up; the label's lettering is read with `view_image(url, resolution=\"high\")`,\nsince a preview is too small to catch a wrong letter. A carousel or an ad pack is first checked as\na set (the same palette, light and surface on every slide), and only a slide that breaks the set\nis fixed. A failed shot gets one refinement (step 3). The checks are free; a refinement is paid\nlike the shot it fixes, from the retake allowance the plan carries as its own line for the user\nto approve. The user can turn the review off.\n\n**0. Mode and prompts (free).** Read the chosen mode in\n`get_skill_file(skill_id=\"product-photoshoot\", path=\"references/modes.md\")`: what it needs, its aspect ratio and its rules. Build every prompt\nfrom `get_skill_file(skill_id=\"product-photoshoot\", path=\"references/prompt-template.md\")`: the named sections in order, the product-fidelity\nrules, and one `[AVOID]` block put together from\n`get_skill_file(skill_id=\"product-photoshoot\", path=\"references/negative-prompts.md\")`. Each variant differs in composition, scene or light,\nnot by a word. A packshot or conceptual scene can start from a product-shot preset\n(`list_presets(category=\"product-shots\")`, then `get_presets` for the chosen ones, their `{…}`\nslots filled in); the fidelity rules and the `[AVOID]` block still go on the end. Exact words on\nan image (a headline, a price the user gave) are added afterwards with `run_ffmpeg` and an `.ass`\nsidecar, or in the editor, never generated.\n\n**1. One test (~18).** `generate_image` with `image_urls=[product photos…]` (the cleanest first\n— it is the base) and the first shot's prompt; `image_model` from `list_models(kind=\"image\")` if\nthe user names one. `wait_task`, show it, and fix the product's fidelity before the batch (more\nphotos, a tighter `[SUBJECT]`). With a description and no photos, this first image becomes the\nproduct: every later shot passes its link as `image_urls`, so the set shows one product, and only\nthe scene, light and camera change.\n\n**2. The set (~18 each).** One `generate_image` per shot, each with its own quote, the same\n`image_urls` and the same aspect ratio. A turnaround of front, three-quarter, side and back\nfollows `get_skill_file(skill_id=\"product-photoshoot\", path=\"references/angles.md\")`. Then review the set.\n\n**3. Refine (only for a defect seen or a change the user names).** Follow\n`get_skill_file(skill_id=\"product-photoshoot\", path=\"references/refinement.md\")`: fix the single weakest issue, with the latest result of that\nsame shot as the only `image_urls`, keeping its composition, subject and aspect ratio. At most two\nrefinements per shot, the review's included; each is quoted and charged like a shot. A vague\n\"I don't like it\" gets one question about what to change, never a guessed fix.\n\n**4. Size.** There is no image upscale; for print or large use, ask for `image_resolution`\nat generation (and `image_model` from `list_models(kind=\"image\")`).\n\n**5. Deliver.** The links, the review note per shot, one sentence naming the mode, the ratio and\nany fix made, and `open_in_frameo` — every image is saved in the project.\n\n## Done\n\nThe image set in the Frameo project.\n`open_in_frameo` on the result opens the project in the Frameo app, where every take is ready for retakes and edits.\n\n## Files\n\n- `references/modes.md` — the nine modes: what each needs, its aspect ratio and its rules.\n- `references/prompt-template.md` — the named prompt sections and the product-fidelity rules.\n- `references/negative-prompts.md` — the `[AVOID]` blocks and when each applies.\n- `references/refinement.md` — fixing one weak point in a finished shot, with the wording per issue.\n- `references/angles.md` — a four-angle turnaround (front, three-quarter, side, back), each built on the front image.\n"
}SHA-256 of public snapshot: 75c3f89270df4ff36db007a9bbd7f7cacf5d7ca6cc24087f2d81b07e61bc7bca