cueframe 0.1.2 → 0.3.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.
@@ -0,0 +1,99 @@
1
+ ---
2
+ name: rebrand-a-video
3
+ description: Swaps the brand kit under an existing video and re-renders — tokens, bumpers, logo, captions, and motion re-theme automatically; hardcoded card values get surgical edits. Triggers on "rebrand this video", "swap the brand", "we changed our colors", "new logo, same video", "make this video match the new brand", "re-theme our launch video", "white-label this for a client".
4
+ ---
5
+
6
+ # Rebrand a video
7
+
8
+ You bring a finished video and a new brand (a kit, a website, or new colors/fonts/logo); you get
9
+ the same video back wearing the new identity — everything bound to brand tokens re-themes at
10
+ render, and the few graphics that hardcoded the old brand get found and fixed. Change one line,
11
+ not the whole video.
12
+
13
+ ## Before you start
14
+
15
+ Collect the new brand's facts first — the swap itself is fast. When the first tool call
16
+ approaches and CueFrame isn't connected:
17
+
18
+ - **Claude Code:** offer to run
19
+ `claude mcp add --transport http cueframe https://api.cueframe.ai/v1/mcp` — browser OAuth,
20
+ one **Allow**.
21
+ - **Claude.ai / Claude Desktop:** Settings → Connectors → add a custom connector with
22
+ `https://api.cueframe.ai/v1/mcp`.
23
+ - **Other agents:** paste `set up https://cueframe.ai/skill.md`, or run
24
+ `npx -y cueframe install`.
25
+
26
+ Then back to the brand — most of this job is a kit definition and an audit.
27
+
28
+ ## Inputs
29
+
30
+ - **The video** (required): the composition (via `list_compositions`) and which project it lives
31
+ in.
32
+ - **The new brand** (required): an existing kit id, a website to `extract_brand_kit` from
33
+ (colors/fonts only — ask for logo, tagline, voice), or explicit values for `create_brand_kit`.
34
+ - **Same identity or a new one?** Restyling THIS brand → upsert the same kit id and every
35
+ composition pointing at it re-themes. White-labeling for someone else → a NEW kit, so the
36
+ original stays intact.
37
+ - **Tone shift**: does the new brand change the music mood too? Check the kit's `musicMood`
38
+ intent.
39
+
40
+ ## Workflow
41
+
42
+ 1. **Pin the new brand as a kit.** `extract_brand_kit` or `create_brand_kit`; show the kit and
43
+ get sign-off — it is the contract. Then bind it: upsert in place (same kit id) to restyle,
44
+ or point the project at the new kit for a white-label. The kit lives on the PROJECT, not on
45
+ a composition op.
46
+ 2. **Know what re-themes for free.** Everything resolved at render: `$brand:` color/font/motion
47
+ tokens on overlays and cards, the kit's intro/outro bumpers, the logo corner mark, the
48
+ caption profile, the motion identity. Edit the kit, re-render, these all follow — that is
49
+ the whole "one line" story.
50
+ 3. **Hunt what does NOT re-theme.** Anything that hardcoded the old brand: literal hexes or
51
+ font names inside `kind:"card"` HTML, an old wordmark imported as media, footage graded
52
+ toward the old palette, baked stock choices that lived in the old world. Walk the
53
+ composition's overlay and card clips and list every literal value — this audit is the real
54
+ work.
55
+ 4. **Verify with pixels, not the kit.** Kit contents aren't inspectable over MCP after
56
+ creation, so the truth is the frame: `preview_frame` at t=0, each card, the bumpers, and the
57
+ end card. Describe each still — is any old color, font, or mark visible? A `$brand:` token
58
+ that fails to resolve is loud in render logs and falls to a legible neutral; a hardcoded old
59
+ hex is silent, which is why you hunt it by eye.
60
+ 5. **Fix the holdouts surgically.** `apply_composition` edits per offending clip: rebind card
61
+ fields to `$brand:` tokens (so the NEXT rebrand really is one line), swap the old-wordmark
62
+ media, re-grade footage toward the new palette. A replaced card gets re-shelled with
63
+ `applyMotionPreset` in a FOLLOWING call. The §3 test governs every card you touch: if the
64
+ old brand's hex would still look correct in it, the layout was never bespoke — rebuild it,
65
+ don't tint it.
66
+ 6. **Re-decide the audio — required.** A brand swap is a mood swap: check the bed against the
67
+ new kit's `musicMood`. Wrong mood → `search_resources` a replacement (license recorded),
68
+ same role and ducking, `materializeGrid` re-run if cut timing shifts. Still right → say so
69
+ in the delivery note. If the piece was intentionally silent, confirm that decision still
70
+ fits the new brand and restate it.
71
+ 7. **Judge against the NEW brand, render once.** `score_composition` with the new brand facts
72
+ as `brandContext` — the brand axis is exactly the check this job needs. Fix worst-first to
73
+ ≥ 7.5, then `create_render` → `wait_job (kind:"render")`.
74
+
75
+ ## What good looks like
76
+
77
+ Quoted from `video-craft-standards` §3 (Brand-identity reel) — the bespoke test applies to every
78
+ card in any class:
79
+
80
+ > **MUST** Every graphic is bespoke to the brand: its type, its palette as fields, its layout
81
+ > system. **K:** any layout that would look correct with another brand's hex swapped in.
82
+
83
+ > **MUST** Footage color and brand palette agree — grade toward the palette or choose footage
84
+ > that lives in it.
85
+
86
+ And cross-cutting: *"**MUST** Brand/text graphics are AUTHORED — `kind:"card"` HTML (your
87
+ typography, layout, palette-as-fields) […] **K:** a brand graphic rendered from a catalog text
88
+ primitive."*
89
+
90
+ ## Delivering
91
+
92
+ The last message closes the loop, never "done":
93
+
94
+ - The re-rendered link and where it lives (project + composition id), plus the kit id now bound
95
+ — and the one-line promise made true: next time, edit the kit and re-render.
96
+ - What re-themed automatically vs what you hand-edited (the audit list from step 3) — the user
97
+ should know which parts of their video are now token-bound.
98
+ - Attribution for any newly licensed bed or asset (provider, id, author).
99
+ - The audio decision: bed kept / bed swapped and why / intentional silence restated.
@@ -0,0 +1,119 @@
1
+ ---
2
+ name: video-craft-standards
3
+ description: The definition of DONE for every video made with CueFrame — per-artifact checklists (social reel, launch film, brand reel, talking-head clip) with kill criteria. Read this BEFORE composing and score your work against it BEFORE rendering. Other skills quote this document; when a skill and this document disagree, this document wins. Triggers on "is this good enough", "quality bar", "what should a finished reel have", "review my video", or any request to make a video when no other skill has stated the bar.
4
+ ---
5
+
6
+ # Video-Craft Standards — what "finished" means
7
+
8
+ This is the single source of truth for output quality. A video that misses a
9
+ MUST for its artifact class is **not done** — fix it or explicitly record why
10
+ the rule doesn't apply. Kill criteria (**K**) mean: do not render; fix first.
11
+
12
+ ## Why this exists
13
+
14
+ Every quality dimension nobody measures decays to the laziest default:
15
+ template titles, silent reels, centered white text on footage. Each class
16
+ below is the checklist a good human editor carries implicitly. Score against
17
+ it with stills (`preview_frame`) and the judge (`score_composition`) before
18
+ your one final render.
19
+
20
+ ## The controlling idea — the rule above every rule
21
+
22
+ - **MUST (K)** Before composing, write the video's CLAIM in one sentence —
23
+ the thing a viewer should be able to repeat afterward ("real bread takes
24
+ 48 hours and you can taste every one of them"). Not a vibe, not a tagline:
25
+ a claim with tension (what does this brand/story believe that its category
26
+ doesn't?).
27
+ - **MUST (K)** Every channel is EVIDENCE for the claim, in harmony:
28
+ - **Footage** — each clip earns its place as proof of the claim, chosen
29
+ from the claim's shot list, not from search-term aesthetics.
30
+ - **Sound** — the bed's mood and TEMPO embody the claim (a "slow" claim
31
+ gets a patient, sparse bed and the nerve to hold shots; an "instant"
32
+ claim cuts hot). Silence and pauses are rhetoric, not absence.
33
+ - **Pacing** — the cut rhythm IS part of the argument; it may defy
34
+ platform convention when the claim demands it.
35
+ - **Type/cards** — copy advances the argument; the tagline lands as the
36
+ CONCLUSION the beats have earned, never as a caption.
37
+ - **Kill tests:** (1) beats reorderable without changing what the video
38
+ says; (2) any channel (bed, shot, card) that would fit a different claim
39
+ equally well; (3) a viewer who watched it cannot state the claim.
40
+
41
+ ## Cross-cutting rules (every artifact)
42
+
43
+ - **MUST** Brand/text graphics are AUTHORED — `kind:"card"` HTML (your
44
+ typography, layout, palette-as-fields) shelled with `applyMotionPreset`,
45
+ or a custom component. Catalog text primitives are for utility only.
46
+ **K:** a brand graphic rendered from a catalog text primitive.
47
+ - **MUST** Audio is decided, never defaulted: a music bed (curated packs via
48
+ `import_resource {kind:"music-pack"}`) or ambience/loops (Freesound via
49
+ `search_resources kind:"sfx"`), honoring the brand kit's `musicMood`;
50
+ cut to the beat via `materializeGrid` when the bed drives pacing — OR an
51
+ explicit intentional-silence decision recorded in your delivery note with
52
+ the reason. **K:** a render whose silence nobody chose.
53
+ - **MUST** Footage carries the video: real footage / real UI / real data
54
+ ≥60% of runtime for footage-first classes. Text alone is not a video.
55
+ - **MUST** Every stock asset's provenance is recorded (provider, id, author).
56
+ - **MUST** Safe-area respected: no critical copy in the outer ~8% of frame.
57
+ - **MUST** One final render per approval; iterate with previews, not renders.
58
+ - **MUST** Delivery never ends with "done": the last message carries the
59
+ output link and where to find it, plus the intentional-silence note if any.
60
+
61
+ ## 1. Social reel — 9:16 · 8–30s
62
+
63
+ - **MUST (K)** The hook lands inside 2 seconds: the strongest image, motion,
64
+ or claim opens the piece. No logo-first cold opens, no fade-in-from-black
65
+ preambles.
66
+ - **MUST** Typography is poster-grade: composed plates/fields in the brand
67
+ palette, considered alignment and scale. **K:** centered white text
68
+ floating on footage.
69
+ - **MUST** Pacing is cut-driven: a new visual beat at least every ~4s; static
70
+ holds >4s need motion inside the frame (reframe push, kenBurns, animated
71
+ card) or they die.
72
+ - **MUST** Ends on a deliberate beat: tagline, logo, or CTA lockup — not a
73
+ clip running out.
74
+ - **SHOULD** Cuts land on the music grid when a bed exists.
75
+
76
+ ## 2. Launch film / feature announcement — 16:9 · 30–90s
77
+
78
+ - **MUST (K)** Payoff-first hook: the OUTCOME, not the feature name
79
+ ("Close the books two days faster" beats "Introducing the reconciliation
80
+ module"). No throat-clearing ("in this video we're going to…").
81
+ - **MUST** Narration or a bed that builds toward the reveal; pacing tightens
82
+ as the payoff approaches.
83
+ - **MUST** Real product surface: actual UI/screens/output — never mocked.
84
+ - **MUST** End card with a single CTA.
85
+ - **MUST** Captions present when narrated.
86
+
87
+ ## 3. Brand-identity reel — 9:16 · 12–20s (the showcase class)
88
+
89
+ Everything in §1, plus:
90
+ - **MUST** Three-beat arc: opening brand moment (wordmark treatment) →
91
+ middle craft/proof beat (the subject's world, with an editorial device —
92
+ numbered chapter, pull-quote, stat) → closing tagline lockup.
93
+ - **MUST** Every graphic is bespoke to the brand: its type, its palette as
94
+ fields, its layout system. **K:** any layout that would look correct with
95
+ another brand's hex swapped in.
96
+ - **MUST** Footage color and brand palette agree — grade toward the palette
97
+ or choose footage that lives in it.
98
+
99
+ ## 4. Talking-head clip — any aspect · 15–60s
100
+
101
+ - **MUST (K)** Hook = the strongest sentence, first. Cut TO the moment;
102
+ never open on wind-up.
103
+ - **MUST** Active-speaker reframe (`focus: active-speaker` / `face`) — a
104
+ moving camera, not a static center crop.
105
+ - **MUST** Captions timed to the real transcript (`captions.fromTranscript`).
106
+ The behind-the-speaker LOOK is an overlay text layer at
107
+ `zPlane:"behind-subject"` where the footage allows — the caption layer
108
+ itself always renders in front.
109
+ - **MUST** Dead air and false starts cut (`addExcludedRange` /
110
+ `cutAndRipple`).
111
+
112
+ ## Scoring discipline
113
+
114
+ Before the final render: (1) pull stills at each beat boundary and describe
115
+ each one to yourself BEFORE judging it; (2) walk the class checklist and list
116
+ every MUST as pass/fail; (3) any K fails → fix, re-preview; (4) run
117
+ `score_composition` when the budget allows and fix the worst criterion first.
118
+ The checklist is the floor; the judge is the critic; neither substitutes for
119
+ looking at the frames.
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import{D as a}from"./chunk-ZBD4U6PD.js";export{a as analyzeCommand};