@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
package/package.json
CHANGED
package/skills/scenerok/SKILL.md
CHANGED
|
@@ -35,15 +35,16 @@ Copy this checklist into your notes and work through it:
|
|
|
35
35
|
|
|
36
36
|
```text
|
|
37
37
|
- [ ] 1. Identify the environment (web editor, CLI, ChatGPT, MCP, chat without tools)
|
|
38
|
-
- [ ] 2.
|
|
39
|
-
- [ ] 3.
|
|
40
|
-
|
|
41
|
-
- [ ] 4.
|
|
42
|
-
- [ ] 5.
|
|
43
|
-
- [ ] 6.
|
|
38
|
+
- [ ] 2. List the beats. For each: its job and the one thing the viewer takes away
|
|
39
|
+
- [ ] 3. Put the material on the table before choosing: the source's own pictures,
|
|
40
|
+
screenshots, logo, footage, numbers, words. Probe each file
|
|
41
|
+
- [ ] 4. Choose each beat's tools with choosing.md; write one line of why per beat
|
|
42
|
+
- [ ] 5. Decide the look (palette, fonts, sizes) as `let`s: look-and-feel.md
|
|
43
|
+
- [ ] 6. Write the script (recipes.md has complete ones). Validate: fix every error;
|
|
44
|
+
read every aesthetic warning as a question about your choice
|
|
44
45
|
- [ ] 7. Uses TTS or generated media: deep-validate and fix the report (CLI only)
|
|
45
|
-
- [ ] 8. Render, pull one frame per beat, look
|
|
46
|
-
- [ ] 9. Fix what the frames show and render again
|
|
46
|
+
- [ ] 8. Render, pull one frame per beat, look, and answer the review questions
|
|
47
|
+
- [ ] 9. Fix what the frames show and render again
|
|
47
48
|
```
|
|
48
49
|
|
|
49
50
|
With the CLI:
|
|
@@ -58,12 +59,12 @@ scenerok lint-video <render-id> --cost medium --json # billed
|
|
|
58
59
|
`scenerok render script.vid --validate` renders and checks the MP4 in one step.
|
|
59
60
|
|
|
60
61
|
With marketplace plugins: search, inspect, dry-run, then run a pinned ref
|
|
61
|
-
(full workflow in [plugins.md](references/plugins.md)).
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
`scenerok plugin
|
|
66
|
-
|
|
62
|
+
(full workflow in [plugins.md](references/plugins.md)). Review a plugin's
|
|
63
|
+
output with the same questions as your own work. Today the first-party
|
|
64
|
+
`listing-promo` and `release-video` templates set every beat as text over a
|
|
65
|
+
flat colour and leave the product images unused. When the request calls for
|
|
66
|
+
more, draft (`scenerok plugin draft … --out draft.vid`), change the beats that
|
|
67
|
+
need it, then `scenerok plugin render-draft <id> --vidscript draft.vid`.
|
|
67
68
|
|
|
68
69
|
```bash
|
|
69
70
|
scenerok plugin search "product promo"
|
|
@@ -101,42 +102,46 @@ ChatGPT, and MCP have their own validate and render calls but no deep
|
|
|
101
102
|
validation or MP4 check, and can't read local files:
|
|
102
103
|
[environments.md](references/environments.md).
|
|
103
104
|
|
|
104
|
-
##
|
|
105
|
-
|
|
106
|
-
`validate` tells you the script is valid
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
1. **
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
2. **
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
5. **
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
a fallback font, empty bands. Then render again. Validate's text sizes are
|
|
132
|
-
estimates, so only the frames show the real result.
|
|
105
|
+
## Review: look, then ask
|
|
106
|
+
|
|
107
|
+
`validate` tells you the script is valid. Only the rendered frames tell you
|
|
108
|
+
whether the video works. Render, pull one frame per beat, open the frames, and
|
|
109
|
+
ask:
|
|
110
|
+
|
|
111
|
+
1. **Does each beat do its job at a glance?** A viewer on a phone with the sound
|
|
112
|
+
off gets the beat's point in under two seconds. If not, the job is unclear
|
|
113
|
+
or the tool fights the content.
|
|
114
|
+
2. **Is every element a choice?** For each picture, motion, transition, grade
|
|
115
|
+
and sound, you can say what it does for its beat. If the honest answer is
|
|
116
|
+
"the recipe had one", cut it. A beat of plain text on a still frame is a
|
|
117
|
+
good choice when you can say why (see `choosing.md`).
|
|
118
|
+
3. **Did you look at what the source offered?** If the user gave a page, a repo,
|
|
119
|
+
footage or a brand, put its pictures on the table before choosing. Not using
|
|
120
|
+
them can be right. Never having looked is the failure that produced
|
|
121
|
+
text-only videos.
|
|
122
|
+
4. **Can it be read?** Text is at least 2.2 % of the frame height (44 px at
|
|
123
|
+
1920), inside the safe area, contrasted against what is behind it, and on
|
|
124
|
+
screen long enough to read.
|
|
125
|
+
5. **Does the frame match your intent?** Look for wrapped or colliding text,
|
|
126
|
+
black boxes where a picture should be, fallback fonts, letterbox bands, a
|
|
127
|
+
block smaller than you pictured.
|
|
128
|
+
6. **Is it true?** Every claim, price and number comes from the source.
|
|
129
|
+
|
|
130
|
+
Questions 4 and 6 are facts, not taste: fix them. The rest call for judgement.
|
|
131
|
+
Answer them, change what you would defend poorly, and render again.
|
|
133
132
|
|
|
134
133
|
```bash
|
|
135
134
|
for t in 1.5 5 9 13; do ffmpeg -loglevel error -y -ss $t -i out.mp4 -frames:v 1 frame-$t.png; done
|
|
136
135
|
```
|
|
137
136
|
|
|
138
|
-
|
|
139
|
-
|
|
137
|
+
A diagnostic you can run when you intended motion: this lists every stretch
|
|
138
|
+
of 3 s or more where the picture doesn't change (a `freeze_start` with no
|
|
139
|
+
`freeze_end` runs to the end). A held quote, price or line of code can be
|
|
140
|
+
right, so treat the list as information, not a verdict.
|
|
141
|
+
`ffmpeg -hide_banner -i out.mp4 -vf freezedetect=n=0.003:d=3 -map 0:v -f null - 2>&1 | grep freeze_`
|
|
142
|
+
|
|
143
|
+
Without a shell (web editor, ChatGPT, MCP), ask questions 1-4 and 6 of the
|
|
144
|
+
script itself, and have the user watch the preview.
|
|
140
145
|
|
|
141
146
|
## Rules that prevent most failures
|
|
142
147
|
|
|
@@ -168,7 +173,9 @@ Read the ones the task needs. Paths are relative to this file.
|
|
|
168
173
|
|
|
169
174
|
| Task | Read |
|
|
170
175
|
| --- | --- |
|
|
171
|
-
| Any video | [
|
|
176
|
+
| Any video | [choosing.md](references/choosing.md) (always): how to pick tools for a beat, with worked choices |
|
|
177
|
+
| What a tool looks like, is for, and fights; tools by job | [repertoire.md](references/repertoire.md) (generated; search it by job or name) |
|
|
178
|
+
| Complete scripts to adapt; palette, type scale, safe areas, sourcing pictures | [recipes.md](references/recipes.md), [look-and-feel.md](references/look-and-feel.md) |
|
|
172
179
|
| Any VidScript | [vidscript-strict.md](references/vidscript-strict.md) (always) |
|
|
173
180
|
| Editing and compositing: trims, speed, reverse, freeze, picture-in-picture, blend modes, masks, crops, split screens, audio mixing and ducking, grading and LUTs, captions, timecode | [editing-actions.md](references/editing-actions.md) |
|
|
174
181
|
| Full grammar | [vidscript-guide.md](references/vidscript-guide.md) |
|
|
@@ -196,25 +203,33 @@ chat apps are there too: `consumer-chat-apps.md`,
|
|
|
196
203
|
`chatgpt-gpt-instructions.md`, `gemini-gem-instructions.md`, `grok-skill.md`.
|
|
197
204
|
Previews of every catalog item: https://scenerok.com/catalog.
|
|
198
205
|
|
|
199
|
-
##
|
|
206
|
+
## Two beats, two choices
|
|
200
207
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
208
|
+
Each beat gets the tools its job calls for and nothing else. Below, an
|
|
209
|
+
"establish" beat uses a real photo: the push gives a 4 s still a sense of time.
|
|
210
|
+
A "quote" beat is plain text on a flat colour with no motion, because the words
|
|
211
|
+
are the content and the reader needs to be left alone with them. Both are
|
|
212
|
+
finished. `choosing.md` walks through more choices like these.
|
|
204
213
|
|
|
205
214
|
```vidscript
|
|
206
215
|
import motion from "@scenerok/basic-animations"
|
|
207
216
|
|
|
217
|
+
let bg = "#0A0C10"
|
|
208
218
|
let ink = "#F4F6FA"
|
|
219
|
+
let muted = "#A3ADBD"
|
|
209
220
|
let display = "Archivo Black"
|
|
221
|
+
let body = "Inter"
|
|
210
222
|
|
|
211
223
|
input shot = "https://cdn.example.com/product-lifestyle.jpg" # 1080x1920, probed
|
|
212
|
-
input bed = "https://cdn.example.com/music.mp3"
|
|
213
224
|
|
|
225
|
+
# Establish: the product in its place. A slow push, a headline that arrives.
|
|
214
226
|
[0s .. 4s] = shot, width: 1080, height: 1920, x: 0, y: 0, animate: { type: "scale", from: { scale: 1 }, to: { scale: 1.08 }, easing: "linear" }
|
|
215
|
-
[0.2s .. 4s] = text "Cleans while you're out", font: display, size: 96, color: ink, x: "50%", y: "28%", max_width: "86%", align: center, shadow_color: "#000000", shadow_blur: 24, animate:
|
|
216
|
-
|
|
217
|
-
|
|
227
|
+
[0.2s .. 4s] = text "Cleans while you're out", font: display, size: 96, color: ink, x: "50%", y: "28%", max_width: "86%", align: center, shadow_color: "#000000", shadow_blur: 24, animate: motion.riseIn(0.5s, 60)
|
|
228
|
+
|
|
229
|
+
# Quote: someone's words, held still long enough to read twice.
|
|
230
|
+
[4s .. 9s] = solid(bg)
|
|
231
|
+
[4s .. 9s] = text "\"Simplicity is the ultimate sophistication.\"", font: body, size: 64, color: ink, x: "50%", y: "45%", max_width: "80%", align: center
|
|
232
|
+
[4s .. 9s] = text "Leonardo da Vinci (attributed)", font: body, size: 44, color: muted, x: "50%", y: "56%", align: center
|
|
218
233
|
output to "video.mp4", resolution: "1080x1920", fps: 30
|
|
219
234
|
```
|
|
220
235
|
|
|
@@ -52,7 +52,7 @@ Param resolution: **named > positional > default**.
|
|
|
52
52
|
| Maps / liquid-glass / app-showcase | Ignore user params | Use for demo aesthetic only, or hand-author |
|
|
53
53
|
| Adapter blocks | No inline audio/text siblings | Put `audio`, `text`, `filter` on separate time blocks |
|
|
54
54
|
| `logo_outro` | Renders upstream demo's Figma-style mark when no logo param given | Pass `brand: "scenerok"` or `logoUrl: "<image url>"` |
|
|
55
|
-
|
|
|
55
|
+
| Most blocks in 9:16 | Designed at 1920x1080 and scaled to fit: 56 % size in a centred band. The `code_snippet_*` VS Code themes, `code_diff` and most lower thirds have their own 9:16 layouts | Each record in `repertoire.md` says how it behaves at 9:16 |
|
|
56
56
|
| `text_counter_stat` | `suffix` defaults to `"+"`, so 12 reads "12+" | Pass `suffix: ""` unless the number really is a floor |
|
|
57
57
|
|
|
58
58
|
## Two-phase compose recipe
|