← 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 character-sheet

Full description — Now says: A consistent character across views and expressions, saved in the project so every later image and video can keep the same face. Use before multi-shot work...

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

A consistent character across views and expressions, on the canvas so every later image and video can keep the same face.

After

Oct 24, 2026 · 13:00 UTC

A consistent character across views and expressions, saved in the project so every later image and video can keep the same face. Use before multi-shot work with a recurring person or mascot, such as a series, a brand character or a story...

Skill instructions

Before

Oct 8, 2026 · 18:02 UTC

on the canvas so every later image and video can keep the same face." Needs: a description or a photo; the style (photoreal, anime, 3D, editorial) Credits: about 90–130 (5–7 images at ~18 each) Time: 10 minutes Before any multi-shot work...

After

Oct 24, 2026 · 13:00 UTC

saved in the project so every later image and video can keep the same face. Use before multi-shot work with a recurring person or mascot, such as a series, a brand character or a story cast." Before any multi-shot work with a recurring p...

Supporting files

Before

Oct 8, 2026 · 18:02 UTC

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

After

Oct 24, 2026 · 13:00 UTC

[{"relative_path":"agents/openai.yaml","size_in_bytes":381},{"relative_path":"assets/icon.svg","size_in_bytes":456},{"relative_path":"references/prompt-slots.md","size_in_bytes":2480},{"relative_path":"references/styles.md","size_in_byte...

Compare saved observations

Download comparison JSON

SKILL.md text changes

− removed · + added

--- before
+++ after
@@ -1,29 +1,28 @@
 ---
 name: character-sheet
-description: "A consistent character across views and expressions, on the canvas so every later image and video can keep the same face."
+description: "A consistent character across views and expressions, saved in the project so every later image and video can keep the same face. Use before multi-shot work with a recurring person or mascot, such as a series, a brand character or a story cast."
 ---
 
-Needs: a description or a photo; the style (photoreal, anime, 3D, editorial)
-Credits: about 90–130 (5–7 images at ~18 each)
-Time: 10 minutes
-
 ## When
 
-Before any multi-shot work with a recurring person or mascot: a series, a brand
-character, a game or story cast. `script-to-video` calls this for its cast.
+Before any multi-shot work with a recurring person or mascot: a series, a brand character, a game
+or story cast. `script-to-video` calls this for its cast.
 
 ## Ask first
 
-1. **Who** — a photo (`show_upload` for files on the user's device, `import_media_url` for a web link; images attached to the chat do not reach Frameo, and `create_upload_url` is for clients that send the file themselves) or a description: age, build, hair, clothes, one
-   distinguishing detail.
-2. **Style** — photoreal, editorial, anime, 3D, game concept.
-3. **Views** — the default is front, three-quarter, profile, full body, two expressions.
+1. **Who** — a photo (`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) or a description: age, build, skin, face, hair, clothes from head
+   to toe, and one distinguishing detail. A real person's likeness only from their own photo, with
+   their consent; otherwise an original character, never a celebrity or an existing copyrighted
+   one.
+2. **Style** — photoreal (the default), editorial, anime/2D, 3D stylized or game concept.
+3. **Views** — the default is front, three-quarter, profile, full body and two expressions.
 
 ## 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
@@ -31,7 +30,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
@@ -41,17 +40,35 @@
 generated until the user says yes. The user can drop or change lines; a changed line is priced
 again.
 
-**Canvas rows.** Every `generate_image` here takes `placement_kind="character"` and `placement_group=<the character's name>`, so the sheet is one row on the character board, and later shots that use it as a reference get rows of their own.
+**Grouping.** Every `generate_image` here takes `placement_kind="character"` and `placement_group=<the character's name>`, so the sheet is kept together with the project's character references, apart from the later shots that use it.
+
+**0. The prompt (free).** Fill the slots in `get_skill_file(skill_id="character-sheet", path="references/prompt-slots.md")` in order, with the
+style's modules from `get_skill_file(skill_id="character-sheet", path="references/styles.md")`. Every detail is specific (materials, colours,
+cut), never "nice top". For an adult character, the face has adult structure (the rule is in the
+slots file). The physical description is written once and goes word for word into every
+generation below, so nothing drifts.
+
+**Optional preview (~18).** When there is no photo, offer one split-screen sheet first: the
+character standing full body on the left and a chest-up close-up on the right, in one 16:9 image
+(the composition is in the slots file). It settles the look for the price of one image before the
+anchor and the views. Its link can then be the anchor's `image_urls`.
 
 **1. The anchor (~18).** `generate_image`: front view, neutral expression, plain background,
-in the style; `image_urls=[photo]` when given. `wait_task`, show it; this is the face
-everything else follows — iterate here, not later.
+in the style; `image_urls=[photo]` when given (or the preview). `wait_task`, show it; this is the
+face everything else follows — iterate here, not later.
 
 **2. The views (~18 each).** `generate_image` per view, each with its own quote, with
-`image_urls=[anchor]` first and the view in the prompt ("three-quarter view, same person,
-same clothes"). Keep the background plain. `wait_task` for the links.
+`image_urls=[anchor]` first and the full description plus the view in the prompt
+("three-quarter view, same person, same clothes"). Keep the background plain and the light the
+same. Each view is compared with the anchor — face, hair, outfit, accessories — using
+`view_image(url, resolution="high")` for the face when the preview leaves it in doubt; a view that
+drifts is retaken once from the anchor. `wait_task` for the links.
+
+**Changes later.** When the user changes something, every detail already set (face, hair, body,
+outfit, accessories) carries forward unchanged; change only what was asked and restate the rest in
+the prompt.
 
-**3. The references.** The anchor and views stay on the project canvas; their links, anchor
+**3. The references.** The anchor and views stay in the project; their links, anchor
 first, are what later generations take as `image_urls` / `reference_image_urls`.
 
 **4. Save it to the cast (free).** `save_character` with the character's name and the anchor
@@ -61,11 +78,11 @@
 
 ## Done
 
-The anchor and its views on the canvas in one row, with their links for later shots, and the
+The anchor and its views in the project, kept together, with their links for later shots, and the
 character in the project's cast.
-`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/prompt-slots.md` — the prompt's slots in order, the realism and adult-structure rules, the compositions and the negative tail.
+- `references/styles.md` — the five styles, each with its render, lighting and quality lines.
Full technical diff · 3 changed fields

changed /description

BEFORE
"A consistent character across views and expressions, on the canvas so every later image and video can keep the same face."
AFTER
"A consistent character across views and expressions, saved in the project so every later image and video can keep the same face. Use before multi-shot work with a recurring person or mascot, such as a series, a brand character or a story cast."

changed /included_files

BEFORE
[
  {
    "relative_path": "agents/openai.yaml",
    "size_in_bytes": 378
  },
  {
    "relative_path": "assets/icon.svg",
    "size_in_bytes": 456
  }
]
AFTER
[
  {
    "relative_path": "agents/openai.yaml",
    "size_in_bytes": 381
  },
  {
    "relative_path": "assets/icon.svg",
    "size_in_bytes": 456
  },
  {
    "relative_path": "references/prompt-slots.md",
    "size_in_bytes": 2480
  },
  {
    "relative_path": "references/styles.md",
    "size_in_bytes": 2112
  }
]

changed /skill_md_contents

BEFORE
"---\nname: character-sheet\ndescription: \"A consistent character across views and expressions, on the canvas so every later image and video can keep the same face.\"\n---\n\nNeeds: a description or a photo; the style (photoreal, anime, 3D, editorial)\nCredits: about 90–130 (5–7 images at ~18 each)\nTime: 10 minutes\n\n## When\n\nBefore any multi-shot work with a recurring person or mascot: a series, a brand\ncharacter, a game or story cast. `script-to-video` calls this for its cast.\n\n## Ask first\n\n1. **Who** — a photo (`show_upload` for files on the user's device, `import_media_url` for a web link; images attached to the chat do not reach Frameo, and `create_upload_url` is for clients that send the file themselves) or a description: age, build, hair, clothes, one\n   distinguishing detail.\n2. **Style** — photoreal, editorial, anime, 3D, game concept.\n3. **Views** — the default is front, three-quarter, profile, full body, two expressions.\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**Canvas rows.** Every `generate_image` here takes `placement_kind=\"character\"` and `placement_group=<the character's name>`, so the sheet is one row on the character board, and later shots that use it as a reference get rows of their own.\n\n**1. The anchor (~18).** `generate_image`: front view, neutral expression, plain background,\nin the style; `image_urls=[photo]` when given. `wait_task`, show it; this is the face\neverything else follows — iterate here, not later.\n\n**2. The views (~18 each).** `generate_image` per view, each with its own quote, with\n`image_urls=[anchor]` first and the view in the prompt (\"three-quarter view, same person,\nsame clothes\"). Keep the background plain. `wait_task` for the links.\n\n**3. The references.** The anchor and views stay on the project canvas; their links, anchor\nfirst, are what later generations take as `image_urls` / `reference_image_urls`.\n\n**4. Save it to the cast (free).** `save_character` with the character's name and the anchor\nfirst, then the views in `image_urls`, six images at most (the most a saved character keeps;\nwith more views, the six that show the face and outfit best): later work in the project finds it with\n`list_characters`, and it shows in the Frameo app's character panel.\n\n## Done\n\nThe anchor and its views on the canvas in one row, with their links for later shots, and the\ncharacter in the project's cast.\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: character-sheet\ndescription: \"A consistent character across views and expressions, saved in the project so every later image and video can keep the same face. Use before multi-shot work with a recurring person or mascot, such as a series, a brand character or a story cast.\"\n---\n\n## When\n\nBefore any multi-shot work with a recurring person or mascot: a series, a brand character, a game\nor story cast. `script-to-video` calls this for its cast.\n\n## Ask first\n\n1. **Who** — a photo (`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) or a description: age, build, skin, face, hair, clothes from head\n   to toe, and one distinguishing detail. A real person's likeness only from their own photo, with\n   their consent; otherwise an original character, never a celebrity or an existing copyrighted\n   one.\n2. **Style** — photoreal (the default), editorial, anime/2D, 3D stylized or game concept.\n3. **Views** — the default is front, three-quarter, profile, full body and two expressions.\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**Grouping.** Every `generate_image` here takes `placement_kind=\"character\"` and `placement_group=<the character's name>`, so the sheet is kept together with the project's character references, apart from the later shots that use it.\n\n**0. The prompt (free).** Fill the slots in `get_skill_file(skill_id=\"character-sheet\", path=\"references/prompt-slots.md\")` in order, with the\nstyle's modules from `get_skill_file(skill_id=\"character-sheet\", path=\"references/styles.md\")`. Every detail is specific (materials, colours,\ncut), never \"nice top\". For an adult character, the face has adult structure (the rule is in the\nslots file). The physical description is written once and goes word for word into every\ngeneration below, so nothing drifts.\n\n**Optional preview (~18).** When there is no photo, offer one split-screen sheet first: the\ncharacter standing full body on the left and a chest-up close-up on the right, in one 16:9 image\n(the composition is in the slots file). It settles the look for the price of one image before the\nanchor and the views. Its link can then be the anchor's `image_urls`.\n\n**1. The anchor (~18).** `generate_image`: front view, neutral expression, plain background,\nin the style; `image_urls=[photo]` when given (or the preview). `wait_task`, show it; this is the\nface everything else follows — iterate here, not later.\n\n**2. The views (~18 each).** `generate_image` per view, each with its own quote, with\n`image_urls=[anchor]` first and the full description plus the view in the prompt\n(\"three-quarter view, same person, same clothes\"). Keep the background plain and the light the\nsame. Each view is compared with the anchor — face, hair, outfit, accessories — using\n`view_image(url, resolution=\"high\")` for the face when the preview leaves it in doubt; a view that\ndrifts is retaken once from the anchor. `wait_task` for the links.\n\n**Changes later.** When the user changes something, every detail already set (face, hair, body,\noutfit, accessories) carries forward unchanged; change only what was asked and restate the rest in\nthe prompt.\n\n**3. The references.** The anchor and views stay in the project; their links, anchor\nfirst, are what later generations take as `image_urls` / `reference_image_urls`.\n\n**4. Save it to the cast (free).** `save_character` with the character's name and the anchor\nfirst, then the views in `image_urls`, six images at most (the most a saved character keeps;\nwith more views, the six that show the face and outfit best): later work in the project finds it with\n`list_characters`, and it shows in the Frameo app's character panel.\n\n## Done\n\nThe anchor and its views in the project, kept together, with their links for later shots, and the\ncharacter in the project's cast.\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/prompt-slots.md` — the prompt's slots in order, the realism and adult-structure rules, the compositions and the negative tail.\n- `references/styles.md` — the five styles, each with its render, lighting and quality lines.\n"
Full snapshot data
{
  "description": "A consistent character across views and expressions, saved in the project so every later image and video can keep the same face. Use before multi-shot work with a recurring person or mascot, such as a series, a brand character or a story cast.",
  "included_files": [
    {
      "relative_path": "agents/openai.yaml",
      "size_in_bytes": 381
    },
    {
      "relative_path": "assets/icon.svg",
      "size_in_bytes": 456
    },
    {
      "relative_path": "references/prompt-slots.md",
      "size_in_bytes": 2480
    },
    {
      "relative_path": "references/styles.md",
      "size_in_bytes": 2112
    }
  ],
  "name": "character-sheet",
  "skill_md_contents": "---\nname: character-sheet\ndescription: \"A consistent character across views and expressions, saved in the project so every later image and video can keep the same face. Use before multi-shot work with a recurring person or mascot, such as a series, a brand character or a story cast.\"\n---\n\n## When\n\nBefore any multi-shot work with a recurring person or mascot: a series, a brand character, a game\nor story cast. `script-to-video` calls this for its cast.\n\n## Ask first\n\n1. **Who** — a photo (`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) or a description: age, build, skin, face, hair, clothes from head\n   to toe, and one distinguishing detail. A real person's likeness only from their own photo, with\n   their consent; otherwise an original character, never a celebrity or an existing copyrighted\n   one.\n2. **Style** — photoreal (the default), editorial, anime/2D, 3D stylized or game concept.\n3. **Views** — the default is front, three-quarter, profile, full body and two expressions.\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**Grouping.** Every `generate_image` here takes `placement_kind=\"character\"` and `placement_group=<the character's name>`, so the sheet is kept together with the project's character references, apart from the later shots that use it.\n\n**0. The prompt (free).** Fill the slots in `get_skill_file(skill_id=\"character-sheet\", path=\"references/prompt-slots.md\")` in order, with the\nstyle's modules from `get_skill_file(skill_id=\"character-sheet\", path=\"references/styles.md\")`. Every detail is specific (materials, colours,\ncut), never \"nice top\". For an adult character, the face has adult structure (the rule is in the\nslots file). The physical description is written once and goes word for word into every\ngeneration below, so nothing drifts.\n\n**Optional preview (~18).** When there is no photo, offer one split-screen sheet first: the\ncharacter standing full body on the left and a chest-up close-up on the right, in one 16:9 image\n(the composition is in the slots file). It settles the look for the price of one image before the\nanchor and the views. Its link can then be the anchor's `image_urls`.\n\n**1. The anchor (~18).** `generate_image`: front view, neutral expression, plain background,\nin the style; `image_urls=[photo]` when given (or the preview). `wait_task`, show it; this is the\nface everything else follows — iterate here, not later.\n\n**2. The views (~18 each).** `generate_image` per view, each with its own quote, with\n`image_urls=[anchor]` first and the full description plus the view in the prompt\n(\"three-quarter view, same person, same clothes\"). Keep the background plain and the light the\nsame. Each view is compared with the anchor — face, hair, outfit, accessories — using\n`view_image(url, resolution=\"high\")` for the face when the preview leaves it in doubt; a view that\ndrifts is retaken once from the anchor. `wait_task` for the links.\n\n**Changes later.** When the user changes something, every detail already set (face, hair, body,\noutfit, accessories) carries forward unchanged; change only what was asked and restate the rest in\nthe prompt.\n\n**3. The references.** The anchor and views stay in the project; their links, anchor\nfirst, are what later generations take as `image_urls` / `reference_image_urls`.\n\n**4. Save it to the cast (free).** `save_character` with the character's name and the anchor\nfirst, then the views in `image_urls`, six images at most (the most a saved character keeps;\nwith more views, the six that show the face and outfit best): later work in the project finds it with\n`list_characters`, and it shows in the Frameo app's character panel.\n\n## Done\n\nThe anchor and its views in the project, kept together, with their links for later shots, and the\ncharacter in the project's cast.\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/prompt-slots.md` — the prompt's slots in order, the realism and adult-structure rules, the compositions and the negative tail.\n- `references/styles.md` — the five styles, each with its render, lighting and quality lines.\n"
}

SHA-256 of public snapshot: 930364a1dea39aa933edfdea16f229807c11418938a28e24e1f8c36cd423fe67