@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.
Files changed (85) hide show
  1. package/README.md +9 -104
  2. package/{skills → dist/skills}/add-music-bed/SKILL.md +12 -7
  3. package/{skills → dist/skills}/brand-reel/SKILL.md +19 -15
  4. package/{skills → dist/skills}/clip-a-talking-head/SKILL.md +15 -7
  5. package/dist/skills/composing-video/SKILL.md +447 -0
  6. package/{skills → dist/skills}/cueframe-brand-demo/SKILL.md +9 -2
  7. package/{skills → dist/skills}/cueframe-cli/SKILL.md +54 -49
  8. package/{skills → dist/skills}/cueframe-component-authoring/SKILL.md +14 -6
  9. package/{skills → dist/skills}/cueframe-compose-loop/SKILL.md +20 -6
  10. package/dist/skills/cueframe-compose-loop/references/builtin-insertion.md +49 -0
  11. package/dist/skills/cueframe-compose-loop/references/builtin-requests.json +111 -0
  12. package/dist/skills/cueframe-connect/SKILL.md +53 -0
  13. package/{skills → dist/skills}/cueframe-product-video/SKILL.md +15 -7
  14. package/{skills → dist/skills}/cueframe-scene-shot/SKILL.md +8 -0
  15. package/dist/skills/cueframe-storyboard/SKILL.md +76 -0
  16. package/{skills → dist/skills}/every-format-from-one-edit/SKILL.md +14 -8
  17. package/{skills → dist/skills}/extracting-brand-kits/SKILL.md +8 -0
  18. package/{skills → dist/skills}/launch-video/SKILL.md +17 -11
  19. package/{skills → dist/skills}/make-a-social-reel/SKILL.md +19 -15
  20. package/{skills → dist/skills}/rebrand-a-video/SKILL.md +18 -16
  21. package/dist/skills/video-craft-standards/SKILL.md +121 -0
  22. package/dist/skills/video-craft-standards/agents/openai.yaml +6 -0
  23. package/package.json +9 -28
  24. package/skills-dir.d.ts +1 -0
  25. package/skills-dir.js +2 -1
  26. package/.agents/plugins/marketplace.json +0 -12
  27. package/.claude-plugin/marketplace.json +0 -6
  28. package/.claude-plugin/plugin.json +0 -15
  29. package/.codex-plugin/plugin.json +0 -30
  30. package/.cursor-plugin/plugin.json +0 -1
  31. package/.mcp.json +0 -1
  32. package/AGENTS.md +0 -20
  33. package/assets/logo-400.png +0 -0
  34. package/gemini-extension.json +0 -1
  35. package/glama.json +0 -1
  36. package/hooks/hooks.json +0 -7
  37. package/hooks/session-inject.md +0 -15
  38. package/hooks/session-start.sh +0 -6
  39. package/llms-install.md +0 -47
  40. package/mcp.json +0 -1
  41. package/plugin.json +0 -46
  42. package/rules/cueframe.mdc +0 -19
  43. package/skills/composing-video/SKILL.md +0 -702
  44. package/skills/cueframe-connect/SKILL.md +0 -45
  45. package/skills/cueframe-storyboard/SKILL.md +0 -104
  46. package/skills/video-craft-standards/SKILL.md +0 -128
  47. package/skills/video-craft-standards/agents/openai.yaml +0 -6
  48. package/skills/video-craft-standards/assets/icon.svg +0 -16
  49. package/skills.sh.json +0 -1
  50. /package/{skills → dist/skills}/add-music-bed/agents/openai.yaml +0 -0
  51. /package/{assets → dist/skills/add-music-bed/assets}/icon.svg +0 -0
  52. /package/{skills → dist/skills}/brand-reel/agents/openai.yaml +0 -0
  53. /package/{skills/add-music-bed → dist/skills/brand-reel}/assets/icon.svg +0 -0
  54. /package/{skills → dist/skills}/clip-a-talking-head/agents/openai.yaml +0 -0
  55. /package/{skills/brand-reel → dist/skills/clip-a-talking-head}/assets/icon.svg +0 -0
  56. /package/{skills → dist/skills}/composing-video/agents/openai.yaml +0 -0
  57. /package/{skills/clip-a-talking-head → dist/skills/composing-video}/assets/icon.svg +0 -0
  58. /package/{skills → dist/skills}/cueframe-brand-demo/agents/openai.yaml +0 -0
  59. /package/{skills/composing-video → dist/skills/cueframe-brand-demo}/assets/icon.svg +0 -0
  60. /package/{skills → dist/skills}/cueframe-cli/agents/openai.yaml +0 -0
  61. /package/{skills/cueframe-brand-demo → dist/skills/cueframe-cli}/assets/icon.svg +0 -0
  62. /package/{skills → dist/skills}/cueframe-component-authoring/agents/openai.yaml +0 -0
  63. /package/{skills/cueframe-cli → dist/skills/cueframe-component-authoring}/assets/icon.svg +0 -0
  64. /package/{skills → dist/skills}/cueframe-compose-loop/agents/openai.yaml +0 -0
  65. /package/{skills/cueframe-component-authoring → dist/skills/cueframe-compose-loop}/assets/icon.svg +0 -0
  66. /package/{skills → dist/skills}/cueframe-compose-loop/references/preview-workflow.md +0 -0
  67. /package/{skills → dist/skills}/cueframe-connect/agents/openai.yaml +0 -0
  68. /package/{skills/cueframe-compose-loop → dist/skills/cueframe-connect}/assets/icon.svg +0 -0
  69. /package/{skills → dist/skills}/cueframe-product-video/agents/openai.yaml +0 -0
  70. /package/{skills/cueframe-connect → dist/skills/cueframe-product-video}/assets/icon.svg +0 -0
  71. /package/{skills → dist/skills}/cueframe-scene-shot/agents/openai.yaml +0 -0
  72. /package/{skills/cueframe-product-video → dist/skills/cueframe-scene-shot}/assets/icon.svg +0 -0
  73. /package/{skills → dist/skills}/cueframe-storyboard/agents/openai.yaml +0 -0
  74. /package/{skills/cueframe-scene-shot → dist/skills/cueframe-storyboard}/assets/icon.svg +0 -0
  75. /package/{skills → dist/skills}/every-format-from-one-edit/agents/openai.yaml +0 -0
  76. /package/{skills/cueframe-storyboard → dist/skills/every-format-from-one-edit}/assets/icon.svg +0 -0
  77. /package/{skills → dist/skills}/extracting-brand-kits/agents/openai.yaml +0 -0
  78. /package/{skills/every-format-from-one-edit → dist/skills/extracting-brand-kits}/assets/icon.svg +0 -0
  79. /package/{skills → dist/skills}/launch-video/agents/openai.yaml +0 -0
  80. /package/{skills/extracting-brand-kits → dist/skills/launch-video}/assets/icon.svg +0 -0
  81. /package/{skills → dist/skills}/make-a-social-reel/agents/openai.yaml +0 -0
  82. /package/{skills/launch-video → dist/skills/make-a-social-reel}/assets/icon.svg +0 -0
  83. /package/{skills → dist/skills}/rebrand-a-video/agents/openai.yaml +0 -0
  84. /package/{skills/make-a-social-reel → dist/skills/rebrand-a-video}/assets/icon.svg +0 -0
  85. /package/{skills/rebrand-a-video → dist/skills/video-craft-standards}/assets/icon.svg +0 -0
@@ -0,0 +1,76 @@
1
+ ---
2
+ name: cueframe-storyboard
3
+ description: >-
4
+ Use BEFORE composing when starting a NEW video from scratch and you need to plan its structure — turning a rough ask ("make a launch video", "30s promo", "an explainer for our API") into a concrete beat flow. Owns the intake + storyboard step: interview the user for the brief, resolve the format from the platform, and plan beats from the leading material and requested format. Triggers on "plan a video", "storyboard", "structure this video", "outline the video", "where do I start", or any new-video ask that has no structure yet. Hand off to composing-video for per-beat craft.
5
+ ---
6
+
7
+ # CueFrame Storyboard: brief → flow
8
+
9
+ ## Scope and capability policy
10
+
11
+ User intent and acceptance criteria override this recipe's aesthetic defaults. Silent, typography-only, uncaptioned and slow work are valid; no universal narration, footage, CTA, beat count or score target. Contracts, factual fidelity, media bindings and current source revisions remain mandatory.
12
+
13
+ Read available tools and current project; preserve the chosen local/hosted lane. Supported local work needs no hosted registration. Do not silently install, authenticate, switch projects or upload local content. Before metered hosted work, check `get_account`, entitlements, balance and quotes. Desktop setup: https://docs.cueframe.ai.
14
+
15
+ For scoped revisions, preserve unrelated timing, media, audio and shared brand-kit state. Edit affected content; inspect relevant frames, continuous motion and affected audio. No restarted intake, new approval pause, paid judge or final export by default. Judge only when useful; scores never override acceptance failures. Stop/report after two no-improvement passes. See [preview workflow](../cueframe-compose-loop/references/preview-workflow.md).
16
+
17
+ This is a new-video planning workflow. For revisions to an approved plan, preserve its structure
18
+ and use `cueframe-compose-loop`'s [preview workflow](../cueframe-compose-loop/references/preview-workflow.md)
19
+ to verify the requested change; do not restart intake, Director authoring, or final export by default.
20
+
21
+ Plan here from the user's context. Direct authoring uses the available composition/component tools; hosted Director authoring is an optional execution lane when `create_brief` and `compose` are actually exposed. Neither lane substitutes for deciding the user's acceptance criteria.
22
+
23
+ ## 1. Interview for the brief — ask only what you can't infer
24
+
25
+ Fill the brief from the conversation first; ask the user **only for the 1–2 things you genuinely cannot
26
+ infer**, and STATE what you assume for the rest. Never wall them with a form.
27
+
28
+ - **Goal / intent** *(required)* — what is this video FOR? launch, promo, explainer, demo, teaser, recap.
29
+ - **Platform** *(sets the format)* — reels / tiktok / shorts → **9:16, ~20s** · youtube → **16:9, ~45s** ·
30
+ linkedin / x → **1:1, ~20s** · web → **16:9, ~30s**. (Or an explicit aspect ratio + duration.)
31
+ - **Audience**, **tone** (punchy / premium-calm / playful / authoritative), optional **CTA**, **must-includes**
32
+ (a number, a name, a screen), **references** (a style to echo), **brand kit**.
33
+
34
+ If the ask is "make a launch video for our API," you already have goal + a hint of audience — ask "Reels,
35
+ YouTube, or your site?" and infer the rest: *"I'll assume a developer audience and a punchy tone — say if
36
+ you'd rather it feel calm/premium."* One or two questions, not seven.
37
+
38
+ ## 2. Structure the flow — the storyboard
39
+
40
+ Lay the requested duration into **beats** using the available editorial vocabulary
41
+ **hook → context → body → proof → cta → outro** (use only what the piece needs; no fixed count or required CTA). For each beat decide:
42
+
43
+ - a one-line **intent** (what this beat does for the viewer),
44
+ - a **duration** (they sum to the target; the hook earns attention in ~3s),
45
+ - a **media need**, if any: actual footage, product action, sourced data, diagrams, typography or abstract motion as requested,
46
+ - optional graphics, captions and voice; preserve requested silence and deliberate holds.
47
+
48
+ Choose the leading material first: narration, recorded speech, product action, visual/music motion or observational sequence. Read `get_media_context` when source facts or transcript timings affect the plan. Discover existing primitives with `list_catalog` when available; custom authored graphics are also valid. Never invent a catalog entry, media ID, transcript or factual product capture.
49
+
50
+ ## 3. Execute the plan in the available lane
51
+
52
+ Give a concise outline when useful. Continue within existing authorization; request approval only when the user requested a review gate or a decision is genuinely missing.
53
+
54
+ **Direct authoring:** use the exposed composition operations and existing project assets, then the scoped preview workflow. A local project does not require hosted registration, `create_brief`, `compose` or a paid judge. Read the actual local contracts; desktop setup is documented at https://docs.cueframe.ai.
55
+
56
+ **Hosted Director, when available and selected:** check `get_account` and current quotes before metered imports, generation or composition. Persist the accepted plan with `create_brief`, including only supported fields. Pin recorded moments with `source: {mediaId, startSec, endSec}` where supported. Relay its compose/render quote before `compose {briefId}`. Use `holdAt` only for a requested gate and `autoApprove` only when authorized and supported. Do not silently upload local content or move to a different project to obtain this lane.
57
+
58
+ Review with stills plus motion/audio evidence appropriate to the affected content. Cards can animate; a still alone cannot verify their motion. Use `score_composition` for broader review only when useful; export with `create_render` when final delivery is requested. Then load **composing-video** for applicable craft guidance.
59
+
60
+ ## Related skills & positioning
61
+
62
+ This skill owns **structure/intake**; its siblings own execution and craft — defer to them:
63
+
64
+ - **composing-video** — the craft/quality layer (grounded specificity vs. slop, the vision → rubric →
65
+ verify loop). Load it *after* you have a flow; it makes each beat good.
66
+ - **cueframe-compose-loop** — the author → render → verify → fix convergence loop + the ship bar.
67
+ - **cueframe-product-video** — click-points → auto-zoom tiling + PiP for screen demos.
68
+ - **cueframe-brand-demo** — brand-token vocabulary + auto intro/outro/logo for branded launches.
69
+ - **cueframe-component-authoring** — fork → preview → push for a custom graphic a beat needs.
70
+ - **cueframe-cli** — the `cueframe` binary + wire mechanics.
71
+
72
+ ## The boundary
73
+
74
+ You own the **vision** (the one idea and the flow for *this* video) and **data correctness** (a wrong
75
+ number you supply is rendered faithfully — the mistake is yours). CueFrame owns being faithful, legible,
76
+ and giving you real footage + real components to plan against. Reason from this; use this planning flow only when new work needs structure.
@@ -5,6 +5,14 @@ description: Derives content-aware 9:16, 1:1, and 4:5 siblings from one finished
5
5
 
6
6
  # Every format from one edit
7
7
 
8
+ ## Scope and capability policy
9
+
10
+ User intent and acceptance criteria override this recipe's aesthetic defaults. Silent, typography-only, uncaptioned and slow work are valid; no universal narration, footage, CTA, beat count or score target. Contracts, factual fidelity, media bindings and current source revisions remain mandatory.
11
+
12
+ Read available tools and current project; preserve the chosen local/hosted lane. Supported local work needs no hosted registration. Do not silently install, authenticate, switch projects or upload local content. Before metered hosted work, check `get_account`, entitlements, balance and quotes. Desktop setup: https://docs.cueframe.ai.
13
+
14
+ For scoped revisions, preserve unrelated timing, media, audio and shared brand-kit state. Edit affected content; inspect relevant frames, continuous motion and affected audio. No restarted intake, new approval pause, paid judge or final export by default. Judge only when useful; scores never override acceptance failures. Stop/report after two no-improvement passes. See [preview workflow](../cueframe-compose-loop/references/preview-workflow.md).
15
+
8
16
  You finish ONE edit; you get back its siblings for every platform — 9:16 for
9
17
  Reels/TikTok/Shorts, 1:1 and 4:5 for feeds — derived content-aware from the master,
10
18
  subject-tracked rather than letterboxed, each judged and rendered on its own. The edit decisions
@@ -54,9 +62,8 @@ A correction to one sibling does not require rendering the master or the other u
54
62
  note repeats it. If a sibling needs a different bed, `search_resources` honoring the brand
55
63
  kit's `musicMood` and swap it on that sibling only.
56
64
  6. **Judge each sibling as its own artifact.** `score_composition` per sibling with the
57
- master's vision as `editorialIntent`. A 9:16 sibling is a social reel and answers to that
58
- class's checklist — hook inside 2 seconds still applies in the new crop. Fix worst-first to
59
- ≥ 7.5.
65
+ master's vision as `editorialIntent`. Changing aspect ratio does not change the approved editorial intent, pacing or acceptance criteria. Fix worst-first to
66
+ meet the applicable acceptance criteria.
60
67
  7. **Render each approved sibling.** `create_render` → `wait_job (kind:"render")` per
61
68
  composition. One final render per approval; iterate with previews.
62
69
 
@@ -64,15 +71,14 @@ A correction to one sibling does not require rendering the master or the other u
64
71
 
65
72
  Quoted from `video-craft-standards` (cross-cutting rules — every artifact):
66
73
 
67
- > **MUST** Safe-area respected: no critical copy in the outer ~8% of frame.
74
+ > **DEFAULT** Safe-area respected: no critical copy in the outer ~8% of frame.
68
75
 
69
- > **MUST** One final render per approval; iterate with previews, not renders.
76
+ > **DEFAULT** One final render per approval; iterate with previews, not renders.
70
77
 
71
- > **MUST** Delivery never ends with "done": the last message carries the output link and where
78
+ > **DEFAULT** Delivery never ends with "done": the last message carries the output link and where
72
79
  > to find it, plus the intentional-silence note if any.
73
80
 
74
- And the class rule that governs each sibling: a derived 9:16 answers to §1 (Social reel) —
75
- *"**MUST (K)** The hook lands inside 2 seconds"* — a derived 16:9 to its own class. Derivation
81
+ And the class rule that governs each sibling: apply the original brief at the new dimensions; aspect ratio alone does not impose a social-reel hook or pacing. Derivation
76
82
  changes the frame, never the bar.
77
83
 
78
84
  ## Delivering
@@ -6,6 +6,14 @@ description: >-
6
6
 
7
7
  # Extracting brand kits: reference pixels → a kit the engine honors
8
8
 
9
+ ## Scope and capability policy
10
+
11
+ User intent and acceptance criteria override this recipe's aesthetic defaults. Silent, typography-only, uncaptioned and slow work are valid; no universal narration, footage, CTA, beat count or score target. Contracts, factual fidelity, media bindings and current source revisions remain mandatory.
12
+
13
+ Read available tools and current project; preserve the chosen local/hosted lane. Supported local work needs no hosted registration. Do not silently install, authenticate, switch projects or upload local content. Before metered hosted work, check `get_account`, entitlements, balance and quotes. Desktop setup: https://docs.cueframe.ai.
14
+
15
+ For scoped revisions, preserve unrelated timing, media, audio and shared brand-kit state. Edit affected content; inspect relevant frames, continuous motion and affected audio. No restarted intake, new approval pause, paid judge or final export by default. Judge only when useful; scores never override acceptance failures. Stop/report after two no-improvement passes. See [preview workflow](../cueframe-compose-loop/references/preview-workflow.md).
16
+
9
17
  ## The one idea
10
18
 
11
19
  **No summarization anywhere in the path.** A reference described in prose converges on house style
@@ -5,6 +5,14 @@ description: Turns screen recordings and product footage into a 30–90 second 1
5
5
 
6
6
  # Launch video
7
7
 
8
+ ## Scope and capability policy
9
+
10
+ User intent and acceptance criteria override this recipe's aesthetic defaults. Silent, typography-only, uncaptioned and slow work are valid; no universal narration, footage, CTA, beat count or score target. Contracts, factual fidelity, media bindings and current source revisions remain mandatory.
11
+
12
+ Read available tools and current project; preserve the chosen local/hosted lane. Supported local work needs no hosted registration. Do not silently install, authenticate, switch projects or upload local content. Before metered hosted work, check `get_account`, entitlements, balance and quotes. Desktop setup: https://docs.cueframe.ai.
13
+
14
+ For scoped revisions, preserve unrelated timing, media, audio and shared brand-kit state. Edit affected content; inspect relevant frames, continuous motion and affected audio. No restarted intake, new approval pause, paid judge or final export by default. Judge only when useful; scores never override acceptance failures. Stop/report after two no-improvement passes. See [preview workflow](../cueframe-compose-loop/references/preview-workflow.md).
15
+
8
16
  You bring real screen recordings or product footage plus the one outcome the feature delivers;
9
17
  you get back a 30–90 second 16:9 announcement that opens on the payoff, shows the actual product
10
18
  doing the real thing, builds under a bed or narration, and lands on a single CTA.
@@ -50,34 +58,32 @@ affected window and regressions without automatically rerunning the full-film ju
50
58
  HTML in the brand's type and palette — persisted first, then shelled with
51
59
  `applyMotionPreset` in a FOLLOWING `apply_composition` call. One CTA on the end card, held
52
60
  long enough to read, plus the date if there is one.
53
- 6. **Audio that builds — required.** `search_resources` for a bed honoring the brand kit's
61
+ 6. **Audio when requested or appropriate.** Preserve explicit silence; otherwise: `search_resources` for a bed honoring the brand kit's
54
62
  `musicMood`, energy arcing toward the reveal; place it `audioRole:"music"`,
55
63
  `materializeGrid { grid:"beat" }`, and land beat boundaries and the reveal on the grid. If
56
64
  narrated: the VO is the rhythm authority instead — cut to the voice and duck the bed under
57
- it. Silence is almost never right for a launch; if chosen anyway, record the decision and
58
- reason in the delivery note.
65
+ it. Explicit silence is a supported creative choice.
59
66
  7. **Caption narration.** For transcribed voice, save the edits first, then call
60
67
  `captions.fromComposition` with the narration track ID in a separate `apply_composition`
61
68
  call. Speech clips must have saved duration matching playable source duration divided by
62
69
  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.
70
+ transcript, and style legibly via `setCaptionStyle`. Caption narration when requested or appropriate; preserve an explicit uncaptioned format.
64
71
  8. **Preview, judge, one render.** `preview_frame` at t=0, hook-end, the reveal, and the end
65
72
  card; describe each still — is that a REAL capture on screen? Then `score_composition` with
66
- the payoff line as `editorialIntent`; fix worst-first to ≥ 7.5; `create_render` →
73
+ the payoff line as `editorialIntent`; fix relevant acceptance failures; `create_render` →
67
74
  `wait_job (kind:"render")`.
68
75
 
69
76
  ## What good looks like
70
77
 
71
- Quoted from `video-craft-standards` §2 (Launch film / feature announcement) — the full checklist
72
- wins:
78
+ Quoted from `video-craft-standards` §2 (Launch film / feature announcement) — these are format defaults:
73
79
 
74
- > **MUST (K)** Payoff-first hook: the OUTCOME, not the feature name ("Close the books two days
80
+ > **DEFAULT** Payoff-first hook: the OUTCOME, not the feature name ("Close the books two days
75
81
  > faster" beats "Introducing the reconciliation module"). No throat-clearing.
76
82
 
77
- > **MUST** Narration or a bed that builds toward the reveal; pacing tightens as the payoff
78
- > approaches. **MUST** Real product surface: actual UI/screens/output — never mocked.
83
+ > **DEFAULT** Narration or a bed that builds toward the reveal; pacing tightens as the payoff
84
+ > approaches. **DEFAULT** Real product surface: actual UI/screens/output — never mocked.
79
85
 
80
- > **MUST** End card with a single CTA. **MUST** Captions present when narrated.
86
+ > **DEFAULT** End card with a single CTA. **DEFAULT** Captions present when narrated.
81
87
 
82
88
  And cross-cutting: *"Footage carries the video: real footage / real UI / real data ≥60% of
83
89
  runtime for footage-first classes."*
@@ -5,6 +5,14 @@ description: Turns footage into a finished 9:16 social reel — hook inside 2 se
5
5
 
6
6
  # Make a social reel
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 hand over footage (a file URL, a talk, a product moment); you get back a 9:16 reel of 8–30
9
17
  seconds that opens on its strongest image, cuts on the music, carries brand-grade type, and ends
10
18
  on a deliberate beat — with a download link, not a "done".
@@ -32,20 +40,17 @@ Use `cueframe-compose-loop`'s [preview workflow](../cueframe-compose-loop/refere
32
40
  for layout and motion evidence. A follow-up tweak preserves the approved brief; inspect the
33
41
  affected window and regressions without automatically rerunning the full-film judge or export.
34
42
 
35
-
36
43
  0. **Find the claim (before anything else).** Interrogate the brand/material
37
44
  for its tension — what it believes that its category doesn't — and write
38
45
  the claim in one sentence. Derive the shot list, the bed's mood/tempo, the
39
- pacing, and every card's copy FROM that sentence. If you cannot state the
40
- claim, you are not ready to compose (video-craft-standards: the
41
- controlling idea is kill-level).
46
+ pacing, and every card's copy FROM that sentence. Use the requested visual experience as intent when the piece makes no factual claim.
42
47
 
43
48
  1. **Import and read the footage.** `import_media` (public https URL), poll `list_media` until
44
49
  ready, then `get_media_context` — faces, transcript, word timings. The context tells you
45
50
  where the hook lives; don't guess.
46
51
  2. **Pick the hook before you touch the timeline.** The strongest image, motion, or claim in the
47
52
  footage — the outcome, not the feature name, is the hook. If the best moment is at 0:47, the
48
- reel opens at 0:47. No logo-first cold opens, ever.
53
+ reel opens at 0:47. A logo-first opening remains valid when explicitly requested.
49
54
  3. **Seed the timeline.** `new_composition` at 9:16, then `apply_composition`: clips trimmed to
50
55
  the beats you chose, a new visual beat at least every ~4 seconds. Cut TO moments; never let a
51
56
  clip run out.
@@ -56,7 +61,7 @@ affected window and regressions without automatically rerunning the full-film ju
56
61
  palette-as-fields, considered alignment — persisted first, then shelled with
57
62
  `applyMotionPreset` in a FOLLOWING `apply_composition` call. Catalog text primitives are
58
63
  utility only.
59
- 6. **Decide the audio — required, never skipped.** Search a bed with `search_resources` honoring
64
+ 6. **Honor requested silence or existing audio.** When a bed is appropriate, search a bed with `search_resources` honoring
60
65
  the brand kit's `musicMood`, place it as an `audioRole:"music"` clip, then `materializeGrid`
61
66
  `{ grid:"beat" }` and land your cut points and transition midpoints on the markers. If the
62
67
  piece is genuinely better silent, that is a decision — record it and its reason in the
@@ -71,28 +76,27 @@ affected window and regressions without automatically rerunning the full-film ju
71
76
  don't karaoke a beat with no speech.
72
77
  8. **Look, then get judged.** `preview_frame` at t=0, hook-end, and every beat boundary;
73
78
  describe each still in words before scoring it. Then `score_composition` with your one-line
74
- vision as `editorialIntent` — fix the worst criterion first. Ship at composite ≥ 7.5, budget
75
- 3–5 passes.
79
+ vision as `editorialIntent` — fix the worst criterion first. Meet the applicable acceptance criteria; budget
80
+ up to 3–5 passes only for broader review.
76
81
  9. **One final render.** `create_render` → `wait_job (kind:"render")`. Iterate with previews,
77
82
  not renders.
78
83
 
79
84
  ## What good looks like
80
85
 
81
- Quoted from `video-craft-standards` §1 (Social reel) — the full checklist wins over this skill
82
- wherever they disagree:
86
+ Quoted from `video-craft-standards` §1 (Social reel) — these are defaults for this format, subject to the scope policy above:
83
87
 
84
- > **MUST (K)** The hook lands inside 2 seconds: the strongest image, motion, or claim opens the
88
+ > **DEFAULT** The hook lands inside 2 seconds: the strongest image, motion, or claim opens the
85
89
  > piece. No logo-first cold opens, no fade-in-from-black preambles.
86
90
 
87
- > **MUST** Typography is poster-grade: composed plates/fields in the brand palette, considered
88
- > alignment and scale. **K:** centered white text floating on footage.
91
+ > **DEFAULT** Typography is poster-grade: composed plates/fields in the brand palette, considered
92
+ > alignment and scale. **Consider:** centered white text floating on footage.
89
93
 
90
- > **MUST** Pacing is cut-driven: a new visual beat at least every ~4s […] **MUST** Ends on a
94
+ > **DEFAULT** Pacing is cut-driven: a new visual beat at least every ~4s […] **DEFAULT** Ends on a
91
95
  > deliberate beat: tagline, logo, or CTA lockup — not a clip running out.
92
96
 
93
97
  And the cross-cutting audio rule:
94
98
 
95
- > **MUST** Audio is decided, never defaulted […] **K:** a render whose silence nobody chose.
99
+ > **DEFAULT** Audio is decided, never defaulted […] **Consider:** a render whose silence nobody chose.
96
100
 
97
101
  ## Delivering
98
102
 
@@ -5,6 +5,14 @@ description: Swaps the brand kit under an existing video and re-renders — toke
5
5
 
6
6
  # Rebrand a video
7
7
 
8
+ ## Scope and capability policy
9
+
10
+ User intent and acceptance criteria override this recipe's aesthetic defaults. Silent, typography-only, uncaptioned and slow work are valid; no universal narration, footage, CTA, beat count or score target. Contracts, factual fidelity, media bindings and current source revisions remain mandatory.
11
+
12
+ Read available tools and current project; preserve the chosen local/hosted lane. Supported local work needs no hosted registration. Do not silently install, authenticate, switch projects or upload local content. Before metered hosted work, check `get_account`, entitlements, balance and quotes. Desktop setup: https://docs.cueframe.ai.
13
+
14
+ For scoped revisions, preserve unrelated timing, media, audio and shared brand-kit state. Edit affected content; inspect relevant frames, continuous motion and affected audio. No restarted intake, new approval pause, paid judge or final export by default. Judge only when useful; scores never override acceptance failures. Stop/report after two no-improvement passes. See [preview workflow](../cueframe-compose-loop/references/preview-workflow.md).
15
+
8
16
  You bring a finished video and a new brand (a kit, a website, or new colors/fonts/logo); you get
9
17
  the same video back wearing the new identity — everything bound to brand tokens re-themes at
10
18
  render, and the few graphics that hardcoded the old brand get found and fixed. Change one line,
@@ -23,9 +31,7 @@ Then back to the brand — most of this job is a kit definition and an audit.
23
31
  in.
24
32
  - **The new brand** (required): an existing kit id, a website to `extract_brand_kit` from
25
33
  (colors/fonts only — ask for logo, tagline, voice), or explicit values for `create_brand_kit`.
26
- - **Same identity or a new one?** Restyling THIS brand → upsert the same kit id and every
27
- composition pointing at it re-themes. White-labeling for someone else → a NEW kit, so the
28
- original stays intact.
34
+ - **Scope:** a title/color/logo correction edits only affected clip values or bindings. Do not upsert a shared kit for one local correction. A project-wide brand change must be explicit: a same-kit upsert affects every referencing composition. For a new identity, use a new kit when supported. Styling preserves layout; a full redesign requires explicit scope.
29
35
  - **Tone shift**: does the new brand change the music mood too? Check the kit's `musicMood`
30
36
  intent.
31
37
 
@@ -35,7 +41,7 @@ Use `cueframe-compose-loop`'s [preview workflow](../cueframe-compose-loop/refere
35
41
  for affected graphics and saved-composition checks. Inspect motion if the kit changes timing;
36
42
  keep the final re-render separate from previews used to resolve individual styling corrections.
37
43
 
38
- 1. **Pin the new brand as a kit.** `extract_brand_kit` or `create_brand_kit`; show the kit and
44
+ 1. **For an explicit project-wide brand change, pin the new brand as a kit.** `extract_brand_kit` or `create_brand_kit`; show the kit and
39
45
  get sign-off — it is the contract. Then bind it: upsert in place (same kit id) to restyle,
40
46
  or point the project at the new kit for a white-label. The kit lives on the PROJECT, not on
41
47
  a composition op.
@@ -56,31 +62,27 @@ keep the final re-render separate from previews used to resolve individual styli
56
62
  5. **Fix the holdouts surgically.** `apply_composition` edits per offending clip: rebind card
57
63
  fields to `$brand:` tokens (so the NEXT rebrand really is one line), swap the old-wordmark
58
64
  media, re-grade footage toward the new palette. A replaced card gets re-shelled with
59
- `applyMotionPreset` in a FOLLOWING call. The §3 test governs every card you touch: if the
60
- old brand's hex would still look correct in it, the layout was never bespoke — rebuild it,
61
- don't tint it.
62
- 6. **Re-decide the audio — required.** A brand swap is a mood swap: check the bed against the
65
+ `applyMotionPreset` in a FOLLOWING call. If the requested scope is styling, retain its layout; rebuild only for an explicitly requested redesign.
66
+ 6. **Review audio only when in scope.** A styling correction preserves existing audio and timing; for a broader brand change: check the bed against the
63
67
  new kit's `musicMood`. Wrong mood → `search_resources` a replacement (license recorded),
64
68
  same role and ducking, `materializeGrid` re-run if cut timing shifts. Still right → say so
65
69
  in the delivery note. If the piece was intentionally silent, confirm that decision still
66
70
  fits the new brand and restate it.
67
- 7. **Judge against the NEW brand, render once.** `score_composition` with the new brand facts
68
- as `brandContext` — the brand axis is exactly the check this job needs. Fix worst-first to
69
- ≥ 7.5, then `create_render` → `wait_job (kind:"render")`.
71
+ 7. **Preview the affected styling.** Check the changed color/logo/text and relevant regressions against the requested values. For broader brand review, use `score_composition` only when useful and within budget. Export with `create_render` only for requested final delivery.
70
72
 
71
73
  ## What good looks like
72
74
 
73
75
  Quoted from `video-craft-standards` §3 (Brand-identity reel) — the bespoke test applies to every
74
76
  card in any class:
75
77
 
76
- > **MUST** Every graphic is bespoke to the brand: its type, its palette as fields, its layout
77
- > system. **K:** any layout that would look correct with another brand's hex swapped in.
78
+ > **DEFAULT** Every graphic is bespoke to the brand: its type, its palette as fields, its layout
79
+ > system. **Consider:** any layout that would look correct with another brand's hex swapped in.
78
80
 
79
- > **MUST** Footage color and brand palette agree — grade toward the palette or choose footage
81
+ > **DEFAULT** Footage color and brand palette agree — grade toward the palette or choose footage
80
82
  > that lives in it.
81
83
 
82
- And cross-cutting: *"**MUST** Brand/text graphics are AUTHORED — `kind:"card"` HTML (your
83
- typography, layout, palette-as-fields) […] **K:** a brand graphic rendered from a catalog text
84
+ And cross-cutting: *"**DEFAULT** Brand/text graphics are AUTHORED — `kind:"card"` HTML (your
85
+ typography, layout, palette-as-fields) […] **Consider:** a brand graphic rendered from a catalog text
84
86
  primitive."*
85
87
 
86
88
  ## Delivering
@@ -0,0 +1,121 @@
1
+ ---
2
+ name: video-craft-standards
3
+ description: Craft defaults and applicable review checklists for CueFrame videos (social reel, launch film, brand reel, talking-head clip). User intent and requested scope govern their application; factual fidelity and tool contracts remain mandatory. 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
+ ## 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
+ These are aesthetic defaults for the named formats, not universal delivery gates. Apply only the checklist items relevant to the requested artifact; a silent typography study needs neither footage nor narration, and a title correction needs only affected evidence. User acceptance criteria govern delivery. The labels below describe recommendations; do not reject explicit creative choices using a default or a judge score.
17
+
18
+ ## The controlling idea — the rule above every rule
19
+
20
+ - **DEFAULT** For new work, consider stating the video's CLAIM in one sentence —
21
+ the thing a viewer should be able to repeat afterward ("real bread takes
22
+ 48 hours and you can taste every one of them"). Not a vibe, not a tagline:
23
+ a claim with tension (what does this brand/story believe that its category
24
+ doesn't?).
25
+ - **DEFAULT** Each included channel serves the requested intent, in harmony:
26
+ - **Footage** — each clip earns its place as proof of the claim, chosen
27
+ from the claim's shot list, not from search-term aesthetics.
28
+ - **Sound** — the bed's mood and TEMPO embody the claim (a "slow" claim
29
+ gets a patient, sparse bed and the nerve to hold shots; an "instant"
30
+ claim cuts hot). Silence and pauses are rhetoric, not absence.
31
+ - **Pacing** — the cut rhythm IS part of the argument; it may defy
32
+ platform convention when the claim demands it.
33
+ - **Type/cards** — copy advances the argument; the tagline lands as the
34
+ CONCLUSION the beats have earned, never as a caption.
35
+ - **Review prompts:** (1) beats reorderable without changing what the video
36
+ says; (2) any channel (bed, shot, card) that would fit a different claim
37
+ equally well; (3) a viewer who watched it cannot state the claim.
38
+
39
+ ## Cross-cutting rules (every artifact)
40
+
41
+ These are final-artifact criteria, not a requirement to re-plan or export after every tweak.
42
+ For scoped corrections and preview selection, use `cueframe-compose-loop`'s
43
+ [preview workflow](../cueframe-compose-loop/references/preview-workflow.md). Inspect continuous
44
+ motion and listen to affected audio, not only stills or judge scores. Keep the user's explicit
45
+ scope and acceptance criteria; approved simulated UI is not evidence of a real product capture.
46
+
47
+ - **DEFAULT** Brand/text graphics are AUTHORED — `kind:"card"` HTML (your
48
+ typography, layout, palette-as-fields) shelled with `applyMotionPreset`,
49
+ or a custom component. Catalog text primitives are for utility only.
50
+ **Consider:** a brand graphic rendered from a catalog text primitive.
51
+ - **DEFAULT** Audio is decided, never defaulted: a music bed (curated packs via
52
+ `import_resource {kind:"music-pack"}`) or ambience/loops (Freesound via
53
+ `search_resources kind:"sfx"`), honoring the brand kit's `musicMood`;
54
+ cut to the beat via `materializeGrid` when the bed drives pacing — OR an
55
+ explicit intentional-silence decision recorded in your delivery note with
56
+ the reason. **Consider:** a render whose silence nobody chose.
57
+ - **DEFAULT** Footage carries the video: real footage / real UI / real data
58
+ ≥60% of runtime for footage-first classes. Typography-only work is a valid requested format.
59
+ - **DEFAULT** Every stock asset's provenance is recorded (provider, id, author).
60
+ - **DEFAULT** Safe-area respected: no critical copy in the outer ~8% of frame.
61
+ - **DEFAULT** One final render per approval; iterate with previews, not renders.
62
+ - **DEFAULT** Delivery never ends with "done": the last message carries the
63
+ output link and where to find it, plus the intentional-silence note if any.
64
+
65
+ ## 1. Social reel — 9:16 · 8–30s
66
+
67
+ - **DEFAULT** The hook lands inside 2 seconds: the strongest image, motion,
68
+ or claim opens the piece. No logo-first cold opens, no fade-in-from-black
69
+ preambles.
70
+ - **DEFAULT** Typography is poster-grade: composed plates/fields in the brand
71
+ palette, considered alignment and scale. **Consider:** centered white text
72
+ floating on footage.
73
+ - **DEFAULT** Pacing is cut-driven: a new visual beat at least every ~4s; static
74
+ holds >4s need motion inside the frame (reframe push, kenBurns, animated
75
+ card) or they die.
76
+ - **DEFAULT** Ends on a deliberate beat: tagline, logo, or CTA lockup — not a
77
+ clip running out.
78
+ - **SHOULD** Cuts land on the music grid when a bed exists.
79
+
80
+ ## 2. Launch film / feature announcement — 16:9 · 30–90s
81
+
82
+ - **DEFAULT** Payoff-first hook: the OUTCOME, not the feature name
83
+ ("Close the books two days faster" beats "Introducing the reconciliation
84
+ module"). No throat-clearing ("in this video we're going to…").
85
+ - **DEFAULT** Narration or a bed that builds toward the reveal; pacing tightens
86
+ as the payoff approaches.
87
+ - **DEFAULT** Real product surface: actual UI/screens/output — never mocked.
88
+ - **DEFAULT** End card with a single CTA.
89
+ - **DEFAULT** Captions present when narrated.
90
+
91
+ ## 3. Brand-identity reel — 9:16 · 12–20s (the showcase class)
92
+
93
+ Everything in §1, plus:
94
+ - **DEFAULT** Three-beat arc: opening brand moment (wordmark treatment) →
95
+ middle craft/proof beat (the subject's world, with an editorial device —
96
+ numbered chapter, pull-quote, stat) → closing tagline lockup.
97
+ - **DEFAULT** Every graphic is bespoke to the brand: its type, its palette as
98
+ fields, its layout system. **Consider:** any layout that would look correct with
99
+ another brand's hex swapped in.
100
+ - **DEFAULT** Footage color and brand palette agree — grade toward the palette
101
+ or choose footage that lives in it.
102
+
103
+ ## 4. Talking-head clip — any aspect · 15–60s
104
+
105
+ - **DEFAULT** Hook = the strongest sentence, first. Cut TO the moment;
106
+ never open on wind-up.
107
+ - **DEFAULT** Active-speaker reframe (`focus: active-speaker` / `face`) — a
108
+ moving camera, not a static center crop.
109
+ - **DEFAULT** Captions timed to the saved edited timeline (`captions.fromComposition`
110
+ after the clip edits; re-run after later edits). Speech clips must have saved duration matching playable source duration divided by
111
+ playbackRate.
112
+ The focused behind-the-speaker LOOK is an overlay text layer at
113
+ `zPlane:"behind-subject"` where the footage allows. Use caption-layer
114
+ `zPlane:"behind-subject"` only when the user explicitly wants every running
115
+ caption behind the speaker and the legibility gate accepts it.
116
+ - **DEFAULT** Dead air and false starts cut (`addExcludedRange` /
117
+ `cutAndRipple`).
118
+
119
+ ## Scoring discipline
120
+
121
+ Check the requested criteria against appropriate real evidence: affected stills, continuous motion and audio when relevant. Broader review can use `score_composition` when useful and within budget; it is not mandatory for a scoped correction. The hosted judge includes a fixed caption criterion and can penalize intentionally uncaptioned work; do not add captions solely to improve that score. These skill changes do not change judge behavior. Failed user acceptance criteria remain failures regardless of score. Stop and report remaining gaps after two passes without improvement; export only for requested final delivery.
@@ -0,0 +1,6 @@
1
+ interface:
2
+ display_name: "Video-Craft Standards — what \"finished\" means"
3
+ short_description: "Craft defaults and applicable review checklists for CueFrame videos (social…"
4
+ icon_small: "./assets/icon.svg"
5
+ icon_large: "./assets/icon.svg"
6
+ default_prompt: "Use $video-craft-standards to craft defaults and applicable review checklists for CueFrame videos (social reel, launch film, brand reel, talking-head clip)."
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cueframe/skills",
3
- "version": "0.1.0",
4
- "description": "CueFrame agent skills and plugin manifests for Claude Code, Codex and MCP clients.",
3
+ "version": "0.1.2",
4
+ "description": "CueFrame agent skills: the SKILL.md tree the CueFrame plugin ships, packaged for programs that copy or embed the skills.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
7
7
  "exports": {
@@ -12,46 +12,27 @@
12
12
  "./package.json": "./package.json"
13
13
  },
14
14
  "files": [
15
- "skills",
15
+ "dist",
16
16
  "skills-dir.js",
17
- "AGENTS.md",
18
- "glama.json",
19
- "plugin.json",
20
17
  "skills-dir.d.ts",
21
- ".claude-plugin",
22
- ".mcp.json",
23
- "hooks",
24
- ".codex-plugin",
25
- ".agents",
26
- "mcp.json",
27
- ".cursor-plugin",
28
- "rules",
29
- "gemini-extension.json",
30
- "skills.sh.json",
31
- "llms-install.md",
32
- "assets",
33
18
  "README.md",
34
19
  "LICENSE",
35
20
  "NOTICE"
36
21
  ],
37
- "scripts": {
38
- "build": "node scripts/sync-versions.mjs && node scripts/sync-openai-yaml.mjs",
39
- "check": "node scripts/validate.mjs",
40
- "test": "node scripts/validate.mjs",
41
- "prepublishOnly": "npm run build && npm run check"
42
- },
43
22
  "publishConfig": {
44
23
  "access": "public"
45
24
  },
46
25
  "repository": {
47
26
  "type": "git",
48
- "url": "git+https://github.com/cueframe-ai/cueframe-skills.git"
27
+ "url": "git+https://github.com/cueframe-ai/cueframe-mcp.git",
28
+ "directory": "packages/skills"
49
29
  },
50
30
  "homepage": "https://docs.cueframe.ai",
51
31
  "engines": {
52
32
  "node": ">=24"
53
33
  },
54
- "devDependencies": {
55
- "yaml": "^2.8.0"
34
+ "scripts": {
35
+ "build": "node scripts/build.mjs",
36
+ "check": "node scripts/check.mjs"
56
37
  }
57
- }
38
+ }
package/skills-dir.d.ts CHANGED
@@ -1 +1,2 @@
1
+ /** Absolute path, with a trailing separator, of the directory holding one subdirectory per skill. */
1
2
  export declare const SKILLS_DIR: string;
package/skills-dir.js CHANGED
@@ -1,2 +1,3 @@
1
1
  import { fileURLToPath } from 'node:url';
2
- export const SKILLS_DIR = fileURLToPath(new URL('./skills/', import.meta.url));
2
+ // The published tree: dist/skills is a build-time copy of the repository's root skills/ directory.
3
+ export const SKILLS_DIR = fileURLToPath(new URL('./dist/skills/', import.meta.url));
@@ -1,12 +0,0 @@
1
- {
2
- "name": "cueframe",
3
- "interface": { "displayName": "CueFrame" },
4
- "plugins": [
5
- {
6
- "name": "cueframe",
7
- "source": { "source": "local", "path": "./" },
8
- "policy": { "installation": "AVAILABLE", "authentication": "ON_INSTALL" },
9
- "category": "Creativity"
10
- }
11
- ]
12
- }
@@ -1,6 +0,0 @@
1
- {
2
- "name": "cueframe",
3
- "owner": { "name": "CueFrame", "url": "https://cueframe.ai" },
4
- "metadata": { "description": "Official CueFrame agent skills for composing, editing and rendering video." },
5
- "plugins": [{ "name": "cueframe", "source": "./", "description": "Make and edit videos with CueFrame: composition, motion graphics, captions, clipping and rendering skills, plus the hosted MCP server.", "category": "media" }]
6
- }
@@ -1,15 +0,0 @@
1
- {
2
- "name": "cueframe",
3
- "displayName": "CueFrame",
4
- "version": "0.1.0",
5
- "description": "Make and edit videos with CueFrame: composition, motion graphics, captions, clipping and rendering skills, plus the hosted MCP server.",
6
- "author": { "name": "CueFrame, Inc.", "url": "https://cueframe.ai" },
7
- "homepage": "https://docs.cueframe.ai",
8
- "repository": "https://github.com/cueframe-ai/cueframe-skills",
9
- "license": "Apache-2.0",
10
- "keywords": ["video", "video-editing", "motion-graphics", "captions", "rendering", "mcp"],
11
- "documentationUrl": "https://docs.cueframe.ai",
12
- "supportUrl": "https://github.com/cueframe-ai/cueframe-skills/issues",
13
- "privacyPolicyUrl": "https://cueframe.ai/privacy",
14
- "termsOfServiceUrl": "https://cueframe.ai/terms"
15
- }