← Files PicsartARCHIVED FILE
docs/SKILLS-AUDIT-2026-09-09.md
26.7 KB · Oct 10, 2026 · 18:02 UTC
# Skills audit — 2026-09-09
Every file under `skills/` (22 files, 7,750 lines) read in full, in five passes by
theme, plus mechanical checks (cross-references, tool names against the 46 tools
the stage server serves, `film.json` keys, widget feedback versions against the
widget code) and the live model catalog. Nothing was changed. This file is not
committed; it is the list to pick from.
Line numbers are as of commit 4d3f2c9 on picsart-film.
**Fixed on 2026-09-10 (user-approved):** A.1–A.12 (A.8 reworded to "read the
schema"; A.12 as "picks the user made go into the shot block"), B.16 (block
names in the preset files), B.38, B.46, B.47 (Stages 2 and 3 folded into
Stage 1), B.36 (example record), plus: models named as families with the ids
recorded in `film.json.model.pictures`; never drop references silently. Left
by the user's decision: everything in C except C.8, and the rest of B.
---
## A. Would break a film today
A chat that follows these lines makes a wrong or refused call, or two skills tell
it opposite things about the same step.
1. **The prompt carries the descriptor — or it does not.** `film/SKILL.md:570`
(rule 2, "the descriptor is copied verbatim into every prompt"),
`film-assets/SKILL.md:43–44` ("pasted verbatim into the references header"),
`film-scenes/SKILL.md:1266` (trap: shortening it) and `PIPELINE.md:353` say yes.
`film-scenes/references/PROMPT-BLOCKS.md:56–57` ("No descriptor is pasted
anywhere in the prompt") and `film-scenes/SKILL.md:672` say no. Two prompt
shapes are documented at once; the newer one (2026-09-09) is the pictures-only
one, and a rule that "never bends" orders the old one.
2. **The vintage portrait is asked at a ratio the model refuses.**
`film-assets/references/ASSET-SHEETS.md:241` ("Vintage path: `gpt-image-2`,
16:9"), also `:171`, `:250`, `film-assets/SKILL.md:191`, `PIPELINE.md:177`.
`film-scenes/SKILL.md:731–732` records that this model "rejects the film's
widescreen ratio (`size has wrong value`, 2026-09-08)". The schema lists 16:9,
so preflight passes and the provider refuses after the wait. Every film on the
six era tones fails at its first portrait.
3. **The run example breaks rule 7.** `film/SKILL.md:405–410`: the refs are
`cal-front`, `tobin-front` (identity only, no wardrobe view for either) and
`START FRAME` is the fifth picture (rule 7 at `:600–603` says the frame is
picture 1). The example is what the chat copies. The newer rule wins.
4. **The reference ladder drops what rule 7 keeps.**
`ASSET-SHEETS.md:736–741`: "hold under 15 MB and 6–8 images… 1. Drop stills.
2. Drop wardrobe views." `film-scenes/SKILL.md:610–613`: "the old 6–8 cap is
gone (2026-09-08)… identity and wardrobe views never leave". Following the
older ladder reproduces the bridge-clip wardrobe change.
5. **Two opposite repairs for a blended two-shot.** `ASSET-SHEETS.md:771–774`:
generate each person alone, composite them, pass the composite as `FRAME
REFERENCE`. `film-assets/SKILL.md:357–360`: "Not a composite of two solo
renders" — fewer references, medium two-shot, Seedream. Both are dated
current.
6. **Sheets and plates still travel in `imageUrls`.** `film/SKILL.md:709`
("enough slots for every asset sheet, plate and approved still"),
`PIPELINE.md:255` ("every asset sheet and plate in `imageUrls`… spelling out
its every console choice"). `film-scenes/SKILL.md:110` ("never a multi-panel
sheet"), `ASSET-SHEETS.md:563` ("views, not sheets"), `PROMPT-BLOCKS.md:128–130`
("no restated console values"). A sheet in `imageUrls` is the panel-pointer
dispatch error.
7. **The Kling shape uses the start-frame field.** `PROMPT-BLOCKS.md:132–150`:
15 s generations, two images, "`Use start frame @`", dialogue shot speaker by
speaker. Rule 7 says the `startFrame` field is never filled on any clip;
`film-scenes/SKILL.md:161–166` says no film shoots shot by shot; the model
policy (`film/SKILL.md:705–725`) requires multi-shot and edit/extend siblings,
which Kling lacks. Either the section says Kling is outside this pipeline, or
it goes.
8. **The duration ladder is asserted, the schema says otherwise.**
`film-scenes/SKILL.md:259` ("Seedance 2.5 takes 4/5/6/8/10/12/15/20/25/30 and
has no 7"), `:656`. Live `picsart_model_params`: `duration` min 4, max 30,
step 1. Only the run total (`genSec`) reaches the model, so the doc's own
"7 s card snapped to 8 s" example is moot: a shot packs into a run. What
remains: if the schema is right, "snap the run up the ladder" buys seconds
nobody needs; if the doc is right, preflight lets a 27 s run through and the
provider refuses after the wait. **Settled 2026-09-10:** a 7 s call was
accepted and delivered at 7.04 s. The schema is right; the ladder note is
gone from the doc.
9. **Dependent-run frames replace the room's pictures but say nothing about the
people.** `film-scenes/SKILL.md:1176–1180`: the exported frames "replace that
place's pictures… scene picture, coverage, and the map". A character who is
now dusty or torn keeps a clean wardrobe view beside the frame — exactly the
averaging `PROMPT-BLOCKS.md:227–230` warns about. No line says the state view
replaces the wardrobe view.
10. **Rule 7 has no answer for a photo-sourced person.** Rule 7 demands an
identity view and a wardrobe view of every person. `film-scenes/SKILL.md:596–598`
and `ASSET-SHEETS.md:573–575`: for a photographed character the photo is the
identity image and the sheet is skipped when the photo shows what the cuts
need. What is the wardrobe view then — the photo again, a crop, nothing?
Unstated.
11. **A prop's plate is paid for and never used.** `film-assets/SKILL.md:58`: "A
prop: one plate, judged on the same board." `film-scenes/SKILL.md:772`: "no
prop plate" in the scene picture's references; `:672`: no descriptor in the
prompt. The plate reaches no picture and no prompt; only the *Visible* line
carries the object. Rule 7 covers people; the flask that drifted is still
uncovered.
12. **The board's pills, the card's fields and the shot block do not match.**
`BREAKDOWN.md:22–25` card = Size, Movement, Lens, Angle.
`WIDGET-FEEDBACK.md:382–396` board = size, move, lens, light, palette, sec;
`:400–401` angle/height are pass-throughs with no pill.
`film-development/SKILL.md:117–119` says the user changes "angle" on the board.
`film-scenes/SKILL.md:415` "six decisions — size, camera move, lens, light,
colour, length"; `PROMPT-BLOCKS.md:128` the shot block carries none of lens,
light or colour. The preset files still say they do: `PRESETS-CAMERA.md:452`
"Degrees are what goes in the prompt", `PRESETS-LIGHTING.md:134` "written
straight into the scene picture's prompt" (the thirteen-line template at
`film-scenes/SKILL.md:754–766` has no lens or light line),
`PRESETS-ACTING.md:6` compiles the wheel into "the Character acting block
(12)" while `PROMPT-BLOCKS.md:101` allows "one or two words per visible
face". Lens, light, palette and the acting wheel are chosen and reach nothing.
## B. Misleads the chat
Stale or self-contradicting text. A chat reading it runs the wrong ceremony,
names the wrong file, or quotes the wrong number.
13. **Project folder tree is pre-story.** `film/SKILL.md:244–246`: `script.md
(the scenes as written)`, `prompts/ … per shot: sc01_12A_v3.md`. Stage 1 now
writes `docs/story.md` (`film-development/SKILL.md:49`), one prompt per video
(`film/SKILL.md:592`). `brief.md` (`:251`) and `pitch.md`
(`film-development/SKILL.md:251`) overlap the story document with no rule on
which is canon. `DISCLOSURE.md` is missing from the tree and has two homes
(`film-finishing/SKILL.md:127` under `docs/`, `DELIVERY.md:51` in the rights
folder).
14. **The pipeline map names Stage 1 by its last step.** `film/SKILL.md:204–206`:
"1 | Shot list", "3 | The film's look". Stage 1 is console, story, model,
plan, board (`:124–136`); the look locks at Stage 1 step 2
(`film-development/SKILL.md:20`).
15. **Voice policy "decided at the bible lock".** `film-scenes/SKILL.md:691–692`,
`film-finishing/SKILL.md:66–67`, `SCREENWRITING.md:45–46`.
`film-development/SKILL.md:241`: "The voice policy is `native`, and there is
nothing to decide."
16. **Names from the deleted fifteen-block template.** `film-scenes/SKILL.md:454`
("blocks 8, 9 and 10"), `:652` ("Block 11"), `:1195` ("block-7 recompile"),
`:1269`, `PIPELINE.md:355`, `SEAMS.md:168` ("blocking block");
`PRESETS-CAMERA.md:4–7` "(7)… (6)… (4)", `PRESETS-LIGHTING.md:6` "block
(10)", `PRESETS-ACTING.md:6` "block (12)". `PROMPT-BLOCKS.md` has no
numbered blocks.
17. **Stage 3 re-describes Stage 1 work.** `film-development/SKILL.md:230–234`:
"Compile the style prefix, store it verbatim in `bible.stylePrefix`… the
script is rewritten first". The console compiles the prefix at Stage 1
(`:30–31`, `WIDGET-FEEDBACK.md:22–23`); the word is story.
18. **Runtime measured three ways.** `DRAMATURGY.md:39–40` seconds per scene at
~2.5 words/s + 1 s; `SCREENWRITING.md:97–98` "Count runtime in shots, not
pages"; `film-development/SKILL.md:172` "A script page is roughly a minute".
The story document has neither pages nor shots.
19. **A supplied script gets no seconds.** `film-development/SKILL.md:109–113`:
"Nothing else is reviewed; the video model and the video plan follow." The
plan is written against per-scene seconds (`DRAMATURGY.md:39`); no step
gives a supplied script its seconds.
20. **Contact sheets free and charged in the same file.**
`film-scenes/SKILL.md:1170` "(up to eight thumbnails, free)", `:1258` free
column; `:1225` "contact sheets are charged per frame", `film/SKILL.md:776`
charged.
21. **Where the handle seconds live is unstated.** `film-scenes/SKILL.md:504`:
skip handles "only when the run is already at the model's ceiling"; `:326`:
every video fills "up to the model's live ceiling". No line says whether the
two-second handle sits inside `genSec` or on top of it. The worked prompt
(`PROMPT-BLOCKS.md:262`) sums to 28 s with no handle seconds while the
dispatch checklist (`:175`) wants shot seconds to "sum to the video's
length"; `film-edit/SKILL.md:35–38` and `PIPELINE.md:263` plan around handles
that exist.
22. **Stop rules for retries are scattered and unlabelled.**
`film-scenes/SKILL.md:141` (edit: two tries), `:782` and `:1285` (picture
faces: never a third roll), `:1014` (runs: four or five), `:1119` (shots:
third attempt → split). Different objects, but nothing says which rule
applies to which.
23. **The zero-memory word list differs by file, and the join line breaks it.**
`PROMPT-BLOCKS.md:190` bans "still"; `SEAMS.md:25` example "still moving
right"; `film-scenes/SKILL.md:1310` shorter list; `SEAMS.md:96–98` the
canonical join line "picks that movement up from this new angle" refers to
the other video.
24. **`EXACT 2 CHARACTERS — NO DUPLICATES.` is hardcoded** in the template
(`PROMPT-BLOCKS.md:34`). A three-person video pastes the wrong count.
25. **Widget contract text vs widget code.**
`WIDGET-FEEDBACK.md:97` `asset_review_feedback` "at v3" — code
`widgets/src/asset-review/feedback.ts:30` is `version: 4`. No
`model_choice_feedback` section exists (code v1) though `picsart_model_choice`
is used in Stage 1. `:321`, `:382` "seven values" — six are listed. `:210–211`
"the shot list's Length control offers exactly the durations the chosen model
accepts" — under the run doctrine a shot's `sec` is a cut length inside the
run, not a model duration; only `genSec` is (`:396` fixed `sec` 3|5|7|8|10|12).
`:151–153` "`cut.order`… no longer sent" — `:113` example carries
`"order": 3`, `film-edit/SKILL.md:174`, `:249` reorder in place.
`:486`, `:489` render-monitor example still `seedance-2.0`.
26. **Camera-move count: 48, 50 or 51.** `film-edit/SKILL.md:293` "any of the
51", `WIDGET-FEEDBACK.md:408` "all 48 ids", `docs/widget-specs/shotlist-board.md`
"51" / "48-option" / "fifty" (the other session's uncommitted text).
`PRESETS-CAMERA.md:19` and `widgets/src/camera-moves.ts` both have 50; the
board shows 32 of them (C.9).
27. **"Tier 1" is used and never defined.** `WIDGET-FEEDBACK.md:505–507`,
`film-scenes/SKILL.md:423`, `PRESETS-LOOKS.md:572`, `:597`,
`PRESETS-CAMERA.md:25`, and a "Tier-1 use" section in each of
`PRESETS-CAMERA.md:572`, `PRESETS-LIGHTING.md:214`, `PRESETS-ACTING.md:83`.
It is defined only in passing (`PRESETS-LOOKS.md:597` "no console on the
server", `WIDGET-FEEDBACK.md:503–505`), never in `film/SKILL.md`, and it
shares its word with the deleted asset and complexity tiers
(`film-assets/SKILL.md:50` "no tiers"). `WIDGET-FEEDBACK.md:505–507` says shot
design and acting run as the host's question interface menus though the shot-design
panel is retired. See C.1 for why this matters.
28. **`picsart_music_studio` is not a served tool.** `film-finishing/SKILL.md:100`.
The fallback in the same line works (`picsart_generate` with
`elevenlabs-music-v2`, `minimax-music-v3` or `lyria-3-pro`). The Stage 10 bed
sits correctly beside the prompt's no-music line: one stops music inside the
clip, the other adds a bed later.
29. **An upscale that exists and one that does not.** `film-edit/SKILL.md:318` "the
finishing upscale masks some of it"; `film-finishing/SKILL.md:146` "Calling the
final pass an upscale. It is a fresh roll." `film-finishing/SKILL.md:20–26`
"upscale FIRST… then re-assemble at ≤1920×1920" — pixels above 1080p cannot
ride through that export.
30. **480p hardcoded.** `ASSEMBLY.md:67` "Draft canvas 854×480 to match 480p
drafts", `film-finishing/SKILL.md:10`, `film/SKILL.md:14`;
`film-scenes/SKILL.md:681` drafts at the finish resolution when the price is
the same.
31. **Export billed in two places.** `ASSEMBLY.md:56` "Free look-checks before a
charged one", `film-edit/SKILL.md:314` "the cost rides inside the export";
`film-edit/SKILL.md:209` export is free.
32. **Rough cut and solo takes as the normal unit.** `PIPELINE.md:349` gate "The
run roughly cut" vs `film-edit/SKILL.md:20` rough cut off.
`PIPELINE.md:363–364`, `film-edit/SKILL.md:79–83` "a solo take is generated
10–15s and cut to 3–8s" as the ordinary case; the run is the unit.
33. **Step 7 works in scene batches.** `film-scenes/SKILL.md:1242–1246` "While
scene N iterates, shotlist N+1" vs one film-wide shot list and every
non-dependent video dispatching together (`:319–352`).
34. **One board or two for the cast.** `film-assets/SKILL.md:3`, `:165` one board;
`:8`, `:196`, `PIPELINE.md:146` two boards.
35. **"Pictures with people on seedream-5.0-pro" reads as covering portraits.**
`PIPELINE.md:296`. Portraits and sheets are on `gpt-image-2` /
`gemini-3.1-flash-image` (`film-assets/SKILL.md:198–201`). The word "scene"
is missing.
36. **The asset example is the 2026-09-04 sheet.** `film/SKILL.md:437–447`: a 4K
gridded six-panel PNG sheet, a face view cut from the sheet's panel.
`ASSET-SHEETS.md:33–39` three generations (portrait, profile, T-cut sheet),
`:167` JPEG never PNG, `:626` "face panels are never the source of a view".
`film.json.model.roles` (`:421`) has `facesAndLocations`, `pointEdits`,
`textInFrame`; the last is used nowhere and no slot records the two picture
models (people on Seedream, map on GPT).
37. **A date before the thing it dates.** `film/SKILL.md:693–694` places the
model pick "before the video plan is written (2026-09-03…)"; the video plan
is from 2026-09-09.
38. **Stage 2 boards decide a camera Stage 1 already approved.**
`VISUAL-BIBLE.md:27–29` "how a scene is shot is fixed in advance precisely by
these boards — from them the shotlist and prompts are written". The shot
list is Stage 1 step 6.
39. **Input pixel limit.** `film-scenes/SKILL.md:608` "declares no input pixel
limit" vs `:1127` and the live 300–6000 px height rule.
40. **"Generate one size wide when the shot can afford it."**
`film-scenes/SKILL.md:477` — the board approved the size; this changes it
silently, which `:259–262` calls "an approved plan being quietly changed".
41. **Pointers that point the wrong way.** `film-scenes/SKILL.md:688–694` "see the
next section" (the audio section is above, `:511`); `:650` "(see step 3)" for
a scratch mix.
42. **Vocabulary drift in BREAKDOWN.** `BREAKDOWN.md:12`, `:40`, `:53` "script";
`:22` size ladder ECU→WS is a subset of the board's
(`WIDGET-FEEDBACK.md:383`).
43. **ASSET-SHEETS leftovers.** `:466` "A plate (2-shot locations, props)" —
locations left Stage 4 (`:430`); `:155–163` vintage views under the 1024 px
floor are "reported, not repaired" vs `:663–664` "never cross".
`film-assets/SKILL.md:378` costs a sheet twice ("one sheet or plate per…"
and "a portrait, a profile and a sheet per character").
44. **Dead or fragile paths.** `PRESETS-CAMERA.md:15`
`../../docs/widget-specs/shot-design-panel.retired.md` resolves to
`skills/docs/…` (needs one more `../`). `ASSET-SHEETS.md:380`
`PRESETS-LOOKS.md` named without a path (it is in `film/references/`).
`film-scenes/SKILL.md:1122`, `WIDGET-FEEDBACK.md:100`, `:266` point the review
contracts at `../../../picsart-video/skills/video-from-idea/references/REVIEW-FEEDBACK.md`
— the sibling plugin; a film-only zip ships without it.
45. **Board fallback invites action edits.** `film-development/SKILL.md:155–158`:
without the board, "a markdown table per scene with one 'anything to change
in any scene?'". No fallback form is stated for camera-only or for the
story-note rule.
46. **Three files say the console owns the Light pill.** `WIDGET-FEEDBACK.md:177–178`
"Its presets are what the shot cards' lens, light and colour pills offer",
`film/SKILL.md:129–130`, `film-development/SKILL.md:31–32`. The console has
no light preset (`PRESETS-LOOKS.md:282–306`, lighting is per shot); `Light`
comes from `lighting.ts`.
47. **When the look locks: four answers.** `film/SKILL.md:125` Stage 1 ("the look
console, locked"); `PRESETS-LOOKS.md:27` "at the Stage 3 gate";
`WIDGET-FEEDBACK.md:188` "satisfies the Stage 3 gate item";
`film-development/SKILL.md:264` "the lock is the sheet approval in Stage 4".
48. **Two arrangement fragments differ between doc and widget lib.**
`PRESETS-CAMERA.md:432` (over-the-shoulder, "their back visible, in front of
them is <subject> <subject's character view>") and `:438` (POV, "only their
hands are visible") carry the 2026-09-08 handbook wording;
`widgets/src/shot-sizes.ts:128` and `:133` still carry the old sentences. The
doc is the source of truth; the lib was not re-transcribed.
49. **Camera moves "serve the film-setup console's world default".**
`PRESETS-CAMERA.md:19–21`. Movement left the console on 2026-08-31
(`PRESETS-LOOKS.md:531–545`; `camera-moves.ts:17–19` "Film setup was a fourth
reader and is not any more").
50. **Emotion intensity default is 1 and 2.** `PRESETS-ACTING.md:15–16`
"Intensity 1 is… the default" vs `:30–32` "A surface with no intensity
control… uses intensity 2" and `emotions.ts` `DEFAULT_INTENSITY = 2`.
51. **Small preset-file slips.** `PRESETS-CAMERA.md` shot-size ladder (from
`:386`) says "Nine rungs, wide to tight" — the table runs tight to wide. `PRESETS-CAMERA.md:363` "If you are
generating a start frame too" never says the frame rides as picture 1
`START FRAME` in `imageUrls` (rule 7). `WIDGET-FEEDBACK.md:337–338` "the same
lists the film-setup console and the review board draw… and rhythm" — the
console draws none of them and rhythm is retired. `VISUAL-BIBLE.md:15–29`
still gathers "Cutting tempo" references nothing reads.
52. **Widget help text the user sees is stale (server repo).**
`widgets/src/shotlist-board/presets.ts:281` help text "The same eight the
film-setup console offers" (seventeen palettes); `:259` comment "SEVEN, not
nine" (six controls);
`:10–13` says seventeen, then "whichever of the eight";
`widgets/src/film-setup/presets.ts:655` Tone hint "it sets the camera, lens
and colour" (also focal length and aperture, `:541`). Comment-only leftovers:
`film-setup/presets.ts:9`, `:23`, `:556`, `:827`, `:1010`,
`shotlist-board/presets.ts:22`.
## C. Limitations the docs should state
Platform facts, not wording. Each needs a sentence in the right place, or a
server or widget ask.
1. **The film boards exist only on the stage branch.** At the launch freeze main
served 34 tools and `film-ux-polish` 50; main's head today (fd5fbcd) was not
re-counted here. If main still serves the pre-film tool set, every board
line on production falls through to the "tier 1" fallback the docs no longer
define (B.27). Highest impact of anything here.
2. **Drive does not keep the bytes.** The durable re-host is refused ("User not
authorized"); Drive registers the CDN link verbatim, `durability: 'expiring'`.
Lines that promise otherwise: `film/SKILL.md:262` ("nothing ever lives only
on a CDN"), `:340` ("the difference is not durability"), `:797–799` ("the save
re-hosts"), `film-edit/SKILL.md:348`, `film-finishing/SKILL.md:112`,
`DELIVERY.md:41`, `WIDGET-FEEDBACK.md:451`. Only `film-assets/SKILL.md:297–303`
is honest.
3. **A failed job's charge is unknown.** Job status carries no cost.
`WIDGET-FEEDBACK.md:495–499` "regenerate only `failed[]`" — nothing warns that
the regenerate may be a second charge. Server ask: charged/not in the failure
payload.
4. **`gpt-image-2` lists 16:9 and refuses it.** Preflight passes, the provider
rejects after the wait (A.2). Server ask: drop 16:9 from that model's enum or
refuse it in preflight.
5. **`returnLastFrame` exists on seedance-2.5 and no skill uses it.** The only
last-frame path given is a native-size `picsart_media_export` or a charged
contact sheet. Worth one probe: if it returns the frame at delivery size, the
changed-place handoff gets cheaper.
6. **Video upscalers have bounds the docs do not mention.** `flux-video-upscale`
takes sources ≤ 20 s and ≤ 2K; runs are 30 s. `topaz-upscale-video` and
`bytedance-video-enhance` exist. `ltx-2.3-a2v` (`film-finishing/SKILL.md:87`)
is 2–20 s.
7. **`picsart_save_asset` does not auto-cut views.** Still open (panel geometry).
8. **The plugin zip is not rebuilt.** The film chat still loads the pre-2026-09-09
docs; everything fixed today is invisible to it until the zip is rebuilt.
10. **Widget ask (2026-09-10): drop the per-character emotion picks from the
review board's direction panel.** The chat writes the emotion words from the
acting wheel; the user is not asked. Until the widget changes, a pick that
arrives is read as a note, not a control.
9. **The board lists 32 of the 50 camera moves.** `widgets/src/camera-moves.ts:695`
`PREVIEWED_ONLY = true` hides every move without a preview tile: pedestal,
low tracking, roll, dolly counter, crane down, push through, snap tilt, drop
reveal, through glass, mirror / insert POV, helicopter pull, robot arm, rack
focus, infinite zoom, earth zoom out, time-lapse, tilt-shift glide, pass
through. `roll` was added on 2026-09-08 for the handbook's "Camera Rolls
Clockwise" and cannot be picked. `WIDGET-FEEDBACK.md:406` admits the filter;
`PRESETS-CAMERA.md:13–21` does not. Move previews are still owed.
## D. Checked and consistent
- Stage 1 order and six steps: `film-development/SKILL.md:13–76`,
`film/SKILL.md:124–136`, `PIPELINE.md:17–58`; "step 3 of 6" matches.
- `runs[]` skeleton `id, scenes, genSec, join` identical in four places; the
run example carries `join`.
- Story note → rewritten paragraph, never a board: five files agree.
- `imageUrls` only, `startFrame` empty, picture 1 = `START FRAME`: rule 7,
`film-scenes/SKILL.md:554–597`, `PROMPT-BLOCKS.md:154–171`, `SEAMS.md:53–57`,
`PIPELINE.md:306–309`, model policy — all agree (the example in A.3 is the
exception).
- Edge = angle change + carried movement, no frame copying, parallel dispatch,
one dependent-run exception: `film-scenes`, `SEAMS`, `PIPELINE`, `film-edit`
agree.
- Extend / edit / re-roll routing agrees across `film-scenes` step 5, `SEAMS`,
`film-edit`, `PIPELINE`.
- Ceiling 30 s, ~2.5 words/s + 1 s, 300 px floor, 1280 px check copies,
2048 px cap, 3 MB per file, 15 MB total: one value each, no conflicts.
- Views cut at lock, JPEG q85, `content.bounds` mandatory, panel pointer =
dispatch error: identical in `film-assets`, `ASSET-SHEETS`, `PIPELINE`,
`film-scenes`.
- Scene-picture chain (medium two-shot base, views only, look before deriving,
sides off the master, two face failures → change set/model, one board):
`film-scenes:743–843`, `PIPELINE:292–308`, `film-assets:357–360` agree.
- The room map is asked at 1:1, which `gpt-image-2` accepts; no doc asks
`seedream-5.0-pro` for 4K (its max is 2K).
- Rough cut off, one review, export free, final cut renders in the browser,
`shotlist_board_feedback` v3, the take-review board's feedback v2, `film_setup_feedback`
v3, `final_cut_feedback` v1 match the widget code.
- Pace text and "every charged video dispatch is quoted and approved" agree.
- Preset libraries vs widget code, character for character: 10 genres,
17 palettes, 7 tones + auto (same `sets` and clauses), 13 cameras, 10 lenses,
6 focal lengths, 6 apertures, 5 frames, 2 handles; 50 camera moves incl.
`roll` and `handheld shaky`; 10 FOV anchors; 9 angles incl. the three handbook
additions; 9 shot sizes; 17 lighting setups; 8 × 3 emotions. Every "older
id" and "retired id" row has an alias in the code. No music, grain, framing,
shot-length, movement or pace control on the console. A24 absent.
- No "matches the book" claims anywhere in `skills/`.
## E. Live facts used (stage server, 2026-09-09)
| Model | Fact |
|---|---|
| seedance-2.5 | `duration` 4–30 step 1; `imageUrls` ≤ 30, `videoUrls` ≤ 10, `audioUrls` ≤ 10; `startFrame`, `endFrame`, `returnLastFrame` exist; 480p/720p/1080p |
| seedance-2.5-video-extend | up to 10 clips |
| seedream-5.0-pro | 1K / 2K only; `imageUrls` ≤ 10 |
| gpt-image-2 | no resolution control; `imageUrls` ≤ 5; enum lists 16:9, backend refuses it |
| gemini-3.1-flash-image | 0.5K–4K; `imageUrls` ≤ 14 |
| music | elevenlabs-music-v2, minimax-music-v2/v3, lyria-3-clip, lyria-3-pro |
| SFX | elevenlabs-sfx (≤ 15 s), kling-t2a (3–10 s) |
| video upscale | flux-video-upscale (source ≤ 20 s, ≤ 2K), topaz-upscale-video, bytedance-video-enhance |
| served tools | 46; not served: picsart_music_studio, picsart_video_compare, picsart_asset_sheet, picsart_shot_designer, picsart_grade_console, picsart_film_tracker |
SHA-256: b55c4a88938e7062b8fdc47cbe225c1cf4528dc33b891dd490949aa925612213