← PicsartCONTENT HISTORYWHAT CHANGED · RULE-BASED ANALYSIS
Update to Picsart
Snapshot Oct 9, 2026 · 18:02 UTC · version 2.1.0
Collection source: downloaded plugin package.
First saved snapshot
No earlier snapshot is available to establish a change.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"description": "Produce and lock film assets: one T-cut sheet per generated character, the portrait/profile/sheet route for a supplied photograph, prop plates, and individual reviews as assets arrive. Cut approved sheets into single-view references for recurring identity. Use for stages 4–5 after the shot list, before film-scenes; preserve user photographs and approve each asset before using it.",
"included_files": [
{
"relative_path": "references/ASSET-EFFICIENCY.md",
"size_in_bytes": 6768
},
{
"relative_path": "references/ASSET-SHEETS.md",
"size_in_bytes": 57998
}
],
"name": "film-assets",
"skill_md_contents": "---\nname: film-assets\ndescription: \"Produce and lock film assets: one T-cut sheet per generated character, the portrait/profile/sheet route for a supplied photograph, prop plates, and individual reviews as assets arrive. Cut approved sheets into single-view references for recurring identity. Use for stages 4–5 after the shot list, before film-scenes; preserve user photographs and approve each asset before using it.\"\n---\n\n# ChatGPT and Codex integration\n\nApply these host conventions throughout this skill and its references.\n\n- Discover the connected Picsart tools and use their actual names and schemas.\n The `picsart_*` names in the workflow identify tools, not a fixed host namespace.\n If the connection is missing, explain that Picsart must be connected; continue\n script and shot planning when possible. Never invent tool results or renders.\n- Read board decisions from the current user message and attached widget context.\n Use `read_widget_context` only if the host actually exposes that tool. Do not\n assume ChatGPT has Claude's context reader. Treat a board's initial tool result\n and unsent widget state as previews, never as user approval. If a submitted\n decision has no accessible payload, explain briefly and use the text fallback\n to collect the missing decision; do not guess or repeat charged operations.\n- Use the host's available question interface or one concise conversational\n question for preset choices.\n- UI rendering and delivery of feedback are the remote MCP server's responsibility.\n If a board is unavailable, present its relevant options in text and record the\n user's selection using the same documented feedback fields. Do not claim that\n a plugin manifest makes Claude-specific widgets compatible with ChatGPT.\n- Save `film.json` and artifacts in the user's writable project workspace, not\n the installed plugin directory. If persistent file tools are unavailable,\n keep a structured project checkpoint in the conversation and provide it for\n download when the host supports files. Never claim a file was saved without\n confirmation from a file tool.\n- Honor the user's current instructions and already authorized scope. Preserve\n quoted spend limits and production locks; do not infer authorization from a\n preview, a timeout, or a connection being installed. A timed-out charged call\n needs a status check before considering a retry.\n- This package holds six film skills (`film`, `film-development`, `film-assets`, `film-scenes`, `film-edit`, `film-finishing`) and three motion skills (`motion`, `motion-import`, `motion-design`). Route between them directly.\n- `motion-import` reads a design's layers through the Figma app's tools. If Figma is not connected in this host, use its flat-frame fallback and say so once.\n\n\n# Assets — casting, location scouting, and the prop shop, on images\n\nBefore preparing image prompts or scheduling work, read\n[ASSET-EFFICIENCY.md](references/ASSET-EFFICIENCY.md): task-scoped reference\nstyling, per-asset readiness and content-based dependency checks. These qualify\nthe scheduling and review rules below without weakening approvals.\n\n**One sheet per generated character; review each ready asset.** Compile one\nT-cut sheet with `picsart_film_compile_asset_prompt`, `kind: \"sheet\"`, a face\nin `faceAndOutfit` and/or all six `identity` fields, and the outfit by item.\nGenerate it from the descriptor without uploaded pictures. The front face,\nprofile and full-body outfit share one image. Use a live-schema-confirmed 4K\nimage model and probe the result: the identity panel must clear 1024 px.\n\nThe portrait → profile → sheet chain remains the route for a supplied real\nphotograph. Preserve that photo and check dependent images against it.\nPass the film's locked camera and colour choices to the compiler alongside\n`tone`: `tone: \"auto\"` alone supplies no rendering style. If the look is still\nentirely Auto, resolve its camera on the setup console before compiling. A\ncompiler error is a request to fix the input or report the block, not a reason\nto switch a generated character to the photograph chain.\n\nQuote every ready independent asset together, then dispatch their approved\n`picsart_generate` calls asynchronously in one batch. Show each finished\nasset immediately and open `picsart_asset_review` for the ready subset;\nunrelated renders and retries do not hold it. Approval plus a completed\nvisual check locks that asset. Scene work may start when that scene's own\ncast and props are ready.\n\nAt lock, cut each sheet into one image per view. Videos receive the approved\nfull-resolution views, never the multi-panel sheet. The sheet remains the\narchive. See `references/ASSET-SHEETS.md` for grids, descriptors and cropping.\n\n**An asset is still a pair: text + image.** The descriptor is the sheet's prompt\nand the asset's record, and it is never pasted into a video prompt (2026-09-09,\n`../film-scenes/references/PROMPT-BLOCKS.md`); its **views** travel in\n`imageUrls`, numbered and labelled to its shots, and the pictures are the\nconsistency mechanism. Say the\nstage to the user in one sentence the first time — *\"one picture per character\nand place; approve them and we shoot\"* — never through the vocabulary of these\ndocs.\n\n## Every person and prop gets its pictures (2026-09-09 — no tiers)\n\n- **A character**: one generated T-cut sheet; for a supplied photograph, its profile and sheet\n (`references/ASSET-SHEETS.md`). **Locations are not generated here since\n 2026-09-08**: every place gets its descriptor at step 1 and its pictures —\n scene picture, wide, a room map when the scene needs one — from\n the scene in `film-scenes` step 3, the handbook's order\n (`references/ASSET-SHEETS.md`, *The location*).\n- **A prop**: one plate, judged on the same board, and carried into every video\n the prop appears in as `IMAGE n — PROP: <name>` (rule 7, 2026-09-10) — a\n plate nobody attaches was paid for nothing, and words alone drew a round\n canteen as a flat flask.\n- A background figure or an object nobody handles has no row; it is two or\n three descriptor lines inside the shot that shows it.\n\n**State and scenario variants are panels on the sheet, and views in the run.**\n`@cal_wet`, `@cal_armed` — each is a panel of a states\nsheet, generated from the portrait and the approved sheet so it is the same\nperson, then **cut out as its own image** and numbered in the references header like any other reference (*\"@cal_wet — IMAGE\n3\"*). The tag resolves to a file, not to a region of a picture: a panel pointer\ninside a multi-panel image is what sc04a got wrong. A variant gets its own\n*sheet* only when it is a different picture for most of the film — a costume\nchange that lasts an act, an injury that rewrites the face — and that is a craft\ncall, not a rule. A place at night is not a state here at all: it is a scene of\nits own with its own pictures (`film-scenes` step 3).\n\n## When the user brings the asset — the photo is the identity (2026-09-04)\n\nA photo of a real person, a real product, a real place is not a reference for\na sheet; it **is** the asset, and it beats any generated image at the one thing\nthis stage exists for. No generative model holds a face at 100% — the only\n100% face is the photograph — so the flow keeps the photograph in the video\nmodel's hands and generates *around* it, never instead of it.\n\n1. **Save it exactly.** The upload URL is temporary; the durable copy goes to\n the project's Drive folder as the bytes the user sent — `picsart_drive\n action=upload` with the upload URL, the original name kept; read\n `durability` in the result. Probe both (`picsart_media_probe_media`, free):\n `bytes`, `width`, `height`, `contentType` must match, or the save is not a\n copy. No re-encode, no crop, no enhance, no cutout on the way in. That file\n is `assets[].original`, and it is the identity source of every run the\n asset is in. This happens the moment the photo arrives (Stage 1); the\n registry row is written at Stage 4, step 4, once the cards are known.\n2. **Identity or inspiration — decide by looking, never by asking**\n (`picsart_view_image`). A person, product or place the film is about is\n identity: this section. A film still, an artwork, a mood photo is\n inspiration: a reference caption, and it never enters `imageUrls` — a still's\n actors would join the cast. One short question only when an image genuinely\n reads both ways.\n **Then a second question of the same picture: one view, or a composite?**\n People hand over one file with four pictures in it — life stages, outfit\n options, a phone contact sheet. A composite is still the asset and is still\n saved byte-for-byte, but it **never enters `imageUrls` whole**: read the\n panels off the pixels, cut each view the cards need from a *copy*, and\n record them in `derived[]` with the position in the `op` and in `views[]`\n like any other view (`references/ASSET-SHEETS.md`, *A composite the user\n supplied is cut before it is used*). A composite passed whole with its panel\n named in words is exactly the sc04a failure.\n3. **Generate an angle sheet only when the cards need one — and ask for photos\n first (2026-09-07).** Count what was given against what the cards need:\n every angle in hand, nothing is generated. One or two views and a card asks\n for an angle or a state the photo does not have — profile, back, soaked, a\n different coat — ask for those photos first, and offer the generation as\n the alternative, with its price. When it is generated, it is the handbook's chain **from the photo** — the\n profile (the compiler writes it), then the T-cut sheet from\n photo, profile and outfit — with the photograph in the portrait's place and\n the four photo standards checked first (`references/ASSET-SHEETS.md`, *The\n user's photograph*), in the same batch as the generated sheets. It goes on the review board like any sheet,\n `judge`: *\"the same person as the photo — face, build. Ignore the pose.\"*\n It is the asset's `sheet`, never its `original`, and in the run it rides\n **second**, labelled *wardrobe and angles — face from IMAGE 1*. A photo\n that already shows what every cut needs gets no sheet at all: that is one\n fewer image against the run's budget.\n\n **When the console's Tone is one of the six era tones and the photo is plainly of today,\n offer an era-adapted portrait once — never apply it unasked (2026-09-07).**\n Hair, make-up, wardrobe and grooming restyled to the era, the face kept;\n the trade-off said in the offer — the identity is then a generated image,\n not the photograph. Chosen, it is judged on the board and becomes IMAGE 1\n as a recorded derived file; declined, nothing changes\n (`references/ASSET-SHEETS.md`, *The user's photograph*).\n4. **One save, locked, no board for the photo.** `picsart_save_asset` once per\n photo-sourced asset, at the same moment the generated sheets lock:\n `portraitUrl` = the original, `turnaroundUrl` = the approved angle sheet\n when one exists, `status: \"locked\"`, no `stressTest`; the `film.json` row\n carries `source: \"user\"`, `original`, and `sheet` when there is one. The user gave\n the picture; asking them to approve it is a stop with no decision in it —\n only the sheet, if any, was a question, and it was answered on the board.\n The descriptor is **minimal and written from the pixels**: tag, role,\n behaviour, and costume only where a scene departs from what the photo\n shows — a descriptor that misreads the hair fights the photo in every cut.\n Show the line once; no round. A sheet approved later is a **new version, a\n new save** (`sheetVersion` v2, same `portraitUrl`), never an overwrite.\n5. **In the run the photograph goes first, as a photograph.** the references header:\n *\"IMAGE 1 — IDENTITY: a photograph of the real @cal. Match this face\n exactly — face, hair, build.\"* Untouched when the original is a single\n view; when it is a composite, IMAGE 1 is the identity view cut from it and\n the line says so — *\"the adult-in-formalwear view, cut from the four-panel\n reference she supplied\"*. When the photo's background is not one of\n the film's places, the same line says so: *\"the background of IMAGE 1 is\n not a location in this film\"* — words first, that is how a kitchen behind a\n portrait stays out of the desert. A **derived copy** (`assets[].derived[]`,\n a new file with its `op` recorded) exists for four hard reasons and one\n repair, never as an intake step: **a composite cut into its views** (the\n only one that is routine, above); a format the model does not accept (a\n phone's HEIC — a JPEG copy, same pixels); the run's byte ceiling (JPEG\n re-encode, then downscale while the face stays ≥ 600 px); the model's size\n floor (a photo with either side under 300 px — `picsart_enhance` a copy); and a\n background that leaked into the first run despite the words (a\n neutral-grey cutout of a copy, `picsart_remove_bg`). The original in the\n library is never the file that changes.\n\nThe same shape for a **product** (the photo is the object; an angle sheet only\nwhen the cards turn it) and a **real location** (the user's photographs are\n`SPACE` in every run there; the scene picture is generated with them attached\nand the room map is made from the best wide photograph —\n`references/ASSET-SHEETS.md`, *The location*).\n\n## The conveyor — four steps, one board, then go\n\n1. **Draft every descriptor in one turn**, from the story, the reference\n captions and the setup console — all of the block's characters, locations\n and props. This is where the text portraits and location descriptions are\n written (2026-09-10 — the folded Stages 2 and 3 used to claim them).\n Exhaustive and concrete: costume by item with materials and condition (\"a\n worn dark-blue work jacket\", never \"a jacket\"); anything invented beyond the\n script carries a `design proposal` note. **There is no separate approval\n round for the text**: the descriptor rides onto the review board as each\n tile's `prompt`, its key lines as `info`, and the user approves picture and\n words together. A note that comes back on a tile lands on one descriptor line\n and one panel. **If the user supplied an image, look at it first**\n with `picsart_view_image` (free) — a URL is a link, not pixels — and decide\n what it is: a photo of the thing itself is the asset (*When the user brings\n the asset*, above), and no sheet is drafted for it here; a reference\n informs the descriptor and stays a reference. **When the console's Tone is\n not Auto, write the cast to the tone's era** — hair, grooming, make-up,\n wardrobe, screen archetype (2026-09-07): the sheet inherits grain and colour\n through the style prefix, but a 2024 haircut inside an 80s tone is a render\n fighting itself. When the story's period disagrees with the tone's era, say\n it **once** and let the user decide — dress the cast to the tone, or set\n Tone to Auto; never restyle silently, and never touch a real person's photo\n for it (the offer in *When the user brings the asset*, step 3).\n2. **Generate every ready independent asset in one approved batch.** Compile\n one sheet per generated character and one plate per prop. Read the live\n image catalog once and record the model ids in `film.json.model.pictures`.\n For a one-shot sheet, choose a model whose schema supports 4K on either\n style path; preserve the locked era and medium in its compiled prompt.\n Use the maximum supported resolution and verify that every identity panel\n clears 1024 px on its short side. Split an overcrowded grid into another\n sheet only with the additional generation priced and approved. A supplied\n photograph uses the chain in `references/ASSET-SHEETS.md` instead.\n Preflight each concrete request with `picsart_preflight`, show the combined\n quote, and dispatch only the authorized calls via `picsart_generate` with\n `async: true`. A dependent call waits for the actual checked input URL.\n Put all returned handles on `picsart_render_monitor` and reconcile each\n with `picsart_job_status`; a timeout is not permission to generate again.\n\n **Every asset prompt opens with the task-scoped asset style prefix and one medium\n line for the film** (`references/ASSET-SHEETS.md`, *Every image prompt\n carries the film*) — a portrait, a sheet or a plate that comes back in\n another medium, a drawing on a live-action film, is a re-dispatch inside\n the batch, never a tile. **Every sheet prompt is the handbook's T-cut prompt for the path** (grey for white;\n on the vintage path the film's stock word for *Technicolor*), and a states sheet declares its grid — one\n figure per panel, nothing crossing a gutter, no captions — because a sheet\n that cannot be cut cleanly cannot reach a run. Keep the monitor current\n while the approved batch runs, and show ready previews as they land. If a call under-delivers (a panel missing, two people on the\n sheet, the wrong medium), diagnose and correct that asset within authorized\n spend; do not resend identical failing instructions or hold ready siblings\n (`references/ASSET-EFFICIENCY.md`).\n\n **Show each asset as soon as it lands; check it before use.** Use the\n lightweight preview from `film` rule 4, and inspect it with\n `picsart_view_image`. Check identity across panels, age, medium, one person\n per panel, clear gutters and absence of burnt-in captions. The preview may\n be shown before the check finishes; explain a defect under it and offer\n the bounded repair. Locking, cropping and using it wait for the check and\n user approval. Use full-size originals for crops and generation inputs.\n\n3. **Review the ready subset immediately, one tile per asset, deduped**: `picsart_asset_review`\n with the ready sheets and plates (split past 12 tiles); pending assets wait for their own review, each tile's\n `tag`, `prompt` (the descriptor), `info` (type, scenes served), and a\n `judge` line that names the question — *\"the same person in every panel:\n face, build, costume. Ignore the pose.\"* — one question per tile, chosen\n from the handbook's checklists for a portrait, a sheet, an angle sheet and\n an era-adapted portrait, which are what you check yourself before the asset\n is locked or used (`references/ASSET-SHEETS.md`, *What the board judges*). Pass `imageModels` from a live\n catalog read so a change can be re-tried on another model. Feedback per\n `../film/references/WIDGET-FEEDBACK.md`: `approved[]` and `changes[]`,\n `approved.length + changes.length === total`, nothing decided by silence.\n - **Every `approved` sheet is locked on the spot, silently** — see step 4.\n - **Every `changes` sheet is one surgical repair**: the note folded\n into its own prompt (one descriptor line, or one panel named), nothing else\n touched; a **fresh board with only the returned tiles**, `version` bumped,\n `previousUrl` set so \"go back to the first one\" is a click. Approved sheets\n never reappear. Loop until `changes` is empty. Up to three named `models`\n → one version per model as sibling tiles on that next board, the only\n sanctioned case of two tiles sharing a tag.\n Before rebuilding dependents, check which content actually changed under\n `references/ASSET-EFFICIENCY.md`; a version bump alone is not a cascade.\n - **A point fix is a mask, not a re-roll.** A collar, a scar, a wrong buckle\n on an otherwise right sheet goes to an image **edit** model (the newest on\n the catalog that takes a mask, `purpose: \"edit\"`) as an\n inpaint of that panel; a full re-render re-rolls the 95% that was right.\n4. **The approval IS the lock — and the lock is where the sheet is cut.** Per\n approved asset, in one step: probe the sheet, read the panel boxes off it,\n crop the\n views the cards name (the identity view always; the wardrobe view; one per\n tagged panel) — **cut at\n the sheet's full pixels and scaled down to the 2048 px delivery cap in the\n same export**, because the video model renders at 1080p and declares no\n input pixel limit of its own — then probe and eyeball each crop, and save.\n **No view leaves this step under 320 px on its short side** — width counts as\n much as height, a narrow panel is scaled *up* until it clears the floor, and\n a panel that needs it means the sheet was too small (say so). That is the one\n check a 252×508 wardrobe view got past on 2026-09-09, refused by the provider\n mid-run for its width. The recipe, the mandatory `content.bounds`\n and the three checks are in `references/ASSET-SHEETS.md`, *The crop* — and\n the sheet arithmetic that catches an undersized sheet before any of it is\n *Before the first cut*. An\n export costs render time, not credits (2026-09-07), so cut every view the\n cards name — but cut them **here and not before the board**, because a sheet\n the user sends back changes its panels. One state is one box and one file,\n reused by every run that names it.\n\n One `picsart_save_asset` per approved asset, with `status: \"locked\"`,\n `projectFolderUid`, tag, type, name, descriptor lines and `sheetVersion`.\n For a one-shot character, `portraitUrl` is the cropped front-face identity\n view and `turnaroundUrl` is the approved sheet; crop the profile from its\n panel. For a supplied photograph, preserve that original as `portraitUrl`,\n with the derived sheet as `turnaroundUrl`. A prop uses its plate as\n `portraitUrl`; the location uses its map when saved at `film-scenes` step 3.\n **`referenceImages` =\n the view URLs** (that is the field the library keeps them in; `film.json`'s\n `views[]` carries the richer `{ panel, position, box, url, bytes }` map),\n `scenes`. No `stressTest`:\n since 2026-09-05 the save tool locks on the approval alone — there is no\n repeatability battery anywhere in this flow, and `picsart_asset_sheet` is\n disabled on the server. Read `locked` in the result, never `saved`.\n Run independent save calls in parallel; report each ready cast subset in one line: *\"These assets are locked; their scenes can begin.\"* — and route to `film-scenes`. Writing `film.json`\n (`assets[]`, `bible`, `gates`) is silent.\n\n **The film uses the URLs the save hands back, never the ones the export gave\n you (2026-09-07).** `picsart_save_asset` re-hosts `portraitUrl`,\n `turnaroundUrl`, `referenceImages[]` and the voice sample into the durable\n bucket as it saves, and the result's `manifest` carries what it settled on\n (`manifest.portrait.url`, `manifest.referenceImages`) — those are the URLs\n `film.json` records and a run's `imageUrls` carries.\n `picsart_list_assets` is the same truth later. When the message comes back\n with the expiring warning — the durable grant is not in place for this\n service yet (`../../docs/PLATFORM-ASKS.md` #6) — say it in one plain line\n and keep the sheet's prompt, grid and panel boxes, because those are what\n lets a view be re-made. A `picsart_drive` upload adds nothing the save did\n not already try: it runs the same best-effort re-host and reports the same\n `durability`, and when the re-host is refused Drive registers the source URL\n verbatim — an expiring copy of an expiring link.\n\n **A URL that 404s later is a re-cut, not a re-generation.** The views come\n off the archived sheet at boxes `film.json` already holds; the crop is free\n and deterministic, so the file that comes back is the same pixels. Only a\n lost *sheet* is a re-generation, from its saved prompt — and that is\n charged, so it gets a quote and a yes like any other purchase.\n\n **Approving the sheets locks the descriptors** (the look itself was locked on\n the console at Stage 1). The style prefix was compiled\n from the setup console at Stage 1 and is what every sheet was generated\n under; the text portraits are the descriptors on the tiles. Nothing is\n re-approved in words — `bible.stylePrefix` was recorded verbatim at the\n console's Lock (`film-development`, Stage 1 step 2) and is read from there.\n\n **When a descriptor is amended to match what the model will render, record\n what it replaced and why** — *\"cardigan — the uniform tunic would not\n reproduce on flux-2-pro across 4 attempts\"* — in the descriptor's notes.\n Say it to the user; never rewrite a locked line silently to match an output.\n\n## What the library holds, and the gate into Stage 6\n\n- **Registry**: `film.json.assets[]` — tag, type, version, sheet URL,\n the grid, the panel map **with each panel's position**, `views[]` with each\n view's box and URL, scenes, status — updated on every lock and every new\n version. `picsart_save_asset` is the ONLY writer of the library\n `picsart_list_assets` reads (the views go in its `referenceImages`); a sheet\n or a view uploaded as a plain `picsart_drive` file is a picture nobody can\n find. Read the library, do not remember it: `byStatus` is the truth.\n- **Views×tags check**: every tag a run's cards name resolves to **one view\n file**, not to a panel of a sheet. A tag with a panel but no view is a cut\n with no pixels for it, and the fix is one crop. Same arithmetic as the check\n below, one level finer, and run at the same moment.\n- **Scene×assets check**: every tag a scene names has a\n `locked` row (a place's row locks with its pictures at `film-scenes` step 3), and every tag whose card uses a **panel** (`@cal_wet`, a\n profile) has a `sheet` — a photo-sourced row without one passes the first\n test and fails the second. This is arithmetic on `film.json`, run silently\n before the first run dispatches; a hole is a sheet nobody generated, and the\n fix is to generate it — not a board, not a conversation. **A run generates only when\n every scene it spans is covered**, and that is the one gate here.\n- **Read the location column in script order** for state the story changed: a\n scene after the fire is a dependent run that carries **frames from the run\n that burnt it**, never the clean pictures (`film-scenes` step 6). The\n check cannot see it; only reading can.\n\n## After the run — repairs that used to be pre-production\n\n- **A face that drifts in the run** is a re-roll or an edit pass\n (`film-scenes` step 5), judged on the review board — one generation, not a\n battery. If it drifts twice on the same face, tighten the descriptor's face\n lines and re-roll; if the sheet itself is the problem (face panel too small,\n two panels disagreeing), regenerate the sheet and re-cut its views. **Check\n the view before blaming the model**: a crop with a neighbour's shoulder in it,\n or a run that went out carrying a whole sheet, explains a drifting face on its\n own, and costs one re-crop rather than a generation.\n- **A two-shot that blends two faces**: fewer references — each person's\n identity and wardrobe view and nothing else — a medium two-shot rather than\n a wide; try the alternate pictures model from the live catalog (`../film-scenes/SKILL.md`, step 3,\n 2026-09-09). Not a composite of two solo renders: once the set was tight the\n 2026-09-08 film never needed one.\n- **There is no repeatability battery and no sheet board (2026-09-05).** The\n run is the check. `picsart_asset_sheet` is disabled on the server — do not\n look for it, do not describe it. A user who wants to see a face hold before\n the run gets it the cheap way: one extra still on the review board beside the\n sheet, judged by eye.\n- **Every speaking character gets a voice description.** Choose it from the\n character and story without an extra user question; save it in the character's\n `voice` field before their first speaking generation. Follow the VOICE row in\n `references/ASSET-SHEETS.md`. Native audio still uses this description in every\n speaking prompt; it does not require a voice picker, sample or cloning pass.\n\n## Costs\n\n| Free | Charged |\n|---|---|\n| descriptors, the review board, the registry and the scene check, preflight, reading panel boxes off a sheet (`picsart_view_image`, `picsart_media_probe_media`), saving and locking a user's own photo, and **cutting the views** — `picsart_media_export` costs render time and a Drive file, not credits (2026-09-07), so views are never rationed; they are cut at lock only because a sheet must be approved before its boxes are final | one sheet or plate per generated character or prop (`picsart_generate`, image rates — quote the batch once; a place's pictures are charged at `film-scenes` step 3), an angle sheet from a user's photo when the cards need one, a profile and sheet derived from a supplied photograph, an era-adapted portrait when the user chose it, any change round |\n\n## Traps\n\n- Generating a passport, a battery and a matrix out of habit. Removed\n 2026-09-04, and the sheet board itself is disabled on the server since\n 2026-09-05: one sheet, one approval, the run is the check.\n- Boarding a picture nobody looked at because the viewer said \"too large\".\n Use the preview path in `film` rule 4 and look; six hours of unseen pictures cost a film its\n heroine's hair on 2026-09-08.\n- A sheet with two people on it, a face panel too small to read, or figures\n spilling across the gutters. A weak face panel is a weak film, and a sheet\n that cannot be cut into clean views cannot reach a run at all.\n- **Passing a multi-panel image to the video model at all** — a sheet, or a\n composite the user supplied — and trusting a worded pointer to pick the\n panel. That is sc04a and sc04b: four faces in one picture, the right one\n named, a different wrong one rendered each time — and one frame a blend of\n two panels, a face not in the cast. Cut it. There is no wording that fixes it\n and no fallback pointer; if the crop path is down, the run waits\n (`references/ASSET-SHEETS.md`, *A panel pointer is a dispatch error*).\n- Two adult states of one character on one sheet, unflagged. It is the pair\n most likely to blend; separate them on the grid, keep them as two view\n files, and say so when the sheet is designed.\n- A character sheet with a scenic background. Neutral grey is not aesthetic —\n a location behind a reference leaks into every shot that reference touches.\n- Generating a location here, empty, from its descriptor. The handbook's order\n is scene first, place from it — an empty place renders unreal (2026-09-08).\n- Evaluative descriptor words (\"beautiful\", \"stylish\"). If a costume department\n could not buy it from the description, the model cannot hold it.\n- Re-approving in words what the user already approved as a picture — a\n descriptor round, a bible round, a \"gate passed\" round.\n- Descriptor edits that rewrite instead of touching one line.\n- Re-encoding, enhancing or cutting out a user's photo on the way in — or\n generating a lookalike from a descriptor when the user gave the real face.\n The original is saved byte-for-byte and is what IMAGE 1 comes from; every\n changed copy is a new derived file with its reason recorded, and only for a\n composite cut into views, the byte ceiling, the size floor, or a leak the\n first run proved. **Cutting a composite is not an exception to this** — the\n original is untouched and the views are cut from a copy.\n- Putting a user's own photo on the review board. They gave it; only a sheet\n generated from it is a question.\n- Redrawing a state panel from scratch on a new sheet because i2i is down. A\n from-scratch `@seneb_swollen` is a different man than `@seneb`; park it and\n retry when the endpoint recovers.\n- Restyling a user's photograph to the tone's era without being asked, or\n dressing a generated cast in today's hair and wardrobe under a vintage tone\n without saying so. The era offer is made once and answered; the mismatch is\n said once and decided (2026-09-07).\n- An asset prompt without the film's medium and compatible visual styling. Use\n `bible.assetStylePrefix` for neutral references, not scene staging. The picture otherwise\n belongs to no film, and a cartoon on a live-action drama is what comes back\n — and it is a re-dispatch, never something the user is asked to regenerate\n (2026-09-07).\n- A back panel on every sheet by habit — face pixels spent on a shoulder; the\n four-panel sheet only when a card needs the back. Swapping a step's model for\n resolution's sake: the handbook's pairing stands while the user tests GPT\n Image 2's output as it comes (2026-09-07).\n"
}SHA-256 of public snapshot: 3d5d60ef602d4dcbf243a69379eda25142d836f5376c351c7e829fd227a01a80