← Frameo.AICONTENT HISTORY

Update to Frameo.AI

Snapshot Oct 24, 2026 · 13:00 UTC · version 1.2.5

Collection source: downloaded plugin package.

WHAT CHANGED

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.

Save Frameo.AI and check future changes in Following.

Up to 10 plugins free · no card required.

All fields and original values.

Full description

Before

Oct 8, 2026 · 18:02 UTC

Packshots on several backgrounds or scenes, lifestyle shots, hero banners and carousel sets from a few product photos.

After

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

Before

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 ...

After

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

Before

Oct 8, 2026 · 18:02 UTC

[{"relative_path":"agents/openai.yaml","size_in_bytes":372},{"relative_path":"assets/icon.svg","size_in_bytes":345}]

After

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 JSON

SKILL.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

BEFORE
"Packshots on several backgrounds or scenes, lifestyle shots, hero banners and carousel sets from a few product photos."
AFTER
"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

BEFORE
[
  {
    "relative_path": "agents/openai.yaml",
    "size_in_bytes": 372
  },
  {
    "relative_path": "assets/icon.svg",
    "size_in_bytes": 345
  }
]
AFTER
[
  {
    "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

BEFORE
"---\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"
AFTER
"---\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