cueframe 0.9.4 → 0.11.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +39 -30
  2. package/dist/analyze-C3MSCON6.js +2 -0
  3. package/dist/chunk-OAJBHFAJ.js +18 -0
  4. package/dist/cueframe.js +55 -54
  5. package/dist/skills/add-music-bed/SKILL.md +5 -23
  6. package/dist/skills/brand-reel/SKILL.md +5 -28
  7. package/dist/skills/clip-a-talking-head/SKILL.md +2 -20
  8. package/dist/skills/composing-video/SKILL.md +36 -424
  9. package/dist/skills/composing-video/references/acceptance-template.md +21 -0
  10. package/dist/skills/composing-video/references/audio-design.md +125 -0
  11. package/dist/skills/composing-video/references/card-and-motion-runtime.md +49 -0
  12. package/dist/skills/composing-video/references/craft-principles.md +25 -0
  13. package/dist/skills/composing-video/references/film-planning.md +37 -0
  14. package/dist/skills/composing-video/references/format-decisions.md +17 -0
  15. package/dist/skills/composing-video/references/format-playbooks.md +96 -0
  16. package/dist/skills/composing-video/references/motion-design.md +25 -0
  17. package/dist/skills/composing-video/references/project-policy.md +18 -0
  18. package/dist/skills/composing-video/references/sfx-pack.md +69 -0
  19. package/dist/skills/composing-video/references/sound-and-timing.md +15 -0
  20. package/dist/skills/composing-video/references/tool-map.md +43 -0
  21. package/dist/skills/cueframe-brand-demo/SKILL.md +2 -8
  22. package/dist/skills/cueframe-cli/SKILL.md +73 -59
  23. package/dist/skills/cueframe-component-authoring/SKILL.md +20 -169
  24. package/dist/skills/cueframe-component-authoring/references/authoring-paths.md +72 -0
  25. package/dist/skills/cueframe-component-authoring/references/forking-and-layout.md +35 -0
  26. package/dist/skills/cueframe-component-authoring/references/native-component-workflows.md +98 -0
  27. package/dist/skills/cueframe-component-authoring/references/native-source-contract.md +54 -0
  28. package/dist/skills/cueframe-component-authoring/references/parented-device-card.json +13 -0
  29. package/dist/skills/cueframe-component-authoring/references/parented-motion.md +25 -0
  30. package/dist/skills/cueframe-component-authoring/references/retired-projects.md +26 -0
  31. package/dist/skills/cueframe-compose-loop/SKILL.md +14 -112
  32. package/dist/skills/cueframe-compose-loop/references/convergence-loop.md +128 -0
  33. package/dist/skills/cueframe-compose-loop/references/preview-workflow.md +7 -3
  34. package/dist/skills/cueframe-connect/SKILL.md +4 -9
  35. package/dist/skills/cueframe-connect/references/tools.md +146 -0
  36. package/dist/skills/cueframe-product-video/SKILL.md +9 -14
  37. package/dist/skills/cueframe-reference-video/SKILL.md +30 -0
  38. package/dist/skills/cueframe-reference-video/references/measurement-and-comparison.md +45 -0
  39. package/dist/skills/cueframe-reference-video/scripts/motion-grid.sh +116 -0
  40. package/dist/skills/cueframe-scene-shot/SKILL.md +2 -8
  41. package/dist/skills/cueframe-storyboard/SKILL.md +1 -7
  42. package/dist/skills/every-format-from-one-edit/SKILL.md +3 -19
  43. package/dist/skills/extracting-brand-kits/SKILL.md +1 -7
  44. package/dist/skills/launch-video/SKILL.md +6 -26
  45. package/dist/skills/make-a-social-reel/SKILL.md +7 -26
  46. package/dist/skills/rebrand-a-video/SKILL.md +2 -19
  47. package/dist/skills/video-craft-standards/SKILL.md +20 -103
  48. package/dist/skills/video-craft-standards/references/format-standards.md +118 -0
  49. package/package.json +12 -11
  50. package/dist/analyze-XP2BESVX.js +0 -2
  51. package/dist/chunk-RSOHINDT.js +0 -18
@@ -0,0 +1,146 @@
1
+ # CueFrame tool reference
2
+
3
+ Generated from the @cueframe/mcp 0.13.0 catalog (commit eb1b03358). Do not edit it by hand.
4
+
5
+ Every CueFrame tool by its catalog name. A host may show it with a connection prefix (`mcp__cueframe__get_account`, `cueframe-read__get_account`); the name after the last `__` is the catalog name. **read** tools change no state, though some are metered; **write** tools change state, and a composition write takes the revision it edits.
6
+
7
+ Hosted surfaces: `api` is the MCP server at `https://api.cueframe.ai/v1/mcp`; `editor` and `compose` are the hosted Director's editor and compose sessions. Desktop surfaces: `director` is the desktop app's agent, `plan` its planning mode, `external` an outside MCP client connected to the desktop app, and `cli` the Director running as a CLI agent such as Claude Code. A tool is callable only on the surfaces listed for it; list your host's tools for what this connection serves.
8
+
9
+ | Tool | Access | Hosted | Desktop |
10
+ | --- | --- | --- | --- |
11
+ | `analyze_transcript` | read | editor, compose | director, plan, external, cli |
12
+ | `apply_composition` | write | api, editor, compose | director, external, cli |
13
+ | `apply_template` | write | api, editor | director, external, cli |
14
+ | `cancel_compose` | write | api | - |
15
+ | `cancel_export` | write | api | - |
16
+ | `cancel_job` | write | api | - |
17
+ | `cancel_render` | write | api | - |
18
+ | `check_template` | read | - | director, plan, external, cli |
19
+ | `close_component_preview` | write | - | director, plan, external, cli |
20
+ | `close_project` | write | - | external |
21
+ | `commit_component_preview` | write | - | director, external, cli |
22
+ | `compare_frames` | read | api, editor, compose | director, plan, external, cli |
23
+ | `compose` | write | api | - |
24
+ | `consult` | write | api | - |
25
+ | `create_brand_kit` | write | api | - |
26
+ | `create_brief` | write | api | - |
27
+ | `create_checkout` | write | api | - |
28
+ | `create_component` | write | api, editor, compose | director, external, cli |
29
+ | `create_project` | write | api | external |
30
+ | `create_render` | write | api, editor, compose | director, external, cli |
31
+ | `create_upload` | write | api | - |
32
+ | `create_webhook` | write | api | - |
33
+ | `delete_brief` | write | api | - |
34
+ | `delete_composition` | write | api | - |
35
+ | `delete_critic` | write | api | - |
36
+ | `delete_media` | write | api | - |
37
+ | `delete_project` | write | api | external |
38
+ | `delete_webhook` | write | api | - |
39
+ | `derive_composition` | write | api, editor, compose | director, external, cli |
40
+ | `describe_composition_ops` | read | api, editor, compose | director, plan, external, cli |
41
+ | `download_media` | read | api | - |
42
+ | `edit_component` | write | - | director, external, cli |
43
+ | `editorial_apply` | write | api, editor, compose | director, cli |
44
+ | `editorial_begin` | write | - | director, cli |
45
+ | `editorial_create_brief` | write | api, editor, compose | - |
46
+ | `editorial_create_run` | write | api, editor, compose | - |
47
+ | `editorial_findings_append` | write | api, editor, compose | director, cli |
48
+ | `editorial_findings_list` | read | api, editor, compose | director, plan, cli |
49
+ | `editorial_get_run` | read | api, editor, compose | director, plan, cli |
50
+ | `editorial_inspect_audio` | write | api, editor, compose | director, cli |
51
+ | `editorial_inspect_source` | write | api, editor, compose | director, cli |
52
+ | `editorial_inspect_transcript` | write | api, editor, compose | director, cli |
53
+ | `editorial_integrate` | write | api, editor, compose | director, cli |
54
+ | `editorial_list_briefs` | read | api, editor, compose | director, plan, cli |
55
+ | `editorial_list_evidence` | read | api, editor, compose | director, plan, cli |
56
+ | `editorial_list_runs` | read | api, editor, compose | director, plan, cli |
57
+ | `editorial_run_source` | read | api, editor, compose | director, plan, external, cli |
58
+ | `editorial_sample_motion` | write | api, editor, compose | director, cli |
59
+ | `export_project` | write | - | external |
60
+ | `extract_brand_kit` | write | api | - |
61
+ | `finalize_upload` | write | api | - |
62
+ | `forget_taste` | write | api, editor, compose | director, external, cli |
63
+ | `generate_media` | write | api, editor, compose | director, external, cli |
64
+ | `get_account` | read | api, editor, compose | director, plan, external, cli |
65
+ | `get_app_state` | read | - | director, plan, external, cli |
66
+ | `get_brief` | read | api | - |
67
+ | `get_checkpoint` | read | api | - |
68
+ | `get_component_source` | read | api, editor, compose | director, plan, external, cli |
69
+ | `get_composition` | read | api, editor, compose | director, plan, external, cli |
70
+ | `get_context` | read | editor, compose | director, plan, external, cli |
71
+ | `get_director_state` | read | - | external |
72
+ | `get_editor_state` | read | - | director, plan, external, cli |
73
+ | `get_import_status` | read | - | director, plan, external, cli |
74
+ | `get_media_context` | read | api, editor, compose | director, plan, external, cli |
75
+ | `get_media_facts` | read | api | director, plan, external, cli |
76
+ | `get_profile` | read | api, editor, compose | director, plan, external, cli |
77
+ | `get_project_settings` | read | - | external |
78
+ | `get_render` | read | api | - |
79
+ | `get_scene_contract` | read | - | director, plan, external, cli |
80
+ | `get_template` | read | api, editor | director, plan, external, cli |
81
+ | `get_transcript` | read | api, editor, compose | director, plan, external, cli |
82
+ | `get_usage` | read | api, editor, compose | director, plan, external, cli |
83
+ | `import_local_media` | write | - | director, external, cli |
84
+ | `import_media` | write | api, editor, compose | director, external, cli |
85
+ | `import_resource` | write | api, editor, compose | director, external, cli |
86
+ | `install_local_person_runtime` | write | - | director, external, cli |
87
+ | `list_briefs` | read | api | - |
88
+ | `list_catalog` | read | api, editor, compose | director, plan, external, cli |
89
+ | `list_checkpoints` | read | api | - |
90
+ | `list_component_packages` | read | - | external |
91
+ | `list_compositions` | read | api | - |
92
+ | `list_critics` | read | api | - |
93
+ | `list_media` | read | api, editor, compose | director, plan, external, cli |
94
+ | `list_plans` | read | api | - |
95
+ | `list_projects` | read | api | external |
96
+ | `list_render_fonts` | read | api | director, plan, external, cli |
97
+ | `list_taste` | read | api, editor, compose | director, plan, external, cli |
98
+ | `list_templates` | read | api, editor | director, plan, external, cli |
99
+ | `new_composition` | write | api, editor, compose | director, external, cli |
100
+ | `open_component_preview` | write | - | director, plan, external, cli |
101
+ | `open_project` | write | - | external |
102
+ | `play_pause` | write | - | director, plan, external, cli |
103
+ | `prepare_component_library_previews` | write | - | external |
104
+ | `prepare_component_media` | read | - | external |
105
+ | `prepare_media` | write | api | director, external, cli |
106
+ | `preview_card` | read | api, editor, compose | - |
107
+ | `preview_clip` | write | api | - |
108
+ | `preview_component` | read | api | - |
109
+ | `preview_frame` | read | api, editor, compose | director, plan, external, cli |
110
+ | `propose_plan` | write | - | director, plan, cli |
111
+ | `publish_component` | write | - | external |
112
+ | `read_component` | read | - | director, plan, external, cli |
113
+ | `redo_edit` | write | - | external |
114
+ | `refresh_render_url` | write | api | - |
115
+ | `register_critic` | write | api | - |
116
+ | `remember_taste` | write | api, editor, compose | director, external, cli |
117
+ | `rename_project` | write | - | external |
118
+ | `render_component_preview_frame` | read | - | director, plan, external, cli |
119
+ | `repin_component` | write | api | director, external, cli |
120
+ | `resolve_builtin_component` | read | api | - |
121
+ | `resume` | write | api | - |
122
+ | `retry_render` | write | api | - |
123
+ | `save_as_template` | write | - | director, external, cli |
124
+ | `score_composition` | write | api, editor, compose | director, external, cli |
125
+ | `search_fonts` | read | api, editor, compose | director, plan, external, cli |
126
+ | `search_library` | read | editor, compose | director, plan, external, cli |
127
+ | `search_resources` | read | api, editor, compose | director, plan, external, cli |
128
+ | `seek` | write | - | director, plan, external, cli |
129
+ | `select_candidate` | write | api | - |
130
+ | `send_director_prompt` | write | - | external |
131
+ | `set_playback_rate` | write | - | director, plan, external, cli |
132
+ | `start_template` | write | api, editor | - |
133
+ | `submit_plan` | write | - | director, plan, cli |
134
+ | `suggest_briefs` | write | api | - |
135
+ | `undo_edit` | write | - | external |
136
+ | `update_brief` | write | api | - |
137
+ | `update_component` | write | api | - |
138
+ | `update_component_preview` | write | - | director, plan, external, cli |
139
+ | `update_project` | write | api | - |
140
+ | `update_project_settings` | write | - | external |
141
+ | `update_webhook` | write | api | - |
142
+ | `validate_composition` | read | api, editor, compose | director, plan, external, cli |
143
+ | `verify_webhook` | write | api | - |
144
+ | `view_asset` | read | - | director, plan, external, cli |
145
+ | `view_style_reference` | read | compose | - |
146
+ | `wait_job` | read | api, editor, compose | director, plan, external, cli |
@@ -5,13 +5,7 @@ description: Use when turning a screen recording (with cursor/click events) into
5
5
 
6
6
  # CueFrame — Product Video recipe
7
7
 
8
- ## Scope and capability policy
9
-
10
- User intent and acceptance criteria override this recipe's aesthetic defaults. Silent, typography-only, uncaptioned and slow work are valid; no universal narration, footage, CTA, beat count or score target. Contracts, factual fidelity, media bindings and current source revisions remain mandatory.
11
-
12
- Read available tools and current project; preserve the chosen local/hosted lane. Supported local work needs no hosted registration. Do not silently install, authenticate, switch projects or upload local content. Before metered hosted work, check `get_account`, entitlements, balance and quotes. Desktop setup: https://docs.cueframe.ai.
13
-
14
- For scoped revisions, preserve unrelated timing, media, audio and shared brand-kit state. Edit affected content; inspect relevant frames, continuous motion and affected audio. No restarted intake, new approval pause, paid judge or final export by default. Judge only when useful; scores never override acceptance failures. Stop/report after two no-improvement passes. See [preview workflow](../cueframe-compose-loop/references/preview-workflow.md).
8
+ Use the [project and capability policy](../composing-video/references/project-policy.md) for scope, current state and metered work.
15
9
 
16
10
  A **use-case recipe**, not new framework surface. CueFrame's engine only knows
17
11
  primitives (`upload` → `composition put` → `render`, the `reframe` viewport, the
@@ -21,7 +15,7 @@ to author, not how to transport it.
21
15
 
22
16
  **Drive the primitives over MCP if you can call tools** (`new_composition` /
23
17
  `apply_composition` / `validate_composition` / `create_render` — see the
24
- `cueframe-connect` skill for the one-line setup). The `npx -y cueframe@0.9 …` commands
18
+ `cueframe-connect` skill for the one-line setup). The `npx -y cueframe@0.11 …` commands
25
19
  written out below are the same operations for a terminal or CI job with no MCP
26
20
  host; see the `cueframe-cli` skill.
27
21
 
@@ -64,7 +58,8 @@ style's) over each window. Result → `source.reframe.segments` on the clip.
64
58
  ## 3. Compose
65
59
 
66
60
  One video track, the screen recording as a media clip carrying the reframe.
67
- `npx -y cueframe@0.9 composition put <projectId> -b @composition.json` (see `cueframe-cli`).
61
+ `npx -y cueframe@0.11 composition put <projectId> -b @composition.json --if-match <etag>`, with the
62
+ ETag from `composition get` (`--create` for the project's first composition; see `cueframe-cli`).
68
63
  Choose `-a 16:9` for landscape product video, `9:16` for social.
69
64
 
70
65
  ## 4. Polish — layer overlay primitives (this is what makes it look "produced")
@@ -101,21 +96,21 @@ check framing with `preview_frame` and click/zoom timing with an affected-window
101
96
  For a small revision, verify that change and relevant regressions without exporting the whole film.
102
97
  When delivering the finished video:
103
98
 
104
- `npx -y cueframe@0.9 render <projectId> -o out.mp4 --json`. Verify the output (ffprobe +
99
+ `npx -y cueframe@0.11 render <projectId> -o out.mp4 --json`. Verify the output (ffprobe +
105
100
  sample frames) before declaring done.
106
101
 
107
102
  ## Worked examples — composition JSON
108
103
 
109
104
  These are **orientation, not the contract.** The live wire schema is
110
- `npx -y cueframe@0.9 schema composition`, and the way to know a draft is correct is
111
- `npx -y cueframe@0.9 composition validate -b @composition.json` — it runs the same
105
+ `npx -y cueframe@0.11 schema composition`, and the way to know a draft is correct is
106
+ `npx -y cueframe@0.11 composition validate -b @composition.json` — it runs the same
112
107
  validator the server enforces, with no save and no render. Discover + validate
113
108
  before you render; never spend a render to find a schema mistake.
114
109
 
115
110
  Each block below is a complete `@composition.json` (the bare object `composition put`
116
111
  accepts: top-level `v`, `format`, `tracks`, optional `captions`). All five validate
117
112
  against the real wire schema + save invariants (swap the `<…MediaId>` placeholders for
118
- real `npx -y cueframe@0.9 upload` ids). Conventions that keep them valid:
113
+ real `npx -y cueframe@0.11 upload` ids). Conventions that keep them valid:
119
114
 
120
115
  - Tracks hold **`contents`** (not `clips`); each clip wraps a `source`.
121
116
  - A clip's `source.kind` must match the track `kind`: `media` → `video`/`image`/`audio`
@@ -297,4 +292,4 @@ Talking-head with an `active-speaker` reframe and a `heroText` title at `zPlane:
297
292
  background. See EX3 / EX4 below.
298
293
  - This recipe lives in a skill on purpose: the engine stays use-case-free; the
299
294
  product opinions (style, which primitives, layout) live here and ship via
300
- `npx -y cueframe@0.9 install`. Add sibling recipes (`cueframe-podcast-clip`, …) the same way.
295
+ `npx -y cueframe@0.11 install`. Add sibling recipes (`cueframe-podcast-clip`, …) the same way.
@@ -0,0 +1,30 @@
1
+ ---
2
+ name: cueframe-reference-video
3
+ description: Use when recreating a supplied video or matching its motion, camera, typography, transitions, visual identity or audiovisual timing in CueFrame.
4
+ ---
5
+
6
+ # CueFrame reference-video reconstruction
7
+
8
+ Use the [project and capability policy](../composing-video/references/project-policy.md) for scope, current state and metered work.
9
+
10
+ For a reconstruction, the reference film and full-frame captures are analysis inputs, not finished reconstruction layers; source excerpts remain valid when the user requests an edit or remix.
11
+
12
+ Treat the supplied film as the acceptance anchor. Reconstruct what it communicates and how its objects move; matching endpoint stills alone does not match a film. Preserve the requested duration, style and intentional holds. Typography, gradients and reconstructed interface artwork are valid when the reference calls for them; do not present reconstructed UI as a capture of a working product.
13
+
14
+ ## Inspect before choosing the technique
15
+
16
+ Use the current runtime's advertised source and motion-inspection capabilities. An overview finds the phrases; denser samples around a transformation reveal its path, overlap, masking, occlusion and settling. Increase coverage where adjacent observations do not explain the motion. Distinguish a visible cut from an inferred continuous morph.
17
+
18
+ Keep a concise [reference ledger](references/measurement-and-comparison.md) linking observed timing, geometry, type, materials and sound events to evidence. Measure relevant landmarks and projected dimensions before guessing easing or camera behavior. Record unknown assets, fonts and audio separately from observations.
19
+
20
+ Eve may have no shell or local media access. Use delivered source/motion evidence through available tools; do not assume FFmpeg, downloads or local scripts can run. A capable local host can use FFprobe/FFmpeg for analysis, comparisons and decode checks. These are not substitute renderers for CueFrame. Report missing observation capabilities rather than claiming unseen motion or unheard sound.
21
+
22
+ For a local file, `bash scripts/motion-grid.sh INPUT OUTPUT_DIR` creates overview/dense grids and TSV indices with actual source frame numbers and presentation timestamps. Optional `--start SEC --duration SEC` selects an interval relative to the first presented frame; `--overview-fps N --dense-fps N` controls sampling. Each requested instant selects the first source frame at or after it, without duplicate frames; read the recorded actual time rather than assuming the requested rate landed exactly. Use a fresh output directory. The script requires FFprobe/FFmpeg and is an optional local observation aid.
23
+
24
+ ## Author, compare and deliver
25
+
26
+ Choose useful fidelity anchors and prove the difficult motion early through supported component or timeline previews. Use CueFrame tools for saved authoring, previews and rendering. Keep related motion and sound tied to the same timing decisions; preserve editable text and meaningful parameters. Native peers can help when separate authored work is useful, but continuity still needs integrated review.
27
+
28
+ Compare actual output at the reference's timestamps and inspect the intervening motion. When available, use `compare_frames` on an identified source frame and saved preview artifact; its unaligned pair/overlay exposes layout drift without rendering the composition again. Read the [worked comparison](references/measurement-and-comparison.md) for geometry, intentional retiming and evidence limits. Fix located mismatches in scale, pose, direction, timing, readability or material before decorative polish. A score or successful compile cannot approve a failed reference requirement. Separate measured audio properties from listening and reused audio from new sound design.
29
+
30
+ For a finished-film request, deliver an actual CueFrame-produced MP4, verify its format/decode and identify remaining fidelity gaps. Do not invent the user's verdict. For a narrow revision, retain approved work and use the scoped preview workflow in `cueframe-compose-loop`; a new full export is only needed for requested final delivery.
@@ -0,0 +1,45 @@
1
+ # Reference ledger and matched-time comparison
2
+
3
+ Keep observations, measurements and inferred implementation separate. A ledger can use ordinary shot notes; it does not require a new timeline or rigid production schema.
4
+
5
+ | Note | Useful evidence |
6
+ |---|---|
7
+ | Purpose and identity | What this phrase communicates; recurring subject, type, palette, artwork and material cues |
8
+ | Time | Source seconds/frames, meaningful arrival/hold/exit windows, source/output time mapping |
9
+ | Geometry | Normalized positions and projected sizes, margins, two corners or edges of a moving subject |
10
+ | Motion | Direction, changing displacement, acceleration/settling, rotation/depth cues, blur and opacity |
11
+ | Handoff | What disappears first, what overlaps, which object carries the eye, actual cut versus inferred morph |
12
+ | Sound | Observed cue/onset, rhythmic change or deliberate silence; whether heard or only measured |
13
+ | Evidence and confidence | Source identity, sampled timestamps, image/motion/audio evidence, observed/measured/inferred/unknown |
14
+
15
+ Start with broad coverage to find the important windows. Use denser samples for a fast handoff, a long camera move or text with a short reading window. Source-rate inspection is useful near impacts, replacements and direction changes. Sample only valid source times; an encoded audio tail is not extra video. If the tool samples or seeks approximately, retain that uncertainty rather than claiming frame-exact timing.
16
+
17
+ For each difficult move, compare source and output at identical timestamps. Follow the same landmarks: projected width may match while pose, occlusion or velocity is wrong. Inspect before, during and after the transition, not just its landed state. Do not temporally warp the result to conceal drift. A visible replacement is not evidence of a continuous extraction, and cursor contact does not prove a selected or confirmed UI state.
18
+
19
+ Use isolated authoring previews to establish technique, then persisted timeline previews to verify placement and interaction with other layers. After changing component source, verify its pinned source version and the output where the change should be visible; a composition ETag alone may not identify a changed referenced source.
20
+
21
+ Record findings as `time/window · observed mismatch → intended correction · what stays`. Reinspect the affected move and adjacent handoffs. Structural feedback can change the story and require retiming dependent copy, camera, graphics and sound; preserve unrelated user edits against current shared state.
22
+
23
+ A complete delivery can include a small set of fidelity anchors, critical motion comparisons, actual movie identity, asset/source provenance and unresolved differences. Audio signal measurements establish technical properties, not a listening verdict. Reusing the reference mix can isolate picture timing, but it does not demonstrate an authored score; reordering visuals may require reconsidering that mix.
24
+
25
+ ## Worked correction: title spacing and a list thumbnail
26
+
27
+ In a 1920×1080, 30 fps reference study, the title at frame 117 had a 34px gap from its left word to a central mark and a 41px gap from that mark to the right word. The saved reproduction measured about 3px and 22px. Its type group was also narrower: 1021px against 1304px. These were visible glyph bounds in the output, not the HTML elements' CSS widths.
28
+
29
+ Inspect the separate frames, then an unaligned 50% overlay. Establish outer group placement and cap height before adjusting the two internal gaps. Change the actual title/mark source, preserving approved copy and the timeline. The corrected saved preview measured about 35px and 39px, with a 1315px group width. Those measurements had approximately ±2–4px uncertainty. They establish a specific spacing improvement, not a font match or a whole-film fidelity percentage.
30
+
31
+ At frame 180, a list thumbnail was 190px high against a 154px reference and had about 30px top inset against 48px. Its row pitch was already close. Reducing the thumbnail and recovering its inset corrected that relationship without rebuilding the outer panel or retiming the film. Use the same crop coordinates for both images so a shifted crop cannot hide a shifted object.
32
+
33
+ The title's settled frame improved, but around frame 99 its moving carrier remained displaced by roughly 90px. The list entrance and exit also remained late. This is the useful counterexample: a well-fitted endpoint does not establish the correct path, rotation, overlap, acceleration or timing. Reinspect the affected entrance, hold and exit; use continuous playback for the final motion verdict.
34
+
35
+ These observations come from CueFrame's Cardly reconstruction study. They are a worked diagnostic example, not default gaps, a required style or a reusable claim about every film. Keep the source reference separate from authored reconstruction layers.
36
+
37
+ ## Reading comparison evidence
38
+
39
+ `compare_frames` compares already identified inputs. A source-frame operand may decode the certified representation; a candidate references an existing saved preview. Replaying a comparison or changing its crop does not mean a new composition render occurred. Read the delivered images and receipt rather than inferring delivery from URLs or metadata.
40
+
41
+ Keep actual frame indices, rational FPS/timebase, requested versus sampled time, dimensions, source hashes and composition/source versions with the observation. Hosted render bookends can make the internal render frame differ from the composition frame. A normalized representation is not necessarily the original file's clock. Unknown color transforms, approximate seeks or missing frames constrain the conclusion.
42
+
43
+ Use the raw pair and overlay at unchanged coordinates. A difference image can locate change but is easily dominated by backgrounds and materials; it is not an acceptance score. Automatic image registration can conceal displacement. Cropping is a view into the same coordinate space, not permission to independently fit the two images.
44
+
45
+ For an intentional structural revision, record the source-to-output event correspondence and compare those events. Do not temporally warp the evidence or undo the user's changed timing merely to reduce image differences. After editing, compare a preview from the new saved source, then inspect connected motion and sound.
@@ -0,0 +1,116 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ export LC_ALL=C
4
+
5
+ usage() {
6
+ echo "usage: motion-grid.sh INPUT OUTPUT_DIR [--overview-fps N] [--dense-fps N] [--start SEC] [--duration SEC]" >&2
7
+ exit 2
8
+ }
9
+
10
+ [[ $# -ge 2 ]] || usage
11
+ input=$1
12
+ output_dir=$2
13
+ shift 2
14
+ overview_fps=1
15
+ dense_fps=6
16
+ start_sec=0
17
+ duration_sec=""
18
+ while [[ $# -gt 0 ]]; do
19
+ case "$1" in
20
+ --overview-fps) [[ $# -ge 2 ]] || usage; overview_fps=$2; shift 2 ;;
21
+ --dense-fps) [[ $# -ge 2 ]] || usage; dense_fps=$2; shift 2 ;;
22
+ --start) [[ $# -ge 2 ]] || usage; start_sec=$2; shift 2 ;;
23
+ --duration) [[ $# -ge 2 ]] || usage; duration_sec=$2; shift 2 ;;
24
+ *) usage ;;
25
+ esac
26
+ done
27
+ awk -v a="$overview_fps" -v b="$dense_fps" -v s="$start_sec" -v d="$duration_sec" 'BEGIN {
28
+ number = "^[0-9]+([.][0-9]+)?$"
29
+ exit !(a ~ number && a > 0 && b ~ number && b > 0 && s ~ number && (d == "" || (d ~ number && d > 0)))
30
+ }' || usage
31
+ command -v ffmpeg >/dev/null || { echo "ffmpeg is required" >&2; exit 1; }
32
+ command -v ffprobe >/dev/null || { echo "ffprobe is required" >&2; exit 1; }
33
+ [[ -f "$input" ]] || { echo "input not found: $input" >&2; exit 1; }
34
+ mkdir -p "$output_dir"
35
+ for label in overview dense; do
36
+ [[ ! -e "$output_dir/${label}-index.tsv" && ! -e "$output_dir/${label}-001.jpg" ]] || {
37
+ echo "use a fresh output directory (existing $label grid)" >&2; exit 1;
38
+ }
39
+ done
40
+ work_dir=$(mktemp -d "${TMPDIR:-/tmp}/cueframe-motion-grid.XXXXXX")
41
+ trap 'rm -rf "$work_dir"' EXIT
42
+
43
+ ffprobe -v error \
44
+ -show_entries format=duration,format_name:stream=index,codec_name,codec_type,width,height,r_frame_rate,avg_frame_rate,time_base,start_time,sample_rate,channels \
45
+ -of json "$input" > "$output_dir/probe.json"
46
+ # ffprobe emits frames in presentation order, matching FFmpeg select's n on
47
+ # the first video stream. Keep their actual timestamps, including VFR timing.
48
+ ffprobe -v error -select_streams v:0 -show_frames \
49
+ -show_entries frame=best_effort_timestamp,best_effort_timestamp_time \
50
+ -of compact "$input" > "$work_dir/frames.txt"
51
+ awk -F '|' '
52
+ $1 == "frame" {
53
+ pts = ""; seconds = ""
54
+ for (i = 2; i <= NF; i++) {
55
+ split($i, field, "=")
56
+ if (field[1] == "best_effort_timestamp") pts = field[2]
57
+ if (field[1] == "best_effort_timestamp_time") seconds = field[2]
58
+ }
59
+ if (pts !~ /^-?[0-9]+$/ || seconds !~ /^-?[0-9]+([.][0-9]+)?$/) exit 1
60
+ if (n && seconds + 0 < previous) exit 1
61
+ printf "%d\t%s\t%s\n", n++, pts, seconds
62
+ previous = seconds + 0
63
+ }
64
+ END { if (!n) exit 1 }
65
+ ' "$work_dir/frames.txt" > "$work_dir/frames.tsv" || {
66
+ echo "source has missing or nonmonotonic presentation timestamps" >&2; exit 1;
67
+ }
68
+ ffmpeg -hide_banner -filters > "$work_dir/filters.txt" 2>/dev/null
69
+ has_drawtext=0
70
+ if grep -q ' drawtext ' "$work_dir/filters.txt"; then has_drawtext=1; fi
71
+
72
+ make_grid() {
73
+ local label=$1 rate=$2 filter
74
+ # Select the first actual source frame at/after each requested instant, once.
75
+ # Start/duration are relative to the first presented frame; the end is exclusive.
76
+ awk -F '\t' -v rate="$rate" -v start="$start_sec" -v duration="$duration_sec" '
77
+ BEGIN { print "page\tcell\ttime_sec\tsource_frame\tsource_pts\tsource_pts_time_sec\ttarget_time_sec"; target = start }
78
+ NR == 1 { origin = $3 + 0 }
79
+ {
80
+ time = $3 - origin
81
+ if (duration != "" && time >= start + duration - 0.0000005) next
82
+ if (time + 0.0000005 < target) next
83
+ printf "%03d\t%02d\t%.6f\t%s\t%s\t%s\t%.6f\n", int(count / 16) + 1, count % 16 + 1, time, $1, $2, $3, target
84
+ count++
85
+ target = start + (int((time - start + 0.0000005) * rate) + 1) / rate
86
+ }
87
+ END { if (!count) exit 1 }
88
+ ' "$work_dir/frames.tsv" > "$work_dir/${label}-index.tsv" || {
89
+ echo "no source frames in the requested interval" >&2; return 1;
90
+ }
91
+ # FFmpeg recursively parses sums; balance them so long selections do not
92
+ # exhaust its expression depth while preserving the exact frame indices.
93
+ awk -F '\t' '
94
+ function selection(first, last, middle) {
95
+ if (first == last) return "eq(n\\," frames[first] ")"
96
+ middle = int((first + last) / 2)
97
+ return "(" selection(first, middle) "+" selection(middle + 1, last) ")"
98
+ }
99
+ NR > 1 { frames[++count] = $4 }
100
+ END { print selection(1, count) }
101
+ ' \
102
+ "$work_dir/${label}-index.tsv" > "$work_dir/selection.txt"
103
+ filter="select='$(cat "$work_dir/selection.txt")',scale=384:-2:flags=lanczos"
104
+ if [[ "$has_drawtext" -eq 1 ]]; then
105
+ filter="${filter},drawtext=fontcolor=white:fontsize=20:box=1:boxcolor=black@0.72:x=8:y=h-th-8:text='pts=%{pts\\:flt}'"
106
+ fi
107
+ filter="${filter},tile=4x4:padding=8:margin=8:color=0x111827"
108
+ # No seek/fps filter: neither source frame indices nor timestamps are relabeled.
109
+ ffmpeg -hide_banner -loglevel error -copyts -i "$input" -map 0:v:0 \
110
+ -vf "$filter" -fps_mode passthrough -q:v 2 \
111
+ "$output_dir/${label}-%03d.jpg"
112
+ cp "$work_dir/${label}-index.tsv" "$output_dir/${label}-index.tsv"
113
+ }
114
+ make_grid overview "$overview_fps"
115
+ make_grid dense "$dense_fps"
116
+ echo "wrote probe.json, grids and actual source-frame/PTS indices to $output_dir"
@@ -5,13 +5,7 @@ description: Author a CueFrame 3D world-object shot as canonical SceneShotSpecV2
5
5
 
6
6
  # CueFrame scene shots
7
7
 
8
- ## Scope and capability policy
9
-
10
- User intent and acceptance criteria override this recipe's aesthetic defaults. Silent, typography-only, uncaptioned and slow work are valid; no universal narration, footage, CTA, beat count or score target. Contracts, factual fidelity, media bindings and current source revisions remain mandatory.
11
-
12
- Read available tools and current project; preserve the chosen local/hosted lane. Supported local work needs no hosted registration. Do not silently install, authenticate, switch projects or upload local content. Before metered hosted work, check `get_account`, entitlements, balance and quotes. Desktop setup: https://docs.cueframe.ai.
13
-
14
- For scoped revisions, preserve unrelated timing, media, audio and shared brand-kit state. Edit affected content; inspect relevant frames, continuous motion and affected audio. No restarted intake, new approval pause, paid judge or final export by default. Judge only when useful; scores never override acceptance failures. Stop/report after two no-improvement passes. See [preview workflow](../cueframe-compose-loop/references/preview-workflow.md).
8
+ Use the [project and capability policy](../composing-video/references/project-policy.md) for scope, current state and metered work.
15
9
 
16
10
  Use `scene.add` and `scene.update` through `apply_composition`. Author the scene JSON; CueFrame owns the generated wrapper, preparation, resource admission, previews, and export.
17
11
 
@@ -37,7 +31,7 @@ not only keyframes. A scene tweak can finish with preview evidence; export for f
37
31
 
38
32
  The composition owns clip start, duration, ordering, cuts, and transitions. The scene owns objects, camera, environment, backdrop, post effects, constraints, and normalized animation. Scene clips occupy a dedicated full-frame front overlay track. Outer region, position, scale, rotation, fit, clip effects, and internal fades are refused because they would create two transform or timing owners.
39
33
 
40
- `referenceSize` must have the same aspect ratio as the composition. Coordinates are reference pixels with origin at frame center, +X right, +Y down, and +Z toward the viewer. Equal-aspect outputs scale uniformly.
34
+ `referenceSize` must have the same aspect ratio as the composition. World coordinates are reference pixels with origin at frame center, +X right, +Y up, and +Z toward the default viewer. World rotations use radians in Euler XYZ order; laptop `openAngle` uses radians in [0, PI]. Equal-aspect outputs scale uniformly.
41
35
 
42
36
  Animation keyframe `at` is normalized over clip duration. Easing belongs to the keyframe it arrives at. The first keyframe has no easing; each later keyframe supplies `linear`, `hold`, or cubic `bezier` easing. Topology, bindings, text content, fonts, material roles, and object kind remain static within a shot.
43
37
 
@@ -6,13 +6,7 @@ description: >-
6
6
 
7
7
  # CueFrame Storyboard: brief → flow
8
8
 
9
- ## Scope and capability policy
10
-
11
- User intent and acceptance criteria override this recipe's aesthetic defaults. Silent, typography-only, uncaptioned and slow work are valid; no universal narration, footage, CTA, beat count or score target. Contracts, factual fidelity, media bindings and current source revisions remain mandatory.
12
-
13
- Read available tools and current project; preserve the chosen local/hosted lane. Supported local work needs no hosted registration. Do not silently install, authenticate, switch projects or upload local content. Before metered hosted work, check `get_account`, entitlements, balance and quotes. Desktop setup: https://docs.cueframe.ai.
14
-
15
- For scoped revisions, preserve unrelated timing, media, audio and shared brand-kit state. Edit affected content; inspect relevant frames, continuous motion and affected audio. No restarted intake, new approval pause, paid judge or final export by default. Judge only when useful; scores never override acceptance failures. Stop/report after two no-improvement passes. See [preview workflow](../cueframe-compose-loop/references/preview-workflow.md).
9
+ Use the [project and capability policy](../composing-video/references/project-policy.md) for scope, current state and metered work.
16
10
 
17
11
  This is a new-video planning workflow. For revisions to an approved plan, preserve its structure
18
12
  and use `cueframe-compose-loop`'s [preview workflow](../cueframe-compose-loop/references/preview-workflow.md)
@@ -5,13 +5,7 @@ description: Derives content-aware 9:16, 1:1, and 4:5 siblings from one finished
5
5
 
6
6
  # Every format from one edit
7
7
 
8
- ## Scope and capability policy
9
-
10
- User intent and acceptance criteria override this recipe's aesthetic defaults. Silent, typography-only, uncaptioned and slow work are valid; no universal narration, footage, CTA, beat count or score target. Contracts, factual fidelity, media bindings and current source revisions remain mandatory.
11
-
12
- Read available tools and current project; preserve the chosen local/hosted lane. Supported local work needs no hosted registration. Do not silently install, authenticate, switch projects or upload local content. Before metered hosted work, check `get_account`, entitlements, balance and quotes. Desktop setup: https://docs.cueframe.ai.
13
-
14
- For scoped revisions, preserve unrelated timing, media, audio and shared brand-kit state. Edit affected content; inspect relevant frames, continuous motion and affected audio. No restarted intake, new approval pause, paid judge or final export by default. Judge only when useful; scores never override acceptance failures. Stop/report after two no-improvement passes. See [preview workflow](../cueframe-compose-loop/references/preview-workflow.md).
8
+ Use the [project and capability policy](../composing-video/references/project-policy.md) for scope, current state and metered work.
15
9
 
16
10
  You finish ONE edit; you get back its siblings for every platform — 9:16 for
17
11
  Reels/TikTok/Shorts, 1:1 and 4:5 for feeds — derived content-aware from the master,
@@ -61,7 +55,7 @@ A correction to one sibling does not require rendering the master or the other u
61
55
  the bed is present and the silence decision, if any, still holds; the sibling's delivery
62
56
  note repeats it. If a sibling needs a different bed, `search_resources` honoring the brand
63
57
  kit's `musicMood` and swap it on that sibling only.
64
- 6. **Judge each sibling as its own artifact.** `score_composition` per sibling with the
58
+ 6. **Inspect each sibling as its own artifact.** Use `score_composition` only when useful for broader review and within budget, with the
65
59
  master's vision as `editorialIntent`. Changing aspect ratio does not change the approved editorial intent, pacing or acceptance criteria. Fix worst-first to
66
60
  meet the applicable acceptance criteria.
67
61
  7. **Render each approved sibling.** `create_render` → `wait_job (kind:"render")` per
@@ -69,17 +63,7 @@ A correction to one sibling does not require rendering the master or the other u
69
63
 
70
64
  ## What good looks like
71
65
 
72
- Quoted from `video-craft-standards` (cross-cutting rules — every artifact):
73
-
74
- > **DEFAULT** Safe-area respected: no critical copy in the outer ~8% of frame.
75
-
76
- > **DEFAULT** One final render per approval; iterate with previews, not renders.
77
-
78
- > **DEFAULT** Delivery never ends with "done": the last message carries the output link and where
79
- > to find it, plus the intentional-silence note if any.
80
-
81
- And the class rule that governs each sibling: apply the original brief at the new dimensions; aspect ratio alone does not impose a social-reel hook or pacing. Derivation
82
- changes the frame, never the bar.
66
+ Use the relevant [craft review questions](../video-craft-standards/SKILL.md) and the [preview workflow](../cueframe-compose-loop/references/preview-workflow.md). Judge the brief's actual intent, visual relationships, timing and sound; format suggestions do not override the requested treatment. The cross-cutting rules in the [format standards](../video-craft-standards/references/format-standards.md) apply to every sibling. Apply the original brief at the new dimensions: aspect ratio alone does not impose a social-reel hook or pacing, and derivation changes the frame, never the bar.
83
67
 
84
68
  ## Delivering
85
69
 
@@ -6,13 +6,7 @@ description: >-
6
6
 
7
7
  # Extracting brand kits: reference pixels → a kit the engine honors
8
8
 
9
- ## Scope and capability policy
10
-
11
- User intent and acceptance criteria override this recipe's aesthetic defaults. Silent, typography-only, uncaptioned and slow work are valid; no universal narration, footage, CTA, beat count or score target. Contracts, factual fidelity, media bindings and current source revisions remain mandatory.
12
-
13
- Read available tools and current project; preserve the chosen local/hosted lane. Supported local work needs no hosted registration. Do not silently install, authenticate, switch projects or upload local content. Before metered hosted work, check `get_account`, entitlements, balance and quotes. Desktop setup: https://docs.cueframe.ai.
14
-
15
- For scoped revisions, preserve unrelated timing, media, audio and shared brand-kit state. Edit affected content; inspect relevant frames, continuous motion and affected audio. No restarted intake, new approval pause, paid judge or final export by default. Judge only when useful; scores never override acceptance failures. Stop/report after two no-improvement passes. See [preview workflow](../cueframe-compose-loop/references/preview-workflow.md).
9
+ Use the [project and capability policy](../composing-video/references/project-policy.md) for scope, current state and metered work.
16
10
 
17
11
  ## The one idea
18
12
 
@@ -5,13 +5,7 @@ description: Turns screen recordings and product footage into a 30–90 second 1
5
5
 
6
6
  # Launch video
7
7
 
8
- ## Scope and capability policy
9
-
10
- User intent and acceptance criteria override this recipe's aesthetic defaults. Silent, typography-only, uncaptioned and slow work are valid; no universal narration, footage, CTA, beat count or score target. Contracts, factual fidelity, media bindings and current source revisions remain mandatory.
11
-
12
- Read available tools and current project; preserve the chosen local/hosted lane. Supported local work needs no hosted registration. Do not silently install, authenticate, switch projects or upload local content. Before metered hosted work, check `get_account`, entitlements, balance and quotes. Desktop setup: https://docs.cueframe.ai.
13
-
14
- For scoped revisions, preserve unrelated timing, media, audio and shared brand-kit state. Edit affected content; inspect relevant frames, continuous motion and affected audio. No restarted intake, new approval pause, paid judge or final export by default. Judge only when useful; scores never override acceptance failures. Stop/report after two no-improvement passes. See [preview workflow](../cueframe-compose-loop/references/preview-workflow.md).
8
+ Use the [project and capability policy](../composing-video/references/project-policy.md) for scope, current state and metered work.
15
9
 
16
10
  You bring real screen recordings or product footage plus the one outcome the feature delivers;
17
11
  you get back a 30–90 second 16:9 announcement that opens on the payoff, shows the actual product
@@ -56,8 +50,7 @@ affected window and regressions without automatically rerunning the full-film ju
56
50
  product video.
57
51
  5. **Cards for the claims and the end card.** Key lines and the closing CTA are `kind:"card"`
58
52
  HTML in the brand's type and palette, animated in its CSS or with
59
- `clip.setKeyframes` in a FOLLOWING `apply_composition` call. One CTA on the end card, held
60
- long enough to read, plus the date if there is one.
53
+ `clip.setKeyframes` in a FOLLOWING `apply_composition` call. When the brief calls for a CTA, use one, on the end card, held long enough to read; include a date only when relevant.
61
54
  6. **Audio when requested or appropriate.** Preserve explicit silence; otherwise: `search_resources` for a bed honoring the brand kit's
62
55
  `musicMood`, energy arcing toward the reveal; place it `audioRole:"music"`,
63
56
  `materializeGrid { grid:"beat" }`, and land beat boundaries and the reveal on the grid. If
@@ -68,25 +61,12 @@ affected window and regressions without automatically rerunning the full-film ju
68
61
  call. Speech clips must have saved duration matching playable source duration divided by
69
62
  playbackRate. Re-run after later edits. Use authored word timings for generated VO without a
70
63
  transcript, and style legibly via `setCaptionStyle`. Caption narration when requested or appropriate; preserve an explicit uncaptioned format.
71
- 8. **Preview, judge, one render.** `preview_frame` at t=0, hook-end, the reveal, and the end
72
- card; describe each still — is that a REAL capture on screen? Then `score_composition` with
73
- the payoff line as `editorialIntent`; fix relevant acceptance failures; `create_render` →
74
- `wait_job (kind:"render")`.
64
+ 8. **Inspect and deliver.** `preview_frame` at t=0, hook-end, the reveal, and the end
65
+ card; describe each still and ask whether a real capture is on screen; distinguish actual captures from reconstructed artwork. Inspect motion through the important handoffs and listen to changed audio. Use `score_composition` only when broader critique is useful and within budget, with the payoff line as `editorialIntent`. Fix the observed acceptance failures, then export for requested final delivery.
75
66
 
76
67
  ## What good looks like
77
68
 
78
- Quoted from `video-craft-standards` §2 (Launch film / feature announcement) — these are format defaults:
79
-
80
- > **DEFAULT** Payoff-first hook: the OUTCOME, not the feature name ("Close the books two days
81
- > faster" beats "Introducing the reconciliation module"). No throat-clearing.
82
-
83
- > **DEFAULT** Narration or a bed that builds toward the reveal; pacing tightens as the payoff
84
- > approaches. **DEFAULT** Real product surface: actual UI/screens/output — never mocked.
85
-
86
- > **DEFAULT** End card with a single CTA. **DEFAULT** Captions present when narrated.
87
-
88
- And cross-cutting: *"Footage carries the video: real footage / real UI / real data ≥60% of
89
- runtime for footage-first classes."*
69
+ Use the relevant [craft review questions](../video-craft-standards/SKILL.md) and the [preview workflow](../cueframe-compose-loop/references/preview-workflow.md). Judge the brief's actual intent, visual relationships, timing and sound; format suggestions do not override the requested treatment. For this format's defaults read section 2 (Launch film) of the [format standards](../video-craft-standards/references/format-standards.md).
90
70
 
91
71
  ## Delivering
92
72
 
@@ -94,6 +74,6 @@ Close with the handoff, never "done":
94
74
 
95
75
  - The render link and where it lives (project + composition id).
96
76
  - Attribution for the bed and any licensed asset (provider, id, author).
97
- - The intentional-silence note with its reason, in the rare case silence was chosen.
77
+ - The intentional-silence note with its reason, when relevant to the requested delivery.
98
78
  - A one-line cutdown offer: the 16:9 master can become 9:16 / 1:1 siblings for social (see
99
79
  `every-format-from-one-edit`).