@cueframe/skills 0.1.0 → 0.1.2
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.
- package/README.md +9 -104
- package/{skills → dist/skills}/add-music-bed/SKILL.md +12 -7
- package/{skills → dist/skills}/brand-reel/SKILL.md +19 -15
- package/{skills → dist/skills}/clip-a-talking-head/SKILL.md +15 -7
- package/dist/skills/composing-video/SKILL.md +447 -0
- package/{skills → dist/skills}/cueframe-brand-demo/SKILL.md +9 -2
- package/{skills → dist/skills}/cueframe-cli/SKILL.md +54 -49
- package/{skills → dist/skills}/cueframe-component-authoring/SKILL.md +14 -6
- package/{skills → dist/skills}/cueframe-compose-loop/SKILL.md +20 -6
- package/dist/skills/cueframe-compose-loop/references/builtin-insertion.md +49 -0
- package/dist/skills/cueframe-compose-loop/references/builtin-requests.json +111 -0
- package/dist/skills/cueframe-connect/SKILL.md +53 -0
- package/{skills → dist/skills}/cueframe-product-video/SKILL.md +15 -7
- package/{skills → dist/skills}/cueframe-scene-shot/SKILL.md +8 -0
- package/dist/skills/cueframe-storyboard/SKILL.md +76 -0
- package/{skills → dist/skills}/every-format-from-one-edit/SKILL.md +14 -8
- package/{skills → dist/skills}/extracting-brand-kits/SKILL.md +8 -0
- package/{skills → dist/skills}/launch-video/SKILL.md +17 -11
- package/{skills → dist/skills}/make-a-social-reel/SKILL.md +19 -15
- package/{skills → dist/skills}/rebrand-a-video/SKILL.md +18 -16
- package/dist/skills/video-craft-standards/SKILL.md +121 -0
- package/dist/skills/video-craft-standards/agents/openai.yaml +6 -0
- package/package.json +9 -28
- package/skills-dir.d.ts +1 -0
- package/skills-dir.js +2 -1
- package/.agents/plugins/marketplace.json +0 -12
- package/.claude-plugin/marketplace.json +0 -6
- package/.claude-plugin/plugin.json +0 -15
- package/.codex-plugin/plugin.json +0 -30
- package/.cursor-plugin/plugin.json +0 -1
- package/.mcp.json +0 -1
- package/AGENTS.md +0 -20
- package/assets/logo-400.png +0 -0
- package/gemini-extension.json +0 -1
- package/glama.json +0 -1
- package/hooks/hooks.json +0 -7
- package/hooks/session-inject.md +0 -15
- package/hooks/session-start.sh +0 -6
- package/llms-install.md +0 -47
- package/mcp.json +0 -1
- package/plugin.json +0 -46
- package/rules/cueframe.mdc +0 -19
- package/skills/composing-video/SKILL.md +0 -702
- package/skills/cueframe-connect/SKILL.md +0 -45
- package/skills/cueframe-storyboard/SKILL.md +0 -104
- package/skills/video-craft-standards/SKILL.md +0 -128
- package/skills/video-craft-standards/agents/openai.yaml +0 -6
- package/skills/video-craft-standards/assets/icon.svg +0 -16
- package/skills.sh.json +0 -1
- /package/{skills → dist/skills}/add-music-bed/agents/openai.yaml +0 -0
- /package/{assets → dist/skills/add-music-bed/assets}/icon.svg +0 -0
- /package/{skills → dist/skills}/brand-reel/agents/openai.yaml +0 -0
- /package/{skills/add-music-bed → dist/skills/brand-reel}/assets/icon.svg +0 -0
- /package/{skills → dist/skills}/clip-a-talking-head/agents/openai.yaml +0 -0
- /package/{skills/brand-reel → dist/skills/clip-a-talking-head}/assets/icon.svg +0 -0
- /package/{skills → dist/skills}/composing-video/agents/openai.yaml +0 -0
- /package/{skills/clip-a-talking-head → dist/skills/composing-video}/assets/icon.svg +0 -0
- /package/{skills → dist/skills}/cueframe-brand-demo/agents/openai.yaml +0 -0
- /package/{skills/composing-video → dist/skills/cueframe-brand-demo}/assets/icon.svg +0 -0
- /package/{skills → dist/skills}/cueframe-cli/agents/openai.yaml +0 -0
- /package/{skills/cueframe-brand-demo → dist/skills/cueframe-cli}/assets/icon.svg +0 -0
- /package/{skills → dist/skills}/cueframe-component-authoring/agents/openai.yaml +0 -0
- /package/{skills/cueframe-cli → dist/skills/cueframe-component-authoring}/assets/icon.svg +0 -0
- /package/{skills → dist/skills}/cueframe-compose-loop/agents/openai.yaml +0 -0
- /package/{skills/cueframe-component-authoring → dist/skills/cueframe-compose-loop}/assets/icon.svg +0 -0
- /package/{skills → dist/skills}/cueframe-compose-loop/references/preview-workflow.md +0 -0
- /package/{skills → dist/skills}/cueframe-connect/agents/openai.yaml +0 -0
- /package/{skills/cueframe-compose-loop → dist/skills/cueframe-connect}/assets/icon.svg +0 -0
- /package/{skills → dist/skills}/cueframe-product-video/agents/openai.yaml +0 -0
- /package/{skills/cueframe-connect → dist/skills/cueframe-product-video}/assets/icon.svg +0 -0
- /package/{skills → dist/skills}/cueframe-scene-shot/agents/openai.yaml +0 -0
- /package/{skills/cueframe-product-video → dist/skills/cueframe-scene-shot}/assets/icon.svg +0 -0
- /package/{skills → dist/skills}/cueframe-storyboard/agents/openai.yaml +0 -0
- /package/{skills/cueframe-scene-shot → dist/skills/cueframe-storyboard}/assets/icon.svg +0 -0
- /package/{skills → dist/skills}/every-format-from-one-edit/agents/openai.yaml +0 -0
- /package/{skills/cueframe-storyboard → dist/skills/every-format-from-one-edit}/assets/icon.svg +0 -0
- /package/{skills → dist/skills}/extracting-brand-kits/agents/openai.yaml +0 -0
- /package/{skills/every-format-from-one-edit → dist/skills/extracting-brand-kits}/assets/icon.svg +0 -0
- /package/{skills → dist/skills}/launch-video/agents/openai.yaml +0 -0
- /package/{skills/extracting-brand-kits → dist/skills/launch-video}/assets/icon.svg +0 -0
- /package/{skills → dist/skills}/make-a-social-reel/agents/openai.yaml +0 -0
- /package/{skills/launch-video → dist/skills/make-a-social-reel}/assets/icon.svg +0 -0
- /package/{skills → dist/skills}/rebrand-a-video/agents/openai.yaml +0 -0
- /package/{skills/make-a-social-reel → dist/skills/rebrand-a-video}/assets/icon.svg +0 -0
- /package/{skills/rebrand-a-video → dist/skills/video-craft-standards}/assets/icon.svg +0 -0
|
@@ -5,10 +5,17 @@ description: Use when editing, clipping, or rendering video via the CueFrame CLI
|
|
|
5
5
|
|
|
6
6
|
# CueFrame CLI
|
|
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).
|
|
15
|
+
|
|
8
16
|
## MCP is the primary surface — read this before using the CLI
|
|
9
17
|
|
|
10
|
-
**
|
|
11
|
-
out to this CLI.** MCP is the supported, maintained integration surface: it hides transport and
|
|
18
|
+
**For a tool-driven workflow, prefer an existing supported MCP connection. For an explicitly requested terminal or CI workflow, use the CLI.** MCP is the supported, maintained integration surface: it hides transport and
|
|
12
19
|
contract details, its tools are generated from the same OpenAPI SSOT the CLI is, and it is where
|
|
13
20
|
new capability lands first. The `cueframe-connect` skill owns the setup for every host
|
|
14
21
|
(Claude Code, Claude/ChatGPT connectors, Cursor/Codex/VS Code/Windsurf/Zed, and the
|
|
@@ -24,11 +31,11 @@ both MCP and this CLI exist so you do not have to.
|
|
|
24
31
|
|
|
25
32
|
## Overview
|
|
26
33
|
|
|
27
|
-
The `cueframe` CLI drives the CueFrame platform from the terminal. Optimized for agents — every command supports `--json` (NDJSON event stream) and the binary self-describes via `npx -y cueframe@0.
|
|
34
|
+
The `cueframe` CLI drives the CueFrame platform from the terminal. Optimized for agents — every command supports `--json` (NDJSON event stream) and the binary self-describes via `npx -y cueframe@0.6 describe --json`.
|
|
28
35
|
|
|
29
|
-
**Run it as `npx -y cueframe@0.
|
|
36
|
+
**Run it as `npx -y cueframe@0.6 …` — every command in this skill is written that way, and
|
|
30
37
|
that form is executable verbatim.** There is no `cueframe` on your PATH unless you put it
|
|
31
|
-
there: `npx -y cueframe@0.
|
|
38
|
+
there: `npx -y cueframe@0.6 install` wires the MCP server and drops these skills, but npx
|
|
32
39
|
unpacks to an ephemeral cache, so it installs no binary. `npx` re-resolves the current
|
|
33
40
|
version on each call (~0.5s warm, ~5s cold), which also means these commands never go
|
|
34
41
|
stale. If you are running many in a row and want to skip that, `npm i -g cueframe` once
|
|
@@ -39,9 +46,9 @@ the documented path.
|
|
|
39
46
|
**The framework is three verbs:** `upload` (register media) → `composition put` (author the timeline) → `render` (→ MP4). The `Composition` is the contract — render takes the saved composition, nothing else. Everything domain-specific (AI clip suggestions, FCPXML/Premiere export) is a **use-case on-ramp** layered on top, not part of the core.
|
|
40
47
|
|
|
41
48
|
**Core principle — discover, don't guess.** Never author a composition from the
|
|
42
|
-
examples below alone. The live contract is `npx -y cueframe@0.
|
|
49
|
+
examples below alone. The live contract is `npx -y cueframe@0.6 schema composition` (prints
|
|
43
50
|
the real wire schema the server enforces); confirm any draft with
|
|
44
|
-
`npx -y cueframe@0.
|
|
51
|
+
`npx -y cueframe@0.6 composition validate -b @file.json` BEFORE you render. Validation is
|
|
45
52
|
free and instant; a render is neither. The examples here are orientation — the
|
|
46
53
|
schema is the source of truth.
|
|
47
54
|
|
|
@@ -63,20 +70,20 @@ delivery, not checking each edit. CLI validation does not replace visual evidenc
|
|
|
63
70
|
# Commands run against production; auth is stored in ~/.cueframe/auth.json.
|
|
64
71
|
|
|
65
72
|
# 1. Register media (one or many — mixed video / image / audio).
|
|
66
|
-
npx -y cueframe@0.
|
|
73
|
+
npx -y cueframe@0.6 upload "/path/to/source.mp4" --json # → mediaItemId (process_complete)
|
|
67
74
|
|
|
68
75
|
# 2. Create a project (sets aspect/format).
|
|
69
|
-
npx -y cueframe@0.
|
|
76
|
+
npx -y cueframe@0.6 project create -n "promo" -a 9:16 --json # → projectId
|
|
70
77
|
|
|
71
78
|
# 3. Author the composition: tracks of clips (per-clip reframe/trim), optional
|
|
72
79
|
# captions (captions.segments), brandKitId. The composition is the SSOT.
|
|
73
80
|
# Discover the live schema, then validate the draft BEFORE saving/rendering:
|
|
74
|
-
npx -y cueframe@0.
|
|
75
|
-
npx -y cueframe@0.
|
|
76
|
-
npx -y cueframe@0.
|
|
81
|
+
npx -y cueframe@0.6 schema composition # → live wire schema
|
|
82
|
+
npx -y cueframe@0.6 composition validate -b @composition.json # → ✓ valid | per-field errors (no render)
|
|
83
|
+
npx -y cueframe@0.6 composition put <projectId> -b @composition.json # ETag auto
|
|
77
84
|
|
|
78
85
|
# 4. Render the saved composition to MP4. SSE-watches + downloads when done.
|
|
79
|
-
npx -y cueframe@0.
|
|
86
|
+
npx -y cueframe@0.6 render <projectId> -o ./out.mp4 --json
|
|
80
87
|
# → render_queued → render_progress* → render_complete
|
|
81
88
|
#
|
|
82
89
|
# `render` takes ONLY a projectId and renders the SAVED composition (tracks +
|
|
@@ -85,14 +92,14 @@ npx -y cueframe@0.5 render <projectId> -o ./out.mp4 --json
|
|
|
85
92
|
# a hand-authored composition; if absent, the clip is rendered without captions.
|
|
86
93
|
|
|
87
94
|
# Reattach to an in-flight render later (e.g. after disconnect):
|
|
88
|
-
npx -y cueframe@0.
|
|
95
|
+
npx -y cueframe@0.6 render watch <renderId> -p <projectId> -o ./out.mp4 --json
|
|
89
96
|
```
|
|
90
97
|
|
|
91
98
|
## Anatomy of a composition.json
|
|
92
99
|
|
|
93
100
|
This section orients you to the shape; the authoritative contract is
|
|
94
|
-
`npx -y cueframe@0.
|
|
95
|
-
unclear, and `npx -y cueframe@0.
|
|
101
|
+
`npx -y cueframe@0.6 schema composition` (the live wire schema) — run it when a field is
|
|
102
|
+
unclear, and `npx -y cueframe@0.6 composition validate -b @file.json` to check a draft.
|
|
96
103
|
|
|
97
104
|
`composition put` takes the **bare** `Composition` object (no wrapper; the CLI POSTs
|
|
98
105
|
the `@file` verbatim and handles the ETag). Minimal valid shape:
|
|
@@ -159,18 +166,18 @@ the composition yourself (above).
|
|
|
159
166
|
|
|
160
167
|
```bash
|
|
161
168
|
# 1. Upload + chain the AI clip pass.
|
|
162
|
-
npx -y cueframe@0.
|
|
163
|
-
# (or run it explicitly: npx -y cueframe@0.
|
|
169
|
+
npx -y cueframe@0.6 upload "/path/to/source.mp4" --analyze --json # mediaItemId + suggestions
|
|
170
|
+
# (or run it explicitly: npx -y cueframe@0.6 analyze <mediaItemId> --wait --json)
|
|
164
171
|
|
|
165
172
|
# 2. List clip suggestions (publicId sug_…, title, startMs/endMs, score).
|
|
166
|
-
npx -y cueframe@0.
|
|
173
|
+
npx -y cueframe@0.6 clips <mediaItemId> --json
|
|
167
174
|
|
|
168
175
|
# 3. Create a project AND author its composition from the chosen suggestion.
|
|
169
|
-
npx -y cueframe@0.
|
|
170
|
-
# (or, on an existing project: npx -y cueframe@0.
|
|
176
|
+
npx -y cueframe@0.6 project create -n "paul-klein-shorts" -a 9:16 --from-suggestion <sug_…> --json
|
|
177
|
+
# (or, on an existing project: npx -y cueframe@0.6 composition from-suggestion <projectId> -s <sug_…>)
|
|
171
178
|
|
|
172
179
|
# 4. Render — same framework verb as above.
|
|
173
|
-
npx -y cueframe@0.
|
|
180
|
+
npx -y cueframe@0.6 render <projectId> -o ./out.mp4 --json
|
|
174
181
|
```
|
|
175
182
|
|
|
176
183
|
Both flows converge on `composition put` → `render`; the on-ramp just authors the
|
|
@@ -187,12 +194,12 @@ video and composites it (the shared renderer never runs your code).
|
|
|
187
194
|
|
|
188
195
|
```bash
|
|
189
196
|
# 1. Scaffold a workspace (writes cueframe.json + cueframe/components/). Idempotent.
|
|
190
|
-
npx -y cueframe@0.
|
|
197
|
+
npx -y cueframe@0.6 init --json
|
|
191
198
|
|
|
192
199
|
# 2a. Scaffold a component in cueframe/components/<id>/ as owned, editable source.
|
|
193
|
-
npx -y cueframe@0.
|
|
200
|
+
npx -y cueframe@0.6 new component my-badge --json
|
|
194
201
|
|
|
195
|
-
# 2b. …or FORK a built-in: discover ids from the catalog (npx -y cueframe@0.
|
|
202
|
+
# 2b. …or FORK a built-in: discover ids from the catalog (npx -y cueframe@0.6 api GET /v1/components),
|
|
196
203
|
# fetch that primitive's source with the `get_component_source` tool, and paste it into
|
|
197
204
|
# cueframe/components/my-badge/index.tsx as your starting point.
|
|
198
205
|
|
|
@@ -200,38 +207,38 @@ npx -y cueframe@0.5 new component my-badge --json
|
|
|
200
207
|
# ({ durationInFrames, params, assets, render }) at render; declare its v2 manifest.
|
|
201
208
|
|
|
202
209
|
# 4. Publish to CueFrame so it can render (uploads index.tsx as the component's tsxSource).
|
|
203
|
-
npx -y cueframe@0.
|
|
204
|
-
npx -y cueframe@0.
|
|
210
|
+
npx -y cueframe@0.6 push my-badge --json # one component
|
|
211
|
+
npx -y cueframe@0.6 sync --json # every component in the workspace
|
|
205
212
|
|
|
206
213
|
# 5. Reference the component id in your composition as a {kind:'component', componentId, props}
|
|
207
214
|
# clip, then render with the same verb. Preview a single component first via the MCP
|
|
208
215
|
# preview_component loop.
|
|
209
|
-
npx -y cueframe@0.
|
|
216
|
+
npx -y cueframe@0.6 render <projectId> -o ./out.mp4 --json
|
|
210
217
|
```
|
|
211
218
|
|
|
212
219
|
## Quick reference
|
|
213
220
|
|
|
214
221
|
| Need to… | Command |
|
|
215
222
|
|---|---|
|
|
216
|
-
| See every command + flags | `npx -y cueframe@0.
|
|
217
|
-
| Install/refresh managed skills | `npx -y cueframe@0.
|
|
218
|
-
| List projects | `npx -y cueframe@0.
|
|
219
|
-
| List your media | `npx -y cueframe@0.
|
|
220
|
-
| Discover the live composition schema | `npx -y cueframe@0.
|
|
221
|
-
| Validate a draft (no save, no render) | `npx -y cueframe@0.
|
|
222
|
-
| Read composition + ETag | `npx -y cueframe@0.
|
|
223
|
-
| Write composition | `npx -y cueframe@0.
|
|
224
|
-
| Export to Final Cut | `npx -y cueframe@0.
|
|
225
|
-
| Export to Premiere | `npx -y cueframe@0.
|
|
226
|
-
| Anything not wrapped | `npx -y cueframe@0.
|
|
227
|
-
| Validate a composition without mutating | `npx -y cueframe@0.
|
|
223
|
+
| See every command + flags | `npx -y cueframe@0.6 describe --json` |
|
|
224
|
+
| Install/refresh managed skills | `npx -y cueframe@0.6 install` (shared `~/.agents/skills` and Claude `~/.claude/skills`; locally changed or untracked packages are preserved and reported) |
|
|
225
|
+
| List projects | `npx -y cueframe@0.6 list -n 50` |
|
|
226
|
+
| List your media | `npx -y cueframe@0.6 clips` (no mediaId arg) |
|
|
227
|
+
| Discover the live composition schema | `npx -y cueframe@0.6 schema composition` |
|
|
228
|
+
| Validate a draft (no save, no render) | `npx -y cueframe@0.6 composition validate -b @plan.json` |
|
|
229
|
+
| Read composition + ETag | `npx -y cueframe@0.6 composition get <projectId> --json` |
|
|
230
|
+
| Write composition | `npx -y cueframe@0.6 composition put <projectId> -b @plan.json` (ETag auto) |
|
|
231
|
+
| Export to Final Cut | `npx -y cueframe@0.6 export fcpxml <projectId> -s <sug> --wait -o cut.zip` |
|
|
232
|
+
| Export to Premiere | `npx -y cueframe@0.6 export premiere <projectId> -s <sug> --wait -o cut.zip` |
|
|
233
|
+
| Anything not wrapped | `npx -y cueframe@0.6 api GET /v1/... -i` (escape hatch, like `gh api`) |
|
|
234
|
+
| Validate a composition without mutating | `npx -y cueframe@0.6 composition validate -b @plan.json` |
|
|
228
235
|
|
|
229
236
|
## Auth
|
|
230
237
|
|
|
231
238
|
Commands run against production. Authenticate once:
|
|
232
239
|
|
|
233
|
-
- `npx -y cueframe@0.
|
|
234
|
-
- `npx -y cueframe@0.
|
|
240
|
+
- `npx -y cueframe@0.6 login` — OAuth device flow (laptops).
|
|
241
|
+
- `npx -y cueframe@0.6 auth <cf_live_… key>` — save a static API key (CI / headless).
|
|
235
242
|
|
|
236
243
|
Creds are stored in `~/.cueframe/auth.json`; the key can also come from the `CUEFRAME_API_KEY` env var.
|
|
237
244
|
|
|
@@ -249,17 +256,15 @@ Errors come as `{"event":"error", "phase":"<step>", "message":"...", "code":"...
|
|
|
249
256
|
|
|
250
257
|
| Mistake | Reality |
|
|
251
258
|
|---|---|
|
|
252
|
-
| Reaching for `curl …/v1/...` because the CLI didn't have a command | Use `npx -y cueframe@0.
|
|
253
|
-
| Polling for render completion with a sleep loop | `npx -y cueframe@0.
|
|
259
|
+
| Reaching for `curl …/v1/...` because the CLI didn't have a command | Use `npx -y cueframe@0.6 api METHOD /v1/...` — same auth, same JSON pipeline. |
|
|
260
|
+
| Polling for render completion with a sleep loop | `npx -y cueframe@0.6 render` already SSE-watches and exits when done. Use `render watch <id>` to reattach. |
|
|
254
261
|
| Skipping `--json` and trying to parse human output | Human output is for humans. Agents always use `--json`. |
|
|
255
262
|
| Hand-editing the composition without an ETag | `composition put` GETs the ETag for you; `from-suggestion` rebuilds from a clip. Don't hand-craft unless you have to. |
|
|
256
|
-
| Calling `npx -y cueframe@0.
|
|
263
|
+
| Calling `npx -y cueframe@0.6 render <projectId> <suggestionId>` (old two-positional shape) | `render` takes ONLY a projectId; commander rejects the extra arg. It renders the SAVED composition — author it first via `composition put` (hand-author) or `project create --from-suggestion <sug>` (clip-finder on-ramp). |
|
|
257
264
|
| Assuming `render` needs a clip suggestion / that captions only come from a suggestion | No — `render` renders the saved composition directly; a suggestion is optional. Captions come from `composition.captions` (author them in the `put` JSON). The clip-suggestion on-ramp just fills those captions for you by slicing the transcript at author time. |
|
|
258
265
|
|
|
259
266
|
## When this skill applies (routing)
|
|
260
267
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
Drop to raw `ffmpeg` only for a **single mechanical operation with zero creative or perceptual intent** — losslessly concatenating two finished files, transcoding a codec, extracting an audio track. That one carve-out aside, reach for `cueframe`.
|
|
268
|
+
Use this skill for a requested terminal/CI workflow or when the available CLI is the supported path for the task. If supported MCP tools are already connected, use their narrow edit/preview guidance instead. A mechanical operation inside a creative task does not require a different project or new installation. If a required capability is absent, report the limitation and a supported alternative; do not invent a command or silently change lanes.
|
|
264
269
|
|
|
265
|
-
|
|
270
|
+
CLI development and internal backend inspection are outside this usage skill.
|
|
@@ -5,6 +5,14 @@ description: Use when authoring, forking, or customizing a CueFrame motion-graph
|
|
|
5
5
|
|
|
6
6
|
# CueFrame component authoring (fork / customize / own)
|
|
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).
|
|
15
|
+
|
|
8
16
|
Use `cueframe-compose-loop`'s [preview workflow](../cueframe-compose-loop/references/preview-workflow.md)
|
|
9
17
|
to select hosted or local evidence and separate iteration from final delivery.
|
|
10
18
|
|
|
@@ -60,15 +68,15 @@ Source lives in `cueframe/components/<id>/` (the `cueframe.json` workspace); edi
|
|
|
60
68
|
standard Remotion, push to render.
|
|
61
69
|
|
|
62
70
|
```bash
|
|
63
|
-
npx -y cueframe@0.
|
|
64
|
-
npx -y cueframe@0.
|
|
71
|
+
npx -y cueframe@0.6 init --json # scaffold cueframe.json + cueframe/components/
|
|
72
|
+
npx -y cueframe@0.6 new component my-badge --json # scaffold a component in the workspace
|
|
65
73
|
# to start from a built-in instead of a blank file: fetch its source with the
|
|
66
74
|
# `get_component_source` tool and paste it into cueframe/components/my-badge/index.tsx
|
|
67
75
|
# …edit cueframe/components/<id>/ in your editor (standard Remotion)…
|
|
68
|
-
npx -y cueframe@0.
|
|
69
|
-
# or: npx -y cueframe@0.
|
|
76
|
+
npx -y cueframe@0.6 push my-badge --json # upload index.tsx as the component tsxSource
|
|
77
|
+
# or: npx -y cueframe@0.6 sync --json # push every component in the workspace
|
|
70
78
|
# reference the component id in your composition, then render:
|
|
71
|
-
npx -y cueframe@0.
|
|
79
|
+
npx -y cueframe@0.6 render <projectId> -o ./out.mp4 --json
|
|
72
80
|
```
|
|
73
81
|
|
|
74
82
|
The CLI writes a 3-file layout (`index.tsx` = renderable module + adapter; `_config.ts` + `config.ts`
|
|
@@ -173,7 +181,7 @@ const R = params.region ?? { x: 0, y: 0, w: 1, h: 1 };
|
|
|
173
181
|
- Don't expect a forked primitive to use rich named props — read `params` inside and use the explicit
|
|
174
182
|
`assets` and `render` bags for media and frame state.
|
|
175
183
|
- Don't hand-roll a graphic from zero when a built-in is close — fork it (fetch the source with
|
|
176
|
-
`get_component_source`, paste it into a `npx -y cueframe@0.
|
|
184
|
+
`get_component_source`, paste it into a `npx -y cueframe@0.6 new component` scaffold) and edit.
|
|
177
185
|
- Don't `create_component` a fresh id each fix iteration — `update_component` (same id) is the loop.
|
|
178
186
|
- Don't update a placed component without its `projectId` in the body — the placed clips keep the
|
|
179
187
|
version they pin, so the next preview or render shows the old graphic.
|
|
@@ -5,6 +5,14 @@ description: Use when an AI agent should DRIVE CueFrame to a high-quality clip i
|
|
|
5
5
|
|
|
6
6
|
# CueFrame — Compose convergence loop
|
|
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).
|
|
15
|
+
|
|
8
16
|
You are the director. CueFrame gives you hands (author), eyes (capture), and a
|
|
9
17
|
judge (verify); you supply the taste and the iteration. The engine does NOT
|
|
10
18
|
auto-compose for you here — you drive the loop and decide when it's done. Drive
|
|
@@ -27,7 +35,7 @@ Hosted preview and scoring are durable, stateless jobs. Keep their job IDs and
|
|
|
27
35
|
wait for each terminal result; there is no hosted render box to open, warm, or close.
|
|
28
36
|
Use the local live-preview tools when working in a desktop project that exposes them.
|
|
29
37
|
|
|
30
|
-
## 0. Context —
|
|
38
|
+
## 0. Context — relevant project and source first
|
|
31
39
|
|
|
32
40
|
`GET /v1/media/:id/context` (`cueframe_api_getMediaContext`) returns what you need
|
|
33
41
|
to author well for a source:
|
|
@@ -40,10 +48,15 @@ to author well for a source:
|
|
|
40
48
|
- **transcript** — utterances with per-word `start`/`end` (seconds). Use for
|
|
41
49
|
caption timing and for placing overlays on the right beat.
|
|
42
50
|
|
|
51
|
+
For a maintained builtin package, follow [exact builtin insertion](references/builtin-insertion.md)
|
|
52
|
+
before authoring custom source.
|
|
53
|
+
|
|
43
54
|
## 1. Author
|
|
44
55
|
|
|
45
56
|
Build/modify the working composition with the op vocabulary —
|
|
46
|
-
`
|
|
57
|
+
the curated `apply_composition({ projectId, body: { ops: [...] } })`. Read
|
|
58
|
+
`describe_composition_ops` for supported operations and `get_composition` for
|
|
59
|
+
current revision and brand witnesses before editing. Op keys
|
|
47
60
|
are `.strict()`: a typo'd key is rejected, not silently dropped, so read the
|
|
48
61
|
error and fix the key. Reference faces from get_context in your reframe segments;
|
|
49
62
|
time captions/overlays from the transcript word timings.
|
|
@@ -61,9 +74,9 @@ and audio timing; use `preview_component` or `preview_card` for isolated authori
|
|
|
61
74
|
|
|
62
75
|
## 3. Score it
|
|
63
76
|
|
|
64
|
-
|
|
77
|
+
When broader review is useful and within budget, use `score_composition`, or `POST /v1/projects/:id/score-composition`, with the
|
|
65
78
|
composition target plus optional `editorialIntent` and `brandContext`. It returns
|
|
66
|
-
`{ jobId }`; call `wait_job({ kind: "verify", jobId })`. CueFrame's judge samples
|
|
79
|
+
`{ jobId }`; call `wait_job({ kind: "verify", id: jobId })`. CueFrame's judge samples
|
|
67
80
|
the meaningful beats, renders them, and returns:
|
|
68
81
|
|
|
69
82
|
```
|
|
@@ -82,6 +95,8 @@ The four criteria:
|
|
|
82
95
|
| **brand** | on-brand color/typography/voice; cohesive look |
|
|
83
96
|
| **caption** | caption legibility, timing, placement (or `no_captions` when absent) |
|
|
84
97
|
|
|
98
|
+
The hosted caption criterion can penalize intentionally uncaptioned work; do not add captions solely for a score. These instructions do not change judge behavior.
|
|
99
|
+
|
|
85
100
|
You get **scores and the critique, never the rubric** — the taste is CueFrame's.
|
|
86
101
|
Pass `editorialIntent` (your brief/hook) so editorial is graded against what you
|
|
87
102
|
meant.
|
|
@@ -98,8 +113,7 @@ nudge pixels (see `cueframe-component-authoring`).
|
|
|
98
113
|
|
|
99
114
|
## 5. Stop — then render
|
|
100
115
|
|
|
101
|
-
For a whole-film review,
|
|
102
|
-
acceptance criteria. Two no-improvement passes are a reason to stop spending and report what
|
|
116
|
+
For a whole-film review, check the brief's actual acceptance criteria; no fixed score threshold applies. Two no-improvement passes are a reason to stop spending and report what
|
|
103
117
|
remains, not to declare a rejected result approved. Render with `create_render` only when a
|
|
104
118
|
finished video is requested or the work reaches final delivery. A scoped revision can end with
|
|
105
119
|
verified preview evidence and an explicit note that no new final export was made.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Discover and insert an exact builtin
|
|
2
|
+
|
|
3
|
+
Use the hosted MCP tools in this order. The CLI reaches the same REST operations
|
|
4
|
+
through `cueframe api ... --json`; read `cueframe describe --json` for its current
|
|
5
|
+
request options. Use the selected environment consistently.
|
|
6
|
+
|
|
7
|
+
1. Call `list_catalog` with `projection: "component-library"`, `origin: "builtin"`,
|
|
8
|
+
`limit: 10` and a search term. Follow the returned cursor for more results.
|
|
9
|
+
2. Preserve the selected card's complete identity, including collection, id and
|
|
10
|
+
revision. Call `resolve_builtin_component` with that exact identity. For a
|
|
11
|
+
preset or recipe, retain the returned `documentSha256` and canonical document.
|
|
12
|
+
A definition is source material, not a whole insertable package.
|
|
13
|
+
3. Read the target with `get_composition`, negotiating component execution 3 and
|
|
14
|
+
dependencies. Keep its revision and brand identity. Do not recreate the project.
|
|
15
|
+
4. Call `apply_template` with `template` equal to the selected builtin id. Put
|
|
16
|
+
projectId, documentSha256, insert, values, media and concurrency witnesses
|
|
17
|
+
inside `body`, following the live tool schema. Use an explicit nonnegative
|
|
18
|
+
`insert.startTime` and a unique `insert.idPrefix`; the package keeps its
|
|
19
|
+
authored placement offsets. Select pinned samples explicitly for every media slot you intend to use:
|
|
20
|
+
`media: { image1: { sample: true }, image2: { sample: true } }` (continue
|
|
21
|
+
for all declared slots), or bind real media IDs. Missing required bindings
|
|
22
|
+
are refused; samples are never selected implicitly.
|
|
23
|
+
5. Read back the composition. Check that existing clips remain, every package
|
|
24
|
+
placement exists at its intended offset, and exact source pins are retained.
|
|
25
|
+
6. Preview the affected interval, then use `create_render` and wait for the actual
|
|
26
|
+
artifact. Inspect the produced video; a successful request alone is not render
|
|
27
|
+
evidence.
|
|
28
|
+
|
|
29
|
+
Never replace a selected revision with the latest, switch its scope, refresh a
|
|
30
|
+
stale concurrency witness silently, synthesize replacement wrapper source, or
|
|
31
|
+
use a thumbnail as the package. A pinned sample failure identifies the slot;
|
|
32
|
+
report it or bind an explicit replacement instead of accepting changed bytes.
|
|
33
|
+
|
|
34
|
+
The executable request examples beside this guide are validated against the
|
|
35
|
+
MCP introspection snapshot generated from the server package.
|
|
36
|
+
|
|
37
|
+
CLI discovery uses the same contract:
|
|
38
|
+
|
|
39
|
+
```sh
|
|
40
|
+
cueframe api GET '/v1/components?projection=component-library&origin=builtin&q=wheel&limit=10' --target dev --json
|
|
41
|
+
cueframe api GET '/v1/components/builtin/resolve?collection=curated-looks&id=builtin%3Areference-component-wheel-full&revision=OBSERVED_REVISION' --target dev --json
|
|
42
|
+
cueframe api POST '/v1/templates/builtin%3Areference-component-wheel-full/apply' --body @insertion.json --target dev --json
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Replace `OBSERVED_REVISION` with the returned card revision. `insertion.json`
|
|
46
|
+
contains the `body` object from the MCP example with real observed identifiers
|
|
47
|
+
and witnesses. The fixture digest identifies the reviewed Wheel document; use the live resolved
|
|
48
|
+
digest and observed brand identity instead of copying example witnesses. A 202 means pinned media preparation is pending: repeat the same
|
|
49
|
+
insertion command after the response's retry delay, retaining `commandId`.
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"name": "discover_builtin",
|
|
4
|
+
"tool": "list_catalog",
|
|
5
|
+
"arguments": {
|
|
6
|
+
"projection": "component-library",
|
|
7
|
+
"origin": "builtin",
|
|
8
|
+
"limit": 10,
|
|
9
|
+
"q": "Wheel"
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"name": "resolve_exact_builtin",
|
|
14
|
+
"tool": "resolve_builtin_component",
|
|
15
|
+
"arguments": {
|
|
16
|
+
"collection": "curated-looks",
|
|
17
|
+
"id": "builtin:reference-component-wheel-full",
|
|
18
|
+
"revision": "2577db06c45171396e2f0199b2616877dfa25f3f68be0ec75fefea8e6a54755b"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "read_insertion_witnesses",
|
|
23
|
+
"tool": "get_composition",
|
|
24
|
+
"arguments": {
|
|
25
|
+
"projectId": "observed-project",
|
|
26
|
+
"componentExecutionVersions": "3",
|
|
27
|
+
"includeDependencies": "true"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"name": "insert_exact_builtin",
|
|
32
|
+
"tool": "apply_template",
|
|
33
|
+
"arguments": {
|
|
34
|
+
"template": "builtin:reference-component-wheel-full",
|
|
35
|
+
"body": {
|
|
36
|
+
"projectId": "observed-project",
|
|
37
|
+
"documentSha256": "2577db06c45171396e2f0199b2616877dfa25f3f68be0ec75fefea8e6a54755b",
|
|
38
|
+
"insert": {
|
|
39
|
+
"startTime": 3,
|
|
40
|
+
"idPrefix": "wheel-insertion-1"
|
|
41
|
+
},
|
|
42
|
+
"expectedRevision": 1,
|
|
43
|
+
"commandId": "insert-wheel-1",
|
|
44
|
+
"values": {},
|
|
45
|
+
"media": {
|
|
46
|
+
"image1": {
|
|
47
|
+
"sample": true
|
|
48
|
+
},
|
|
49
|
+
"image2": {
|
|
50
|
+
"sample": true
|
|
51
|
+
},
|
|
52
|
+
"image3": {
|
|
53
|
+
"sample": true
|
|
54
|
+
},
|
|
55
|
+
"image4": {
|
|
56
|
+
"sample": true
|
|
57
|
+
},
|
|
58
|
+
"image5": {
|
|
59
|
+
"sample": true
|
|
60
|
+
},
|
|
61
|
+
"image6": {
|
|
62
|
+
"sample": true
|
|
63
|
+
},
|
|
64
|
+
"image7": {
|
|
65
|
+
"sample": true
|
|
66
|
+
},
|
|
67
|
+
"image8": {
|
|
68
|
+
"sample": true
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
"componentExecutionVersions": [
|
|
72
|
+
3
|
|
73
|
+
],
|
|
74
|
+
"expectedBrandIdentity": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"name": "wait_for_score",
|
|
80
|
+
"tool": "wait_job",
|
|
81
|
+
"arguments": {
|
|
82
|
+
"kind": "verify",
|
|
83
|
+
"id": "returned-job-id"
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"name": "render_inserted_wheel",
|
|
88
|
+
"tool": "create_render",
|
|
89
|
+
"arguments": {
|
|
90
|
+
"projectId": "observed-project",
|
|
91
|
+
"body": {
|
|
92
|
+
"compositionId": "observed-composition",
|
|
93
|
+
"format": {
|
|
94
|
+
"aspectRatio": "16:9",
|
|
95
|
+
"fps": 30,
|
|
96
|
+
"resolution": "fhd"
|
|
97
|
+
},
|
|
98
|
+
"intent": "final"
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"name": "wait_for_render",
|
|
104
|
+
"tool": "wait_job",
|
|
105
|
+
"arguments": {
|
|
106
|
+
"kind": "render",
|
|
107
|
+
"id": "returned-render-id",
|
|
108
|
+
"projectId": "observed-project"
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
]
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cueframe-connect
|
|
3
|
+
description: Use when CueFrame is not connected yet, the user asks how to connect or authenticate CueFrame, or another CueFrame skill is about to call a tool and needs the one-time setup path for Claude Code, Claude, ChatGPT, Cursor, Codex, VS Code, Windsurf, Zed, Antigravity CLI, Copilot CLI, or an x402 wallet.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Connect CueFrame
|
|
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).
|
|
15
|
+
|
|
16
|
+
First inspect available CueFrame tools and their current project context. If the requested work is supported by an existing connection, use it without installing again. Preserve the user's chosen local or hosted lane. Local-only desktop work needs no hosted registration; desktop connection instructions are at https://docs.cueframe.ai. This public plugin connects to the hosted product at `https://api.cueframe.ai/v1/mcp`.
|
|
17
|
+
|
|
18
|
+
When a required capability is missing, explain the limitation and the supported alternative. Setup is warranted only when requested or necessary for an authorized tool action. Do not silently install across clients, launch authentication, switch projects or upload local content. For CLI setup, select the intended client using its supported flags rather than wiring every detected host. Resume the original task after setup.
|
|
19
|
+
|
|
20
|
+
- **Claude Code:** offer to run
|
|
21
|
+
`claude mcp add --transport http cueframe https://api.cueframe.ai/v1/mcp` — a browser
|
|
22
|
+
opens and the user clicks **Allow**. No API key.
|
|
23
|
+
- **Claude.ai / Claude Desktop:** Settings → Connectors → add a custom connector with
|
|
24
|
+
`https://api.cueframe.ai/v1/mcp`.
|
|
25
|
+
- **Other agents (Cursor, Codex, VS Code, Windsurf, Zed, Antigravity CLI, Copilot CLI, …):**
|
|
26
|
+
use `npx -y cueframe@0.6 install --help` to select the intended client; preserve existing configuration and avoid duplicate installs.
|
|
27
|
+
- **ChatGPT:** the CLI cannot wire it because there is no local config to write; add
|
|
28
|
+
`https://api.cueframe.ai/v1/mcp` as a custom connector instead.
|
|
29
|
+
- **No account (pay per call):** connect
|
|
30
|
+
`https://api.cueframe.ai/v1/mcp/x402` — no sign-up or API key; priced calls settle
|
|
31
|
+
per call in USDC over x402 from the agent's wallet.
|
|
32
|
+
|
|
33
|
+
Do not ask the user to configure a model provider for CueFrame. This connection exposes CueFrame's
|
|
34
|
+
tools; the host agent keeps using its already-selected CueFrame Gateway, BYOK, or local model.
|
|
35
|
+
|
|
36
|
+
## Confirm the capabilities needed for the task
|
|
37
|
+
|
|
38
|
+
Connected is not the same as working, and finding out at the first *paid* call is the expensive
|
|
39
|
+
way. Use available read-only discovery for the selected lane:
|
|
40
|
+
|
|
41
|
+
1. **Discover the surface.** List the tools your host now exposes. You should see the compose loop
|
|
42
|
+
(`new_composition`, `apply_composition`, `validate_composition`, `create_render`) alongside
|
|
43
|
+
discovery reads (`list_catalog`, `list_media`, `get_account`). There are also resources
|
|
44
|
+
(`cueframe://scene-shot` for 3D product shots) and workflow prompts — a flat tool list is not
|
|
45
|
+
the whole surface.
|
|
46
|
+
2. **For hosted work, smoke-call `get_account` before spending.** It takes no arguments, costs nothing, and answers the questions
|
|
47
|
+
worth knowing before you spend: which org the key is bound to, the plan, per-feature
|
|
48
|
+
entitlements and — the one that matters — `balance`, not `included`. CueFrame is credit-funded,
|
|
49
|
+
so rendering, generation, preview stills, the judge and the Director all draw on ONE shared
|
|
50
|
+
wallet. A successful `get_account` proves that read is authorized; check the specific capability and current quote separately. Local tools without metered hosted work do not need this hosted call.
|
|
51
|
+
|
|
52
|
+
If a later call fails on scope, the error names the exact missing permission (for example
|
|
53
|
+
`billing:read`, which `get_usage` needs and a creative-only key will not have). Explain the missing permission and use an authorized setup path; do not broaden credentials automatically.
|
|
@@ -5,6 +5,14 @@ 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).
|
|
15
|
+
|
|
8
16
|
A **use-case recipe**, not new framework surface. CueFrame's engine only knows
|
|
9
17
|
primitives (`upload` → `composition put` → `render`, the `reframe` viewport, the
|
|
10
18
|
overlay/effect primitives). This skill is the *judgment* on top: how to turn a
|
|
@@ -13,7 +21,7 @@ to author, not how to transport it.
|
|
|
13
21
|
|
|
14
22
|
**Drive the primitives over MCP if you can call tools** (`new_composition` /
|
|
15
23
|
`apply_composition` / `validate_composition` / `create_render` — see the
|
|
16
|
-
`cueframe-connect` skill for the one-line setup). The `npx -y cueframe@0.
|
|
24
|
+
`cueframe-connect` skill for the one-line setup). The `npx -y cueframe@0.6 …` commands
|
|
17
25
|
written out below are the same operations for a terminal or CI job with no MCP
|
|
18
26
|
host; see the `cueframe-cli` skill.
|
|
19
27
|
|
|
@@ -56,7 +64,7 @@ style's) over each window. Result → `source.reframe.segments` on the clip.
|
|
|
56
64
|
## 3. Compose
|
|
57
65
|
|
|
58
66
|
One video track, the screen recording as a media clip carrying the reframe.
|
|
59
|
-
`npx -y cueframe@0.
|
|
67
|
+
`npx -y cueframe@0.6 composition put <projectId> -b @composition.json` (see `cueframe-cli`).
|
|
60
68
|
Choose `-a 16:9` for landscape product video, `9:16` for social.
|
|
61
69
|
|
|
62
70
|
## 4. Polish — layer overlay primitives (this is what makes it look "produced")
|
|
@@ -94,21 +102,21 @@ check framing with `preview_frame` and click/zoom timing with an affected-window
|
|
|
94
102
|
For a small revision, verify that change and relevant regressions without exporting the whole film.
|
|
95
103
|
When delivering the finished video:
|
|
96
104
|
|
|
97
|
-
`npx -y cueframe@0.
|
|
105
|
+
`npx -y cueframe@0.6 render <projectId> -o out.mp4 --json`. Verify the output (ffprobe +
|
|
98
106
|
sample frames) before declaring done.
|
|
99
107
|
|
|
100
108
|
## Worked examples — composition JSON
|
|
101
109
|
|
|
102
110
|
These are **orientation, not the contract.** The live wire schema is
|
|
103
|
-
`npx -y cueframe@0.
|
|
104
|
-
`npx -y cueframe@0.
|
|
111
|
+
`npx -y cueframe@0.6 schema composition`, and the way to know a draft is correct is
|
|
112
|
+
`npx -y cueframe@0.6 composition validate -b @composition.json` — it runs the same
|
|
105
113
|
validator the server enforces, with no save and no render. Discover + validate
|
|
106
114
|
before you render; never spend a render to find a schema mistake.
|
|
107
115
|
|
|
108
116
|
Each block below is a complete `@composition.json` (the bare object `composition put`
|
|
109
117
|
accepts: top-level `v`, `format`, `tracks`, optional `captions`). All five validate
|
|
110
118
|
against the real wire schema + save invariants (swap the `<…MediaId>` placeholders for
|
|
111
|
-
real `npx -y cueframe@0.
|
|
119
|
+
real `npx -y cueframe@0.6 upload` ids). Conventions that keep them valid:
|
|
112
120
|
|
|
113
121
|
- Tracks hold **`contents`** (not `clips`); each clip wraps a `source`.
|
|
114
122
|
- A clip's `source.kind` must match the track `kind`: `media` → `video`/`image`/`audio`
|
|
@@ -290,4 +298,4 @@ Talking-head with an `active-speaker` reframe and a `heroText` title at `zPlane:
|
|
|
290
298
|
background. See EX3 / EX4 below.
|
|
291
299
|
- This recipe lives in a skill on purpose: the engine stays use-case-free; the
|
|
292
300
|
product opinions (style, which primitives, layout) live here and ship via
|
|
293
|
-
`npx -y cueframe@0.
|
|
301
|
+
`npx -y cueframe@0.6 install`. Add sibling recipes (`cueframe-podcast-clip`, …) the same way.
|
|
@@ -5,6 +5,14 @@ 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).
|
|
15
|
+
|
|
8
16
|
Use `scene.add` and `scene.update` through `apply_composition`. Author the scene JSON; CueFrame owns the generated wrapper, preparation, resource admission, previews, and export.
|
|
9
17
|
|
|
10
18
|
Before authoring, read `cueframe://scene-shot`. It serves the canonical generated `SceneShotSpecV2` schema, exact operation contracts, supported brand tokens, refusal rules, and a copyable nested slab-and-page recipe. Do not infer fields from an older example.
|