@scenerok/cli 2.2.0 → 2.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.
- package/README.md +6 -6
- package/dist/commands/skills.d.ts.map +1 -1
- package/dist/commands/skills.js +31 -25
- package/dist/utils/skillsManifest.d.ts +13 -3
- package/dist/utils/skillsManifest.d.ts.map +1 -1
- package/dist/utils/skillsManifest.js +35 -12
- package/examples/system/rokmilk-chocolate-promo.vid +1 -1
- package/examples/system/voice-visual-promo.vid +1 -1
- package/package.json +3 -3
- package/skills/scenerok/SKILL.md +147 -0
- package/skills/{remote → scenerok/references}/ai-models.md +1 -2
- package/skills/{remote → scenerok/references}/animations-catalog.md +139 -2
- package/skills/{remote → scenerok/references}/animations-picker.md +12 -1
- package/skills/{remote → scenerok/references}/brand-setup.md +3 -1
- package/skills/{remote → scenerok/references}/catalog-index.json +163 -19
- package/skills/scenerok/references/editing-actions.md +518 -0
- package/skills/{remote → scenerok/references}/environments.md +23 -24
- package/skills/{remote → scenerok/references}/intent-router.md +5 -15
- package/skills/{remote → scenerok/references}/media-stdlib.md +2 -3
- package/skills/{remote → scenerok/references}/music.md +2 -21
- package/skills/{remote → scenerok/references}/sdk-guide.md +2 -2
- package/skills/{remote → scenerok/references}/shaders-filters.md +9 -6
- package/skills/{remote → scenerok/references}/text-styles.md +15 -35
- package/skills/{remote → scenerok/references}/transitions-catalog.md +2 -0
- package/skills/{remote → scenerok/references}/tts.md +4 -22
- package/skills/{remote → scenerok/references}/vidscript-guide.md +202 -55
- package/skills/scenerok/references/vidscript-sample.md +44 -0
- package/skills/{remote → scenerok/references}/vidscript-strict.md +41 -26
- package/skills/{remote → scenerok/references}/workflow.md +6 -7
- package/skills/remote/vidscript-sample.md +0 -28
- package/skills/shared/SKILL.md +0 -157
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Animations Catalog
|
|
2
2
|
|
|
3
|
-
All `animations.<fn>(...)` blocks from `@scenerok/animations`. Total: **
|
|
3
|
+
All `animations.<fn>(...)` blocks from `@scenerok/animations`. Total: **77** entries.
|
|
4
4
|
|
|
5
5
|
```vidscript
|
|
6
6
|
import animations from "@scenerok/animations"
|
|
@@ -51,7 +51,7 @@ import animations from "@scenerok/animations"
|
|
|
51
51
|
| `liquid_glass_media_controls` | other | yes | 8s | positional: `trackTitle` · named: `trackTitle, artist` |
|
|
52
52
|
| `liquid_glass_notification` | other | yes | 8s | positional: `title` · named: `title, body, messageText` |
|
|
53
53
|
| `liquid_glass_widgets` | other | yes | 8s | positional: `showcaseTitle` · named: `showcaseTitle, showcaseDescription` |
|
|
54
|
-
| `logo_outro` | brand | yes | 6s | positional: `tagline` · named: `tagline, url` |
|
|
54
|
+
| `logo_outro` | brand | yes | 6s | positional: `tagline` · named: `tagline, url, logoUrl, brand, accent` |
|
|
55
55
|
| `lower_third` | lower-third | yes | 5s | positional: `title, subtitle` · named: `title, subtitle` |
|
|
56
56
|
| `lower_third_bild` | lower-third | yes | 8s | positional: `title, subtitle` · named: `title, subtitle, accent, bg` |
|
|
57
57
|
| `lt_accent_underline` | lower-third | yes | 5s | positional: `title, subtitle` · named: `title, subtitle, accent, bg` |
|
|
@@ -69,6 +69,15 @@ import animations from "@scenerok/animations"
|
|
|
69
69
|
| `news_ticker` | social-card | yes | 7s | positional: `headline` · named: `desk, time, label, headline, headlineAccent, ticker` |
|
|
70
70
|
| `reddit_post` | social-card | yes | 5s | positional: `subreddit, title` · named: `subreddit, author, title, body, votes` |
|
|
71
71
|
| `spotify_card` | social-card | yes | 5s | positional: `track, artist` · named: `track, artist` |
|
|
72
|
+
| `text_counter_stat` | text-anim | yes | 5s | positional: `value, label` · named: `value, label, prefix, suffix, color, accent` |
|
|
73
|
+
| `text_glitch_title` | text-anim | yes | 5s | positional: `text` · named: `text, color` |
|
|
74
|
+
| `text_gradient_sweep` | text-anim | yes | 5s | positional: `text` · named: `text, from, to` |
|
|
75
|
+
| `text_kinetic_words` | text-anim | yes | 5s | positional: `text` · named: `text, color, accent` |
|
|
76
|
+
| `text_line_stack` | text-anim | yes | 5s | positional: `line1, line2` · named: `line1, line2, line3, color, accent` |
|
|
77
|
+
| `text_neon_flicker` | text-anim | yes | 5s | positional: `text` · named: `text, color` |
|
|
78
|
+
| `text_scramble_decode` | text-anim | yes | 5s | positional: `text` · named: `text, color, accent` |
|
|
79
|
+
| `text_typewriter_quote` | text-anim | yes | 5s | positional: `text, author` · named: `text, author, color, accent` |
|
|
80
|
+
| `text_word_cascade` | text-anim | yes | 5s | positional: `text` · named: `text, color, accent` |
|
|
72
81
|
| `tiktok_follow` | social-card | yes | 5s | positional: `displayName, handle` · named: `displayName, handle, followers, avatarUrl, url` |
|
|
73
82
|
| `ui_3d_reveal` | other | yes | 13s | positional: `heroTitle` · named: `heroTitle, outroUrl` |
|
|
74
83
|
| `vfx_iphone_device` | other | yes | 15s | positional: `imageUrl` · named: `imageUrl` |
|
|
@@ -80,10 +89,138 @@ import animations from "@scenerok/animations"
|
|
|
80
89
|
|
|
81
90
|
Blocks with `verified: no` vendor upstream demo content and may ignore user params. `scenerok validate` warns but does not error.
|
|
82
91
|
|
|
92
|
+
## Text animation blocks (`text-anim` family)
|
|
93
|
+
|
|
94
|
+
Hand-authored, fully parameterized text/typography animations — staggered word reveals,
|
|
95
|
+
scramble decode, kinetic word-per-beat typography, gradient sweeps, typed quotes, masked
|
|
96
|
+
line stacks, count-up stats, RGB-split glitch, and neon flicker. All are transparent
|
|
97
|
+
overlays (composite over video/scenes), honor every param, and scale to any output size.
|
|
98
|
+
Prefer these over hand-authoring when a headline/caption/stat treatment fits; see the
|
|
99
|
+
`text-anim` rows in `animations-picker.md` for intent mapping.
|
|
100
|
+
|
|
101
|
+
## Custom HTML (bring your own animation)
|
|
102
|
+
|
|
103
|
+
`animations.custom_html(...)` renders **your own HTML/CSS/JS** through the same HyperFrames
|
|
104
|
+
pipeline as the catalog blocks. Use it when no catalog block fits and you want to hand-author
|
|
105
|
+
an animation (or an agent generates one) using standard web tech.
|
|
106
|
+
|
|
107
|
+
```vidscript
|
|
108
|
+
import animations from "@scenerok/animations"
|
|
109
|
+
|
|
110
|
+
# Each call takes exactly ONE source:
|
|
111
|
+
[0s .. 5s] = animations.custom_html(html: "<!doctype html>...") # inline HTML
|
|
112
|
+
[5s .. 10s] = animations.custom_html(src: "https://cdn.example.com/intro.html") # remote URL
|
|
113
|
+
[10s .. 15s] = animations.custom_html(src: "./anim/hero.html") # local file
|
|
114
|
+
[15s .. 20s] = animations.custom_html(src: "scenerok://asset/123") # uploaded asset
|
|
115
|
+
|
|
116
|
+
# Sizing, timing, and author params. designWidth/designHeight: native authoring size
|
|
117
|
+
# (default = output size). timelineId: default "custom-html". Any other named arg
|
|
118
|
+
# (title, accent) is forwarded to window.__BLOCK.
|
|
119
|
+
[20s .. 24s] = animations.custom_html(src: "scenerok://asset/123", designWidth: 1920, designHeight: 1080, timelineId: "my-anim", title: "Q3 Launch", accent: "#3b82f6")
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Reserved named args (consumed by custom_html, NOT forwarded to `__BLOCK`): `src, html, mode,
|
|
123
|
+
designWidth, designHeight, width, height, fit, duration, timelineId, zBand, x, y, opacity,
|
|
124
|
+
responsive`. Every other named arg is forwarded to `window.__BLOCK[name]` (values become strings).
|
|
125
|
+
|
|
126
|
+
### Author contract (required)
|
|
127
|
+
|
|
128
|
+
Custom HTML is mounted in a **sandboxed cross-origin iframe** and driven one frame at a time.
|
|
129
|
+
Your HTML MUST:
|
|
130
|
+
|
|
131
|
+
1. Render on a **transparent** background, sized to its declared design dimensions
|
|
132
|
+
(e.g. `html,body { width:1920px; height:1080px; background:transparent; }`).
|
|
133
|
+
2. Register a **paused** GSAP timeline at `window.__timelines['<timelineId>']` (default
|
|
134
|
+
`custom-html`). The host calls `tl.seek(t, false)` per frame.
|
|
135
|
+
3. Treat `window.__HF_DURATION` (seconds) as "stay PAUSED — I am in the seek-driven host".
|
|
136
|
+
Auto-play only when it is `undefined`: `if (typeof window.__HF_DURATION === "undefined") tl.play();`.
|
|
137
|
+
4. Read author params from `window.__BLOCK` (e.g. `window.__BLOCK.title`).
|
|
138
|
+
5. Load libraries from the pinned allowlist below (or inline their source). GSAP + Three.js
|
|
139
|
+
are allowlisted; anything else must be pasted inline in a `<script>` tag.
|
|
140
|
+
|
|
141
|
+
### Allowlisted libraries (loadable via `<script src>` / `<link>`)
|
|
142
|
+
|
|
143
|
+
| Library | Pinned URL |
|
|
144
|
+
| --- | --- |
|
|
145
|
+
| GSAP | `https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js` |
|
|
146
|
+
| Three.js (jsdelivr) | `https://cdn.jsdelivr.net/npm/three@0.147.0/build/three.min.js` (+ `examples/js/…`) |
|
|
147
|
+
| Three.js (cdnjs) | `https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js` |
|
|
148
|
+
| Google Fonts | `https://fonts.googleapis.com/css2?family=…` (files from `fonts.gstatic.com`) |
|
|
149
|
+
|
|
150
|
+
Any **seekable** library works if you register it at `window.__timelines[id]` with a
|
|
151
|
+
`.seek(seconds, false)` method. anime.js needs a unit adapter: `window.__timelines={x:{seek:t=>anim.seek(t*1000)}}`.
|
|
152
|
+
Purely rAF-loop libraries with no time-scrubbing will NOT render frame-by-frame.
|
|
153
|
+
|
|
154
|
+
### Minimal working template (GSAP)
|
|
155
|
+
|
|
156
|
+
Copy-paste starting point that satisfies the whole contract — agents authoring custom
|
|
157
|
+
animations should start from this skeleton and only change the markup, styles, and tweens:
|
|
158
|
+
|
|
159
|
+
```html
|
|
160
|
+
<!doctype html>
|
|
161
|
+
<html lang="en">
|
|
162
|
+
<head>
|
|
163
|
+
<meta charset="UTF-8" />
|
|
164
|
+
<meta name="viewport" content="width=1920, height=1080" />
|
|
165
|
+
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
|
|
166
|
+
<style>
|
|
167
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
168
|
+
html, body { width: 1920px; height: 1080px; overflow: hidden; background: transparent; }
|
|
169
|
+
#hero { position: absolute; inset: 0; display: flex; align-items: center;
|
|
170
|
+
justify-content: center; font: 900 160px system-ui; color: #fff; }
|
|
171
|
+
</style>
|
|
172
|
+
</head>
|
|
173
|
+
<body>
|
|
174
|
+
<div id="hero"></div>
|
|
175
|
+
<script>
|
|
176
|
+
(function () {
|
|
177
|
+
// 1. Params arrive via window.__BLOCK (every extra named arg, stringified).
|
|
178
|
+
var B = window.__BLOCK || {};
|
|
179
|
+
document.getElementById('hero').textContent = B.title || 'Hello';
|
|
180
|
+
|
|
181
|
+
// 2. Build a PAUSED timeline; the host drives it with tl.seek(t, false) per frame.
|
|
182
|
+
window.__timelines = window.__timelines || {};
|
|
183
|
+
var tl = gsap.timeline({ paused: true });
|
|
184
|
+
tl.from('#hero', { opacity: 0, y: 80, duration: 0.8, ease: 'power3.out' }, 0);
|
|
185
|
+
tl.to('#hero', { letterSpacing: '12px', duration: 4, ease: 'none' }, 0.4);
|
|
186
|
+
|
|
187
|
+
// Optional: window.__HF_DURATION (seconds) = the mounted [start .. end] window,
|
|
188
|
+
// injected before this script runs — use it to pace beats across the full window.
|
|
189
|
+
|
|
190
|
+
window.__timelines['custom-html'] = tl; // key must match timelineId (default 'custom-html')
|
|
191
|
+
|
|
192
|
+
// 3. Standalone preview only — inside the host __HF_DURATION exists, stay paused.
|
|
193
|
+
if (typeof window.__HF_DURATION === 'undefined') tl.play();
|
|
194
|
+
})();
|
|
195
|
+
</script>
|
|
196
|
+
</body>
|
|
197
|
+
</html>
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
Gotchas: CSS `animation`/`transition` run on the wall clock and are NOT seek-driven — frames
|
|
201
|
+
render wrong or frozen; drive every visual change through the registered timeline (use finite
|
|
202
|
+
`repeat:` counts for loops, never `repeat: -1` — an infinite timeline breaks seeking). Avoid
|
|
203
|
+
`Math.random()` per frame unless keyed off seek time — the same `t` must always draw the same
|
|
204
|
+
frame (renders can revisit frames out of order).
|
|
205
|
+
|
|
206
|
+
### Security constraints
|
|
207
|
+
|
|
208
|
+
- Cross-origin sandboxed: author JS cannot reach the parent page, other surfaces, or the canvas.
|
|
209
|
+
- Strict CSP: `connect-src 'none'` — no `fetch`/`XHR`/`WebSocket` at runtime. Pass data via
|
|
210
|
+
`__BLOCK` params. Images from `data:`/`https:`. External `<script src>` blocked except the
|
|
211
|
+
allowlist above (inline other libraries). DRACO-compressed glTF unsupported (decoder fetch blocked).
|
|
212
|
+
- `mode: "inline"` is not supported (cannot be sandboxed) — it is a compile error. Blend/backdrop
|
|
213
|
+
overlays stay catalog-only.
|
|
214
|
+
- Max HTML size 512 KB.
|
|
215
|
+
|
|
83
216
|
## Usage
|
|
84
217
|
|
|
85
218
|
```vidscript
|
|
219
|
+
import animations from "@scenerok/animations"
|
|
220
|
+
|
|
86
221
|
[0s .. 6s] = animations.code_typing("const x = 1;")
|
|
222
|
+
[0s .. 5s] = animations.text_word_cascade("Make videos from plain text", accent: "#60a5fa")
|
|
223
|
+
[5s .. 9s] = animations.text_counter_stat("12500", "Downloads", suffix: "+")
|
|
87
224
|
```
|
|
88
225
|
|
|
89
226
|
See `animations-picker.md` for intent-based selection. Preview samples: https://scenerok.com/catalog#animations
|
|
@@ -27,8 +27,18 @@
|
|
|
27
27
|
| Spotify now-playing | social-card | `spotify_card` | `track`, `artist` |
|
|
28
28
|
| macOS notification | social-card | `macos_notification` | `appName`, `title`, `body?`, `timeLabel?` |
|
|
29
29
|
| news ticker / headline crawl | social-card | `news_ticker` | `headline`, `headlineAccent?`, `ticker?`, `desk?`, `time?` |
|
|
30
|
-
| logo outro / brand sting | brand | `logo_outro` | `tagline`, `url?` |
|
|
30
|
+
| logo outro / brand sting | brand | `logo_outro` | `tagline`, `url?`, `brand?` (`"scenerok"` preset) or `logoUrl?`, `accent?` |
|
|
31
|
+
| staggered word-reveal headline | text-anim | `text_word_cascade` | `text`, `color?`, `accent?` (accent tints last word) |
|
|
32
|
+
| matrix-style decode / decrypt title | text-anim | `text_scramble_decode` | `text`, `color?`, `accent?` |
|
|
33
|
+
| word-per-beat kinetic typography | text-anim | `text_kinetic_words` | `text` (space-separated words), `color?`, `accent?` |
|
|
34
|
+
| animated gradient headline | text-anim | `text_gradient_sweep` | `text`, `from?`, `to?` (gradient colors) |
|
|
35
|
+
| typed quote with attribution | text-anim | `text_typewriter_quote` | `text`, `author`, `color?`, `accent?` |
|
|
36
|
+
| 2–3 line masked title stack | text-anim | `text_line_stack` | `line1`, `line2`, `line3?`, `accent?` |
|
|
37
|
+
| count-up stat / metric | text-anim | `text_counter_stat` | `value`, `label`, `prefix?`, `suffix?`, `accent?` |
|
|
38
|
+
| RGB-split glitch title | text-anim | `text_glitch_title` | `text`, `color?` |
|
|
39
|
+
| neon sign flicker-on | text-anim | `text_neon_flicker` | `text`, `color?` (glow color) |
|
|
31
40
|
| punchy kinetic title (no block) | kinetic-type | (use `text` + `motion.*` — see `text-styles.md`) | — |
|
|
41
|
+
| no catalog block fits / author your own animation (HTML+CSS with GSAP, Three.js, or any seekable JS lib) | custom | `custom_html` | `src` or `html` — author contract, allowlisted libraries, and a minimal GSAP template in `animations-catalog.md` → "Custom HTML" |
|
|
32
42
|
|
|
33
43
|
Param resolution: **named > positional > default**.
|
|
34
44
|
|
|
@@ -40,6 +50,7 @@ Param resolution: **named > positional > default**.
|
|
|
40
50
|
| Unverified blocks | `scenerok validate` warns `verified:false` | Accept demo render or switch to verified family |
|
|
41
51
|
| Maps / liquid-glass / app-showcase | Ignore user params | Use for demo aesthetic only, or hand-author |
|
|
42
52
|
| Adapter blocks | No inline audio/text siblings | Put `audio`, `text`, `filter` on separate time blocks |
|
|
53
|
+
| `logo_outro` | Renders upstream demo's Figma-style mark when no logo param given | Pass `brand: "scenerok"` or `logoUrl: "<image url>"` |
|
|
43
54
|
|
|
44
55
|
## Two-phase compose recipe
|
|
45
56
|
|
|
@@ -34,11 +34,13 @@ let brandColor = "#6366F1"
|
|
|
34
34
|
|
|
35
35
|
[0s .. 3s] = text "Launch Week", color: brandColor, style: title, animate: motion.popIn(0.6s)
|
|
36
36
|
[3s .. 8s] = animations.lt_clean_bar("Product Name", "Tagline here", accent: brandColor)
|
|
37
|
-
[8s .. 14s] = animations.logo_outro("Thanks for watching", url: "scenerok.com")
|
|
37
|
+
[8s .. 14s] = animations.logo_outro("Thanks for watching", url: "scenerok.com", logoUrl: logo)
|
|
38
38
|
```
|
|
39
39
|
|
|
40
40
|
Use `accent`, `accentColor`, and `color` params consistently across text and animation blocks.
|
|
41
41
|
|
|
42
|
+
**`logo_outro` branding:** without `logoUrl` or `brand`, the outro renders the upstream demo's colorful Figma-style mark — never ship that on a branded video. Pass `logoUrl:` (user's logo image) or `brand: "scenerok"` (built-in SceneRok preset, also tints the glow), plus `accent:` to override the glow color.
|
|
43
|
+
|
|
42
44
|
## Per-environment collection
|
|
43
45
|
|
|
44
46
|
| Environment | How to get brand assets |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "https://scenerok.com/catalog-index/v1",
|
|
3
|
-
"generatedAt": "2026-
|
|
3
|
+
"generatedAt": "2026-10-06T08:56:17.740Z",
|
|
4
4
|
"cdnBase": "https://assets-public.scenerok.com/catalog",
|
|
5
5
|
"categories": [
|
|
6
6
|
{
|
|
@@ -283,10 +283,10 @@
|
|
|
283
283
|
{
|
|
284
284
|
"id": "animations:code_particle_assemble",
|
|
285
285
|
"title": "Default",
|
|
286
|
-
"description": "
|
|
287
|
-
"durationSeconds":
|
|
288
|
-
"vidscript": "import animations from \"@scenerok/animations\"\n\n[0s ..
|
|
289
|
-
"mp4Url": "https://assets-public.scenerok.com/catalog/animations__code_particle_assemble.mp4?v=
|
|
286
|
+
"description": "6s sample at 720×1280.",
|
|
287
|
+
"durationSeconds": 6,
|
|
288
|
+
"vidscript": "import animations from \"@scenerok/animations\"\n\n[0s .. 6s] = animations.code_particle_assemble(\"[0s .. 3s] = video xai.imagine('let there be light')\")",
|
|
289
|
+
"mp4Url": "https://assets-public.scenerok.com/catalog/animations__code_particle_assemble.mp4?v=5666582a",
|
|
290
290
|
"posterUrl": "https://assets-public.scenerok.com/catalog/posters/animations__code_particle_assemble.jpg?v=882b1fd3"
|
|
291
291
|
}
|
|
292
292
|
]
|
|
@@ -766,8 +766,8 @@
|
|
|
766
766
|
"description": "3s sample at 720×1280.",
|
|
767
767
|
"durationSeconds": 3,
|
|
768
768
|
"vidscript": "import animations from \"@scenerok/animations\"\n\n[0s .. 3s] = animations.ios26_liquid_glass()",
|
|
769
|
-
"mp4Url":
|
|
770
|
-
"posterUrl":
|
|
769
|
+
"mp4Url": "https://assets-public.scenerok.com/catalog/animations__ios26_liquid_glass.mp4?v=f9f046f0",
|
|
770
|
+
"posterUrl": "https://assets-public.scenerok.com/catalog/posters/animations__ios26_liquid_glass.jpg?v=e8acf8fa"
|
|
771
771
|
}
|
|
772
772
|
]
|
|
773
773
|
},
|
|
@@ -798,8 +798,8 @@
|
|
|
798
798
|
"description": "3s sample at 720×1280.",
|
|
799
799
|
"durationSeconds": 3,
|
|
800
800
|
"vidscript": "import animations from \"@scenerok/animations\"\n\n[0s .. 3s] = animations.liquid_glass_media_controls(\"Sample\")",
|
|
801
|
-
"mp4Url":
|
|
802
|
-
"posterUrl":
|
|
801
|
+
"mp4Url": "https://assets-public.scenerok.com/catalog/animations__liquid_glass_media_controls.mp4?v=24d2c880",
|
|
802
|
+
"posterUrl": "https://assets-public.scenerok.com/catalog/posters/animations__liquid_glass_media_controls.jpg?v=059d4897"
|
|
803
803
|
}
|
|
804
804
|
]
|
|
805
805
|
},
|
|
@@ -1038,8 +1038,8 @@
|
|
|
1038
1038
|
"description": "3s sample at 720×1280.",
|
|
1039
1039
|
"durationSeconds": 3,
|
|
1040
1040
|
"vidscript": "import animations from \"@scenerok/animations\"\n\n[0s .. 3s] = animations.lt_stack_bars(\"Jane Doe\", \"Engineer\")",
|
|
1041
|
-
"mp4Url":
|
|
1042
|
-
"posterUrl":
|
|
1041
|
+
"mp4Url": "https://assets-public.scenerok.com/catalog/animations__lt_stack_bars.mp4?v=be9b5b4f",
|
|
1042
|
+
"posterUrl": "https://assets-public.scenerok.com/catalog/posters/animations__lt_stack_bars.jpg?v=12d6f346"
|
|
1043
1043
|
}
|
|
1044
1044
|
]
|
|
1045
1045
|
},
|
|
@@ -1070,8 +1070,8 @@
|
|
|
1070
1070
|
"description": "3s sample at 720×1280.",
|
|
1071
1071
|
"durationSeconds": 3,
|
|
1072
1072
|
"vidscript": "import animations from \"@scenerok/animations\"\n\n[0s .. 3s] = animations.macos_tahoe_liquid_glass(\"Sample\")",
|
|
1073
|
-
"mp4Url":
|
|
1074
|
-
"posterUrl":
|
|
1073
|
+
"mp4Url": "https://assets-public.scenerok.com/catalog/animations__macos_tahoe_liquid_glass.mp4?v=7bc0b4f8",
|
|
1074
|
+
"posterUrl": "https://assets-public.scenerok.com/catalog/posters/animations__macos_tahoe_liquid_glass.jpg?v=e8acf8fa"
|
|
1075
1075
|
}
|
|
1076
1076
|
]
|
|
1077
1077
|
},
|
|
@@ -1123,6 +1123,150 @@
|
|
|
1123
1123
|
}
|
|
1124
1124
|
]
|
|
1125
1125
|
},
|
|
1126
|
+
{
|
|
1127
|
+
"id": "text-counter-stat",
|
|
1128
|
+
"title": "Text Counter Stat",
|
|
1129
|
+
"description": "@scenerok/animations.text_counter_stat() — text-counter-stat composition.",
|
|
1130
|
+
"examples": [
|
|
1131
|
+
{
|
|
1132
|
+
"id": "animations:text_counter_stat",
|
|
1133
|
+
"title": "Default",
|
|
1134
|
+
"description": "3s sample at 720×1280.",
|
|
1135
|
+
"durationSeconds": 3,
|
|
1136
|
+
"vidscript": "import animations from \"@scenerok/animations\"\n\n[0s .. 3s] = animations.text_counter_stat(\"12500\", \"Downloads\")",
|
|
1137
|
+
"mp4Url": "https://assets-public.scenerok.com/catalog/animations__text_counter_stat.mp4?v=648434e3",
|
|
1138
|
+
"posterUrl": "https://assets-public.scenerok.com/catalog/posters/animations__text_counter_stat.jpg?v=19723b34"
|
|
1139
|
+
}
|
|
1140
|
+
]
|
|
1141
|
+
},
|
|
1142
|
+
{
|
|
1143
|
+
"id": "text-glitch-title",
|
|
1144
|
+
"title": "Text Glitch Title",
|
|
1145
|
+
"description": "@scenerok/animations.text_glitch_title() — text-glitch-title composition.",
|
|
1146
|
+
"examples": [
|
|
1147
|
+
{
|
|
1148
|
+
"id": "animations:text_glitch_title",
|
|
1149
|
+
"title": "Default",
|
|
1150
|
+
"description": "3s sample at 720×1280.",
|
|
1151
|
+
"durationSeconds": 3,
|
|
1152
|
+
"vidscript": "import animations from \"@scenerok/animations\"\n\n[0s .. 3s] = animations.text_glitch_title(\"SYSTEM ONLINE\")",
|
|
1153
|
+
"mp4Url": "https://assets-public.scenerok.com/catalog/animations__text_glitch_title.mp4?v=b2bec3e7",
|
|
1154
|
+
"posterUrl": "https://assets-public.scenerok.com/catalog/posters/animations__text_glitch_title.jpg?v=6f819736"
|
|
1155
|
+
}
|
|
1156
|
+
]
|
|
1157
|
+
},
|
|
1158
|
+
{
|
|
1159
|
+
"id": "text-gradient-sweep",
|
|
1160
|
+
"title": "Text Gradient Sweep",
|
|
1161
|
+
"description": "@scenerok/animations.text_gradient_sweep() — text-gradient-sweep composition.",
|
|
1162
|
+
"examples": [
|
|
1163
|
+
{
|
|
1164
|
+
"id": "animations:text_gradient_sweep",
|
|
1165
|
+
"title": "Default",
|
|
1166
|
+
"description": "3s sample at 720×1280.",
|
|
1167
|
+
"durationSeconds": 3,
|
|
1168
|
+
"vidscript": "import animations from \"@scenerok/animations\"\n\n[0s .. 3s] = animations.text_gradient_sweep(\"Gradient in Motion\")",
|
|
1169
|
+
"mp4Url": "https://assets-public.scenerok.com/catalog/animations__text_gradient_sweep.mp4?v=fa7aee38",
|
|
1170
|
+
"posterUrl": "https://assets-public.scenerok.com/catalog/posters/animations__text_gradient_sweep.jpg?v=c1d2c734"
|
|
1171
|
+
}
|
|
1172
|
+
]
|
|
1173
|
+
},
|
|
1174
|
+
{
|
|
1175
|
+
"id": "text-kinetic-words",
|
|
1176
|
+
"title": "Text Kinetic Words",
|
|
1177
|
+
"description": "@scenerok/animations.text_kinetic_words() — text-kinetic-words composition.",
|
|
1178
|
+
"examples": [
|
|
1179
|
+
{
|
|
1180
|
+
"id": "animations:text_kinetic_words",
|
|
1181
|
+
"title": "Default",
|
|
1182
|
+
"description": "3s sample at 720×1280.",
|
|
1183
|
+
"durationSeconds": 3,
|
|
1184
|
+
"vidscript": "import animations from \"@scenerok/animations\"\n\n[0s .. 3s] = animations.text_kinetic_words(\"BIG BOLD FAST TYPE\")",
|
|
1185
|
+
"mp4Url": "https://assets-public.scenerok.com/catalog/animations__text_kinetic_words.mp4?v=15009872",
|
|
1186
|
+
"posterUrl": "https://assets-public.scenerok.com/catalog/posters/animations__text_kinetic_words.jpg?v=4f2a7d46"
|
|
1187
|
+
}
|
|
1188
|
+
]
|
|
1189
|
+
},
|
|
1190
|
+
{
|
|
1191
|
+
"id": "text-line-stack",
|
|
1192
|
+
"title": "Text Line Stack",
|
|
1193
|
+
"description": "@scenerok/animations.text_line_stack() — text-line-stack composition.",
|
|
1194
|
+
"examples": [
|
|
1195
|
+
{
|
|
1196
|
+
"id": "animations:text_line_stack",
|
|
1197
|
+
"title": "Default",
|
|
1198
|
+
"description": "3s sample at 720×1280.",
|
|
1199
|
+
"durationSeconds": 3,
|
|
1200
|
+
"vidscript": "import animations from \"@scenerok/animations\"\n\n[0s .. 3s] = animations.text_line_stack(\"Build videos\", \"from plain text\")",
|
|
1201
|
+
"mp4Url": "https://assets-public.scenerok.com/catalog/animations__text_line_stack.mp4?v=d11dc02f",
|
|
1202
|
+
"posterUrl": "https://assets-public.scenerok.com/catalog/posters/animations__text_line_stack.jpg?v=9c85faca"
|
|
1203
|
+
}
|
|
1204
|
+
]
|
|
1205
|
+
},
|
|
1206
|
+
{
|
|
1207
|
+
"id": "text-neon-flicker",
|
|
1208
|
+
"title": "Text Neon Flicker",
|
|
1209
|
+
"description": "@scenerok/animations.text_neon_flicker() — text-neon-flicker composition.",
|
|
1210
|
+
"examples": [
|
|
1211
|
+
{
|
|
1212
|
+
"id": "animations:text_neon_flicker",
|
|
1213
|
+
"title": "Default",
|
|
1214
|
+
"description": "3s sample at 720×1280.",
|
|
1215
|
+
"durationSeconds": 3,
|
|
1216
|
+
"vidscript": "import animations from \"@scenerok/animations\"\n\n[0s .. 3s] = animations.text_neon_flicker(\"OPEN LATE\")",
|
|
1217
|
+
"mp4Url": "https://assets-public.scenerok.com/catalog/animations__text_neon_flicker.mp4?v=028f1626",
|
|
1218
|
+
"posterUrl": "https://assets-public.scenerok.com/catalog/posters/animations__text_neon_flicker.jpg?v=861a2569"
|
|
1219
|
+
}
|
|
1220
|
+
]
|
|
1221
|
+
},
|
|
1222
|
+
{
|
|
1223
|
+
"id": "text-scramble-decode",
|
|
1224
|
+
"title": "Text Scramble Decode",
|
|
1225
|
+
"description": "@scenerok/animations.text_scramble_decode() — text-scramble-decode composition.",
|
|
1226
|
+
"examples": [
|
|
1227
|
+
{
|
|
1228
|
+
"id": "animations:text_scramble_decode",
|
|
1229
|
+
"title": "Default",
|
|
1230
|
+
"description": "3s sample at 720×1280.",
|
|
1231
|
+
"durationSeconds": 3,
|
|
1232
|
+
"vidscript": "import animations from \"@scenerok/animations\"\n\n[0s .. 3s] = animations.text_scramble_decode(\"DECODING THE SIGNAL\")",
|
|
1233
|
+
"mp4Url": "https://assets-public.scenerok.com/catalog/animations__text_scramble_decode.mp4?v=5578cf99",
|
|
1234
|
+
"posterUrl": "https://assets-public.scenerok.com/catalog/posters/animations__text_scramble_decode.jpg?v=48bf0bbe"
|
|
1235
|
+
}
|
|
1236
|
+
]
|
|
1237
|
+
},
|
|
1238
|
+
{
|
|
1239
|
+
"id": "text-typewriter-quote",
|
|
1240
|
+
"title": "Text Typewriter Quote",
|
|
1241
|
+
"description": "@scenerok/animations.text_typewriter_quote() — text-typewriter-quote composition.",
|
|
1242
|
+
"examples": [
|
|
1243
|
+
{
|
|
1244
|
+
"id": "animations:text_typewriter_quote",
|
|
1245
|
+
"title": "Default",
|
|
1246
|
+
"description": "3s sample at 720×1280.",
|
|
1247
|
+
"durationSeconds": 3,
|
|
1248
|
+
"vidscript": "import animations from \"@scenerok/animations\"\n\n[0s .. 3s] = animations.text_typewriter_quote(\"Simplicity is the ultimate sophistication.\", \"Leonardo da Vinci\")",
|
|
1249
|
+
"mp4Url": "https://assets-public.scenerok.com/catalog/animations__text_typewriter_quote.mp4?v=c4c64c37",
|
|
1250
|
+
"posterUrl": "https://assets-public.scenerok.com/catalog/posters/animations__text_typewriter_quote.jpg?v=fe5b8624"
|
|
1251
|
+
}
|
|
1252
|
+
]
|
|
1253
|
+
},
|
|
1254
|
+
{
|
|
1255
|
+
"id": "text-word-cascade",
|
|
1256
|
+
"title": "Text Word Cascade",
|
|
1257
|
+
"description": "@scenerok/animations.text_word_cascade() — text-word-cascade composition.",
|
|
1258
|
+
"examples": [
|
|
1259
|
+
{
|
|
1260
|
+
"id": "animations:text_word_cascade",
|
|
1261
|
+
"title": "Default",
|
|
1262
|
+
"description": "3s sample at 720×1280.",
|
|
1263
|
+
"durationSeconds": 3,
|
|
1264
|
+
"vidscript": "import animations from \"@scenerok/animations\"\n\n[0s .. 3s] = animations.text_word_cascade(\"Make videos from plain text\")",
|
|
1265
|
+
"mp4Url": "https://assets-public.scenerok.com/catalog/animations__text_word_cascade.mp4?v=2eca3c74",
|
|
1266
|
+
"posterUrl": "https://assets-public.scenerok.com/catalog/posters/animations__text_word_cascade.jpg?v=593328b5"
|
|
1267
|
+
}
|
|
1268
|
+
]
|
|
1269
|
+
},
|
|
1126
1270
|
{
|
|
1127
1271
|
"id": "tiktok-follow",
|
|
1128
1272
|
"title": "Tiktok Follow",
|
|
@@ -1708,8 +1852,8 @@
|
|
|
1708
1852
|
"description": "Product launch energy.",
|
|
1709
1853
|
"durationSeconds": 3,
|
|
1710
1854
|
"vidscript": "import xai from \"@scenerok/xai\"\n\n[0s .. 3s] = text \"GO.\", font: \"Inter Black\", size: 240, color: \"#FF3B3B\", align: \"center\"\n[0s .. 3s] = audio xai.tts(\"Ship it. Right now.\", voice: \"leo\")",
|
|
1711
|
-
"mp4Url":
|
|
1712
|
-
"posterUrl":
|
|
1855
|
+
"mp4Url": "https://assets-public.scenerok.com/catalog/tts__energetic-vo-hype.mp4?v=4ca84baf",
|
|
1856
|
+
"posterUrl": "https://assets-public.scenerok.com/catalog/posters/tts__energetic-vo-hype.jpg?v=3f79ffad"
|
|
1713
1857
|
},
|
|
1714
1858
|
{
|
|
1715
1859
|
"id": "tts:energetic-vo",
|
|
@@ -1717,8 +1861,8 @@
|
|
|
1717
1861
|
"description": "Punchy three-beat hook.",
|
|
1718
1862
|
"durationSeconds": 3,
|
|
1719
1863
|
"vidscript": "import xai from \"@scenerok/xai\"\n\n[0s .. 3s] = text \"Drop it.\", font: \"Inter Black\", size: 198, color: \"#FFD23F\", align: \"center\"\n[0s .. 3s] = audio xai.tts(\"Three. Two. One. Drop it.\", voice: \"rex\")",
|
|
1720
|
-
"mp4Url":
|
|
1721
|
-
"posterUrl":
|
|
1864
|
+
"mp4Url": "https://assets-public.scenerok.com/catalog/tts__energetic-vo.mp4?v=e078344b",
|
|
1865
|
+
"posterUrl": "https://assets-public.scenerok.com/catalog/posters/tts__energetic-vo.jpg?v=f4f999e3"
|
|
1722
1866
|
}
|
|
1723
1867
|
]
|
|
1724
1868
|
},
|
|
@@ -1733,8 +1877,8 @@
|
|
|
1733
1877
|
"description": "Single sentence under a headline.",
|
|
1734
1878
|
"durationSeconds": 3,
|
|
1735
1879
|
"vidscript": "import xai from \"@scenerok/xai\"\n\n[0s .. 3s] = text \"Listen.\", font: \"Inter\", size: 120, color: \"#9FB6FF\", align: \"center\"\n[0s .. 3s] = audio xai.tts(\"One line of voice-over, baked into the mix.\", voice: \"ara\")",
|
|
1736
|
-
"mp4Url":
|
|
1737
|
-
"posterUrl":
|
|
1880
|
+
"mp4Url": "https://assets-public.scenerok.com/catalog/tts__narrator-calm.mp4?v=7fbac622",
|
|
1881
|
+
"posterUrl": "https://assets-public.scenerok.com/catalog/posters/tts__narrator-calm.jpg?v=ba591a7b"
|
|
1738
1882
|
},
|
|
1739
1883
|
{
|
|
1740
1884
|
"id": "tts:narrator",
|