@scenerok/sdk 0.27.0 → 0.28.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/package.json +1 -1
- package/skills/scenerok/SKILL.md +69 -54
- package/skills/scenerok/references/animations-picker.md +1 -1
- package/skills/scenerok/references/catalog-index.json +2855 -1
- package/skills/scenerok/references/choosing.md +111 -0
- package/skills/scenerok/references/look-and-feel.md +25 -18
- package/skills/scenerok/references/plugins.md +5 -4
- package/skills/scenerok/references/recipes.md +10 -8
- package/skills/scenerok/references/repertoire.md +1493 -0
- package/skills/scenerok/references/shaders-filters.md +1 -1
- package/skills/scenerok/references/vidscript-guide.md +2 -2
- package/skills/scenerok/references/vidscript-strict.md +4 -4
- package/skills/scenerok/references/workflow.md +3 -3
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Choosing tools for a beat
|
|
2
|
+
|
|
3
|
+
SceneRok's blocks, motion, transitions, filters and media are a repertoire,
|
|
4
|
+
not a checklist. Nothing is required, nothing is decoration by default: each
|
|
5
|
+
beat gets what its job calls for. `repertoire.md` says what every tool looks
|
|
6
|
+
like, what it is for, and what it fights. This file is how to use that.
|
|
7
|
+
|
|
8
|
+
## The procedure
|
|
9
|
+
|
|
10
|
+
For each beat:
|
|
11
|
+
|
|
12
|
+
1. **Name its job** with one word from the job list in `repertoire.md`
|
|
13
|
+
(announce, count, quote, code, prove, demo, establish, cta, ...), and the one
|
|
14
|
+
thing the viewer must take away.
|
|
15
|
+
2. **Put the material on the table.** What do you actually have for this beat:
|
|
16
|
+
the source's photos, screenshots, footage, logo, the exact numbers and words?
|
|
17
|
+
You can only choose a picture you have looked at.
|
|
18
|
+
3. **List the candidates** under that job in `repertoire.md` → Find tools by job.
|
|
19
|
+
Plain `text` and "nothing extra" are always candidates.
|
|
20
|
+
4. **Drop what fights.** Read each candidate's *Fights* against your content
|
|
21
|
+
(length of the words, busyness of the picture), its neighbours (the beat
|
|
22
|
+
before and after, anything else moving) and the frame (9:16 or 16:9: read
|
|
23
|
+
*Fit*).
|
|
24
|
+
5. **Choose by the look.** Read *Looks* for the survivors and pick the frame you
|
|
25
|
+
want the viewer to see. When two would do, take the simpler.
|
|
26
|
+
6. **Write one line**: `<beat>: <tool> because <reason>`. If you can't finish
|
|
27
|
+
the sentence, choose something plainer.
|
|
28
|
+
7. **Verify by looking.** After rendering, open a frame of that beat. If it
|
|
29
|
+
doesn't look like the *Looks* you chose for, the description or your
|
|
30
|
+
placement is wrong. Fix the placement, and report the description.
|
|
31
|
+
|
|
32
|
+
## When plain text on a still frame is right, and when it is not
|
|
33
|
+
|
|
34
|
+
Right, when:
|
|
35
|
+
|
|
36
|
+
- the words are the content: a quote, a definition, a price, a command, a
|
|
37
|
+
legal line;
|
|
38
|
+
- the viewer needs reading time, and anything moving would compete;
|
|
39
|
+
- the design is typographic on purpose (a brand that speaks in type);
|
|
40
|
+
- there is no honest picture: an abstract claim, an internal change with no
|
|
41
|
+
UI. A stock or generated image would only pretend.
|
|
42
|
+
|
|
43
|
+
Wrong, when:
|
|
44
|
+
|
|
45
|
+
- the source has pictures that show the thing (a product page, an app, a repo
|
|
46
|
+
with a UI) and the beat's job is demo, prove or establish;
|
|
47
|
+
- several beats in a row are text on the same flat colour, so the video turns
|
|
48
|
+
into a slideshow;
|
|
49
|
+
- the text says what a picture could show ("sleek design", "easy to use").
|
|
50
|
+
|
|
51
|
+
The same goes for motion: a still frame is right when the eye should rest.
|
|
52
|
+
Motion is for arrival, emphasis and time passing, and one moving thing at a
|
|
53
|
+
time is easier to follow than three.
|
|
54
|
+
|
|
55
|
+
## Worked choices
|
|
56
|
+
|
|
57
|
+
**Product promo, hook (9:16).** Job: establish. Material: three lifestyle
|
|
58
|
+
photos from the product page, a 500 px hero shot on white. Candidates: a page
|
|
59
|
+
photo, `xai.imagine`, `animations.liquid_glass_notification`, `text`.
|
|
60
|
+
Dropped: `xai.imagine` fights facts (it would invent a different robot); the
|
|
61
|
+
liquid-glass block is fixed artwork in rainbow colours. Chosen: the lifestyle
|
|
62
|
+
photo as a band over a blurred copy of itself, with a 3 s push, because a still
|
|
63
|
+
held for 3 s reads as a slide and the push gives it time. Headline: `text`
|
|
64
|
+
with `riseIn`.
|
|
65
|
+
|
|
66
|
+
**Customer review (any aspect).** Job: quote. Material: one two-sentence review
|
|
67
|
+
from the page. Candidates: `text_typewriter_quote`, `x_post`, `reddit_post`,
|
|
68
|
+
`text`. Dropped: `x_post` and `reddit_post` would dress the review as a post on
|
|
69
|
+
a platform it never appeared on; the typewriter takes three seconds to type
|
|
70
|
+
what a reader takes two to read. Chosen: plain `text` on a flat dark frame with
|
|
71
|
+
a muted attribution, no motion, held 5 s.
|
|
72
|
+
|
|
73
|
+
**Breaking change in release notes.** Job: announce. Material: one sentence
|
|
74
|
+
from the changelog. Chosen: plain `text`, no entrance, no grade change, held
|
|
75
|
+
4 s. Gravity is the point; any flourish would make a warning read like
|
|
76
|
+
marketing. Nothing else was considered necessary, and that is a valid outcome
|
|
77
|
+
of step 3.
|
|
78
|
+
|
|
79
|
+
**A stat (9:16).** Job: count. Material: "12 bug fixes" counted from the
|
|
80
|
+
release body. Candidates: `text_counter_stat`, `apple_money_count`, `text` with
|
|
81
|
+
`popIn`. Dropped: `apple_money_count` is money on a white slab. Chosen:
|
|
82
|
+
`text_counter_stat` with `suffix: ""` (its default `+` would turn 12 into
|
|
83
|
+
"12+", which is false).
|
|
84
|
+
|
|
85
|
+
**Code in 9:16.** Job: code. Material: a five-line before/after. Candidates:
|
|
86
|
+
`code_typing`, `code_diff`, a `code_snippet_*` theme, `text` lines. Dropped:
|
|
87
|
+
`code_typing` (in 9:16 its code shrinks to about 17 px). Chosen: `code_diff`,
|
|
88
|
+
which has its own 9:16 layout and keeps the removed line on screen with
|
|
89
|
+
`keep_removed: true`, so the change reads as a before/after. Its *Looks* says it
|
|
90
|
+
sits in the upper half, so the beat's headline goes in the empty lower half
|
|
91
|
+
instead of on top of the code.
|
|
92
|
+
|
|
93
|
+
**Cut between two lifestyle shots in a calm promo.** Job: transition.
|
|
94
|
+
Candidates: every `tr.*`, and a hard cut. Dropped: everything whose *Fights*
|
|
95
|
+
says "calm or premium edits"; `flash` (flicker). Chosen: a hard cut, because
|
|
96
|
+
the shots differ enough to read as a new beat. `dissolve` only if the two shots
|
|
97
|
+
share a subject. A transition is a candidate, not a default.
|
|
98
|
+
|
|
99
|
+
**Talking head, key line.** Job: emphasize. Material: a 16:9 interview, the
|
|
100
|
+
line "it paid for itself". Candidates: a punch-in (scale the clip),
|
|
101
|
+
`text_kinetic_words`, `blend_caption`, `text_glitch_title`. Dropped: kinetic
|
|
102
|
+
words fight a sentence that must be read whole; glitch fights the tone.
|
|
103
|
+
Chosen: a punch-in on the speaker with a two-word caption card in the accent
|
|
104
|
+
colour.
|
|
105
|
+
|
|
106
|
+
## Before you trust a description
|
|
107
|
+
|
|
108
|
+
The records come from the block source and the catalog previews. Some previews
|
|
109
|
+
predate a block's 9:16 layout, and a few are blank (see each record's *Fit*).
|
|
110
|
+
When a choice rests on a block you have never seen rendered, render a short
|
|
111
|
+
test or look at its preview before building the video around it.
|
|
@@ -58,13 +58,16 @@ than it predicts, so check the rendered frame before trusting a line to fit.
|
|
|
58
58
|
|
|
59
59
|
## Pictures
|
|
60
60
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
61
|
+
Whether a beat gets a picture is a choice (`choosing.md`). When it does, the
|
|
62
|
+
sources rank like this:
|
|
63
|
+
|
|
64
|
+
1. **Real**: product photos, logos, app screenshots, footage, screen
|
|
65
|
+
recordings. They prove things; nothing else does.
|
|
66
|
+
2. **Generated**: `xai.image`, `xai.imageToVideo` from a real photo,
|
|
67
|
+
`xai.imagine` (`ai-models.md`; prompts forbid text). They set a mood and
|
|
68
|
+
invent everything else.
|
|
66
69
|
3. **Made**: a brand-colour glow or gradient rendered with ffmpeg (recipes →
|
|
67
|
-
Release notes)
|
|
70
|
+
Release notes). Atmosphere without a subject.
|
|
68
71
|
|
|
69
72
|
Placing stills in a frame of a different shape:
|
|
70
73
|
|
|
@@ -112,15 +115,17 @@ which needs no file.
|
|
|
112
115
|
|
|
113
116
|
## Motion
|
|
114
117
|
|
|
115
|
-
|
|
118
|
+
When you do use motion, these timings read well. What each primitive looks
|
|
119
|
+
like is in `repertoire.md`.
|
|
120
|
+
|
|
121
|
+
| Phase | Typical choice | Timing |
|
|
116
122
|
| --- | --- | --- |
|
|
117
123
|
| Entrance | `motion.riseIn(0.5s, 40-80)` for copy and cards, `motion.popIn(0.4-0.6s)` for prices, buttons, logos, `motion.typewriter` for code, `motion.fadeIn(0.4s)` for secondary lines | Stagger items 0.3-0.6 s apart |
|
|
118
|
-
| Hold |
|
|
119
|
-
| Exit | `motion.fadeOut(0.3s)`
|
|
124
|
+
| Hold | Nothing (rest the eye), or a push on a still `{ type: "scale", from: { scale: 1 }, to: { scale: 1.08 }, easing: "linear" }`, or `motion.float(3s, 10-14)` on a logo or product | A still hold beyond ~3 s should be one you meant: reading time, gravity |
|
|
125
|
+
| Exit | A cut, or `motion.fadeOut(0.3s)` when the element should leave softly | The last 0.3 s of the block |
|
|
120
126
|
|
|
121
|
-
A push on a soft gradient
|
|
122
|
-
|
|
123
|
-
(`editing-actions.md`).
|
|
127
|
+
A push on a soft gradient is invisible, so it adds nothing. Fast moves can take
|
|
128
|
+
`motion_blur:` (`editing-actions.md`).
|
|
124
129
|
|
|
125
130
|
## Pacing
|
|
126
131
|
|
|
@@ -129,11 +134,13 @@ or a floating element to move. Fast moves can take `motion_blur:`
|
|
|
129
134
|
- One idea per beat: the hook, the product, three features, the price, and the call to action.
|
|
130
135
|
- Close on the call to action for at least 2.5 s.
|
|
131
136
|
|
|
132
|
-
## What premium
|
|
137
|
+
## What premium tends to mean
|
|
138
|
+
|
|
139
|
+
Tendencies, not requirements; each is a choice you can argue against.
|
|
133
140
|
|
|
134
|
-
-
|
|
141
|
+
- Real pictures where the subject has them; type alone where the words are the point.
|
|
135
142
|
- One accent, used sparingly; everything else is ink and muted on dark (or the reverse).
|
|
136
|
-
- Big type with tight copy: 3-6 words a line,
|
|
137
|
-
-
|
|
138
|
-
-
|
|
139
|
-
- Sound
|
|
143
|
+
- Big type with tight copy: 3-6 words a line, rarely a paragraph.
|
|
144
|
+
- Restraint: one thing moving at a time, consistent entrances, stillness where the eye should rest.
|
|
145
|
+
- A grade only if the pictures need tying together: `filter "cdl"` warmth or coolness, a `vignette` of about 0.3.
|
|
146
|
+
- Sound that fits the use: many feeds play muted, so the picture must work without it.
|
|
@@ -7,10 +7,11 @@ cheaper than hand-composing. **Never assume which plugins exist** — discover
|
|
|
7
7
|
them at run time; the catalog grows and changes.
|
|
8
8
|
|
|
9
9
|
Plugins are the reuse-first path: check `intent-router.md` for the workflow
|
|
10
|
-
match.
|
|
11
|
-
first
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
match. Review a plugin's video with the same questions as your own (`SKILL.md` →
|
|
11
|
+
Review). Draft first and read the filled script. Today the first-party
|
|
12
|
+
`listing-promo` and `release-video` templates set every beat as text over a
|
|
13
|
+
flat colour and leave the product images unused. When the request calls for
|
|
14
|
+
more, change those beats before `render-draft`.
|
|
14
15
|
|
|
15
16
|
## Workflow (MCP)
|
|
16
17
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# Recipes
|
|
2
2
|
|
|
3
|
-
Three complete scripts
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
Three complete scripts, each rendered and reviewed. They show one set of
|
|
4
|
+
choices for one brief; the comments say why each tool is there, so you can tell
|
|
5
|
+
which choices carry over to yours and which don't. Choose for your own beats
|
|
6
|
+
with `choosing.md`.
|
|
7
7
|
|
|
8
8
|
## Product promo (9:16, 15 s)
|
|
9
9
|
|
|
@@ -38,7 +38,8 @@ input roomBg = "room-bg.jpg" # 1080x1920, same shot, blurred + darkened
|
|
|
38
38
|
input closeBand = "closeup-band.jpg" # 1080x368
|
|
39
39
|
input closeBg = "closeup-bg.jpg" # 1080x1920
|
|
40
40
|
|
|
41
|
-
#
|
|
41
|
+
# A slow push on the stills: these photos hold 3-4 s each, and a push keeps a held
|
|
42
|
+
# photo from reading as a slide.
|
|
42
43
|
let push = { type: "scale", from: { scale: 1 }, to: { scale: 1.08 }, easing: "linear" }
|
|
43
44
|
|
|
44
45
|
# 1. Hook (0-3 s): lifestyle shot; the headline lands in the first second.
|
|
@@ -164,9 +165,10 @@ output to "release.mp4", resolution: "1080x1920", fps: 30, background: "#0B0B0F"
|
|
|
164
165
|
|
|
165
166
|
`validate` warns `crowded-text-overlays` and `too-many-animations` on the
|
|
166
167
|
code card, because each code line counts as an overlay. Accept those two
|
|
167
|
-
there; fix any other warning.
|
|
168
|
-
|
|
169
|
-
|
|
168
|
+
there; fix any other warning. This recipe builds its own code card so the
|
|
169
|
+
headline, card and caption can share one frame. The `code_snippet_*` themes and
|
|
170
|
+
`code_diff` also have 9:16 layouts of their own (see their records in
|
|
171
|
+
`repertoire.md`): reach for them when the code is the whole beat.
|
|
170
172
|
|
|
171
173
|
## Talking head with captions (9:16, 14 s)
|
|
172
174
|
|