cueframe 0.4.10 → 0.7.0
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 +202 -661
- package/NOTICE +10 -0
- package/README.md +9 -8
- package/dist/analyze-5OURFQXO.js +2 -0
- package/dist/chunk-56LDB4H5.js +12 -0
- package/dist/cueframe.js +103 -48
- package/dist/skills/add-music-bed/SKILL.md +12 -7
- package/dist/skills/brand-reel/SKILL.md +19 -15
- package/dist/skills/clip-a-talking-head/SKILL.md +15 -7
- package/dist/skills/composing-video/SKILL.md +59 -314
- package/dist/skills/cueframe-brand-demo/SKILL.md +9 -2
- package/dist/skills/cueframe-cli/SKILL.md +57 -52
- package/dist/skills/cueframe-component-authoring/SKILL.md +64 -38
- package/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 +17 -9
- package/dist/skills/cueframe-product-video/SKILL.md +15 -7
- package/dist/skills/cueframe-scene-shot/SKILL.md +8 -0
- package/dist/skills/cueframe-storyboard/SKILL.md +27 -55
- package/dist/skills/every-format-from-one-edit/SKILL.md +14 -8
- package/dist/skills/extracting-brand-kits/SKILL.md +8 -0
- package/dist/skills/launch-video/SKILL.md +17 -11
- package/dist/skills/make-a-social-reel/SKILL.md +19 -15
- package/dist/skills/rebrand-a-video/SKILL.md +18 -16
- package/dist/skills/video-craft-standards/SKILL.md +40 -47
- package/package.json +12 -12
- package/dist/analyze-CDC4H53Q.js +0 -2
- package/dist/chunk-QS37SCWN.js +0 -73
|
@@ -5,129 +5,39 @@ description: Use when an agent is asked to make ANY video with CueFrame — a pr
|
|
|
5
5
|
|
|
6
6
|
# Composing Video: craft for CueFrame
|
|
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
|
For preview selection and small revisions, use `cueframe-compose-loop`'s
|
|
9
17
|
[preview workflow](../cueframe-compose-loop/references/preview-workflow.md). Retain the approved
|
|
10
18
|
brief/rubric for a local correction; check the affected behavior and relevant regressions instead
|
|
11
19
|
of restarting the new-film method below. A diagnostic or preview-only request does not require
|
|
12
20
|
a final export or a whole-film judge pass. Explicit user scope takes precedence over craft defaults.
|
|
13
21
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
## The one idea
|
|
17
|
-
|
|
18
|
-
CueFrame composes **real footage** into finished video, and that is its edge: it detects faces and the active speaker and reframes/punches in on them; it renders titles behind the speaker's head; it times captions to the real transcript; it grades color and renders 4K. Real footage is the strongest grounding you can give a video and CueFrame's home turf — so it is the thing to reach for FIRST and usually your highest-leverage move. But the skill's job is **any good video**, footage or not: an animated explainer, an animated concept video, a data piece. These are first-class, not a lower tier.
|
|
19
|
-
|
|
20
|
-
What separates good from slop is not "footage vs. no footage" — it is **grounded specificity vs. the generic default**. The enemy is the interchangeable filler that could belong to any video: gradient/aurora backgrounds under kinetic text, stock "AI b-roll," faked UI, unmotivated motion. The antidote is a **controlling idea** plus **grounded, specific content** — real footage, OR real UI/screen captures, OR real data, OR a *purposeful* graphic/animation that DEPICTS THIS content specifically (an authored diagram of the actual mechanism, a data animation of the real numbers) — a data/mechanism visual, NOT animated copy. Animated/kinetic TEXT by itself is not grounding. A well-crafted animated explainer built on diagrams of the real mechanism is grounded and good; it is not slop.
|
|
21
|
-
|
|
22
|
-
**Generic default ⇒ slop. Grounded specificity ⇒ good.** Real footage is the strongest grounding and CueFrame's home turf — reach for it first — but purposeful, specific graphics count too. This is a mechanical prediction, not a taste call (see *Craft principles*). Your single most expensive mistake is walking past real footage that exists to build generic gradient slides instead — which is precisely what happened in the launch-video case below.
|
|
23
|
-
|
|
24
|
-
**The loophole to nail shut:** "purposeful graphics" means *specific to this content* — the real mechanism, the real data, a diagram of the actual thing. Animated/kinetic TEXT by itself is not that, no matter how deliberate — it is not grounding. A generic gradient or aurora is NEVER "purposeful"; it is always the slop default. The reframe broadens what counts as good; it does not wave decorative filler through.
|
|
25
|
-
|
|
26
|
-
**The boundary.** This is craft guidance you can override, not a gate. You own the **vision** (the one idea for this specific video) and you own **data correctness** (if you supply a wrong number, CueFrame renders it faithfully and the mistake is yours). CueFrame owns being faithful, legible, and teaching you the craft below. Reason from these principles; break a rule knowingly when your vision demands it. (Skip this whole flow only for a pure re-render of an already-approved composition, or a single trivial still — don't ceremony a one-liner.) Planning a new video from scratch? Do **`cueframe-storyboard`** first to get the beat flow, then apply this craft to each beat.
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
## Related skills & positioning
|
|
31
|
-
|
|
32
|
-
This skill is the **craft / quality layer** for an agent driving CueFrame over the **MCP tool surface** (`preview_frame` / `apply_composition` / `score_composition` / `create_render`) — *not* the `cueframe` CLI binary. It owns the decision layer: vision → rubric → grounding → iterate → verify. When a mechanic below is owned by a sibling skill, defer to that skill for the deep how-to:
|
|
33
|
-
|
|
34
|
-
- **`cueframe-storyboard`** — the intake/structure step BEFORE craft: interview the user for the brief and lay out the hook→body→cta beat flow. Start here for a new video from scratch; this skill then makes each beat grounded and good.
|
|
35
|
-
- **`cueframe-cli`** — the `cueframe` binary + wire mechanics (auth, projects, raw request/response shapes).
|
|
36
|
-
- **`cueframe-compose-loop`** — the full author→render→verify→fix **convergence loop**; it owns the loop budget and ship bar (this skill's step 6 mirrors it: 3–5 passes, ship at composite ≥ 7.5).
|
|
37
|
-
- **`cueframe-product-video`** — the click-points → reframe-segment **auto-zoom tiling** + picture-in-picture recipe for screen demos.
|
|
38
|
-
- **`cueframe-brand-demo`** — brand-token vocabulary + auto intro/outro/logo for branded launches.
|
|
39
|
-
- **`cueframe-component-authoring`** — the full fork → preview → push loop for custom components.
|
|
40
|
-
- **`cueframe-scene-shot`** — the 3D product shot authored as JSON (a tilted page screenshot, a lit laptop/phone showing a real app screenshot, camera move, focus). Reach for it *before* hand-writing a WebGL component for a device mockup.
|
|
41
|
-
|
|
42
|
-
Loading this skill and a sibling together: this one governs *what makes the video good*; the sibling governs *how that mechanic works*.
|
|
43
|
-
|
|
44
|
-
---
|
|
45
|
-
|
|
46
|
-
## If you read nothing else
|
|
47
|
-
|
|
48
|
-
Six non-negotiables. Everything below is the reasoning behind them.
|
|
49
|
-
|
|
50
|
-
1. **HUNT for real footage FIRST** — it's the strongest grounding and CueFrame's edge — before building without it; that failure was never looking.
|
|
51
|
-
2. **Write a harsh, specific rubric BEFORE you render a single frame** — including the three mandatory kill criteria (K1–K3), meaning preserved.
|
|
52
|
-
3. **Grounded, specific content must DOMINATE the runtime** — real footage, real UI/data, or purposeful content-specific graphics — never generic/decorative filler. (For footage-based formats, target real footage ≥60%.)
|
|
53
|
-
4. **Describe every rendered still in words before you score it** — if you can't say what's in the frame, you didn't look.
|
|
54
|
-
5. **Get an independent grade you can't game:** `score_composition` samples its own frames — you cannot cherry-pick flattering timestamps past it.
|
|
55
|
-
6. **Budget 3–5 verify passes, never set your ship bar below 7.5/10, then stop.**
|
|
56
|
-
|
|
57
|
-
---
|
|
58
|
-
|
|
59
|
-
## The method — run these steps in order, every time
|
|
60
|
-
|
|
61
|
-
The order is the forcing function. Steps 2, 3, and 5 are where agents cut corners and ship slop, so they are not optional.
|
|
62
|
-
|
|
63
|
-
### 1 — Decide the VISION, then the FORMAT
|
|
64
|
-
Write the controlling idea as one sentence with a value and a cause — "X wins *because* Y" (McKee, *Story*: a story is a charged value-shift, not a topic). Not "product launch" — a claim: "Two founders tell you, to your face, why their product kills the pipeline step you dread — and you watch it be faster." Then pick the format floor: product-launch / social-clip / explainer / demo / talking-head (playbooks below). The vision is the filter for what belongs; anything that doesn't express it gets cut.
|
|
65
|
-
|
|
66
|
-
### 2 — Write a HARSH, SPECIFIC rubric — BEFORE you render anything
|
|
67
|
-
Authored against the vision, before pixels exist, so it can't be rationalized after the fact. Use the template below: must-haves anchored to named frame timestamps, measurable thresholds, and kill criteria that fail the render outright.
|
|
68
|
-
|
|
69
|
-
**Hard gate:** do not call `preview_frame` until the rubric text exists in your context. No rubric → no pixels.
|
|
70
|
-
|
|
71
|
-
**These three kill criteria are MANDATORY — preserve the MEANING of K1–K3 in every rubric, adapting the phrasing to your video. You may add more; you may not remove or weaken these:**
|
|
72
|
-
- **K1.** Any sampled frame is a gradient/solid background with only text and NO grounded subject — no real footage, no real UI/data, no purposeful content-specific graphic, just decorative filler. Animated/kinetic TEXT over any background does NOT count as a grounded subject — only a visual of the real mechanism or real data does.
|
|
73
|
-
- **K2.** Any on-screen number you cannot trace to a written source, or any faked/mocked UI standing in for a real capture.
|
|
74
|
-
- **K3.** Generic/decorative filler dominates the runtime — grounded, specific content (real footage, real UI/data, or purposeful content-specific graphics) does not.
|
|
75
|
-
|
|
76
|
-
### 3 — Ground the video (hunt for footage first, then a grounding ladder — never straight to generic filler)
|
|
77
|
-
|
|
78
|
-
Real footage is the strongest grounding and CueFrame's edge, so hunt for it FIRST — but grounding is the goal, and purposeful, specific graphics are a legitimate way to reach it.
|
|
79
|
-
|
|
80
|
-
**3a. Hunt for footage FIRST, before building without it.** Before you build without footage, actively look, in order:
|
|
81
|
-
1. Did the user attach or name footage?
|
|
82
|
-
2. Does the subject (company/person/product) already have a launch video, founder clips, demo recordings, or a conference talk you can `import_media` from a public https URL?
|
|
83
|
-
3. Ask the user directly: *"Do you have a founder clip, screen capture, or event recording? CueFrame is built to compose real footage — it's the difference between a launch film and a slideshow."*
|
|
84
|
-
|
|
85
|
-
In the launch-video case, step 2 alone would have surfaced the founders-to-camera launch video and changed everything. Footage is the highest-leverage grounding; don't walk past it.
|
|
86
|
-
|
|
87
|
-
**3b. The stop fires only when the plan is GENERIC filler.** If your plan has no grounded content — no footage, no real UI/data, no purposeful content-specific graphic, just a gradient with kinetic text — STOP and say so, verbatim, before rendering anything:
|
|
88
|
-
> *"This has no grounded content — it's a gradient-and-text motion piece, the generic default, not a video composed from the real thing. I recommend we ground it in [a 30-second founder to-camera clip / a real screen capture / an authored diagram of the actual mechanism]. Want to proceed as generic motion-graphics, or ground it first?"*
|
|
22
|
+
## Plan and author to the request
|
|
89
23
|
|
|
90
|
-
|
|
24
|
+
Use `cueframe-storyboard` only when new work lacks structure. For an existing title correction, retain the approved brief and edit the title directly; no whole-film rubric, paid judge or final export is required.
|
|
91
25
|
|
|
92
|
-
|
|
93
|
-
1. **Real footage** — `import_media` a founder clip, event recording, or demo. The strongest grounding and CueFrame's home turf.
|
|
94
|
-
2. **Real screen capture** — `import_media` (CueFrame cannot screen-record; that needs an external screen-capture client — e.g. a headed Playwright walkthrough recorded to MP4 — or the user's own recording).
|
|
95
|
-
3. **Real product screenshots / photos** as held stills with **motivated** motion.
|
|
96
|
-
4. **Crafted graphics OF THE ACTUAL THING** — an authored `{kind:'card', html, tokens}` clip diagramming the real mechanism (process/algorithm/data viz), or a data graphic of the real numbers specific to this content, shelled with `applyMotionPreset`. A **first-class grounded path**, not a fallback — a good explainer lives here. The grounding is that it depicts THIS thing — the real mechanism, the real data — not a decorative loop; animated/kinetic TEXT by itself does not qualify.
|
|
97
|
-
5. **Generic `generate_media` texture** as a *supporting* backdrop only (a stage, a texture) — never a fake-cinematic hero, never a re-created product UI (it hallucinates specifics).
|
|
98
|
-
6. **Generic gradient-with-text** is the **last** resort and is exactly what triggers the 3b stop.
|
|
26
|
+
Choose content that serves the requested idea. Real footage, actual product captures, sourced data, diagrams, abstract motion and typography are all valid. Do not fabricate facts or present simulated UI as a real product capture. Search for footage when the request needs it; an explicit typography-only request needs no footage hunt or permission to remain typography-only.
|
|
99
27
|
|
|
100
|
-
|
|
28
|
+
For new work, state concise acceptance criteria from the brief before authoring. For broader review, reuse the approved criteria. Preview affected frames, inspect motion in the relevant window and listen when sound changes. Validate contracts and source/media bindings independently of aesthetic review. For face/active-speaker framing or behind-subject graphics, prepare the required subjectTrack/matte for the exact source trim window and wait for ready evidence; unresolved perception is not acceptable preview proof.
|
|
101
29
|
|
|
102
|
-
|
|
103
|
-
When you have imported media, pull the detected **faces** (subject boxes per frame, with `faceId`s) and **transcript** before composing. Align reframe/punch-in to the faces, caption words to the transcript timing, and cut points to the speech. Discover primitives with `list_catalog` before hand-placing hex and coordinates — a built-in almost always exists.
|
|
30
|
+
Use `score_composition` only when its broader editorial critique is useful, available and within budget. The hosted judge has editorial, spatial, brand and caption criteria; `editorialIntent` does not remove fixed criteria. A caption penalty for intentionally uncaptioned or silent work is a judge limitation, not a reason to add captions or declare user intent failed. Skill text does not repair the judge. Stop after two no-improvement passes and report gaps.
|
|
104
31
|
|
|
105
|
-
|
|
32
|
+
## Choose the film spine from the leading material
|
|
106
33
|
|
|
107
|
-
|
|
108
|
-
|
|
34
|
+
- Narrated explainer: draft the script, align visuals to its phrases, verify intelligibility and any requested captions against actual word timings.
|
|
35
|
+
- Recorded interview: preserve meaning and source order where required; cut and frame from the transcript and actual speaker evidence, with no invented narration.
|
|
36
|
+
- Product action: plan around real captured interactions and results; add voice or music only when requested or appropriate.
|
|
37
|
+
- Silent brand study or typography: plan visual rhythm, reading time and transitions directly. Silence is already decided by the request; no audio generation or footage requirement.
|
|
38
|
+
- Visual/music motion or observational sequence: use the chosen motion, music, activity or deliberate holds as the timing authority. No universal beat count, cut interval or CTA.
|
|
109
39
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
`validate_composition` only checks shape (membership, params, track-family, reframe coverage) — a pass there means nothing about quality. Judge the pixels, not the JSON.
|
|
113
|
-
|
|
114
|
-
### 6 — Get an independent second opinion, then stop
|
|
115
|
-
You grading your own render is the weak link. Call `score_composition` with your VISION line as `editorialIntent` and brand facts as `brandContext`, then call `wait_job(kind:"verify")`. It renders and grades **four fixed server-side criteria** — editorial, spatial, brand, caption (0–10 each) — plus a weighted composite and a worst-first critique, **on frames it samples itself.** Your `editorialIntent` steers *what "good" means for this video*; it does **not** replace the criteria, and you cannot feed it your own rubric or pick its frames — that un-gameable sampling *is* the independence. Treat a low score on a frame you didn't choose as ground truth, not noise.
|
|
116
|
-
|
|
117
|
-
Fix the worst thing via `apply_composition`, preview the affected frames and motion, and re-score when useful. For a whole-film review, budget up to 3–5 verify passes; two no-improvement passes are a reason to stop spending and report remaining gaps (`cueframe-compose-loop` owns the convergence loop). The rubric's acceptance criteria still apply; a score around 7.5 is guidance, not permission to ship a known mismatch. Hosted preview and scoring are stateless durable jobs; there is no hosted session to close.
|
|
118
|
-
|
|
119
|
-
---
|
|
120
|
-
|
|
121
|
-
## The film spine — how graphics-led video coheres (narration first, always)
|
|
122
|
-
|
|
123
|
-
Benchmarked against a top studio launch film: a scene detector reads theirs as **one continuous 44s shot**, because nothing ever changes the whole frame at once — and its spine is a continuous voiceover whose words run word-synced along the bottom of *every* frame. A film coheres when one thing never stops; visuals are then free to change every 1–2 seconds. Build in this order:
|
|
124
|
-
|
|
125
|
-
1. **Write the narration script FIRST — it is the film.** 10–14 short sentences, one idea each (~2.2 words/sec). Do not author a single visual before the script exists. Then `generate_media { generator: "text-to-speech" }` for one continuous take, transcribe it (or measure sentence boundaries), and **cut every beat boundary to the voice** — never the reverse. A silent text-driven film forces every card to hold long enough to be *read*; that dead time is the slideshow texture. With a voice carrying the through-line, each visual is a 2–3s illustration of the phrase being spoken.
|
|
126
|
-
2. **Author the caption spine with `setCaptions`** — segments of word timings matching the VO, styled small/bottom/`plate:"none"`. The persistent word-synced line is the strongest continuity device the format has; the `caption-spine` cohesion floor flags a vo-role clip without it.
|
|
127
|
-
3. **One world.** A single background system (color, texture, light) across every beat. Chapters are tiny inline corner labels (`01 — INPUTS`) inside the flowing world — **never full-screen interstitial cards**, which hard-stop the film. No beat gets its own room (a black hook, a dark grid finale): a full-frame background change reads as a scene change, and enough of them make a slide deck.
|
|
128
|
-
4. **One part vocabulary + one recurring actor.** Everything on screen is the same part (one card/chip grammar: same radius, shadow, label style) at different densities. Pick one small element (a dot, a mark) that appears in every beat and *hands off* across cuts — end a beat with it where the next beat starts it (an exit that launches it up off-frame matched by an entrance that drops it in is a match cut).
|
|
129
|
-
5. **Exit phases, no dead holds.** Every beat's elements leave the frame during its last ~0.4s; no component ends at rest, so motion carries across every cut. No visual state holds longer than ~3s (the `static-hold` floor fires on cards/still images past 4s). Cards can carry this motion themselves now — see the motion runtime below; components (`create_component`) remain the medium for choreography beyond it.
|
|
130
|
-
6. **The falsifiable bar:** run scene detection (or imagine it) over your cut — if it finds a hard boundary at every beat, you built a deck, not a film. Sparse frames are a tell too: elements sized for a fraction of the canvas leave dead space the reference never has.
|
|
40
|
+
Use `cueframe-component-authoring` for custom 2D motion. Load `cueframe-scene-shot` for supported device, camera or 3D tasks. `cueframe-compose-loop` owns scoped preview and optional review; `video-craft-standards` supplies aesthetic defaults under the scope policy above.
|
|
131
41
|
|
|
132
42
|
### The card token contract — `tokens` key `x` is read as `var(--cf-x)`
|
|
133
43
|
|
|
@@ -163,7 +73,7 @@ Chromium captures; the clock never advances). Use these instead:
|
|
|
163
73
|
`--cf-enter` (0→1 over the first ~0.6s), `--cf-exit` (1→0 over the last ~0.6s), plus
|
|
164
74
|
`--cf-frame` / `--cf-t` / `--cf-fps` / `--cf-duration`. Author motion directly in card
|
|
165
75
|
CSS: `opacity: var(--cf-enter)`, `transform: translateY(calc((1 - var(--cf-enter)) * 40px))`,
|
|
166
|
-
an exit slide via `--cf-exit`. This
|
|
76
|
+
an exit slide via `--cf-exit`. This supports entrance/exit choreography within the
|
|
167
77
|
card medium — and a `preview_frame` still at time *t* shows the exact *t*-frozen state.
|
|
168
78
|
2. **`transitionIn` on any overlay clip** — `{ transitionIn: { type: "fade", duration: 0.4 } }`
|
|
169
79
|
now applies to overlay-family clips (cards, components, primitives), not just video.
|
|
@@ -191,11 +101,10 @@ a loud 422. Same curated bytes either path.
|
|
|
191
101
|
Restraint (density caps, min spacing, speech collision) comes from the AUDIO_MIX
|
|
192
102
|
SSOT the eval floors grade with, so placement and grading can't disagree.
|
|
193
103
|
|
|
194
|
-
**
|
|
104
|
+
**Optional audio review:** the `sfx-same-sound-reuse` craft floor can report
|
|
195
105
|
when a dense mix (≥6 SFX hits) draws from too small a palette — distinct sounds ÷
|
|
196
106
|
hits below **0.4**. The pack carries **≥4 distinct sounds per transient family**
|
|
197
|
-
|
|
198
|
-
hit on one sound is the tell it guards. Browse the full palette structurally on
|
|
107
|
+
to support a varied palette. This is reported judge behavior, not a universal creative requirement: preserve intentional repetition or silence and assess it against the brief. Browse the full palette structurally on
|
|
199
108
|
`list_catalog` (the `sfx` array — `soundId`, `family`, `envelopeClass`,
|
|
200
109
|
`description`, `durationSec`).
|
|
201
110
|
|
|
@@ -255,7 +164,7 @@ soundtrack is a measurable share of whether anyone keeps watching.
|
|
|
255
164
|
decide what the cut serves. A film has ONE rhythm authority (word timings, beat
|
|
256
165
|
maps, and shot boundaries are the same TYPE — a temporal grid; pick which one
|
|
257
166
|
drives). **VO-driven** (a narration film): cut every beat boundary to the
|
|
258
|
-
*voice*
|
|
167
|
+
*voice* (author the script first for a narrated piece, then read the word grid
|
|
259
168
|
off `get_media_context` — `wordGrid.wordTimesMs`, the word onsets in ms — and
|
|
260
169
|
land each cut/caption on a word). **Music-driven** (a montage/no-VO piece): cut
|
|
261
170
|
on the *beat* — read `beatGrid` off `get_media_context` (bpm + `beatTimesMs`),
|
|
@@ -342,8 +251,8 @@ soundtrack is a measurable share of whether anyone keeps watching.
|
|
|
342
251
|
individual sounds stop reading and merge into texture — his mixes convey
|
|
343
252
|
complex scenes with a FEW carefully chosen elements. Our calibration: the
|
|
344
253
|
41.6s film that beat its reference carried 9 hits; the rejected cut carried 15
|
|
345
|
-
from 3 sounds. At 6+ hits
|
|
346
|
-
|
|
254
|
+
from 3 sounds. At 6+ hits optional audio review may report `sfx-same-sound-reuse`
|
|
255
|
+
below 0.4 distinct/hits.
|
|
347
256
|
4. **Hierarchy within a family** (Murch's balanced-spectrum principle + Material's
|
|
348
257
|
sound hierarchy): the pack orders soundIds subtle→strong; the biggest beat gets
|
|
349
258
|
the strong impact ONCE, everything else sits a tier down. Fifteen strong hits
|
|
@@ -364,56 +273,15 @@ soundtrack is a measurable share of whether anyone keeps watching.
|
|
|
364
273
|
|
|
365
274
|
---
|
|
366
275
|
|
|
367
|
-
##
|
|
368
|
-
|
|
369
|
-
Slop is the model's most common answer to an under-specified prompt: what the path of least resistance produces once the human decision layers are removed. It has a recognizable signature *because* each missing decision compounds:
|
|
276
|
+
## Craft defaults
|
|
370
277
|
|
|
371
|
-
|
|
372
|
-
- **No specificity, no belief.** Images are encoded more deeply than abstract words (picture-superiority effect, Paivio), and — a separate, stronger mechanism — a real human face is among the most attention-binding things a screen can show. "10x faster" on a card is an abstraction the viewer can't feel; real people talking in a real room, or a diagram of the *actual* mechanism, is embodied and credible — it *shows*.
|
|
373
|
-
- **No subject, no eye-trace, no peak.** With nothing specific on screen there's no focus of interest to cut on (Murch's eye-trace) and no candidate for the one emotional peak the viewer remembers (Kahneman's Peak-End Rule). A flat decorated slideshow has no peak and a whimper ending.
|
|
278
|
+
Make deliberate choices about hierarchy, type, framing, juxtaposition and motion. For a product demonstration, use real captures and sourced claims; never present a mock UI as documentary evidence or invent a performance number. For an explicit abstract or typography study, judge its reading time, rhythm and visual intent directly: text and gradients are valid material, not automatic failures.
|
|
374
279
|
|
|
375
|
-
|
|
280
|
+
Platform conventions can suggest hooks, captions, short cuts and clear closing actions. Apply them only when they serve the requested format. An observational long hold, slow logo-first opening, silent piece or no-CTA ending is not a failure merely because another format prefers something else. Caption speech when requested or appropriate; verify actual word timing. Use audio or visual rhythm as the timing authority selected in the brief.
|
|
376
281
|
|
|
377
|
-
|
|
378
|
-
1. **Gradient/aurora background under centered kinetic text**, no grounded subject. The literal default of every text-to-video toy. Zero information per frame — animating the text, or calling it "purposeful kinetic typography," does NOT ground it; only a visual of the real mechanism or real data does.
|
|
379
|
-
2. **Generic AI b-roll** — glowing brains, blue circuit boards, particle networks, rotating server racks, holographic dashboards. "Technology" as a vibe; interchangeable across a thousand companies.
|
|
380
|
-
3. **Faked or mocked UI/terminals** — a styled `<div>` pretending to be the product. The cursor doesn't blink, nothing scrolls, the output is too clean. A real 4-second capture beats it every time.
|
|
381
|
-
4. **On-screen numbers with no real source** — "10x", "5x", "99.9%" over a gradient. Unsourced is the content-farm tell; *wrong* is a credibility bomb.
|
|
382
|
-
5. **All generic filler, nothing grounded** — 100% decorative generated backgrounds and kinetic text, with no real footage, no real UI/data, and no purposeful content-specific graphic. The master failure that produces all the others. (A *purposeful* animated explainer — one built on diagrams of the real mechanism or animations of the real data, NOT animated copy — is grounded and does NOT count as this tell.)
|
|
383
|
-
6. **Unmotivated motion** — everything drifts, floats, Ken-Burns-pans, swoosh-transitions for no reason. The screensaver aesthetic: soft, well-oiled, no harsh edges, regardless of content.
|
|
384
|
-
7. **Template rhythm** — title card → 3 bullet slides → CTA, every beat the same length and entrance. The eye recognizes the mold.
|
|
385
|
-
8. **Metronomic pacing** — every clip the same length, every caption the same duration, no held beat before the payoff. The tell of an algorithm chunking on a timer.
|
|
386
|
-
9. **Off-brand default type / over-captioning** — Inter/Arial where a brand typeface exists; karaoke captions on a slideshow with no speech to caption.
|
|
387
|
-
10. **Dead-center symmetry, one z-plane** — subject and text fighting for the same pixels, throwing away the depth CueFrame gives you (an overlay title at `zPlane:"behind-subject"`).
|
|
282
|
+
## Format playbooks (examples, not fixed structures)
|
|
388
283
|
|
|
389
|
-
|
|
390
|
-
One controlling idea every clip serves · grounded content of the real thing (real footage, real UI/data, or a purposeful diagram of the actual mechanism) · motivated motion (the frame moves because the subject moved or the idea turned) · restraint (fewer elements, held longer) · typographic discipline (brand type, ≤2 weights, one hierarchy) · honest data with visible provenance ("8.5%, with the source on screen" beats "10x") · varied pace that builds to one memorable beat · real depth (a title behind the head, layered z-planes).
|
|
391
|
-
|
|
392
|
-
### The launch-video case — the exact contrast to burn in
|
|
393
|
-
**Brief:** a product-launch video for a developer-tools product. (Composite example.)
|
|
394
|
-
**What the agent shipped (slop):** ~37s of purple-gradient slides with centered kinetic text; a static mocked terminal card pretending to be the product running; a fabricated "10x faster" where the sourced result was **8.5%**; zero grounded content. A clean sweep of tells #1, #3, #4, #5, #7, #10.
|
|
395
|
-
**What was sitting right there, ignored:** the team's own launch footage — people talking to camera in a nice office. *Precisely* CueFrame's home turf: `all-faces` on a two-shot / `active-speaker` on the singles, transcript-timed captions, a lower-third per speaker, a color grade, a 4K render.
|
|
396
|
-
**Craft looks like (same tool, same 37s):** `import_media` the interview footage → `get_media_context` for faces + transcript → reframe to whoever is speaking → transcript-tracked captions with a legibility plate → a title behind the head → a `lower-third` naming each speaker → the team's real brand type → if a benchmark appears, the real **8.5%** with its source visible, ideally over a real capture of the product running. One idea, grounded content, motivated cuts, honest data, a payoff. (Even the no-footage version was fixable: an authored diagram of the product's *actual* pipeline step beats a gradient — that's grounded too.)
|
|
397
|
-
|
|
398
|
-
---
|
|
399
|
-
|
|
400
|
-
## Operating floors (fold into every format)
|
|
401
|
-
|
|
402
|
-
Directional, not laws — reason above them:
|
|
403
|
-
|
|
404
|
-
- **Hook = first 3 seconds.** Viewers decide to stay or scroll almost immediately; the first frame is the highest-leverage frame in the piece. Budget craft disproportionately to 0–3s. Put a real face or real motion there — never a logo fade.
|
|
405
|
-
- **Caption speech, always.** Most social video is watched sound-off, and captions lift retention and completion — treat them as mandatory, not decoration. Attach `captions` with word-level timing from `get_media_context`; set legibility via `setCaptionStyle` (`position` + `emphasisPlate`). Caption **speech** — do not karaoke a slideshow.
|
|
406
|
-
- **Length: earn it.** Engagement decays with length; short pieces complete far better than long. A sub-1-min teaser is watched to the end at rates a 5-min film never sees; instructional pieces are the exception *only* when they genuinely teach. Never pad — every second must carry the idea forward.
|
|
407
|
-
- **Cut cadence (motivated, never for its own sake):** a visual change every ~1.5–2s for sub-60s pieces; B-roll shots ~1.5–3s (>3s stalls); cinematic ~4–6s. For talking-head/demo the two operations differ: **reframe/punch-in every ~3–4s *within* a held speaker shot**, and insert a B-roll **cutaway every ~5–8s** of continuous talking. Drive with clip `trim`/`duration` and overlay entrance timing — but every change of state must be *motivated* (a reframe to the speaker, a lower-third entrance, a caption emphasis).
|
|
408
|
-
- **Word budget:** ~130–150 wpm; 60s ≈ ~130 words; a 12–15-word hook ≈ 5–6s of speech. Past ~160 wpm reads rushed.
|
|
409
|
-
- **Sound sets perceived pace.** CueFrame composes to an existing audio bed — use it: land caption entrances and cut points on stressed words / beats via the transcript's word timing (a cut on the beat reads as craft, off it reads as accident — synchresis, Chion); duck music under speech; hold one beat of silence before the payoff line. Silence before the peak is a tool, not an absence.
|
|
410
|
-
- **The saturated default.** Gradient-text-over-music synced to a beat is the *standard* software-launch look, not a differentiator. When you reach for that generic default instead of grounding the piece, you land in exactly that interchangeable tier — which is the whole reason step 3 exists.
|
|
411
|
-
|
|
412
|
-
---
|
|
413
|
-
|
|
414
|
-
## Format playbooks
|
|
415
|
-
|
|
416
|
-
Each playbook is a **floor**, not a template — reason above it. Every beat maps to a real CueFrame capability. Default to **16:9 landscape** for product/demo/explainer/founder-web; **9:16 vertical** only for social cutdowns (a wide source crammed vertical crops the subject wrong and wastes the frame).
|
|
284
|
+
Each playbook is an illustrative format default; explicit intent and scope govern. Every beat maps to a real CueFrame capability. Default to **16:9 landscape** for product/demo/explainer/founder-web; **9:16 vertical** for social cutdowns or other explicitly vertical work (a wide source crammed vertical crops the subject wrong and wastes the frame).
|
|
417
285
|
|
|
418
286
|
### 1 — Product launch / announcement
|
|
419
287
|
**When:** launching or announcing a product; teaser or full launch film.
|
|
@@ -427,7 +295,7 @@ Each playbook is a **floor**, not a template — reason above it. Every beat map
|
|
|
427
295
|
| CTA + date | 40–45s | Exact action + launch date. Logo last. | ≤12 |
|
|
428
296
|
|
|
429
297
|
**Frameworks:** 3-act teaser (Tease → Reveal → CTA) or StoryBrand SB7 (customer is hero, you are guide). One pain or one wow — not five diluted features.
|
|
430
|
-
**Reach for:** `import_media` a real demo capture or founder clip · `list_catalog` → the `product-launch-trailer` and `cinematic-title` scenes (use `cinematic-title` for
|
|
298
|
+
**Reach for:** `import_media` a real demo capture or founder clip · `list_catalog` → the `product-launch-trailer` and `cinematic-title` scenes (use `cinematic-title` for a wordmark where the brief calls for it) · `color-grade` for the hero look · date + CTA on the final held frame.
|
|
431
299
|
**Anti-patterns:** opening on a logo animation; stacking five features; narrating specs; a fabricated/rounded stat; a mocked terminal standing in for a real screen.
|
|
432
300
|
**Quality bar:** the first frame survives with zero text on it. If your open is a gradient with the product name, you've already lost.
|
|
433
301
|
|
|
@@ -513,8 +381,8 @@ Each playbook is a **floor**, not a template — reason above it. Every beat map
|
|
|
513
381
|
| Anchor an abstract mechanism | An authored `card` clip + `applyMotionPreset` (diagrams of the real mechanism — NOT cinematic; a first-class grounded path) |
|
|
514
382
|
| Long-form → clips | `suggest_briefs` → `wait_job(kind:"suggestions")` → `compose({ suggestionId })` |
|
|
515
383
|
| Auto-reframe to another aspect | `derive_composition` (content-aware 9:16 / 1:1 / 4:5 from a 16:9 master) |
|
|
516
|
-
| Discover what to build with | `list_catalog` —
|
|
517
|
-
| Own / fork a custom graphic | `get_component_source` / `create_component`
|
|
384
|
+
| Discover what to build with | `list_catalog` — pass filters such as `category`/`kind`/`tier`/`useCase`/`mood`/`intent`, plus `limit` and the returned pagination cursor. For builtin packages, request `projection:"component-library"` and `origin:"builtin"`, then resolve the selected exact identity before insertion. Each entry carries `placement` (how to author it), `tier`/`useCase`, and `fixedCopy` (baked text no param changes). Read `cueframe://component/{id}` for the full **prop schema**. |
|
|
385
|
+
| Own / fork a custom graphic | `get_component_source` (exact scoped v3 pin for builtins) / `create_component` / `update_component` (preserve the complete source snapshot) — **see `cueframe-component-authoring`** for the full fork→preview→push loop |
|
|
518
386
|
| Several cells that share space and must reflow together (feature grid, rail + fluid content, cast + type) | An authored component on `FlexLayout` from `@cueframe/animate` — tracks are **weights** (`{ weight: 0, basis: px }` = content-sized, pushes neighbours), `tracksEnd` animates the reflow per frame, `fits` per cell (`stretch`/`contain`/`cover`/`position`/`scale`/`matte`). Static PiP / split is clip `region` + `fit` instead. Never CSS-scale the layout. **See `cueframe-component-authoring`** |
|
|
519
387
|
| Seed + edit the timeline | `apply_composition` (atomic batch ops; `dry_run:true` to check, `if_match` for OCC) — this is where clips, reframe, captions, and format are authored |
|
|
520
388
|
| Set the brand | `create_brand_kit` (402-gated) → set `brandKitId` on the **project** (`create_project` / `update_project`). It lives on the project, NOT on a composition op — trying to set it elsewhere is silently dropped. |
|
|
@@ -526,11 +394,11 @@ Each playbook is a **floor**, not a template — reason above it. Every beat map
|
|
|
526
394
|
| Independent grade (steered, un-gameable) | `score_composition` (sessionless; `editorialIntent`=your vision, `brandContext`=brand facts) → four fixed criteria + composite + worst-first critique, on frames it samples itself |
|
|
527
395
|
| Director ensemble compose | `compose` — set EXACTLY ONE of `fromComposition:true` (author from the seeded composition) or `suggestionId` (clipping path) → `wait_job(kind:"compose")` |
|
|
528
396
|
| Final MP4 | `create_render` → `wait_job(kind:"render")` or `create_webhook` on `render.completed`; `retry_render` (transient only) / `cancel_render` |
|
|
529
|
-
| Orient before spending | `get_account` FIRST — read `balance`, NOT `included`. Rendering / generation / previews / judge / Director share ONE credit wallet (`fundedBy`); each `balance` restates that same wallet in that feature's unit.
|
|
397
|
+
| Orient before spending | `get_account` FIRST — read `balance`, NOT `included`. Rendering / generation / previews / judge / Director share ONE credit wallet (`fundedBy`); each `balance` restates that same wallet in that feature's unit. Positive balance is not proof of capability or entitlement: check the exposed contract, entitlements and quote before proceeding. New orgs get a free credit grant, so an empty usage history is not a blocker. 402 `billing_required` fires once the balance is spent; `generate_media` also 402s over its USD ceiling |
|
|
530
398
|
|
|
531
399
|
Everything needs a `projectId` — `create_project` is step 0.
|
|
532
400
|
|
|
533
|
-
**Hard limits — respect them, don't fake around them.** No cinematic AI generation: `generate_media` is limited text-to-video/text-to-image/image-to-video, plus audio: `text-to-speech` (narration VO) and `text-to-music` (instrumental bed);
|
|
401
|
+
**Hard limits — respect them, don't fake around them.** No cinematic AI generation: `generate_media` is limited text-to-video/text-to-image/image-to-video, plus audio: `text-to-speech` (narration VO) and `text-to-music` (instrumental bed); use generated visuals where their actual capabilities fit the brief, and do not present synthetic footage as documentary evidence. No screen capture: that needs an external screen-capture client (e.g. a headed Playwright walkthrough recorded to MP4). When the right move needs footage CueFrame can't generate, `import_media` real footage — do not synthesize a substitute. **Units trap:** `startTime`/`duration`/`trim`/reframe `startSec`/`endSec`/`ease` are **seconds**; caption word times are **milliseconds**. **Render-time fail-loud errors to expect** (render never ships a wrong frame silently): `content_anchor` (a clip's `trim` frames *different* footage than its captions show — align the trim to the captioned moment), `behind_split_unsupported` (one media used under two *different* behind-subject windows — one behind-subject window per MEDIA; to render two different behind windows of one source, import it as two separate MEDIA ITEMS (distinct mediaIds) — duplicating the same mediaId into two clips still throws), `BehindMatteUnresolved`/`TrajectoryUnresolved` (the behind/face bake found no detectable person — drop the intent or fix the source).
|
|
534
402
|
|
|
535
403
|
**Worked alignment example (the error-prone mechanic).** You want the caption emphasis to land on the founder's stressed word "faster," and the frame to punch in on the same beat. From `get_media_context`, the transcript word "faster" runs `startMs:8120, endMs:8560` (transcript/source time). **For these round numbers, assume an untrimmed clip placed at timeline 0** — then source time, timeline time, and clip-relative time all coincide. So: put that word in `captions.segments[].words[]` with `emphasis:true` at `startMs:8120`; and author reframe with `setCropIntents` as a **contiguous segment list that tiles the whole clip** — e.g. a wide segment `{startSec:0, endSec:8.12, focus:{mode:"active-speaker"}, zoom:1}` then the punch `{startSec:8.12, endSec:<clipEnd>, focus:{mode:"face",faceId:"…",shotScale:"close"}, zoom:0.8, ease:{in:0.4,out:0}}` (ms → s: 8120ms = 8.12s). A lone mid-clip segment that leaves `[0..8.12]` uncovered fails validation with `reframe_coverage_gap`.
|
|
536
404
|
|
|
@@ -538,165 +406,42 @@ Everything needs a `projectId` — `create_project` is step 0.
|
|
|
538
406
|
|
|
539
407
|
---
|
|
540
408
|
|
|
541
|
-
## Craft principles (reason FROM these — the rules above are their consequences)
|
|
409
|
+
## Craft principles (aesthetic defaults) (reason FROM these — the rules above are their consequences)
|
|
542
410
|
|
|
543
|
-
- **Curiosity is an information gap** (Loewenstein, 1994). A slide that *states* a fact satiates before it primes; a cold open that *poses* ("…and that's the number that made us kill the old pipeline") opens a gap the viewer must watch to close. Order clips to pose, not answer.
|
|
411
|
+
- **Curiosity is an information gap** (Loewenstein, 1994). A slide that *states* a fact satiates before it primes; a cold open that *poses* ("…and that's the number that made us kill the old pipeline") opens a gap the viewer must watch to close. Order clips to pose, not answer. A definitional title card is appropriate when requested or useful for this format.
|
|
544
412
|
- **Emotion outweighs everything** (Murch's Rule of Six: emotion ~51%, then story, rhythm, eye-trace, planarity, spatial continuity). The slop instinct optimizes the bottom of the list — aligned text, smooth easing — while ignoring the top. When choosing where to cut, ask "does this land the emotion / advance the point?" first, "is it geometrically neat?" last.
|
|
545
|
-
- **Attention
|
|
413
|
+
- **Attention and rhythm.** Consider motivated changes of state or shot scale when attention is the goal. Deliberate repetition, continuous motion and long holds can serve other requested formats.
|
|
546
414
|
- **Sound is half the picture** (Chion, *Audio-Vision*; synchresis). Cut on stressed words / beats via transcript word-timing; hold a silence beat before the peak line. On-beat reads as craft, off-beat as accident.
|
|
547
|
-
- **Story
|
|
548
|
-
- **Premium = legible intent, not polish.** Audiences forgive imperfect video with a point of view; they don't forgive adequate video with no soul. Restraint, typographic discipline, and one consistent color/type/motion system across the whole piece are the premium signal.
|
|
415
|
+
- **Story can use a value-shift** (McKee). Pain → product → win is one launch structure; a sequence of raised-and-answered questions is another. Neither is required for a brand study, observation or a different requested arc.
|
|
416
|
+
- **Premium = legible intent, not polish.** Audiences forgive imperfect video with a point of view; they don't forgive adequate video with no soul. Restraint, typographic discipline, and one consistent color/type/motion system across the whole piece are the premium signal. Consider why motion serves the requested visual experience.
|
|
549
417
|
|
|
550
418
|
### Deconstructed grammars (steal the structure, map to the tools)
|
|
551
419
|
These are *archetypes*, not documented cuts of specific films — reason from the grammar, don't cargo-cult a company.
|
|
552
420
|
|
|
553
|
-
- **
|
|
554
|
-
- **The founder-to-camera grammar → CueFrame's home field (the shape that agent walked past).** Founder, medium shot, direct address: "Hey, I want to show you something." No sting, just a face and eye contact. Screen-share woven in as real capture under the continuing VO. Captions burned in, plated. Lower-third names the founder once. Imperfect on purpose — that's the credibility. *CueFrame:* `get_media_context` → `active-speaker`/`all-faces` reframe → transcript-timed captions with an `emphasisPlate` → a `zPlane:"behind-subject"` title → `lower-third` → `color-grade`. Zero generation.
|
|
555
|
-
- **The dark-kinetic-product grammar → "a gradient is a stage, not a subject."** Hard cut in on the UI in motion. Feature montage ~2–4s each, every beat a *real* UI interaction, cut on the music. The UI floats on a near-black stage with a subtle gradient — but the gradient is the *stage*; the real UI is always on top. One hero feature gets 8–10s to breathe. *CueFrame:* `import_media` UI captures → tight per-clip `trim`, cut on beat via clip durations → a dark `color-grade` + a `backgrounds` primitive as the *stage*, real footage on top. `preview_frame` a mid-montage frame: if there's no product on it, it's slop.
|
|
556
|
-
|
|
557
|
-
*The compressed lessons:* the product/human is the opening shot, not a title card · a real screen recording beats a beautiful fake · a gradient is a stage, not a subject · open on your single most satisfying real moment in the first 5s · founder-to-camera + real footage is home field · a purposeful diagram of the real mechanism is grounded too · show one task completed end-to-end, not a feature grid.
|
|
558
|
-
|
|
559
|
-
---
|
|
560
|
-
|
|
561
|
-
## The rubric template (write your video-specific version BEFORE rendering)
|
|
562
|
-
|
|
563
|
-
```
|
|
564
|
-
VISION (one line): the ONE controlling idea for THIS video — a value + a cause.
|
|
565
|
-
FORMAT: [product-launch | social-clip | explainer | demo | talking-head]
|
|
566
|
-
SOURCE REALITY CHECK: what GROUNDS this video (after HUNTING for footage — 3a)? Real
|
|
567
|
-
footage, real UI/data, or a purposeful content-specific graphic (e.g. an authored diagram
|
|
568
|
-
of the actual mechanism). If the only plan is generic filler, the 3b stop fired and
|
|
569
|
-
the user has explicitly said "proceed."
|
|
570
|
-
|
|
571
|
-
MUST-HAVES (each scoreable YES/NO on a NAMED frame, or 0–10):
|
|
572
|
-
H1. [t=…] …
|
|
573
|
-
... (5–8 lines; anchor every one to a timestamp a PNG can answer)
|
|
574
|
-
|
|
575
|
-
KILL CRITERIA (any TRUE on any sampled frame = FAIL, regardless of score):
|
|
576
|
-
K1. [MANDATORY — preserve the meaning] Any sampled frame is a gradient/solid background with only
|
|
577
|
-
text and NO grounded subject — no real footage, no real UI/data, no purposeful
|
|
578
|
-
content-specific graphic, just decorative filler.
|
|
579
|
-
K2. [MANDATORY — preserve the meaning] Any on-screen number you cannot trace to a written
|
|
580
|
-
source, or any faked/mocked UI standing in for a real capture.
|
|
581
|
-
K3. [MANDATORY — preserve the meaning] Generic/decorative filler dominates the runtime — grounded,
|
|
582
|
-
specific content (real footage, real UI/data, or purposeful content-specific
|
|
583
|
-
graphics) does not.
|
|
584
|
-
K4+. … (add your own; encode this video's specific slop modes as disqualifiers)
|
|
585
|
-
|
|
586
|
-
PROVENANCE: for every on-screen number, write the source next to it here
|
|
587
|
-
(e.g. "8.5% — benchmark table, <link to the writeup>"). No written source → it does not go on screen.
|
|
588
|
-
|
|
589
|
-
PER-BEAT CHECKS: B1 (0:00–0:0X) … B2 … (each beat exists and lands, with a duration)
|
|
590
|
-
|
|
591
|
-
MEASURABLE THRESHOLDS:
|
|
592
|
-
T1. First grounded frame (real footage / real UI/data / purposeful graphic) at t ≤ __s.
|
|
593
|
-
T2. Grounded, content-specific visuals (real footage, real UI/data, or a visual of the
|
|
594
|
-
real mechanism/data) ≥ 60% of runtime; a beat whose only visual is animated text
|
|
595
|
-
over a background counts as filler, not grounded. (Footage-based formats: real
|
|
596
|
-
footage ≥ 60%.)
|
|
597
|
-
T3. ≤ __ on-screen stats, each held ≥ __s, each source-traceable.
|
|
598
|
-
T4. No single frame > __% empty decorative background.
|
|
599
|
-
T5. Caption legible (contrast/size, plate) on named frames.
|
|
600
|
-
T6. Cut/beat count in range __–__ (not a static hold, not a strobe).
|
|
601
|
-
|
|
602
|
-
SCORING: (a) your own frame-by-frame descriptions pass every MUST-HAVE with ZERO kill
|
|
603
|
-
criteria; AND (b) score_composition (editorialIntent = the VISION line;
|
|
604
|
-
brandContext = brand facts) composite ≥ 7.5/10 on its OWN sampled frames
|
|
605
|
-
(never set your bar below 7.5). Sample frames at [list incl t=0]. Budget 3–5 passes.
|
|
606
|
-
```
|
|
421
|
+
- **Hardware reveal example:** a product materializing against negative space can carry a reveal, with one capability per shot and sourced numbers held long enough to read. This is one option; a requested logo or title opening is equally valid. Use actual product footage when claiming to show the real hardware.
|
|
607
422
|
|
|
608
|
-
|
|
609
|
-
```
|
|
610
|
-
VISION: "Two founders who clearly believe in the product tell you, to your face, why it's
|
|
611
|
-
faster — and you watch it BE faster."
|
|
612
|
-
FORMAT: talking-head + real demo (NOT slides).
|
|
613
|
-
SOURCE REALITY CHECK: HUNT (3a) → the team's real launch footage = people to camera → import
|
|
614
|
-
it. If no footage: a real capture of the product running, or a first-class authored diagram of
|
|
615
|
-
its actual pipeline (grounded, not a consolation) — NOT a gradient deck. Generic
|
|
616
|
-
filler = fail.
|
|
617
|
-
|
|
618
|
-
MUST-HAVES:
|
|
619
|
-
H1. [t=0–3s] A human FACE on screen within 3s (subject present, headroom).
|
|
620
|
-
H2. [t=0–3s] NO title card / logo splash before the face.
|
|
621
|
-
H3. [any speaking frame] The person framed is the person talking (reframe to
|
|
622
|
-
get_media_context faces; all-faces on the two-shot, active-speaker on singles).
|
|
623
|
-
H4. [speaking frames] Legible transcript captions, plated, never over the face.
|
|
624
|
-
H5. [one frame] Speaker name in a lower-third, shown once, spelled correctly.
|
|
625
|
-
H6. [demo beat] The real product running (captured pixels), not a re-created UI card.
|
|
626
|
-
H7. [stat beat] Any number matches the source exactly (source says 8.5% → the frame
|
|
627
|
-
says 8.5%, not 10x).
|
|
628
|
-
H8. [final] Wordmark + one line lands LAST, held ≥1.5s.
|
|
629
|
-
|
|
630
|
-
KILL CRITERIA:
|
|
631
|
-
K1. [mandatory] Gradient/solid + only text, no grounded subject (no real footage,
|
|
632
|
-
real UI/data, or purposeful content-specific graphic).
|
|
633
|
-
K2. [mandatory] Untraceable number (e.g. "10x") or a fake/static terminal.
|
|
634
|
-
K3. [mandatory] Generic/decorative filler dominates; grounded content does not.
|
|
635
|
-
K4. On >2 consecutive sampled beats, the frame's largest element is text on a
|
|
636
|
-
flat/gradient field with no grounded subject behind or beside it.
|
|
637
|
-
|
|
638
|
-
PROVENANCE: "8.5%" — the benchmark table in the sourced writeup. (No other on-screen numbers.)
|
|
639
|
-
|
|
640
|
-
PER-BEAT: B1(0:00–0:05) cold open on a speaker, direct address, caption running ·
|
|
641
|
-
B2(0:05–0:20) the "why," problem in one sentence, on the face · B3(0:20–0:35) real
|
|
642
|
-
product demo, the one satisfying moment, captioned · B4(0:35–0:45) the honest 8.5% on a
|
|
643
|
-
clean held frame · B5(0:45–0:50) face again + CTA + wordmark.
|
|
644
|
-
|
|
645
|
-
THRESHOLDS: T1 first grounded frame ≤ 3s · T2 real footage ≥ 60% of runtime · T3 ≤ 2
|
|
646
|
-
stats, each held ≥ 1.5s, source-traceable · T4 no frame > 30% empty background ·
|
|
647
|
-
T5 caption plate legible on B1,B3 · T6 ≥ 1 active-speaker/all-faces reframe.
|
|
648
|
-
|
|
649
|
-
SCORING: own descriptions pass H1–H8, zero kills; score_composition (editorialIntent
|
|
650
|
-
= VISION) composite ≥ 7.5/10 on its sampled frames. Sample at 0,3,10,20,35,45s.
|
|
651
|
-
Budget 3–5 passes.
|
|
652
|
-
```
|
|
423
|
+
- **Human testimony example:** founder-to-camera footage can give a launch specificity. Reframe from actual speaker facts and use transcript timing for requested captions. Do not add a person or voice to a piece that calls for another medium.
|
|
653
424
|
|
|
654
|
-
|
|
655
|
-
```
|
|
656
|
-
VISION: "In 20s, one surprising claim from the talk makes you stop scrolling."
|
|
657
|
-
FORMAT: social-clip (9:16, sound-off).
|
|
658
|
-
SOURCE: a real talking-head/podcast clip (the whole point of the clipping path).
|
|
659
|
-
MUST-HAVES: H1[0–1.5s] the single most surprising sentence is the FIRST thing said
|
|
660
|
-
(align to transcript) · H2[every frame] face in the vertical safe area, top of head
|
|
661
|
-
in-frame · H3[speaking] word-level animated captions, high-contrast, plated · H4
|
|
662
|
-
captions never cover mouth/eyes · H5[last 2s] soft loop or one-line handle.
|
|
663
|
-
KILL: K1[mandatory] gradient+text, no grounded subject · K2[mandatory] untraceable
|
|
664
|
-
number/fake UI · K3[mandatory] generic filler dominates, grounded content doesn't ·
|
|
665
|
-
K4 face cropped at forehead/chin OR vertical frame mostly empty · K5 opens on filler
|
|
666
|
-
("um, so…") not the hook.
|
|
667
|
-
THRESHOLDS: 15–30s · hook ≤ 1.5s · caption height ≥ ~6% of frame · face box ≥ 25% of
|
|
668
|
-
frame area · real footage ≥ 60% · nothing critical in bottom ~12% or top ~10%.
|
|
669
|
-
SCORING: own descriptions pass, zero kills; score_composition (editorialIntent =
|
|
670
|
-
VISION) composite ≥ 7.5/10 on its sampled frames. Sample 0,1.5,5,10,18s. Budget 3–5 passes.
|
|
671
|
-
```
|
|
425
|
+
- **Product-action example:** real UI interactions on a restrained stage can make a software demo readable. Choose holds, cuts, music and graphic-only intervals from the brief; a frame without the product is not an automatic failure. A typography or gradient study can use those elements as its subject.
|
|
672
426
|
|
|
673
|
-
|
|
427
|
+
These examples suggest choices, not a required opening shot, visual medium or film structure. Real captures matter when presented as product evidence; authored diagrams and typography are valid requested media.
|
|
674
428
|
|
|
675
429
|
---
|
|
676
430
|
|
|
677
|
-
##
|
|
431
|
+
## Acceptance template
|
|
678
432
|
|
|
679
|
-
|
|
680
|
-
- **Generic/decorative filler dominates the runtime** → grounded, specific content (real footage, real UI/data, or a purposeful content-specific graphic) doesn't. K3 trips. (For footage-based formats, real footage under ~60% is the usual symptom.)
|
|
681
|
-
- **An on-screen number the user didn't give you** → you fabricated it. CueFrame renders your number faithfully, so a wrong one is on you — write every stat's source in the rubric; no written source → it doesn't go on screen.
|
|
682
|
-
- **A terminal/UI that's a styled component, not a real capture** → it's a mock. Import the real capture or drop it.
|
|
683
|
-
- **A gradient/aurora you're calling "purposeful"** → it isn't. Purposeful means specific to THIS content (the real mechanism, the real data). A decorative gradient is always the slop default, never grounding.
|
|
684
|
-
- **You rendered before writing the rubric** → stop, write the rubric (step 2), then look at pixels.
|
|
685
|
-
- **You scored without describing the pixels** → you didn't look. Write one line of what's visible per still, then score.
|
|
686
|
-
- **You're the sole judge** → run `score_composition` (editorialIntent = vision); it samples its own frames — treat a low score on a frame you didn't pick as ground truth.
|
|
433
|
+
Use only what the request needs:
|
|
687
434
|
|
|
688
|
-
|
|
435
|
+
```
|
|
436
|
+
INTENT: the requested outcome or visual experience.
|
|
437
|
+
SCOPE: new work | affected revision | broader review | final delivery.
|
|
438
|
+
PROJECT/LANE: current project and capabilities actually exposed.
|
|
439
|
+
ACCEPTANCE: observable requirements at relevant timestamps/windows.
|
|
440
|
+
PRESERVE: unrelated timing, media, audio, source identity and shared kit state.
|
|
441
|
+
FACTS: sources for factual claims; identify simulated UI honestly.
|
|
442
|
+
EVIDENCE: matching frames plus motion/audio checks where relevant; source revision and job identity.
|
|
443
|
+
REVIEW: optional judge critique within budget; acceptance failures take precedence over scores.
|
|
444
|
+
DELIVERY: preview evidence or verified final export as requested; report remaining gaps.
|
|
445
|
+
```
|
|
689
446
|
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
0. `create_project` done; `get_account` shows enough `balance` on the wallet funding render/compose/generate (and the generate cost ceiling clears). Judge inclusion by balance, not by `included`.
|
|
693
|
-
1. Vision written as one sentence (value + cause); format chosen.
|
|
694
|
-
2. Footage HUNTED (3a); if the plan is generic filler, the 3b tradeoff stated to the user and an explicit "proceed" received (a purposeful, specific graphic — e.g. an authored diagram of the real mechanism — does NOT require the stop).
|
|
695
|
-
3. Rubric written *before* any render — named-frame must-haves, measurable thresholds (grounded content dominates the runtime; footage-based formats real-footage ≥60%), the mandatory K1–K3 (meaning preserved, phrasing adapted to your video), and written provenance for every number.
|
|
696
|
-
4. Real source imported (`list_media` shows it ready); `get_media_context` faces + transcript pulled and used for reframe + caption timing (when the piece uses footage).
|
|
697
|
-
5. Components discovered via `list_catalog` (no hand-placed hex where a built-in exists); `fixedCopy` checked so no baked text lies. Brand set via `brandKitId` on the project if a brand kit exists.
|
|
698
|
-
6. `validate_composition` is `{ valid: [] }` — shape sound, no `reframe_coverage_gap` (shape ≠ quality).
|
|
699
|
-
7. `preview_frame` stills taken at every rubric timestamp incl t=0, each **described in words** then scored against the rubric.
|
|
700
|
-
8. `score_composition` run with `editorialIntent`=vision, `brandContext`=brand; worst-first critique addressed; composite ≥ 7.5 on its own sampled frames.
|
|
701
|
-
9. Every kill criterion false on every sampled frame; every on-screen number traces to its written source and matches it.
|
|
702
|
-
10. Verify passes budgeted (3–5) and the rubric genuinely passes — then `create_render` → `wait_job(kind:"render")`.
|
|
447
|
+
Before final export, verify the requested acceptance criteria, current source revision and media bindings, valid composition shape, relevant motion/audio, and applicable hosted account/quote safeguards. Return the artifact location and distinguish preview proof from final-export proof.
|
|
@@ -5,8 +5,15 @@ description: Use when turning a local app into a brand-consistent product demo w
|
|
|
5
5
|
|
|
6
6
|
# CueFrame — Brand demo recipe
|
|
7
7
|
|
|
8
|
-
|
|
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.
|
|
9
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
|
+
> **Kit truth over MCP (current limits):** kit CONTENTS are not yet inspectable over MCP (`get_profile` lists names only), so `$brand:` tokens resolve blind — verify resolved fonts/colors with a `preview_frame` still, and when the kit conflicts with an explicit client spec, the spec wins (hardcode it and note the conflict). Bind kits by the SERVER id from `get_profile` (slug binding is unreliable — it can silently bind nothing); always confirm via the project response `brandKitId`.
|
|
10
17
|
|
|
11
18
|
A **use-case recipe** that runs end-to-end from inside the user's own project
|
|
12
19
|
folder. You (Claude) already see their code and their running app — that's the
|
|
@@ -254,4 +261,4 @@ frames) before declaring done.
|
|
|
254
261
|
which is the engine's job now.
|
|
255
262
|
- This recipe lives in a skill on purpose: the engine stays use-case-free; the
|
|
256
263
|
product opinions (what to extract, which overlays, how to brand) live here and
|
|
257
|
-
ship via `npx -y cueframe install`.
|
|
264
|
+
ship via `npx -y cueframe@0.7 install`.
|