cueframe 0.4.7 → 0.4.8
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/LICENSE +105 -661
- package/README.md +1 -1
- package/dist/analyze-4KYPG6F7.js +2 -0
- package/dist/{chunk-WFQZXC67.js → chunk-EGBS3VAH.js} +14 -14
- package/dist/cueframe.js +63 -53
- package/dist/skills/clip-a-talking-head/SKILL.md +6 -3
- package/dist/skills/cueframe-cli/SKILL.md +3 -2
- package/dist/skills/cueframe-component-authoring/SKILL.md +20 -8
- package/dist/skills/cueframe-compose-loop/references/preview-workflow.md +1 -1
- package/dist/skills/launch-video/SKILL.md +5 -3
- package/dist/skills/make-a-social-reel/SKILL.md +6 -1
- package/dist/skills/video-craft-standards/SKILL.md +3 -1
- package/package.json +3 -3
- package/dist/analyze-J3YAYGD4.js +0 -2
|
@@ -50,8 +50,11 @@ correction, retain the approved edit and check relevant regressions without auto
|
|
|
50
50
|
`focus:{mode:"active-speaker"}` as the base, `all-faces` to hold a two-shot, a `face` +
|
|
51
51
|
`shotScale:"close"` punch-in on the emphasis line. A static center crop is the amateur tell;
|
|
52
52
|
the camera should move because the conversation moved.
|
|
53
|
-
6. **Captions from the
|
|
54
|
-
|
|
53
|
+
6. **Captions from the edited clip.** Save cuts and exclusions first, then call
|
|
54
|
+
`captions.fromComposition` with the speech track ID in a separate `apply_composition` call.
|
|
55
|
+
It projects the real transcript through every saved edit; clips must have saved duration matching playable source duration divided by playbackRate. Re-run after later edits. Get the
|
|
56
|
+
exact input from `describe_composition_ops({type:"captions.fromComposition"})` and style via
|
|
57
|
+
`setCaptionStyle` — plated, high-contrast, never over the mouth or
|
|
55
58
|
eyes. Where the footage allows, put the emphasized keyword BEHIND the speaker as an overlay
|
|
56
59
|
clip at `zPlane:"behind-subject"` — the focused signature depth move. If the user explicitly
|
|
57
60
|
wants every running caption behind the speaker, set the caption layer's own
|
|
@@ -79,7 +82,7 @@ Quoted from `video-craft-standards` §4 (Talking-head clip) — the full checkli
|
|
|
79
82
|
> **MUST** Active-speaker reframe (`focus: active-speaker` / `face`) — a moving camera, not a
|
|
80
83
|
> static center crop.
|
|
81
84
|
|
|
82
|
-
> **MUST** Captions timed to the
|
|
85
|
+
> **MUST** Captions timed to the edited clip (`captions.fromComposition`); behind-speaker
|
|
83
86
|
> placement where the footage allows it. **MUST** Dead air and false starts cut
|
|
84
87
|
> (`addExcludedRange` / `cutAndRipple`).
|
|
85
88
|
|
|
@@ -203,8 +203,9 @@ npx -y cueframe new component my-badge --json
|
|
|
203
203
|
npx -y cueframe push my-badge --json # one component
|
|
204
204
|
npx -y cueframe sync --json # every component in the workspace
|
|
205
205
|
|
|
206
|
-
# 5. Reference the component id in your composition
|
|
207
|
-
# with the same verb. Preview a single component first via the MCP
|
|
206
|
+
# 5. Reference the component id in your composition as a {kind:'component', componentId, props}
|
|
207
|
+
# clip, then render with the same verb. Preview a single component first via the MCP
|
|
208
|
+
# preview_component loop.
|
|
208
209
|
npx -y cueframe render <projectId> -o ./out.mp4 --json
|
|
209
210
|
```
|
|
210
211
|
|
|
@@ -42,11 +42,17 @@ Single self-contained module per component (`create_component` takes one `tsxSou
|
|
|
42
42
|
verified artifact produced by the same bundle contract used by final render. A failed
|
|
43
43
|
`component_does_not_compile` job carries the compiler error — read it, fix via `update_component`
|
|
44
44
|
(same id, in place), and preview again.
|
|
45
|
+
**Once the component is placed in a project, pass that project on every update:**
|
|
46
|
+
`update_component({ componentId, body: { tsxSource, projectId, compositionId? } })`. A placed clip
|
|
47
|
+
renders the exact version it pins; only the composition you name moves to the new version in the
|
|
48
|
+
same write (`repinned` says what moved). Without `projectId` your clips keep rendering the old
|
|
49
|
+
version, and `placementsPinnedToPrevious` counts them.
|
|
45
50
|
Set preview duration deliberately: `durationInFrames` is not a trim window and can retime
|
|
46
51
|
duration-dependent motion. Preserve production timing; inspect the live tool's request shape.
|
|
47
|
-
4. **Check integration:** add it as
|
|
48
|
-
saved-composition stills or a scoped `preview_clip` for
|
|
49
|
-
`create_render` → `wait_job kind:"render"` when delivering a
|
|
52
|
+
4. **Check integration:** add it as a `{kind:'component', componentId, props}` clip
|
|
53
|
+
(`apply_composition`), then inspect saved-composition stills or a scoped `preview_clip` for
|
|
54
|
+
placement and motion. Use `create_render` → `wait_job kind:"render"` when delivering a
|
|
55
|
+
finished MP4, not per tweak.
|
|
50
56
|
|
|
51
57
|
## Path B — CLI / coding agent (customer-owned source under git)
|
|
52
58
|
|
|
@@ -72,10 +78,12 @@ MCP path stores. To preview before a full render, push it and use the MCP `previ
|
|
|
72
78
|
## Path C — Director editing a local desktop project (project-embedded source)
|
|
73
79
|
|
|
74
80
|
When `get_context` reports the project lane as local, motion does not require an account or an org
|
|
75
|
-
component. When exposed, use `open_component_preview` to compile an isolated preview,
|
|
76
|
-
`
|
|
77
|
-
|
|
78
|
-
|
|
81
|
+
component. When exposed, use `open_component_preview` to compile an isolated preview (new source,
|
|
82
|
+
or `component_id` for a component already in the desktop's library), `update_component_preview`
|
|
83
|
+
with exact-text edits (`{oldText, newText, replaceAll?}`, each `oldText` matching once), and
|
|
84
|
+
`render_component_preview_frame` for exact frame evidence. Inspect playback for motion;
|
|
85
|
+
`commit_component_preview` publishes the checked source to the library and pins the clip, with a
|
|
86
|
+
fresh ETag. `read_component` and `edit_component` read and edit the library directly. Close the preview when finished. This loop does not bake a timeline video and
|
|
79
87
|
does not imply HMR: source updates still compile.
|
|
80
88
|
|
|
81
89
|
If those tools are unavailable, add/update through `apply_composition` and inspect the local
|
|
@@ -103,7 +111,9 @@ timeline. An inline custom overlay has this shape:
|
|
|
103
111
|
}
|
|
104
112
|
```
|
|
105
113
|
|
|
106
|
-
The desktop compiles the module in an isolated child process and
|
|
114
|
+
The desktop compiles the module in an isolated child process and creates it in the desktop's component
|
|
115
|
+
library. Inline source creates a component only: a clip whose component already exists with other
|
|
116
|
+
source is refused as `component_exists`, and that component changes through edits.
|
|
107
117
|
The timeline and final export render that exact version; no preview media is baked. A compile failure
|
|
108
118
|
refuses the whole batch and leaves the composition untouched. Use `create_component` only for a reusable
|
|
109
119
|
org-catalog component on a reachable cloud lane.
|
|
@@ -165,3 +175,5 @@ const R = params.region ?? { x: 0, y: 0, w: 1, h: 1 };
|
|
|
165
175
|
- Don't hand-roll a graphic from zero when a built-in is close — fork it (fetch the source with
|
|
166
176
|
`get_component_source`, paste it into a `npx -y cueframe new component` scaffold) and edit.
|
|
167
177
|
- Don't `create_component` a fresh id each fix iteration — `update_component` (same id) is the loop.
|
|
178
|
+
- Don't update a placed component without its `projectId` in the body — the placed clips keep the
|
|
179
|
+
version they pin, so the next preview or render shows the old graphic.
|
|
@@ -9,7 +9,7 @@ Read the current tool contracts and project context. Do not infer a hosted sessi
|
|
|
9
9
|
| Need | Hosted evidence | Local desktop evidence, when exposed |
|
|
10
10
|
|---|---|---|
|
|
11
11
|
| Isolated HTML card layout | `preview_card` with the card's HTML and tokens | Inspect the card in the local project |
|
|
12
|
-
| Authored component layout or motion | `preview_component`, with explicit dimensions, FPS, params, assets, and appropriate duration | `open_component_preview` → `update_component_preview
|
|
12
|
+
| Authored component layout or motion | `preview_component`, with explicit dimensions, FPS, params, assets, and appropriate duration | `open_component_preview` → `update_component_preview` (exact-text edits); inspect playback and `render_component_preview_frame` at exact frames |
|
|
13
13
|
| Saved composition layout and overlap | `preview_frame`, batching the needed timestamps | The local composition preview/capture tools |
|
|
14
14
|
| Cuts, entrances, camera motion, or audio timing | `preview_clip` for the affected `[fromSec, toSec)` window, including its lead-in and settle | Play/seek the affected window; capture matching frames when needed |
|
|
15
15
|
| Finished deliverable | `create_render` and verify the resulting file | The project's export path and verification of its resulting file |
|
|
@@ -56,9 +56,11 @@ affected window and regressions without automatically rerunning the full-film ju
|
|
|
56
56
|
narrated: the VO is the rhythm authority instead — cut to the voice and duck the bed under
|
|
57
57
|
it. Silence is almost never right for a launch; if chosen anyway, record the decision and
|
|
58
58
|
reason in the delivery note.
|
|
59
|
-
7. **Caption narration.**
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
7. **Caption narration.** For transcribed voice, save the edits first, then call
|
|
60
|
+
`captions.fromComposition` with the narration track ID in a separate `apply_composition`
|
|
61
|
+
call. Speech clips must have saved duration matching playable source duration divided by
|
|
62
|
+
playbackRate. Re-run after later edits. Use authored word timings for generated VO without a
|
|
63
|
+
transcript, and style legibly via `setCaptionStyle`. Captions are mandatory when narrated.
|
|
62
64
|
8. **Preview, judge, one render.** `preview_frame` at t=0, hook-end, the reveal, and the end
|
|
63
65
|
card; describe each still — is that a REAL capture on screen? Then `score_composition` with
|
|
64
66
|
the payoff line as `editorialIntent`; fix worst-first to ≥ 7.5; `create_render` →
|
|
@@ -61,7 +61,12 @@ affected window and regressions without automatically rerunning the full-film ju
|
|
|
61
61
|
`{ grid:"beat" }` and land your cut points and transition midpoints on the markers. If the
|
|
62
62
|
piece is genuinely better silent, that is a decision — record it and its reason in the
|
|
63
63
|
delivery note. A reel whose silence nobody chose is not done.
|
|
64
|
-
7. **Caption any speech.**
|
|
64
|
+
7. **Caption any speech.** After saving the edited clips, use
|
|
65
|
+
`captions.fromComposition` with the speech track ID in a separate `apply_composition`
|
|
66
|
+
call. It follows trims, excluded ranges and clip placement across the reel. Speech clips
|
|
67
|
+
must have saved duration matching playable source duration divided by playbackRate.
|
|
68
|
+
Re-run it after later edits. Discover its exact input with
|
|
69
|
+
`describe_composition_ops({type:"captions.fromComposition"})`, then style via
|
|
65
70
|
`setCaptionStyle` (plated, bottom, out of the mouth/eyes). Most social viewing is sound-off;
|
|
66
71
|
don't karaoke a beat with no speech.
|
|
67
72
|
8. **Look, then get judged.** `preview_frame` at t=0, hook-end, and every beat boundary;
|
|
@@ -108,7 +108,9 @@ Everything in §1, plus:
|
|
|
108
108
|
never open on wind-up.
|
|
109
109
|
- **MUST** Active-speaker reframe (`focus: active-speaker` / `face`) — a
|
|
110
110
|
moving camera, not a static center crop.
|
|
111
|
-
- **MUST** Captions timed to the
|
|
111
|
+
- **MUST** Captions timed to the saved edited timeline (`captions.fromComposition`
|
|
112
|
+
after the clip edits; re-run after later edits). Speech clips must have saved duration matching playable source duration divided by
|
|
113
|
+
playbackRate.
|
|
112
114
|
The focused behind-the-speaker LOOK is an overlay text layer at
|
|
113
115
|
`zPlane:"behind-subject"` where the footage allows. Use caption-layer
|
|
114
116
|
`zPlane:"behind-subject"` only when the user explicitly wants every running
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cueframe",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.8",
|
|
4
4
|
"description": "Agent-native CLI for CueFrame — author compositions and render video from the terminal (early-access preview).",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cueframe",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
],
|
|
15
15
|
"homepage": "https://docs.cueframe.ai",
|
|
16
16
|
"author": "CueFrame, Inc.",
|
|
17
|
-
"license": "
|
|
17
|
+
"license": "FSL-1.1-ALv2",
|
|
18
18
|
"type": "module",
|
|
19
19
|
"bin": {
|
|
20
20
|
"cueframe": "dist/cueframe.js"
|
|
@@ -45,8 +45,8 @@
|
|
|
45
45
|
"tsup": "^8.5.1",
|
|
46
46
|
"vitest": "^4.1.2",
|
|
47
47
|
"@cueframe/component-runtime": "0.1.0",
|
|
48
|
-
"@cueframe/sdk": "0.1.5",
|
|
49
48
|
"@cueframe/plane": "0.1.0",
|
|
49
|
+
"@cueframe/sdk": "0.2.1",
|
|
50
50
|
"@cueframe/primitives": "0.1.0",
|
|
51
51
|
"@cueframe/composition": "0.1.0"
|
|
52
52
|
},
|
package/dist/analyze-J3YAYGD4.js
DELETED