@scenerok/sdk 0.26.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.
@@ -0,0 +1,1493 @@
1
+ # Repertoire
2
+
3
+ What each tool looks like, what it is for, and what it fights, so you can choose from a
4
+ beat's job instead of from a menu. How to choose: `choosing.md`. Syntax and params live in
5
+ each family's reference. Generated from `src/lib/catalog/tool-guide/`; edit the records there.
6
+
7
+ ## Find tools by job
8
+
9
+ | Job | Tools |
10
+ | --- | --- |
11
+ | **establish**: set the place, mood or subject | `animations.ios26_liquid_glass(…)`, `animations.macos_tahoe_liquid_glass(…)`, `animations.text_neon_flicker(…)`, `motion.fadeIn(…)`, `motion.riseIn(…)`, `tr.dissolve()`, `tr.blur()`, `filter "monochrome"`, `filter "sepia"`, `push`, `made-background`, `xai.image(…)`, `xai.imagine(…)`, `xai.imageToVideo(…)`, `xai.referenceToVideo(…)`, `cf.image(…)`, `cf.video(…)`, `cf.imageToVideo(…)`, `cf.referenceToVideo(…)` |
12
+ | **announce**: a headline, launch or piece of news | `animations.blue_sweater_intro_video(…)`, `animations.code_particle_assemble(…)`, `animations.liquid_glass_notification(…)`, `animations.lower_third_bild(…)`, `animations.macos_notification(…)`, `animations.news_ticker(…)`, `animations.text_glitch_title(…)`, `animations.text_gradient_sweep(…)`, `animations.text_kinetic_words(…)`, `animations.text_line_stack(…)`, `animations.text_scramble_decode(…)`, `animations.text_word_cascade(…)`, `animations.ui_3d_reveal(…)`, `animations.vpn_youtube_spot(…)`, `text`, `text+area`, `text+stagger`, `motion.riseIn(…)` |
13
+ | **name**: identify a person, product or place | `animations.blue_sweater_intro_video(…)`, `animations.lower_third(…)`, `animations.lower_third_bild(…)`, `animations.lt_accent_underline(…)` and 8 variants, `animations.lt_kicker_name(…)`, `animations.yt_lower_third(…)`, `text`, `text+plate`, `function` |
14
+ | **list**: several points in sequence | `animations.text_line_stack(…)`, `text`, `text+area`, `motion.fadeIn(…)`, `motion.slideX(…)`, `motion.slideY(…)`, `motion.riseIn(…)` |
15
+ | **count**: a number that matters | `animations.apple_money_count(…)`, `animations.text_counter_stat(…)`, `text`, `text+plate`, `motion.popIn(…)` |
16
+ | **compare**: before and after, A against B | `animations.code_diff(…)`, `animations.code_morph(…)`, `Overlay`, `grid` |
17
+ | **quote**: someone's words | `animations.reddit_post(…)`, `animations.text_typewriter_quote(…)`, `animations.x_post(…)`, `text`, `motion.typewriter(…)` |
18
+ | **code**: show code or a command | `animations.code_3d_extrude(…)`, `animations.code_diff(…)`, `animations.code_highlight(…)`, `animations.code_morph(…)`, `animations.code_particle_assemble(…)`, `animations.code_scroll(…)`, `animations.code_shader_dissolve(…)`, `animations.code_snippet_apple_terminal_basic(…)` and 11 variants, `animations.code_snippet_dark_2026(…)` and 11 variants, `animations.code_snippet_flight(…)`, `animations.code_typing(…)`, `animations.text_scramble_decode(…)`, `motion.typewriter(…)`, `filter "text_cursor"` |
19
+ | **prove**: real evidence: a UI, a post, a rating, footage | `animations.app_showcase(…)`, `animations.code_snippet_dark_2026(…)` and 11 variants, `animations.macos_notification(…)`, `animations.reddit_post(…)`, `animations.spotify_card(…)`, `animations.vfx_iphone_device(…)`, `animations.x_post(…)`, `Overlay`, `page-images`, `screenshot`, `screen-recording` |
20
+ | **demo**: show the thing in use | `animations.app_showcase(…)`, `animations.code_snippet_apple_terminal_basic(…)` and 11 variants, `animations.custom_html(…)`, `animations.liquid_glass_context_menu(…)`, `animations.liquid_glass_media_controls(…)`, `animations.liquid_glass_notification(…)`, `animations.liquid_glass_widgets(…)`, `animations.macos_tahoe_liquid_glass(…)`, `animations.ui_3d_reveal(…)`, `animations.vfx_iphone_device(…)`, `animations.vpn_youtube_spot(…)`, `placement`, `Overlay`, `grid`, `page-images`, `screenshot`, `screen-recording`, `xai.imageToVideo(…)`, `xai.referenceToVideo(…)`, `cf.imageToVideo(…)`, `lottie.file(…)` |
21
+ | **emphasize**: punch one word or moment | `animations.blend_caption(…)`, `animations.code_3d_extrude(…)`, `animations.code_highlight(…)`, `animations.custom_html(…)`, `animations.text_counter_stat(…)`, `animations.text_glitch_title(…)`, `animations.text_kinetic_words(…)`, `animations.text_neon_flicker(…)`, `text+stagger`, `motion.popIn(…)`, `motion.swingIn(…)`, `motion.glitchIn(…)`, `filter "glitch"`, `Mask` |
22
+ | **brand**: logo, sign-off, identity | `animations.instagram_follow(…)`, `animations.logo_outro(…)`, `animations.tiktok_follow(…)`, `motion.float(…)`, `Mask`, `function`, `lottie.file(…)` |
23
+ | **cta**: tell the viewer what to do next | `animations.instagram_follow(…)`, `animations.logo_outro(…)`, `animations.tiktok_follow(…)`, `animations.yt_lower_third(…)`, `text`, `text+plate`, `motion.popIn(…)` |
24
+ | **caption**: put speech on screen | `animations.blend_caption(…)`, `text+area`, `captions`, `xai.tts(…)` |
25
+ | **transition**: move from one beat to the next | `motion.fadeOut(…)`, `motion.slideX(…)`, `tr.dissolve()`, `tr.push()`, `tr.cover()`, `tr.radial()`, `tr.grid()`, `tr.scale()`, `tr.cube()`, `tr.blur()`, `tr.distortion()`, `tr.destruction()`, `tr.light()`, `tr.mechanical()`, `tr.wipe()`, `tr.cinematic_zoom()`, `tr.whip_pan()`, `tr.light_leak()`, `tr.flash()`, `tr.warp_morph()`, `tr.domain_warp()`, `tr.chromatic_split()`, `tr.lens()`, `tr.glitch()`, `tr.swirl()`, `tr.thermal()`, `tr.ripple()`, `tr.iris()`, `tr.burn()`, `tr.shatter()`, `tr.liquid()`, `filter "portal"` |
26
+ | **grade**: set the colour and finish | `filter "cdl"`, `filter "lut"`, `filter "vignette"`, `filter "contrast"`, `filter "saturation"`, `filter "brightness"`, `filter "monochrome"`, `filter "sepia"`, `blend` |
27
+ | **texture**: add surface, energy or atmosphere | `animations.code_shader_dissolve(…)`, `animations.custom_html(…)`, `animations.ios26_liquid_glass(…)`, `animations.liquid_glass_context_menu(…)`, `motion.glitchIn(…)`, `motion.float(…)`, `tr.thermal()`, `filter "blur"`, `filter "chromatic"`, `filter "glitch"`, `filter "liquid_glass"`, `filter "magnetic"`, `filter "portal"`, `filter "text_cursor"`, `push`, `blend`, `Mask`, `motion_blur`, `image-sequence`, `made-background`, `xai.image(…)`, `xai.imagine(…)`, `cf.image(…)`, `cf.video(…)`, `lottie.file(…)` |
28
+ | **source**: get a picture, clip or sound | `page-images`, `screenshot`, `screen-recording`, `grabFrame`, `image-sequence`, `xai.image(…)`, `xai.imagine(…)`, `xai.imageToVideo(…)`, `xai.referenceToVideo(…)`, `xai.extendVideo(…)`, `cf.image(…)`, `cf.video(…)`, `cf.imageToVideo(…)`, `cf.referenceToVideo(…)`, `cf.extendVideo(…)`, `up.upscale(…)` |
29
+ | **edit**: cut, time, layer or frame footage | `filter "premultiply"`, `Trim`, `Crop`, `placement`, `function`, `grabFrame` |
30
+ | **sound**: voice or music | `animations.spotify_card(…)`, `duck_under`, `xai.tts(…)`, `eleven.music(…)` |
31
+
32
+ ## Animation blocks
33
+
34
+ Syntax and params: animations-catalog.md.
35
+
36
+ ### `animations.app_showcase(…)`
37
+
38
+ Three phone mock-ups fanned on a pale green set, showing your app screenshot.
39
+
40
+ - **Looks:** Soft sage background, three phones tilted in a fan, a dark profile card floating over them. The phones drift and settle; the eye lands on the centre phone. Light, airy, product-marketing style.
41
+ - **For:** demo, prove. **Fights:** Dark, moody videos (it is bright and pastel); screenshots in landscape (the phones are portrait).
42
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 6 s default. Takes imageUrl, userName, userRole, tagline, accentColor. Image asset via imageUrl. Demo block: most of what it shows is fixed artwork; only the listed params change. A portrait screenshot (imageUrl) reads best.
43
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__app_showcase.mp4
44
+
45
+ ### `animations.apple_money_count(…)`
46
+
47
+ A large dollar amount counting up on white.
48
+
49
+ - **Looks:** Plain white frame, a bold black amount in the centre that holds at $0, counts up and lands with a small bounce at about 3.2 s; nothing else. Very clean, very quiet.
50
+ - **For:** count. **Fights:** Dark-themed videos (it is a white slab), non-money numbers.
51
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 5 s default. Takes amount, currency, accentColor. One amount. Use `text_counter_stat` for anything that is not money or for a dark palette.
52
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__apple_money_count.mp4
53
+
54
+ ### `animations.blend_caption(…)`
55
+
56
+ One huge word or line in difference blend, so it inverts whatever is behind it.
57
+
58
+ - **Looks:** A 190 px, weight-900 line across the frame drawn with a difference blend: white over dark footage, dark over bright footage, colour-inverted over colour. The letters change as the picture moves under them.
59
+ - **For:** emphasize, caption. **Fights:** Long words in 9:16 (the catalog sample runs off the frame), mid-grey footage (difference gives low contrast).
60
+ - **Fit:** Inline overlay: scales with the frame. 5 s default. Takes text, color. One or two short words. Inline overlay: it scales with the frame rather than letterboxing.
61
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__blend_caption.mp4
62
+
63
+ ### `animations.blue_sweater_intro_video(…)`
64
+
65
+ A creator intro: a typed "Introducing" line, a name, a bio and an avatar on warm off-white.
66
+
67
+ - **Looks:** Warm cream background, grey "Introducing" typed in the middle with a cursor, then the creator name in a highlighted box, then the bio and avatar. Calm, editorial, 12 s long.
68
+ - **For:** name, announce. **Fights:** Fast edits (it needs its 12 s), dark palettes.
69
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 12 s default. Takes headline, creatorName, creatorHandle, creatorBio, avatarUrl. Image asset via avatarUrl. Demo block: most of what it shows is fixed artwork; only the listed params change. headline, creatorName, creatorHandle, creatorBio and avatarUrl are yours.
70
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__blue_sweater_intro_video.mp4
71
+
72
+ ### `animations.code_3d_extrude(…)`
73
+
74
+ Your code as a lit 3D slab that turns in space.
75
+
76
+ - **Looks:** Dark frame; a single code line rendered on a thick slab, tilted in perspective with a light sweep, rotating toward the viewer until it reads flat.
77
+ - **For:** code, emphasize. **Fights:** More than one or two lines, anything that needs to be read in detail.
78
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 8 s default. Takes code, lang, theme, filename. WebGL: heavier to render than the 2D code blocks. One short line.
79
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_3d_extrude.mp4?v=1fb913bd
80
+
81
+ ### `animations.code_diff(…)`
82
+
83
+ A before/after code change shown as a diff.
84
+
85
+ - **Looks:** Editor window on a dark navy and green glow, under a "+1 −1" count in green and red. The old line appears in red with a minus, then the new line arrives in green with a plus and a cyan outline. With keep_removed the red line stays, so the frame reads as a before/after. In 9:16 it uses a portrait layout in the upper half of the frame (checked in render 536); the lower half stays empty.
86
+ - **For:** code, compare. **Fights:** Big multi-file changes; changes where the old line is not worth seeing.
87
+ - **Fit:** Has its own 9:16 layout. 6 s default. Takes from, to, lang, theme, filename, label, keep_removed. A few changed lines; a line of ~36 characters fits the 9:16 card. The catalog preview predates the portrait layout.
88
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_diff.mp4
89
+
90
+ ### `animations.code_highlight(…)`
91
+
92
+ A code window that sweeps a highlight across one line.
93
+
94
+ - **Looks:** Dark editor window on a navy glow; the code fades in, then a highlight bar sweeps under the line that matters.
95
+ - **For:** code, emphasize. **Fights:** Long files; a second highlight competing for attention.
96
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 5 s default. Takes code, lang, theme, filename. A few lines; the highlight lands on one.
97
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_highlight.mp4
98
+
99
+ ### `animations.code_morph(…)`
100
+
101
+ Code that morphs from one version to another token by token.
102
+
103
+ - **Looks:** Dark editor window; the first snippet sits still, then tokens slide, fade and rearrange into the second snippet. Unchanged tokens stay put, so the eye follows the change.
104
+ - **For:** code, compare. **Fights:** Two snippets with little in common (it turns into a cross-fade).
105
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 7 s default. Takes from, to, lang, theme, filename, label, keep_removed. Short snippets of similar shape.
106
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_morph.mp4
107
+
108
+ ### `animations.code_particle_assemble(…)`
109
+
110
+ Code that assembles from a cloud of particles.
111
+
112
+ - **Looks:** Dark frame full of drifting glowing dots that fly together into a line of code, which then sits sharp in the centre.
113
+ - **For:** code, announce. **Fights:** Busy footage behind it, motion-sensitive viewers, dense code.
114
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 8 s default. Takes code, lang, theme, filename. WebGL particles: heavier render. One short line.
115
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_particle_assemble.mp4?v=5666582a
116
+
117
+ ### `animations.code_scroll(…)`
118
+
119
+ A code window that scrolls to a target line.
120
+
121
+ - **Looks:** Dark editor window; the file scrolls smoothly and stops on a line that lights up.
122
+ - **For:** code. **Fights:** Short snippets (nothing to scroll), voiceover that needs a still frame.
123
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 6 s default. Takes code, lang, theme, filename. Longer files; the scroll is the point.
124
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_scroll.mp4
125
+
126
+ ### `animations.code_shader_dissolve(…)`
127
+
128
+ Code that dissolves in or out through a noise shader.
129
+
130
+ - **Looks:** Dark frame; a code line dissolves in through a noise shader and resolves into crisp text. The catalog preview stays dark for its 3 s sample, so render it before relying on it.
131
+ - **For:** code, texture. **Fights:** Reading-heavy beats; it is a reveal, not a reading surface.
132
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 7 s default. Takes code, lang, theme, filename. WebGL: heavier render. One short line.
133
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_shader_dissolve.mp4
134
+
135
+ ### `animations.code_snippet_apple_terminal_basic(…)`
136
+
137
+ A macOS Terminal window (Basic (white) profile) that types a command and prints its output.
138
+
139
+ - **Looks:** A Terminal window centred on a Basic (white) backdrop with the window chrome (traffic lights, title). The prompt sits top-left, the command types character by character, then the output appears. Mostly still apart from the typing and caret.
140
+ - **For:** code, demo. **Fights:** Long multi-line output, small phones (16:9 design only, so in 9:16 the window shrinks to about half width).
141
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 12 s default. Takes command, output, prompt, title. One command and a few lines of output. 12 s default leaves room for the typing to finish.
142
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_snippet_apple_terminal_basic.mp4
143
+
144
+ ### `animations.code_snippet_apple_terminal_clear_dark(…)`
145
+
146
+ A macOS Terminal window (Clear Dark profile) that types a command and prints its output.
147
+
148
+ - **Looks:** A Terminal window centred on a Clear Dark backdrop with the window chrome (traffic lights, title). The prompt sits top-left, the command types character by character, then the output appears. Mostly still apart from the typing and caret.
149
+ - **For:** code, demo. **Fights:** Long multi-line output, small phones (16:9 design only, so in 9:16 the window shrinks to about half width).
150
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 12 s default. Takes command, output, prompt, title. One command and a few lines of output. 12 s default leaves room for the typing to finish.
151
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_snippet_apple_terminal_clear_dark.mp4
152
+
153
+ ### `animations.code_snippet_apple_terminal_clear_light(…)`
154
+
155
+ A macOS Terminal window (Clear Light profile) that types a command and prints its output.
156
+
157
+ - **Looks:** A Terminal window centred on a Clear Light backdrop with the window chrome (traffic lights, title). The prompt sits top-left, the command types character by character, then the output appears. Mostly still apart from the typing and caret.
158
+ - **For:** code, demo. **Fights:** Long multi-line output, small phones (16:9 design only, so in 9:16 the window shrinks to about half width).
159
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 12 s default. Takes command, output, prompt, title. One command and a few lines of output. 12 s default leaves room for the typing to finish.
160
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_snippet_apple_terminal_clear_light.mp4
161
+
162
+ ### `animations.code_snippet_apple_terminal_grass(…)`
163
+
164
+ A macOS Terminal window (Grass (green on black) profile) that types a command and prints its output.
165
+
166
+ - **Looks:** A Terminal window centred on a Grass (green on black) backdrop with the window chrome (traffic lights, title). The prompt sits top-left, the command types character by character, then the output appears. Mostly still apart from the typing and caret.
167
+ - **For:** code, demo. **Fights:** Long multi-line output, small phones (16:9 design only, so in 9:16 the window shrinks to about half width).
168
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 12 s default. Takes command, output, prompt, title. One command and a few lines of output. 12 s default leaves room for the typing to finish.
169
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_snippet_apple_terminal_grass.mp4
170
+
171
+ ### `animations.code_snippet_apple_terminal_homebrew(…)`
172
+
173
+ A macOS Terminal window (Homebrew (green on black) profile) that types a command and prints its output.
174
+
175
+ - **Looks:** A Terminal window centred on a Homebrew (green on black) backdrop with the window chrome (traffic lights, title). The prompt sits top-left, the command types character by character, then the output appears. Mostly still apart from the typing and caret.
176
+ - **For:** code, demo. **Fights:** Long multi-line output, small phones (16:9 design only, so in 9:16 the window shrinks to about half width).
177
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 12 s default. Takes command, output, prompt, title. One command and a few lines of output. 12 s default leaves room for the typing to finish.
178
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_snippet_apple_terminal_homebrew.mp4
179
+
180
+ ### `animations.code_snippet_apple_terminal_man_page(…)`
181
+
182
+ A macOS Terminal window (Man Page (pale yellow) profile) that types a command and prints its output.
183
+
184
+ - **Looks:** A Terminal window centred on a Man Page (pale yellow) backdrop with the window chrome (traffic lights, title). The prompt sits top-left, the command types character by character, then the output appears. Mostly still apart from the typing and caret.
185
+ - **For:** code, demo. **Fights:** Long multi-line output, small phones (16:9 design only, so in 9:16 the window shrinks to about half width).
186
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 12 s default. Takes command, output, prompt, title. One command and a few lines of output. 12 s default leaves room for the typing to finish.
187
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_snippet_apple_terminal_man_page.mp4
188
+
189
+ ### `animations.code_snippet_apple_terminal_novel(…)`
190
+
191
+ A macOS Terminal window (Novel (tan paper) profile) that types a command and prints its output.
192
+
193
+ - **Looks:** A Terminal window centred on a Novel (tan paper) backdrop with the window chrome (traffic lights, title). The prompt sits top-left, the command types character by character, then the output appears. Mostly still apart from the typing and caret.
194
+ - **For:** code, demo. **Fights:** Long multi-line output, small phones (16:9 design only, so in 9:16 the window shrinks to about half width).
195
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 12 s default. Takes command, output, prompt, title. One command and a few lines of output. 12 s default leaves room for the typing to finish.
196
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_snippet_apple_terminal_novel.mp4
197
+
198
+ ### `animations.code_snippet_apple_terminal_ocean(…)`
199
+
200
+ A macOS Terminal window (Ocean (blue) profile) that types a command and prints its output.
201
+
202
+ - **Looks:** A Terminal window centred on a Ocean (blue) backdrop with the window chrome (traffic lights, title). The prompt sits top-left, the command types character by character, then the output appears. Mostly still apart from the typing and caret.
203
+ - **For:** code, demo. **Fights:** Long multi-line output, small phones (16:9 design only, so in 9:16 the window shrinks to about half width).
204
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 12 s default. Takes command, output, prompt, title. One command and a few lines of output. 12 s default leaves room for the typing to finish.
205
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_snippet_apple_terminal_ocean.mp4
206
+
207
+ ### `animations.code_snippet_apple_terminal_pro(…)`
208
+
209
+ A macOS Terminal window (Pro (black) profile) that types a command and prints its output.
210
+
211
+ - **Looks:** A Terminal window centred on a Pro (black) backdrop with the window chrome (traffic lights, title). The prompt sits top-left, the command types character by character, then the output appears. Mostly still apart from the typing and caret.
212
+ - **For:** code, demo. **Fights:** Long multi-line output, small phones (16:9 design only, so in 9:16 the window shrinks to about half width).
213
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 12 s default. Takes command, output, prompt, title. One command and a few lines of output. 12 s default leaves room for the typing to finish.
214
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_snippet_apple_terminal_pro.mp4
215
+
216
+ ### `animations.code_snippet_apple_terminal_red_sands(…)`
217
+
218
+ A macOS Terminal window (Red Sands (deep red) profile) that types a command and prints its output.
219
+
220
+ - **Looks:** A Terminal window centred on a Red Sands (deep red) backdrop with the window chrome (traffic lights, title). The prompt sits top-left, the command types character by character, then the output appears. Mostly still apart from the typing and caret.
221
+ - **For:** code, demo. **Fights:** Long multi-line output, small phones (16:9 design only, so in 9:16 the window shrinks to about half width).
222
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 12 s default. Takes command, output, prompt, title. One command and a few lines of output. 12 s default leaves room for the typing to finish.
223
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_snippet_apple_terminal_red_sands.mp4
224
+
225
+ ### `animations.code_snippet_apple_terminal_silver_aerogel(…)`
226
+
227
+ A macOS Terminal window (Silver Aerogel (grey) profile) that types a command and prints its output.
228
+
229
+ - **Looks:** A Terminal window centred on a Silver Aerogel (grey) backdrop with the window chrome (traffic lights, title). The prompt sits top-left, the command types character by character, then the output appears. Mostly still apart from the typing and caret.
230
+ - **For:** code, demo. **Fights:** Long multi-line output, small phones (16:9 design only, so in 9:16 the window shrinks to about half width).
231
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 12 s default. Takes command, output, prompt, title. One command and a few lines of output. 12 s default leaves room for the typing to finish.
232
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_snippet_apple_terminal_silver_aerogel.mp4
233
+
234
+ ### `animations.code_snippet_apple_terminal_solid_colors(…)`
235
+
236
+ A macOS Terminal window (Solid Colors (purple) profile) that types a command and prints its output.
237
+
238
+ - **Looks:** A Terminal window centred on a Solid Colors (purple) backdrop with the window chrome (traffic lights, title). The prompt sits top-left, the command types character by character, then the output appears. Mostly still apart from the typing and caret.
239
+ - **For:** code, demo. **Fights:** Long multi-line output, small phones (16:9 design only, so in 9:16 the window shrinks to about half width).
240
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 12 s default. Takes command, output, prompt, title. One command and a few lines of output. 12 s default leaves room for the typing to finish.
241
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_snippet_apple_terminal_solid_colors.mp4
242
+
243
+ ### `animations.code_snippet_dark_2026(…)`
244
+
245
+ A VS Code editor window in the Dark 2026 theme that types out your code.
246
+
247
+ - **Looks:** 16:9: a full editor (title bar, file tab, explorer sidebar, line numbers, status bar) on a Dark 2026 workbench, with a small header naming the theme. In 9:16 it switches to a portrait layout (checked in render 536): a small caps kicker and a 56 px file name at the top left, then a card in the upper half of the frame where lines slide in one by one under a moving highlight bar; at the end one line stays lit, the rest dim, and the card fades. The lower ~40 % of a 9:16 frame stays empty. The eye goes to the highlighted line.
248
+ - **For:** code, prove. **Fights:** Long lines (in 9:16 they wrap, breaking the code shape), a busy background behind it, a voiceover reading the code aloud word for word.
249
+ - **Fit:** Has its own 9:16 layout. 11 s default. Takes code, filename, lang. Code at ~15 px in the 16:9 editor reads small on a phone; the 9:16 card sets code at 40 px. About 10-14 lines fit. The catalog preview is blank, so judge it from a render.
250
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_snippet_dark_2026.mp4
251
+
252
+ ### `animations.code_snippet_dark_modern(…)`
253
+
254
+ A VS Code editor window in the Dark Modern theme that types out your code.
255
+
256
+ - **Looks:** 16:9: a full editor (title bar, file tab, explorer sidebar, line numbers, status bar) on a Dark Modern workbench, with a small header naming the theme. In 9:16 it switches to a portrait layout (checked in render 536): a small caps kicker and a 56 px file name at the top left, then a card in the upper half of the frame where lines slide in one by one under a moving highlight bar; at the end one line stays lit, the rest dim, and the card fades. The lower ~40 % of a 9:16 frame stays empty. The eye goes to the highlighted line.
257
+ - **For:** code, prove. **Fights:** Long lines (in 9:16 they wrap, breaking the code shape), a busy background behind it, a voiceover reading the code aloud word for word.
258
+ - **Fit:** Has its own 9:16 layout. 11 s default. Takes code, filename, lang. Code at ~15 px in the 16:9 editor reads small on a phone; the 9:16 card sets code at 40 px. About 10-14 lines fit. The catalog preview is blank, so judge it from a render.
259
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_snippet_dark_modern.mp4
260
+
261
+ ### `animations.code_snippet_dark_plus(…)`
262
+
263
+ A VS Code editor window in the Dark+ theme that types out your code.
264
+
265
+ - **Looks:** 16:9: a full editor (title bar, file tab, explorer sidebar, line numbers, status bar) on a Dark+ workbench, with a small header naming the theme. In 9:16 it switches to a portrait layout (checked in render 536): a small caps kicker and a 56 px file name at the top left, then a card in the upper half of the frame where lines slide in one by one under a moving highlight bar; at the end one line stays lit, the rest dim, and the card fades. The lower ~40 % of a 9:16 frame stays empty. The eye goes to the highlighted line.
266
+ - **For:** code, prove. **Fights:** Long lines (in 9:16 they wrap, breaking the code shape), a busy background behind it, a voiceover reading the code aloud word for word.
267
+ - **Fit:** Has its own 9:16 layout. 11 s default. Takes code, filename, lang. Code at ~15 px in the 16:9 editor reads small on a phone; the 9:16 card sets code at 40 px. About 10-14 lines fit. The catalog preview is blank, so judge it from a render.
268
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_snippet_dark_plus.mp4
269
+
270
+ ### `animations.code_snippet_flight(…)`
271
+
272
+ Code snippets that fly in and assemble into one file.
273
+
274
+ - **Looks:** Dark editor window on a navy glow; fragments of code slide in from off-frame and lock into place line by line.
275
+ - **For:** code. **Fights:** Code that should be read top to bottom from the start.
276
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 6 s default. Takes code, lang, theme, filename. A few short lines.
277
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_snippet_flight.mp4
278
+
279
+ ### `animations.code_snippet_high_contrast(…)`
280
+
281
+ A VS Code editor window in the High Contrast (black and yellow) theme that types out your code.
282
+
283
+ - **Looks:** 16:9: a full editor (title bar, file tab, explorer sidebar, line numbers, status bar) on a High Contrast (black and yellow) workbench, with a small header naming the theme. In 9:16 it switches to a portrait layout (checked in render 536): a small caps kicker and a 56 px file name at the top left, then a card in the upper half of the frame where lines slide in one by one under a moving highlight bar; at the end one line stays lit, the rest dim, and the card fades. The lower ~40 % of a 9:16 frame stays empty. The eye goes to the highlighted line.
284
+ - **For:** code, prove. **Fights:** Long lines (in 9:16 they wrap, breaking the code shape), a busy background behind it, a voiceover reading the code aloud word for word.
285
+ - **Fit:** Has its own 9:16 layout. 11 s default. Takes code, filename, lang. Code at ~15 px in the 16:9 editor reads small on a phone; the 9:16 card sets code at 40 px. About 10-14 lines fit. The catalog preview is blank, so judge it from a render.
286
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_snippet_high_contrast.mp4
287
+
288
+ ### `animations.code_snippet_high_contrast_light(…)`
289
+
290
+ A VS Code editor window in the High Contrast Light theme that types out your code.
291
+
292
+ - **Looks:** 16:9: a full editor (title bar, file tab, explorer sidebar, line numbers, status bar) on a High Contrast Light workbench, with a small header naming the theme. In 9:16 it switches to a portrait layout (checked in render 536): a small caps kicker and a 56 px file name at the top left, then a card in the upper half of the frame where lines slide in one by one under a moving highlight bar; at the end one line stays lit, the rest dim, and the card fades. The lower ~40 % of a 9:16 frame stays empty. The eye goes to the highlighted line.
293
+ - **For:** code, prove. **Fights:** Long lines (in 9:16 they wrap, breaking the code shape), a busy background behind it, a voiceover reading the code aloud word for word.
294
+ - **Fit:** Has its own 9:16 layout. 11 s default. Takes code, filename, lang. Code at ~15 px in the 16:9 editor reads small on a phone; the 9:16 card sets code at 40 px. About 10-14 lines fit. The catalog preview is blank, so judge it from a render.
295
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_snippet_high_contrast_light.mp4
296
+
297
+ ### `animations.code_snippet_light_2026(…)`
298
+
299
+ A VS Code editor window in the Light 2026 theme that types out your code.
300
+
301
+ - **Looks:** 16:9: a full editor (title bar, file tab, explorer sidebar, line numbers, status bar) on a Light 2026 workbench, with a small header naming the theme. In 9:16 it switches to a portrait layout (checked in render 536): a small caps kicker and a 56 px file name at the top left, then a card in the upper half of the frame where lines slide in one by one under a moving highlight bar; at the end one line stays lit, the rest dim, and the card fades. The lower ~40 % of a 9:16 frame stays empty. The eye goes to the highlighted line.
302
+ - **For:** code, prove. **Fights:** Long lines (in 9:16 they wrap, breaking the code shape), a busy background behind it, a voiceover reading the code aloud word for word.
303
+ - **Fit:** Has its own 9:16 layout. 11 s default. Takes code, filename, lang. Code at ~15 px in the 16:9 editor reads small on a phone; the 9:16 card sets code at 40 px. About 10-14 lines fit. The catalog preview is blank, so judge it from a render.
304
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_snippet_light_2026.mp4
305
+
306
+ ### `animations.code_snippet_light_modern(…)`
307
+
308
+ A VS Code editor window in the Light Modern theme that types out your code.
309
+
310
+ - **Looks:** 16:9: a full editor (title bar, file tab, explorer sidebar, line numbers, status bar) on a Light Modern workbench, with a small header naming the theme. In 9:16 it switches to a portrait layout (checked in render 536): a small caps kicker and a 56 px file name at the top left, then a card in the upper half of the frame where lines slide in one by one under a moving highlight bar; at the end one line stays lit, the rest dim, and the card fades. The lower ~40 % of a 9:16 frame stays empty. The eye goes to the highlighted line.
311
+ - **For:** code, prove. **Fights:** Long lines (in 9:16 they wrap, breaking the code shape), a busy background behind it, a voiceover reading the code aloud word for word.
312
+ - **Fit:** Has its own 9:16 layout. 11 s default. Takes code, filename, lang. Code at ~15 px in the 16:9 editor reads small on a phone; the 9:16 card sets code at 40 px. About 10-14 lines fit. The catalog preview is blank, so judge it from a render.
313
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_snippet_light_modern.mp4
314
+
315
+ ### `animations.code_snippet_light_plus(…)`
316
+
317
+ A VS Code editor window in the Light+ theme that types out your code.
318
+
319
+ - **Looks:** 16:9: a full editor (title bar, file tab, explorer sidebar, line numbers, status bar) on a Light+ workbench, with a small header naming the theme. In 9:16 it switches to a portrait layout (checked in render 536): a small caps kicker and a 56 px file name at the top left, then a card in the upper half of the frame where lines slide in one by one under a moving highlight bar; at the end one line stays lit, the rest dim, and the card fades. The lower ~40 % of a 9:16 frame stays empty. The eye goes to the highlighted line.
320
+ - **For:** code, prove. **Fights:** Long lines (in 9:16 they wrap, breaking the code shape), a busy background behind it, a voiceover reading the code aloud word for word.
321
+ - **Fit:** Has its own 9:16 layout. 11 s default. Takes code, filename, lang. Code at ~15 px in the 16:9 editor reads small on a phone; the 9:16 card sets code at 40 px. About 10-14 lines fit. The catalog preview is blank, so judge it from a render.
322
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_snippet_light_plus.mp4
323
+
324
+ ### `animations.code_snippet_monokai(…)`
325
+
326
+ A VS Code editor window in the Monokai theme that types out your code.
327
+
328
+ - **Looks:** 16:9: a full editor (title bar, file tab, explorer sidebar, line numbers, status bar) on a Monokai workbench, with a small header naming the theme. In 9:16 it switches to a portrait layout (checked in render 536): a small caps kicker and a 56 px file name at the top left, then a card in the upper half of the frame where lines slide in one by one under a moving highlight bar; at the end one line stays lit, the rest dim, and the card fades. The lower ~40 % of a 9:16 frame stays empty. The eye goes to the highlighted line.
329
+ - **For:** code, prove. **Fights:** Long lines (in 9:16 they wrap, breaking the code shape), a busy background behind it, a voiceover reading the code aloud word for word.
330
+ - **Fit:** Has its own 9:16 layout. 11 s default. Takes code, filename, lang. Code at ~15 px in the 16:9 editor reads small on a phone; the 9:16 card sets code at 40 px. About 10-14 lines fit. The catalog preview is blank, so judge it from a render.
331
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_snippet_monokai.mp4
332
+
333
+ ### `animations.code_snippet_solarized_light(…)`
334
+
335
+ A VS Code editor window in the Solarized Light theme that types out your code.
336
+
337
+ - **Looks:** 16:9: a full editor (title bar, file tab, explorer sidebar, line numbers, status bar) on a Solarized Light workbench, with a small header naming the theme. In 9:16 it switches to a portrait layout (checked in render 536): a small caps kicker and a 56 px file name at the top left, then a card in the upper half of the frame where lines slide in one by one under a moving highlight bar; at the end one line stays lit, the rest dim, and the card fades. The lower ~40 % of a 9:16 frame stays empty. The eye goes to the highlighted line.
338
+ - **For:** code, prove. **Fights:** Long lines (in 9:16 they wrap, breaking the code shape), a busy background behind it, a voiceover reading the code aloud word for word.
339
+ - **Fit:** Has its own 9:16 layout. 11 s default. Takes code, filename, lang. Code at ~15 px in the 16:9 editor reads small on a phone; the 9:16 card sets code at 40 px. About 10-14 lines fit. The catalog preview is blank, so judge it from a render.
340
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_snippet_solarized_light.mp4
341
+
342
+ ### `animations.code_snippet_visual_studio_dark(…)`
343
+
344
+ A VS Code editor window in the Visual Studio Dark theme that types out your code.
345
+
346
+ - **Looks:** 16:9: a full editor (title bar, file tab, explorer sidebar, line numbers, status bar) on a Visual Studio Dark workbench, with a small header naming the theme. In 9:16 it switches to a portrait layout (checked in render 536): a small caps kicker and a 56 px file name at the top left, then a card in the upper half of the frame where lines slide in one by one under a moving highlight bar; at the end one line stays lit, the rest dim, and the card fades. The lower ~40 % of a 9:16 frame stays empty. The eye goes to the highlighted line.
347
+ - **For:** code, prove. **Fights:** Long lines (in 9:16 they wrap, breaking the code shape), a busy background behind it, a voiceover reading the code aloud word for word.
348
+ - **Fit:** Has its own 9:16 layout. 11 s default. Takes code, filename, lang. Code at ~15 px in the 16:9 editor reads small on a phone; the 9:16 card sets code at 40 px. About 10-14 lines fit. The catalog preview is blank, so judge it from a render.
349
+
350
+ ### `animations.code_snippet_visual_studio_light(…)`
351
+
352
+ A VS Code editor window in the Visual Studio Light theme that types out your code.
353
+
354
+ - **Looks:** 16:9: a full editor (title bar, file tab, explorer sidebar, line numbers, status bar) on a Visual Studio Light workbench, with a small header naming the theme. In 9:16 it switches to a portrait layout (checked in render 536): a small caps kicker and a 56 px file name at the top left, then a card in the upper half of the frame where lines slide in one by one under a moving highlight bar; at the end one line stays lit, the rest dim, and the card fades. The lower ~40 % of a 9:16 frame stays empty. The eye goes to the highlighted line.
355
+ - **For:** code, prove. **Fights:** Long lines (in 9:16 they wrap, breaking the code shape), a busy background behind it, a voiceover reading the code aloud word for word.
356
+ - **Fit:** Has its own 9:16 layout. 11 s default. Takes code, filename, lang. Code at ~15 px in the 16:9 editor reads small on a phone; the 9:16 card sets code at 40 px. About 10-14 lines fit. The catalog preview is blank, so judge it from a render.
357
+
358
+ ### `animations.code_typing(…)`
359
+
360
+ A minimal editor window that types your code with a caret.
361
+
362
+ - **Looks:** Dark editor window (file name in the title bar, line numbers) on a navy glow; characters appear one by one with a blinking caret. Quiet and readable.
363
+ - **For:** code. **Fights:** Long code (typing takes the whole beat), fast cuts.
364
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 5 s default. Takes code, lang, theme, filename. Code sits ~30 px in a 1920 frame: in 9:16 it shrinks to ~17 px, too small on a phone. Use it at 16:9, or build a code card from `text` lines at 9:16.
365
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__code_typing.mp4
366
+
367
+ ### `animations.custom_html(…)`
368
+
369
+ Your own HTML/CSS/GSAP animation, rendered frame by frame.
370
+
371
+ - **Looks:** Whatever you author. It draws on a transparent stage over the footage below.
372
+ - **For:** texture, emphasize, demo. **Fights:** Nothing by itself; the risk is effort and untested layout.
373
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 5 s default. Takes src, html. You write it, so you must render and look at it. See the author contract in animations-catalog.md.
374
+
375
+ ### `animations.instagram_follow(…)`
376
+
377
+ An Instagram-style profile pill with a Follow button that flips to Following.
378
+
379
+ - **Looks:** A dark rounded pill with avatar, display name, handle and follower count; a pink Follow button that is pressed and turns grey "Following". Native vertical design, small in the frame.
380
+ - **For:** cta, brand. **Fights:** A busy picture right behind the pill; landscape frames (it is designed for 9:16).
381
+ - **Fit:** Vertical design (1080x1920): fills 9:16; in 16:9 it shrinks with side bands. 5 s default. Takes displayName, handle, followers, avatarUrl, url. Image asset via avatarUrl. One name and handle.
382
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__instagram_follow.mp4
383
+
384
+ ### `animations.ios26_liquid_glass(…)`
385
+
386
+ An iOS 26 liquid-glass device scene.
387
+
388
+ - **Looks:** A blurred blue-violet wallpaper with frosted glass panels; slow, glossy and abstract.
389
+ - **For:** texture, establish. **Fights:** Anything that needs your own content: it takes no params.
390
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 15 s default. Takes no params. Demo block: most of what it shows is fixed artwork; only the listed params change. No params at all. WebGL: heavy render.
391
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__ios26_liquid_glass.mp4?v=f9f046f0
392
+
393
+ ### `animations.liquid_glass_context_menu(…)`
394
+
395
+ A liquid-glass context menu over an aurora shader background.
396
+
397
+ - **Looks:** A moving aurora gradient behind a frosted glass menu panel listing a file name and metadata.
398
+ - **For:** demo, texture. **Fights:** Content that is not a file or menu.
399
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 8 s default. Takes fileName, fileMeta. Demo block: most of what it shows is fixed artwork; only the listed params change. fileName and fileMeta are yours. No catalog preview.
400
+
401
+ ### `animations.liquid_glass_media_controls(…)`
402
+
403
+ A small liquid-glass media player panel.
404
+
405
+ - **Looks:** A compact frosted panel with track title, artist and play controls, small in the frame on dark.
406
+ - **For:** demo. **Fights:** Large phones-first framing: the panel is small.
407
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 8 s default. Takes trackTitle, artist. Demo block: most of what it shows is fixed artwork; only the listed params change. trackTitle and artist are yours.
408
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__liquid_glass_media_controls.mp4?v=24d2c880
409
+
410
+ ### `animations.liquid_glass_notification(…)`
411
+
412
+ Liquid-glass notifications sliding in over a colourful wave wallpaper.
413
+
414
+ - **Looks:** A loud orange/blue/purple wave wallpaper fills the frame; frosted notification cards slide in at the top right.
415
+ - **For:** demo, announce. **Fights:** Brand palettes that clash with the fixed rainbow wallpaper.
416
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 8 s default. Takes title, body, messageText. Demo block: most of what it shows is fixed artwork; only the listed params change. title, body and messageText are yours.
417
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__liquid_glass_notification.mp4
418
+
419
+ ### `animations.liquid_glass_widgets(…)`
420
+
421
+ A row of liquid-glass widgets with a title card.
422
+
423
+ - **Looks:** Dark frame with a row of small glossy widget tiles and a frosted card; restrained motion.
424
+ - **For:** demo. **Fights:** Anything that needs to be read from a phone: the tiles are small.
425
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 8 s default. Takes showcaseTitle, showcaseDescription. Demo block: most of what it shows is fixed artwork; only the listed params change. showcaseTitle and showcaseDescription are yours.
426
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__liquid_glass_widgets.mp4
427
+
428
+ ### `animations.logo_outro(…)`
429
+
430
+ A logo sting: the logo appears with a glow and a tagline under it.
431
+
432
+ - **Looks:** Dark frame; a small accent dot grows into the logo badge with a soft glow behind it, then the tagline (and URL) fades in below, centred.
433
+ - **For:** brand, cta. **Fights:** Being anywhere but the end; a missing logo (without logoUrl or brand it shows a Figma-style demo mark).
434
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 6 s default. Takes tagline, url, logoUrl, brand, accent. Image asset via logoUrl. Pass logoUrl or brand: "scenerok". Tagline: one short line.
435
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__logo_outro.mp4
436
+
437
+ ### `animations.lower_third(…)`
438
+
439
+ A plain lower third: a bold name over a smaller role, with an accent rule.
440
+
441
+ - **Looks:** A thin blue rule draws out, then a bold white name and a grey role appear under it, left-aligned. No box behind the text.
442
+ - **For:** name. **Fights:** Bright busy footage behind it (there is no plate for contrast).
443
+ - **Fit:** Has its own 9:16 layout. 5 s default. Takes title, subtitle. Name and role, one line each.
444
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__lower_third.mp4
445
+
446
+ ### `animations.lower_third_bild(…)`
447
+
448
+ A tabloid-style lower third: a white name box with a red tag.
449
+
450
+ - **Looks:** A white box with a heavy black name and a red role tag under it. Loud, news-like.
451
+ - **For:** name, announce. **Fights:** Calm, premium edits.
452
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and a layout profile repositions it; type reads small. 8 s default. Takes title, subtitle, accent, bg. Short name, one-word role.
453
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__lower_third_bild.mp4
454
+
455
+ ### `animations.lt_accent_underline(…)`
456
+
457
+ A broadcast lower third: a name and a role in a caps name with a coloured underline.
458
+
459
+ - **Looks:** A caps name with a coloured underline enters from the left edge of the lower third, the name (bold) first and the role (smaller) after; it holds still once settled. The frame above stays free for the picture.
460
+ - **For:** name. **Fights:** A picture with its own text in the lower third, a second lower third, long titles (two short lines is the design).
461
+ - **Fit:** Has its own 9:16 layout. 5 s default. Takes title, subtitle, accent, bg. Name up to ~24 characters, role up to ~32.
462
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__lt_accent_underline.mp4
463
+
464
+ ### `animations.lt_bold_block(…)`
465
+
466
+ A broadcast lower third: a name and a role in a heavy block with a yellow role bar.
467
+
468
+ - **Looks:** A heavy block with a yellow role bar enters from the left edge of the lower third, the name (bold) first and the role (smaller) after; it holds still once settled. The frame above stays free for the picture. Strong and broadcast-like.
469
+ - **For:** name. **Fights:** A picture with its own text in the lower third, a second lower third, long titles (two short lines is the design).
470
+ - **Fit:** Has its own 9:16 layout. 5 s default. Takes title, subtitle, accent, bg. Name up to ~24 characters, role up to ~32.
471
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__lt_bold_block.mp4
472
+
473
+ ### `animations.lt_clean_bar(…)`
474
+
475
+ A broadcast lower third: a name and a role in a white card with an accent edge.
476
+
477
+ - **Looks:** A white card with an accent edge enters from the left edge of the lower third, the name (bold) first and the role (smaller) after; it holds still once settled. The frame above stays free for the picture.
478
+ - **For:** name. **Fights:** A picture with its own text in the lower third, a second lower third, long titles (two short lines is the design).
479
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and a layout profile repositions it; type reads small. 5 s default. Takes title, subtitle, accent, bg. Name up to ~24 characters, role up to ~32.
480
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__lt_clean_bar.mp4
481
+
482
+ ### `animations.lt_color_block(…)`
483
+
484
+ A broadcast lower third: a name and a role in a solid accent-coloured block.
485
+
486
+ - **Looks:** A solid accent-coloured block enters from the left edge of the lower third, the name (bold) first and the role (smaller) after; it holds still once settled. The frame above stays free for the picture.
487
+ - **For:** name. **Fights:** A picture with its own text in the lower third, a second lower third, long titles (two short lines is the design).
488
+ - **Fit:** Has its own 9:16 layout. 5 s default. Takes title, subtitle, accent, bg. Name up to ~24 characters, role up to ~32.
489
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__lt_color_block.mp4
490
+
491
+ ### `animations.lt_dark_card(…)`
492
+
493
+ A broadcast lower third: a name and a role in a dark card.
494
+
495
+ - **Looks:** A dark card enters from the left edge of the lower third, the name (bold) first and the role (smaller) after; it holds still once settled. The frame above stays free for the picture.
496
+ - **For:** name. **Fights:** A picture with its own text in the lower third, a second lower third, long titles (two short lines is the design).
497
+ - **Fit:** Has its own 9:16 layout. 5 s default. Takes title, subtitle, accent, bg. Name up to ~24 characters, role up to ~32.
498
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__lt_dark_card.mp4
499
+
500
+ ### `animations.lt_kicker_name(…)`
501
+
502
+ A lower third with a small coloured kicker tag above a caps name.
503
+
504
+ - **Looks:** A small accent tag (the kicker, e.g. a role or label) appears first, then the name in caps below with an underline. Lower third of the frame; holds still once in.
505
+ - **For:** name. **Fights:** Pictures with text low in frame; a second lower third.
506
+ - **Fit:** Has its own 9:16 layout. 5 s default. Takes kicker, title, accent. Kicker: one or two words. Name: up to ~24 characters.
507
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__lt_kicker_name.mp4
508
+
509
+ ### `animations.lt_mask_reveal(…)`
510
+
511
+ A broadcast lower third: a name and a role in a name revealed by a wipe mask.
512
+
513
+ - **Looks:** A name revealed by a wipe mask enters from the left edge of the lower third, the name (bold) first and the role (smaller) after; it holds still once settled. The frame above stays free for the picture. The text is wiped on rather than faded.
514
+ - **For:** name. **Fights:** A picture with its own text in the lower third, a second lower third, long titles (two short lines is the design).
515
+ - **Fit:** Has its own 9:16 layout. 5 s default. Takes title, subtitle, accent, bg. Name up to ~24 characters, role up to ~32.
516
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__lt_mask_reveal.mp4
517
+
518
+ ### `animations.lt_side_rule(…)`
519
+
520
+ A broadcast lower third: a name and a role in a thin vertical rule beside the name.
521
+
522
+ - **Looks:** A thin vertical rule beside the name enters from the left edge of the lower third, the name (bold) first and the role (smaller) after; it holds still once settled. The frame above stays free for the picture.
523
+ - **For:** name. **Fights:** A picture with its own text in the lower third, a second lower third, long titles (two short lines is the design).
524
+ - **Fit:** Has its own 9:16 layout. 5 s default. Takes title, subtitle, accent, bg. Name up to ~24 characters, role up to ~32.
525
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__lt_side_rule.mp4
526
+
527
+ ### `animations.lt_soft_pill(…)`
528
+
529
+ A broadcast lower third: a name and a role in a soft white pill.
530
+
531
+ - **Looks:** A soft white pill enters from the left edge of the lower third, the name (bold) first and the role (smaller) after; it holds still once settled. The frame above stays free for the picture.
532
+ - **For:** name. **Fights:** A picture with its own text in the lower third, a second lower third, long titles (two short lines is the design).
533
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and a layout profile repositions it; type reads small. 5 s default. Takes title, subtitle, accent, bg. Name up to ~24 characters, role up to ~32.
534
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__lt_soft_pill.mp4
535
+
536
+ ### `animations.lt_stack_bars(…)`
537
+
538
+ A broadcast lower third: a name and a role in a dark bar with a yellow role bar stacked under it.
539
+
540
+ - **Looks:** A dark bar with a yellow role bar stacked under it enters from the left edge of the lower third, the name (bold) first and the role (smaller) after; it holds still once settled. The frame above stays free for the picture.
541
+ - **For:** name. **Fights:** A picture with its own text in the lower third, a second lower third, long titles (two short lines is the design).
542
+ - **Fit:** Has its own 9:16 layout. 5 s default. Takes title, subtitle, accent, bg. Name up to ~24 characters, role up to ~32.
543
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__lt_stack_bars.mp4?v=be9b5b4f
544
+
545
+ ### `animations.macos_notification(…)`
546
+
547
+ A macOS notification banner sliding in at the top right.
548
+
549
+ - **Looks:** A small grey translucent banner with app icon, app name, title and body slides in at the top right and holds. Tiny in a phone frame.
550
+ - **For:** prove, announce. **Fights:** Text-heavy frames; 9:16 (it is a small corner element).
551
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 5 s default. Takes appName, timeLabel, title, body. App name, title and one body line.
552
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__macos_notification.mp4
553
+
554
+ ### `animations.macos_tahoe_liquid_glass(…)`
555
+
556
+ A macOS Tahoe desktop with liquid-glass windows over a wallpaper.
557
+
558
+ - **Looks:** A soft blue-violet desktop wallpaper with a menu bar, glass windows, a toast and a weather widget. Glossy and slow.
559
+ - **For:** demo, establish. **Fights:** Fast pacing; anything that is not a desktop.
560
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 15 s default. Takes wallpaperUrl, windowTitle, toastBody, weatherLocation. Image asset via wallpaperUrl. Demo block: most of what it shows is fixed artwork; only the listed params change. wallpaperUrl, windowTitle, toastBody, weatherLocation are yours. WebGL: heavy render.
561
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__macos_tahoe_liquid_glass.mp4?v=7bc0b4f8
562
+
563
+ ### `animations.news_ticker(…)`
564
+
565
+ A TV news strap: a red label, a headline and a scrolling ticker.
566
+
567
+ - **Looks:** A dark strap across the lower part of the frame with a red "breaking" label at the left, a bold headline with an accent-coloured phrase, and a ticker crawling along a thinner bar under it.
568
+ - **For:** announce. **Fights:** Premium or calm tone; a second strap or lower third.
569
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and a layout profile repositions it; type reads small. 7 s default. Takes desk, time, label, headline, headlineAccent, ticker. Headline under ~40 characters; ticker items separated by newlines.
570
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__news_ticker.mp4
571
+
572
+ ### `animations.reddit_post(…)`
573
+
574
+ A Reddit post card with subreddit, title, body and votes.
575
+
576
+ - **Looks:** A small dark card: subreddit and author at the top, a bold title, a few lines of body, vote and comment counts at the bottom.
577
+ - **For:** prove, quote. **Fights:** Small phones (the card is small), long post bodies.
578
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 5 s default. Takes subreddit, author, title, body, votes. Title plus two or three body lines.
579
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__reddit_post.mp4
580
+
581
+ ### `animations.spotify_card(…)`
582
+
583
+ A Spotify now-playing card with album art and track name.
584
+
585
+ - **Looks:** A tall dark card filling much of a 9:16 frame: a big green album square with a music note, the track title and artist under it. Native vertical design.
586
+ - **For:** sound, prove. **Fights:** 16:9 frames (it is a vertical card).
587
+ - **Fit:** Vertical design (1080x1920): fills 9:16; in 16:9 it shrinks with side bands. 5 s default. Takes track, artist. Track and artist.
588
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__spotify_card.mp4
589
+
590
+ ### `animations.text_counter_stat(…)`
591
+
592
+ A big number that counts up, with a small label and an underline.
593
+
594
+ - **Looks:** Transparent overlay. A very large bold number in the centre ticks up to its value with an accent-coloured suffix, a small spaced-out caps label under it and a short accent underline. The eye locks on the number.
595
+ - **For:** count, emphasize. **Fights:** A second number on screen; numbers that are not impressive at a glance.
596
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 5 s default. Takes value, label, prefix, suffix, color, accent. One number and a 1-3 word label. suffix defaults to "+", so pass suffix: "" unless the number is a floor. ~146 px number in 9:16.
597
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__text_counter_stat.mp4?v=648434e3
598
+
599
+ ### `animations.text_glitch_title(…)`
600
+
601
+ A title that arrives with an RGB-split glitch and settles clean.
602
+
603
+ - **Looks:** Transparent overlay; a heavy caps title jitters with red/blue channel offsets, then snaps to clean white.
604
+ - **For:** announce, emphasize. **Fights:** Calm or premium tone, motion-sensitive viewers.
605
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 5 s default. Takes text, color. Two or three words.
606
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__text_glitch_title.mp4?v=b2bec3e7
607
+
608
+ ### `animations.text_gradient_sweep(…)`
609
+
610
+ A headline filled with a moving gradient.
611
+
612
+ - **Looks:** Transparent overlay; a bold headline whose letters fill with a pink-to-violet gradient that sweeps across them.
613
+ - **For:** announce. **Fights:** Brand palettes that do not include the gradient colours (set from/to), photos behind it.
614
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 5 s default. Takes text, from, to. A short headline, one line.
615
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__text_gradient_sweep.mp4?v=fa7aee38
616
+
617
+ ### `animations.text_kinetic_words(…)`
618
+
619
+ Kinetic type: one big word at a time, on the beat.
620
+
621
+ - **Looks:** Transparent overlay; single words flash up large in the centre one after another, alternating white and an accent colour.
622
+ - **For:** emphasize, announce. **Fights:** Sentences that need reading as a whole, slow music.
623
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 5 s default. Takes text, color, accent. Three to six short words.
624
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__text_kinetic_words.mp4?v=15009872
625
+
626
+ ### `animations.text_line_stack(…)`
627
+
628
+ Two or three lines of a title revealed through masks, one after another.
629
+
630
+ - **Looks:** Transparent overlay; a short accent rule, then each line rises out of a mask, the second in the accent colour. Clean editorial look.
631
+ - **For:** announce, list. **Fights:** Long lines (two to four words per line is the design).
632
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 5 s default. Takes line1, line2, line3, color, accent. line1, line2, optional line3.
633
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__text_line_stack.mp4?v=d11dc02f
634
+
635
+ ### `animations.text_neon_flicker(…)`
636
+
637
+ A neon-sign title that flickers on.
638
+
639
+ - **Looks:** Transparent overlay; grey unlit letters flicker, then glow in a saturated neon colour with a soft halo.
640
+ - **For:** establish, emphasize. **Fights:** Bright backgrounds (the glow needs dark), motion-sensitive viewers.
641
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 5 s default. Takes text, color. One or two words.
642
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__text_neon_flicker.mp4?v=028f1626
643
+
644
+ ### `animations.text_scramble_decode(…)`
645
+
646
+ A title that decodes from random characters.
647
+
648
+ - **Looks:** Transparent overlay; a line of monospaced random symbols in an accent green resolves left to right into the real words.
649
+ - **For:** announce, code. **Fights:** Warm or human tone; long titles.
650
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 5 s default. Takes text, color, accent. One short line.
651
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__text_scramble_decode.mp4?v=5578cf99
652
+
653
+ ### `animations.text_typewriter_quote(…)`
654
+
655
+ A quote typed out in italics, with the author under it.
656
+
657
+ - **Looks:** Transparent overlay; a serif italic quote types out with a caret, centred, then the attribution fades in small below.
658
+ - **For:** quote. **Fights:** Long quotes (typing time grows), busy pictures behind serif type.
659
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 5 s default. Takes text, author, color, accent. One or two sentences.
660
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__text_typewriter_quote.mp4?v=c4c64c37
661
+
662
+ ### `animations.text_word_cascade(…)`
663
+
664
+ A headline whose words drop in one by one, the last in an accent colour.
665
+
666
+ - **Looks:** Transparent overlay; bold words fall into place in sequence, centred, with the last word in the accent colour.
667
+ - **For:** announce. **Fights:** Headlines whose key word is not last.
668
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 5 s default. Takes text, color, accent. Three to eight words.
669
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__text_word_cascade.mp4?v=2eca3c74
670
+
671
+ ### `animations.tiktok_follow(…)`
672
+
673
+ A TikTok-style profile pill with a Follow button that flips to Following.
674
+
675
+ - **Looks:** A dark rounded pill with avatar, display name, handle and followers; a red Follow button is pressed and turns grey "Following". Native vertical design.
676
+ - **For:** cta, brand. **Fights:** Landscape frames; a busy picture right behind it.
677
+ - **Fit:** Vertical design (1080x1920): fills 9:16; in 16:9 it shrinks with side bands. 5 s default. Takes displayName, handle, followers, avatarUrl, url. Image asset via avatarUrl. One name and handle.
678
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__tiktok_follow.mp4
679
+
680
+ ### `animations.ui_3d_reveal(…)`
681
+
682
+ A design-tool canvas (Figma-like) that reveals a UI in 3D.
683
+
684
+ - **Looks:** Dark canvas with a faint logo, then a desktop design-tool window slides up in perspective showing a UI mock.
685
+ - **For:** demo, announce. **Fights:** Short beats (13 s default), phone frames (the window is small).
686
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 13 s default. Takes heroTitle, outroUrl. Demo block: most of what it shows is fixed artwork; only the listed params change. heroTitle and outroUrl are yours.
687
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__ui_3d_reveal.mp4
688
+
689
+ ### `animations.vfx_iphone_device(…)`
690
+
691
+ A 3D iPhone that shows your screenshot, lit like a product render.
692
+
693
+ - **Looks:** A dark studio frame with a glossy 3D phone on a turntable that breathes and turns slightly; your image is on its screen.
694
+ - **For:** demo, prove. **Fights:** Landscape screenshots; quick cuts (15 s default).
695
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 15 s default. Takes imageUrl. Image asset via imageUrl. Needs imageUrl (portrait screenshot). WebGL: heavy render. No catalog preview.
696
+
697
+ ### `animations.vpn_youtube_spot(…)`
698
+
699
+ An app-ad layout: a bold two-line headline beside a phone mock-up.
700
+
701
+ - **Looks:** Bright white-blue frame; a heavy black-and-blue two-line headline at the left, a subtext line, and a phone on the right whose screen shows an app card.
702
+ - **For:** announce, demo. **Fights:** Dark palettes; apps that are not mobile.
703
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 7 s default. Takes headlineLine1, headlineLine2, subtext, appTitle, appSubtitle. Demo block: most of what it shows is fixed artwork; only the listed params change. headlineLine1, headlineLine2, subtext, appTitle and appSubtitle are yours.
704
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__vpn_youtube_spot.mp4
705
+
706
+ ### `animations.x_post(…)`
707
+
708
+ An X (Twitter) post card.
709
+
710
+ - **Looks:** A small dark card: avatar, display name, handle, the post body, a hashtag and engagement counts.
711
+ - **For:** prove, quote. **Fights:** Small phones (the card is small), long posts.
712
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and sits in a centred 16:9 band. 5 s default. Takes displayName, handle, body, hashtag, timestamp. Body under ~200 characters.
713
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__x_post.mp4
714
+
715
+ ### `animations.yt_lower_third(…)`
716
+
717
+ A YouTube channel lower third with a Subscribe button.
718
+
719
+ - **Looks:** A small white pill in the lower corner with avatar, channel name, subscriber count and a dark Subscribe button.
720
+ - **For:** cta, name. **Fights:** Busy lower-corner content; 9:16 (it reads tiny).
721
+ - **Fit:** 16:9 design: in 9:16 it scales to 56 % and a layout profile repositions it; type reads small. 5 s default. Takes channel, subscribers, avatarUrl. Image asset via avatarUrl. Channel name and count.
722
+ - **Preview:** https://assets-public.scenerok.com/catalog/animations__yt_lower_third.mp4
723
+
724
+ ## Text
725
+
726
+ Syntax and params: vidscript-guide.md → Text Overlay.
727
+
728
+ ### `text`
729
+
730
+ A plain text layer: your font, size, colour and position.
731
+
732
+ - **Looks:** Exactly the type you set, still unless you add `animate:`. The most legible thing in the toolbox; with a strong font and size it carries a beat on its own.
733
+ - **For:** announce, list, count, cta, name, quote. **Fights:** A busy picture directly behind it (add a plate, shadow or stroke), sizes under 2.2 % of the frame height.
734
+ - **Fit:** Validate measures it (wrap, shrink, collisions) but its widths are estimates: check a frame. font: is one Google Fonts family at weight 400.
735
+
736
+ ### `text+area`
737
+
738
+ Text placed in a named grid area that wraps and shrinks to fit.
739
+
740
+ - **Looks:** The same text, centred in its cell (title, stage, lower-third, caption, or your own grid). Predictable and safe, a little generic.
741
+ - **For:** announce, caption, list. **Fights:** Designed layouts where position is part of the look.
742
+
743
+ ### `text+plate`
744
+
745
+ Text over a `solid(...)` with a radius: a card, pill or button.
746
+
747
+ - **Looks:** A coloured shape with type on it; reads as a UI element (a button, a badge, a label). The shape carries contrast, so it works over any picture.
748
+ - **For:** cta, name, count. **Fights:** Too many plates (the frame turns into a dashboard).
749
+ - **Fit:** Text background:, padding: and radius: are ignored by the renderer; a solid under the text is the way.
750
+
751
+ ### `text+stagger`
752
+
753
+ Text revealed word by word or character by character (`stagger:`).
754
+
755
+ - **Looks:** The line builds piece by piece over its animation.
756
+ - **For:** announce, emphasize. **Fights:** Combined with an exit in the same list (the reveal rendered half-done in testing), long lines.
757
+
758
+ ### `captions`
759
+
760
+ Burned-in captions from an SRT file, one text layer per cue.
761
+
762
+ - **Looks:** Timed lines of text in one style, swapping with the speech.
763
+ - **For:** caption. **Fights:** Other text in the caption area; local SRT paths on hosted renders (needs an HTTPS URL).
764
+
765
+ ## Motion primitives
766
+
767
+ Syntax and params: text-styles.md.
768
+
769
+ ### `motion.fadeIn(…)`
770
+
771
+ Opacity from 0 to 1 at the start of the block.
772
+
773
+ - **Looks:** The element simply appears out of nothing; no movement. The quietest entrance there is.
774
+ - **For:** establish, list. **Fights:** Moments that need impact.
775
+ - **Fit:** Default 0.5 s. A still element is often right: motion should mean something (arrival, emphasis), not decorate.
776
+
777
+ ### `motion.fadeOut(…)`
778
+
779
+ Opacity from 1 to 0 at the end of the block.
780
+
781
+ - **Looks:** The element dims away over the last part of its window; the frame empties softly.
782
+ - **For:** transition. **Fights:** A hard cut that should stay hard.
783
+ - **Fit:** Default 0.5 s, aligned to the end of the block.
784
+
785
+ ### `motion.slideX(…)`
786
+
787
+ Moves the element horizontally from one offset to another.
788
+
789
+ - **Looks:** The element travels sideways into place. With a large offset it enters from off-frame.
790
+ - **For:** list, transition. **Fights:** A second sideways move at the same time.
791
+ - **Fit:** slideX(from, to, duration); default 0.6 s.
792
+
793
+ ### `motion.slideY(…)`
794
+
795
+ Moves the element vertically from one offset to another.
796
+
797
+ - **Looks:** The element travels up or down into place, without fading.
798
+ - **For:** list. **Fights:** Text that should be read during the move.
799
+ - **Fit:** slideY(from, to, duration); default 0.6 s.
800
+
801
+ ### `motion.popIn(…)`
802
+
803
+ Scales from 55 % past 100 % and settles, while fading in.
804
+
805
+ - **Looks:** The element bursts in slightly oversized (106 %) and settles; a small, confident bounce. The eye snaps to it.
806
+ - **For:** emphasize, count, cta. **Fights:** Several pops at once (they cancel each other out), calm or serious tone.
807
+ - **Fit:** Default 0.5 s.
808
+
809
+ ### `motion.riseIn(…)`
810
+
811
+ Rises 80 px into place while fading in.
812
+
813
+ - **Looks:** The element drifts up a short distance as it appears; editorial, gentle, reads as "arriving".
814
+ - **For:** announce, list, establish. **Fights:** Things that should feel heavy or sudden.
815
+ - **Fit:** riseIn(duration, distance).
816
+
817
+ ### `motion.swingIn(…)`
818
+
819
+ Rotates in from -14° and rises while fading in.
820
+
821
+ - **Looks:** The element swings into place like a hanging sign. Playful.
822
+ - **For:** emphasize. **Fights:** Serious or premium tone; long text.
823
+
824
+ ### `motion.glitchIn(…)`
825
+
826
+ Fades in from 20 % with a positional jitter.
827
+
828
+ - **Looks:** The element shakes rapidly by a few pixels as it comes up to full opacity; nervy, digital.
829
+ - **For:** texture, emphasize. **Fights:** Calm tone, motion-sensitive viewers.
830
+
831
+ ### `motion.float(…)`
832
+
833
+ A gentle continuous vertical drift.
834
+
835
+ - **Looks:** The element bobs up and down by a few pixels for as long as it is on screen; it feels alive without drawing attention.
836
+ - **For:** texture, brand. **Fights:** Text that must be read precisely; several floating elements out of phase.
837
+ - **Fit:** float(period, amplitude). Small amplitudes (8-14 px) read as life; large ones read as wobble.
838
+
839
+ ### `motion.typewriter(…)`
840
+
841
+ Reveals text character by character.
842
+
843
+ - **Looks:** The text types itself out left to right; the eye follows the leading edge.
844
+ - **For:** code, quote. **Fights:** Long text (it takes the whole beat), multi-line blocks in one text layer.
845
+ - **Fit:** typewriter(duration). For code, one text layer per line types more reliably.
846
+
847
+ ## Transitions
848
+
849
+ Syntax and params: transitions-catalog.md.
850
+
851
+ ### `tr.dissolve()`
852
+
853
+ A cross-fade.
854
+
855
+ - **Looks:** Both shots are visible at once at mid-point, each half transparent. Nothing moves; the eye barely notices it.
856
+ - **For:** transition, establish. **Fights:** Fast, energetic cuts (it softens them).
857
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end.
858
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__dissolve.mp4
859
+
860
+ ### `tr.push()`
861
+
862
+ The new shot pushes the old one out of frame.
863
+
864
+ - **Looks:** Both shots slide together in one direction like a carousel; the edge between them is hard. direction: sets the side.
865
+ - **For:** transition. **Fights:** Shots with strong opposite motion inside them.
866
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end.
867
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__push.mp4
868
+
869
+ ### `tr.cover()`
870
+
871
+ The new shot slides over the old one, like a door.
872
+
873
+ - **Looks:** The incoming shot moves in over a still outgoing shot, which is revealed behind as a doorway opening.
874
+ - **For:** transition. **Fights:** Busy outgoing shots (they stay visible under the move).
875
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end.
876
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__cover.mp4
877
+
878
+ ### `tr.radial()`
879
+
880
+ The new shot opens from the centre in a circle.
881
+
882
+ - **Looks:** A growing circle in the middle shows the new shot; the old shot remains outside the ring until it fills the frame.
883
+ - **For:** transition. **Fights:** Shots whose subject is off-centre.
884
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end.
885
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__radial.mp4
886
+
887
+ ### `tr.grid()`
888
+
889
+ The frame flips in a grid of tiles.
890
+
891
+ - **Looks:** The picture breaks into a grid of square tiles that flip over in a wave to show the new shot. Busy and techy.
892
+ - **For:** transition. **Fights:** Calm or premium edits; cuts between similar shots, where a hard cut reads better.
893
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end.
894
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__grid.mp4
895
+
896
+ ### `tr.scale()`
897
+
898
+ A cross-zoom: the old shot zooms in and blurs into the new one.
899
+
900
+ - **Looks:** The old shot rushes toward the viewer with radial blur while the new one zooms out of it. Fast and energetic.
901
+ - **For:** transition. **Fights:** Calm or premium edits; cuts between similar shots, where a hard cut reads better.
902
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end.
903
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__scale.mp4
904
+
905
+ ### `tr.cube()`
906
+
907
+ The two shots as faces of a rotating cube.
908
+
909
+ - **Looks:** The frame turns like a 3D cube; the old shot recedes on one face as the new shot comes round on the next.
910
+ - **For:** transition. **Fights:** Calm or premium edits; cuts between similar shots, where a hard cut reads better.
911
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end.
912
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__cube.mp4
913
+
914
+ ### `tr.blur()`
915
+
916
+ A blur-through: the old shot blurs out, the new one blurs in.
917
+
918
+ - **Looks:** At mid-point both shots are soft and mixed; focus returns on the new shot. Gentle.
919
+ - **For:** transition, establish. **Fights:** Text-heavy shots (the text smears).
920
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end.
921
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__blur.mp4
922
+
923
+ ### `tr.distortion()`
924
+
925
+ A directional warp between the shots.
926
+
927
+ - **Looks:** The old shot stretches and smears in one direction and the new one snaps in behind it.
928
+ - **For:** transition. **Fights:** Calm or premium edits; cuts between similar shots, where a hard cut reads better.
929
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end.
930
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__distortion.mp4
931
+
932
+ ### `tr.destruction()`
933
+
934
+ A burn: the new shot burns through the old one by brightness.
935
+
936
+ - **Looks:** Bright areas of the picture go first, with a hot edge eating through the old shot to reveal the new.
937
+ - **For:** transition. **Fights:** Calm or premium edits; cuts between similar shots, where a hard cut reads better.
938
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end.
939
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__destruction.mp4
940
+
941
+ ### `tr.light()`
942
+
943
+ A luminance melt.
944
+
945
+ - **Looks:** The old shot melts downward by brightness, dripping into the new one.
946
+ - **For:** transition. **Fights:** Calm or premium edits; cuts between similar shots, where a hard cut reads better.
947
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end.
948
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__light.mp4
949
+
950
+ ### `tr.mechanical()`
951
+
952
+ Window blinds.
953
+
954
+ - **Looks:** Horizontal slats open across the frame to show the new shot, like blinds turning.
955
+ - **For:** transition. **Fights:** Soft, organic material.
956
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end.
957
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__mechanical.mp4
958
+
959
+ ### `tr.wipe()`
960
+
961
+ A linear wipe.
962
+
963
+ - **Looks:** A straight edge travels across the frame, old shot on one side, new on the other. direction: sets the side.
964
+ - **For:** transition. **Fights:** Shots where the edge would cut through a face.
965
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end.
966
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__wipe.mp4
967
+
968
+ ### `tr.cinematic_zoom()`
969
+
970
+ A cross-zoom tuned for a filmic push.
971
+
972
+ - **Looks:** Like `scale`: the old shot pushes in with radial blur and resolves into the new one.
973
+ - **For:** transition. **Fights:** Calm or premium edits; cuts between similar shots, where a hard cut reads better.
974
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end.
975
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__cinematic_zoom.mp4
976
+
977
+ ### `tr.whip_pan()`
978
+
979
+ A whip pan: a fast slide with motion blur.
980
+
981
+ - **Looks:** Both shots streak sideways with heavy horizontal blur; the cut happens inside the blur. Feels like a fast camera move. direction: sets the side.
982
+ - **For:** transition. **Fights:** Static, calm shots; text on screen during the move.
983
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end.
984
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__whip_pan.mp4
985
+
986
+ ### `tr.light_leak()`
987
+
988
+ A bright light leak that washes into the new shot.
989
+
990
+ - **Looks:** The frame blooms with warm light, then the new shot fades up out of it. Filmic, nostalgic.
991
+ - **For:** transition. **Fights:** Flashing or rapid luminance change: avoid repeating it for viewers sensitive to flicker.
992
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end. Flashing or rapid luminance change: avoid repeating it for viewers sensitive to flicker.
993
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__light_leak.mp4
994
+
995
+ ### `tr.flash()`
996
+
997
+ A flash through white.
998
+
999
+ - **Looks:** The old shot burns up to white, then the new shot comes down out of the white. Punchy.
1000
+ - **For:** transition. **Fights:** Flashing or rapid luminance change: avoid repeating it for viewers sensitive to flicker.
1001
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end. Flashing or rapid luminance change: avoid repeating it for viewers sensitive to flicker.
1002
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__flash.mp4
1003
+
1004
+ ### `tr.warp_morph()`
1005
+
1006
+ A warping morph between the shots.
1007
+
1008
+ - **Looks:** Both shots ripple and bend into each other as they dissolve, like a liquid morph.
1009
+ - **For:** transition. **Fights:** Calm or premium edits; cuts between similar shots, where a hard cut reads better.
1010
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end.
1011
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__warp_morph.mp4
1012
+
1013
+ ### `tr.domain_warp()`
1014
+
1015
+ A noise-driven warp between the shots.
1016
+
1017
+ - **Looks:** The picture swirls in organic, cloudy distortion (fractal noise) as one shot turns into the other.
1018
+ - **For:** transition. **Fights:** Calm or premium edits; cuts between similar shots, where a hard cut reads better.
1019
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end.
1020
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__domain_warp.mp4
1021
+
1022
+ ### `tr.chromatic_split()`
1023
+
1024
+ An RGB split that tears one shot into the next.
1025
+
1026
+ - **Looks:** Red, green and blue channels pull apart radially, then the new shot pulls together. Glitchy and digital.
1027
+ - **For:** transition. **Fights:** Calm or premium edits; cuts between similar shots, where a hard cut reads better.
1028
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end. Flashing or rapid luminance change: avoid repeating it for viewers sensitive to flicker.
1029
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__chromatic_split.mp4
1030
+
1031
+ ### `tr.lens()`
1032
+
1033
+ A gravitational-lens warp.
1034
+
1035
+ - **Looks:** The centre of the frame bulges like a lens and the new shot appears through the bulge.
1036
+ - **For:** transition. **Fights:** Calm or premium edits; cuts between similar shots, where a hard cut reads better.
1037
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end.
1038
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__lens.mp4
1039
+
1040
+ ### `tr.glitch()`
1041
+
1042
+ A block glitch.
1043
+
1044
+ - **Looks:** The frame breaks into shifted rectangular blocks and colour errors, then resolves on the new shot.
1045
+ - **For:** transition. **Fights:** Calm or premium edits; cuts between similar shots, where a hard cut reads better.
1046
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end. Flashing or rapid luminance change: avoid repeating it for viewers sensitive to flicker.
1047
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__glitch.mp4
1048
+
1049
+ ### `tr.swirl()`
1050
+
1051
+ A vortex swirl.
1052
+
1053
+ - **Looks:** The old shot spins into a whirlpool at the centre and unwinds into the new one.
1054
+ - **For:** transition. **Fights:** Calm or premium edits; cuts between similar shots, where a hard cut reads better.
1055
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end.
1056
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__swirl.mp4
1057
+
1058
+ ### `tr.thermal()`
1059
+
1060
+ A heat-haze dissolve.
1061
+
1062
+ - **Looks:** The picture wavers like heat over tarmac while the shots dissolve.
1063
+ - **For:** transition, texture. **Fights:** Sharp graphic content (it wobbles).
1064
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end.
1065
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__thermal.mp4
1066
+
1067
+ ### `tr.ripple()`
1068
+
1069
+ A ripple dissolve.
1070
+
1071
+ - **Looks:** Concentric water ripples spread from the centre as the shots cross over.
1072
+ - **For:** transition. **Fights:** Calm or premium edits; cuts between similar shots, where a hard cut reads better.
1073
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end.
1074
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__ripple.mp4
1075
+
1076
+ ### `tr.iris()`
1077
+
1078
+ An iris: a circle opens on the new shot.
1079
+
1080
+ - **Looks:** A hard-edged circle grows from the centre to reveal the new shot, like a camera iris. Old-film feel.
1081
+ - **For:** transition. **Fights:** Off-centre subjects.
1082
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end.
1083
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__iris.mp4
1084
+
1085
+ ### `tr.burn()`
1086
+
1087
+ A ridged burn through the old shot.
1088
+
1089
+ - **Looks:** Like `destruction`: a burning edge eats through by brightness to show the new shot.
1090
+ - **For:** transition. **Fights:** Calm or premium edits; cuts between similar shots, where a hard cut reads better.
1091
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end.
1092
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__burn.mp4
1093
+
1094
+ ### `tr.shatter()`
1095
+
1096
+ The old shot shatters like glass.
1097
+
1098
+ - **Looks:** The frame cracks into Voronoi shards that fall away to reveal the new shot. Dramatic.
1099
+ - **For:** transition. **Fights:** Calm or premium edits; cuts between similar shots, where a hard cut reads better.
1100
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end.
1101
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__shatter.mp4
1102
+
1103
+ ### `tr.liquid()`
1104
+
1105
+ A liquid morph.
1106
+
1107
+ - **Looks:** The old shot flows like liquid into the new one.
1108
+ - **For:** transition. **Fights:** Calm or premium edits; cuts between similar shots, where a hard cut reads better.
1109
+ - **Fit:** 0.6 s default; blends the clip showing at the window's start into the one showing at its end.
1110
+ - **Preview:** https://assets-public.scenerok.com/catalog/transitions__liquid.mp4
1111
+
1112
+ ## Filters and grades
1113
+
1114
+ Syntax and params: editing-actions.md → Color and finishing, shaders-filters.md.
1115
+
1116
+ ### `filter "cdl"`
1117
+
1118
+ An ASC CDL colour grade: slope, offset, power per channel, plus saturation.
1119
+
1120
+ - **Looks:** A whole-frame colour shift you feel more than see: warmer or cooler, richer or flatter. Nothing moves.
1121
+ - **For:** grade. **Fights:** Footage that is already graded; brand colours that must stay exact.
1122
+ - **Fit:** No file needed, so it works on hosted renders. Per-pixel: can target one clip.
1123
+
1124
+ ### `filter "lut"`
1125
+
1126
+ A 3D .cube look-up table applied to the frame or a clip.
1127
+
1128
+ - **Looks:** A complete film-style look in one step: tone curve and colour cast together.
1129
+ - **For:** grade. **Fights:** Already graded footage; a .cube made for log footage on normal footage (crushes it).
1130
+ - **Fit:** Hosted compiles read only an HTTPS URL or data: URI, not a local path. 512 KB, 33 points max.
1131
+
1132
+ ### `filter "vignette"`
1133
+
1134
+ Darkens the edges of the frame.
1135
+
1136
+ - **Looks:** The corners fall off toward black and the centre stays bright, pulling the eye inward. At 0.3 it is felt, not seen.
1137
+ - **For:** grade. **Fights:** Content near the edges (text, UI), white or light frames (it reads as dirty corners).
1138
+ - **Fit:** intensity, default 0.5.
1139
+
1140
+ ### `filter "contrast"`
1141
+
1142
+ Scales contrast around mid-grey.
1143
+
1144
+ - **Looks:** Darks deeper and lights brighter; the picture gets punchier.
1145
+ - **For:** grade. **Fights:** Faces in harsh light, already contrasty footage.
1146
+ - **Fit:** amount, default 1.2.
1147
+
1148
+ ### `filter "saturation"`
1149
+
1150
+ Scales colour intensity.
1151
+
1152
+ - **Looks:** Colours richer (above 1) or more muted (below 1).
1153
+ - **For:** grade. **Fights:** Skin tones above ~1.2; brand colours.
1154
+ - **Fit:** amount, default 1.5 (strong).
1155
+
1156
+ ### `filter "brightness"`
1157
+
1158
+ Adds a constant to every channel.
1159
+
1160
+ - **Looks:** The whole frame lifts or drops; blacks turn grey when lifted.
1161
+ - **For:** grade. **Fights:** Dark designs (lifted blacks look washed out).
1162
+ - **Fit:** amount, default 0.1.
1163
+
1164
+ ### `filter "monochrome"`
1165
+
1166
+ Desaturates to black and white.
1167
+
1168
+ - **Looks:** The picture goes grey; with intensity below 1 colour bleeds back in.
1169
+ - **For:** grade, establish. **Fights:** Colour that carries meaning (a product colour, a brand).
1170
+ - **Fit:** intensity 0-1.
1171
+
1172
+ ### `filter "sepia"`
1173
+
1174
+ A warm brown tint.
1175
+
1176
+ - **Looks:** Old-photograph browns over the whole frame.
1177
+ - **For:** grade, establish. **Fights:** Modern product shots, brand colours.
1178
+ - **Fit:** intensity 0-1.
1179
+
1180
+ ### `filter "blur"`
1181
+
1182
+ A Gaussian blur over everything in its window.
1183
+
1184
+ - **Looks:** The frame goes soft; at large radii only colour masses remain. Useful behind text as a plate.
1185
+ - **For:** texture. **Fights:** Any text or UI inside its window (blurs it too). Samples neighbours, so it cannot target one clip: put it in a function.
1186
+ - **Fit:** radius in px, default 5.
1187
+
1188
+ ### `filter "chromatic"`
1189
+
1190
+ Chromatic aberration: RGB channels offset.
1191
+
1192
+ - **Looks:** Colour fringes on every edge, stronger toward the edges; a lens-error or glitch feel.
1193
+ - **For:** texture. **Fights:** Small text (fringes make it unreadable), premium product shots.
1194
+ - **Fit:** offset, default 0.02. Can be animated for a hit on a cut.
1195
+
1196
+ ### `filter "glitch"`
1197
+
1198
+ Digital distortion over the frame.
1199
+
1200
+ - **Looks:** Horizontal tearing and block errors flicker over the picture.
1201
+ - **For:** texture, emphasize. **Fights:** Calm tone, readable text, motion-sensitive viewers.
1202
+ - **Fit:** intensity, default 0.5. Keep it to a short window.
1203
+
1204
+ ### `filter "premultiply"`
1205
+
1206
+ Multiplies colour by alpha for footage with straight alpha.
1207
+
1208
+ - **Looks:** Fixes bright fringes around keyed or transparent footage; otherwise invisible.
1209
+ - **For:** edit. **Fights:** Nothing; use it only when edges show halos.
1210
+
1211
+ ### `filter "liquid_glass"`
1212
+
1213
+ A frosted liquid-glass refraction effect over the frame.
1214
+
1215
+ - **Looks:** A glossy, refracting glass layer bends the picture under it, iOS-style.
1216
+ - **For:** texture. **Fights:** Text under it, already busy footage.
1217
+ - **Fit:** Whole frame only (cannot target a clip).
1218
+
1219
+ ### `filter "magnetic"`
1220
+
1221
+ A magnetic snap distortion.
1222
+
1223
+ - **Looks:** The picture pulls toward a point as if magnetised, then snaps.
1224
+ - **For:** texture. **Fights:** Readable content.
1225
+ - **Fit:** Whole frame only.
1226
+
1227
+ ### `filter "portal"`
1228
+
1229
+ A sci-fi portal warp.
1230
+
1231
+ - **Looks:** A swirling hole opens in the picture, warping it toward the centre.
1232
+ - **For:** texture, transition. **Fights:** Serious tone, text.
1233
+ - **Fit:** Whole frame only.
1234
+
1235
+ ### `filter "text_cursor"`
1236
+
1237
+ A blinking text-cursor overlay.
1238
+
1239
+ - **Looks:** A terminal-style caret blinks over the frame.
1240
+ - **For:** code, texture. **Fights:** Frames without any typing context.
1241
+ - **Fit:** Whole frame only.
1242
+
1243
+ ## Editing and compositing
1244
+
1245
+ Syntax and params: editing-actions.md.
1246
+
1247
+ ### `Trim`
1248
+
1249
+ Plays a source range of a clip (with Speed, Loop and reverse).
1250
+
1251
+ - **Looks:** A cut: the shot starts and ends where you choose. Speed(0) holds a frame; negative speed reverses.
1252
+ - **For:** edit. **Fights:** Nothing; it is the basic cut.
1253
+
1254
+ ### `Crop`
1255
+
1256
+ Shows a source rectangle of a clip, filling its display size.
1257
+
1258
+ - **Looks:** A tighter framing of the same shot.
1259
+ - **For:** edit. **Fights:** Transitions (a cropped clip cannot sit in one); remote stills (rendered as nothing in testing: crop those with ffmpeg first).
1260
+
1261
+ ### `placement`
1262
+
1263
+ Size, position, rotation, radius and corner-pin on a placed clip or image.
1264
+
1265
+ - **Looks:** The picture framed as a card (radius), a tilted insert (rotation), or pinned into a screen (corners). Oversizing it past the frame acts as a crop that transitions accept.
1266
+ - **For:** edit, demo. **Fights:** Guessed sizes: probe the asset and keep its aspect.
1267
+
1268
+ ### `push`
1269
+
1270
+ A slow scale animation on a picture (Ken Burns): `animate: { type: "scale", ... }`.
1271
+
1272
+ - **Looks:** The picture creeps closer (or away) over the shot. Gives a still a sense of time passing; at 1.0 to 1.08 over 4 s it is felt, not seen.
1273
+ - **For:** establish, texture. **Fights:** Pictures with text near the edges (it pushes them out), UI screenshots that must be read, every shot at once (sameness).
1274
+
1275
+ ### `Overlay`
1276
+
1277
+ Puts one picture over a clip at a position (picture-in-picture).
1278
+
1279
+ - **Looks:** A smaller inset on top of the main shot.
1280
+ - **For:** prove, demo, compare. **Fights:** Busy main shots where the inset gets lost.
1281
+
1282
+ ### `blend`
1283
+
1284
+ Blends a layer with what is below it (`blend:` or `Composite`): screen, multiply, overlay, difference and others.
1285
+
1286
+ - **Looks:** Light leaks that only brighten (screen), colour washes that tint (multiply), graphic inversions (difference).
1287
+ - **For:** texture, grade. **Fights:** A layer with nothing below it (compile error).
1288
+
1289
+ ### `Mask`
1290
+
1291
+ Draws a clip through a matte: a shape, text, or another clip.
1292
+
1293
+ - **Looks:** Footage visible only inside a circle, a rounded card, or the letters of a word.
1294
+ - **For:** emphasize, brand, texture. **Fights:** Placing the masked clip under Overlay/Composite (not allowed).
1295
+
1296
+ ### `grid`
1297
+
1298
+ Split screens and layouts via grid areas for clips as well as text.
1299
+
1300
+ - **Looks:** Two or more shots side by side or stacked, each in its cell.
1301
+ - **For:** compare, demo. **Fights:** Transitions out of the layout (run the layout past the cut instead).
1302
+
1303
+ ### `motion_blur`
1304
+
1305
+ Blurs an item along its own animated motion.
1306
+
1307
+ - **Looks:** Fast moves streak like real camera footage instead of strobing.
1308
+ - **For:** texture. **Fights:** Slow moves (wasted cost), text and solids (not allowed).
1309
+ - **Fit:** Each sample is a full extra render of the frame.
1310
+
1311
+ ### `duck_under`
1312
+
1313
+ Lowers a music bed while a named voice track plays.
1314
+
1315
+ - **Looks:** Nothing on screen; the voice sits clearly over the music.
1316
+ - **For:** sound. **Fights:** Voice split across many windows where the bed should stay up between lines.
1317
+
1318
+ ### `function`
1319
+
1320
+ A `fn ... -> video` that draws several layers as one item.
1321
+
1322
+ - **Looks:** A grouped card, lower third or scene that moves, fades and blends as a unit.
1323
+ - **For:** edit, name, brand. **Fights:** Inputs declared outside (pass them as parameters).
1324
+
1325
+ ## Capturing real pictures
1326
+
1327
+ Syntax and params: look-and-feel.md → Sourcing imagery, media-stdlib.md.
1328
+
1329
+ ### `page-images`
1330
+
1331
+ The product page's own image URLs (og:image, JSON-LD Product.image, Shopify /products/<handle>.json, Amazon landingImage).
1332
+
1333
+ - **Looks:** Real product photography: often a product on white, sometimes lifestyle shots with baked-in captions and badges.
1334
+ - **For:** prove, demo, source. **Fights:** Small sizes (Amazon gallery stills are often 500 px), baked-in text (crop it out with ffmpeg).
1335
+
1336
+ ### `screenshot`
1337
+
1338
+ A browser screenshot of a page or app, cropped to what you need.
1339
+
1340
+ - **Looks:** The real interface, pixel for pixel. Desktop at 1440 wide, mobile at 390 wide.
1341
+ - **For:** prove, demo, source. **Fights:** Full pages used as backgrounds (unreadable), screenshots shrunk below phone-readable size.
1342
+
1343
+ ### `screen-recording`
1344
+
1345
+ A recording of the app or site in use, placed as an input clip.
1346
+
1347
+ - **Looks:** The product actually working: cursor, scrolling, real states.
1348
+ - **For:** demo, prove, source. **Fights:** Long unedited takes (trim to the moment), tiny UI in a 9:16 frame.
1349
+
1350
+ ### `grabFrame`
1351
+
1352
+ A still pulled from a video at a time (`media.grabFrame`).
1353
+
1354
+ - **Looks:** One frame of the footage, usable as a poster or held shot.
1355
+ - **For:** source, edit. **Fights:** Motion-blurred frames.
1356
+
1357
+ ### `image-sequence`
1358
+
1359
+ A numbered sequence of stills played as a clip.
1360
+
1361
+ - **Looks:** Frame-by-frame animation or a timelapse from stills.
1362
+ - **For:** source, texture. **Fights:** Sequences without a declared count on hosted renders.
1363
+
1364
+ ### `made-background`
1365
+
1366
+ A background you render yourself with ffmpeg: a gradient, a glow, a blurred copy of a shot.
1367
+
1368
+ - **Looks:** A soft colour field in the brand palette: atmosphere without a subject.
1369
+ - **For:** texture, establish. **Fights:** Being the only picture when the subject has real imagery available.
1370
+
1371
+ ## Generated and imported media
1372
+
1373
+ Syntax and params: ai-models.md, tts.md, music.md.
1374
+
1375
+ ### `xai.image(…)`
1376
+
1377
+ A generated still image from a prompt (Grok).
1378
+
1379
+ - **Looks:** Whatever you describe: a photographic or illustrated still at the aspect you ask for. Static unless you move it.
1380
+ - **For:** establish, source, texture. **Fights:** Facts: it invents products, places and people. Never use it to show the real product.
1381
+ - **Fit:** Prompts must forbid text, letters, logos and watermarks; put copy in `text`. Billed per call and cached; non-deterministic: the same prompt gives a different result unless the cache hits.
1382
+ - **Also called:** `xai.generateImage(…)`
1383
+
1384
+ ### `xai.imagine(…)`
1385
+
1386
+ A generated video clip from a prompt (Grok), 720p, about 5 s.
1387
+
1388
+ - **Looks:** A short cinematic clip with real camera motion and lighting; quality varies shot to shot.
1389
+ - **For:** establish, texture, source. **Fights:** Facts and specifics (logos, UI, exact products); anything that must look the same twice.
1390
+ - **Fit:** Prompts must forbid text, letters, logos and watermarks; put copy in `text`. Billed per call and cached; non-deterministic: the same prompt gives a different result unless the cache hits. Heavy: seconds to minutes per clip.
1391
+ - **Also called:** `xai.genVideo(…)`
1392
+
1393
+ ### `xai.imageToVideo(…)`
1394
+
1395
+ Animates one still (a product photo, a screenshot) into a short clip.
1396
+
1397
+ - **Looks:** Your picture comes alive: a camera move around it, light shifting, small motion inside it. The first frame is your image.
1398
+ - **For:** demo, establish, source. **Fights:** Images with text or UI (it warps them), when exact fidelity to the product matters.
1399
+ - **Fit:** Prompts must forbid text, letters, logos and watermarks; put copy in `text`. Billed per call and cached; non-deterministic: the same prompt gives a different result unless the cache hits.
1400
+
1401
+ ### `xai.referenceToVideo(…)`
1402
+
1403
+ A generated clip guided by 1-7 reference images.
1404
+
1405
+ - **Looks:** A new scene that borrows the look of your references (product, person, palette) without starting from any one of them.
1406
+ - **For:** establish, demo, source. **Fights:** Exact reproduction of the product.
1407
+ - **Fit:** Prompt required, at most 10 s. Prompts must forbid text, letters, logos and watermarks; put copy in `text`. Billed per call and cached; non-deterministic: the same prompt gives a different result unless the cache hits.
1408
+
1409
+ ### `xai.extendVideo(…)`
1410
+
1411
+ Continues an existing clip.
1412
+
1413
+ - **Looks:** More of the same shot: the motion carries on past the last frame.
1414
+ - **For:** source. **Fights:** Clips with cuts or text in them.
1415
+ - **Fit:** Billed per call and cached; non-deterministic: the same prompt gives a different result unless the cache hits.
1416
+
1417
+ ### `xai.tts(…)`
1418
+
1419
+ A spoken voiceover from text (voices eve, ara, rex, sal, leo).
1420
+
1421
+ - **Looks:** Nothing on screen; it sets the pace of the edit. Bind it with let and time visuals to vo.duration.
1422
+ - **For:** sound, caption. **Fights:** Dense on-screen text saying the same words (the viewer reads and listens at once).
1423
+ - **Fit:** Billed per call and cached; non-deterministic: the same prompt gives a different result unless the cache hits.
1424
+ - **Also called:** `xai.textToSpeech(…)`
1425
+
1426
+ ### `cf.image(…)`
1427
+
1428
+ A generated still through the Cloudflare gateway (model: picks Flux, GPT Image, Recraft and others).
1429
+
1430
+ - **Looks:** As `xai.image`, with the look of the chosen model.
1431
+ - **For:** establish, source, texture. **Fights:** Facts: it invents.
1432
+ - **Fit:** Pass model: explicitly. Prompts must forbid text, letters, logos and watermarks; put copy in `text`. Billed per call and cached; non-deterministic: the same prompt gives a different result unless the cache hits.
1433
+ - **Also called:** `cf.generateImage(…)`
1434
+
1435
+ ### `cf.video(…)`
1436
+
1437
+ A generated video clip through the Cloudflare gateway (Veo, Runway, Pixverse, Seedance and others).
1438
+
1439
+ - **Looks:** As `xai.imagine`, with the look of the chosen model; some models add native audio.
1440
+ - **For:** establish, texture, source. **Fights:** Facts and specifics.
1441
+ - **Fit:** Pass model: explicitly. Prompts must forbid text, letters, logos and watermarks; put copy in `text`. Billed per call and cached; non-deterministic: the same prompt gives a different result unless the cache hits.
1442
+ - **Also called:** `cf.imagine(…)`, `cf.genVideo(…)`, `cf.generateVideo(…)`
1443
+
1444
+ ### `cf.imageToVideo(…)`
1445
+
1446
+ Animates one still through the Cloudflare gateway.
1447
+
1448
+ - **Looks:** As `xai.imageToVideo`, with the chosen model.
1449
+ - **For:** demo, establish, source. **Fights:** Images with text or UI.
1450
+ - **Fit:** Prompts must forbid text, letters, logos and watermarks; put copy in `text`. Billed per call and cached; non-deterministic: the same prompt gives a different result unless the cache hits.
1451
+
1452
+ ### `cf.referenceToVideo(…)`
1453
+
1454
+ A clip guided by reference images through the Cloudflare gateway.
1455
+
1456
+ - **Looks:** As `xai.referenceToVideo`, with the chosen model.
1457
+ - **For:** establish, source. **Fights:** Exact reproduction.
1458
+ - **Fit:** Prompts must forbid text, letters, logos and watermarks; put copy in `text`. Billed per call and cached; non-deterministic: the same prompt gives a different result unless the cache hits.
1459
+
1460
+ ### `cf.extendVideo(…)`
1461
+
1462
+ Continues a clip through the Cloudflare gateway.
1463
+
1464
+ - **Looks:** More of the same shot: the camera move and action carry on past the last frame.
1465
+ - **For:** source. **Fights:** Clips with cuts.
1466
+ - **Fit:** Billed per call and cached; non-deterministic: the same prompt gives a different result unless the cache hits.
1467
+
1468
+ ### `eleven.music(…)`
1469
+
1470
+ A generated instrumental or vocal music bed (ElevenLabs).
1471
+
1472
+ - **Looks:** Nothing on screen; it sets the energy and where the cuts land.
1473
+ - **For:** sound. **Fights:** A voiceover at the same level: duck it with duck_under.
1474
+ - **Fit:** Give duration: the length you need. Billed per call and cached; non-deterministic: the same prompt gives a different result unless the cache hits.
1475
+ - **Also called:** `eleven.generateMusic(…)`, `eleven.composeMusic(…)`
1476
+
1477
+ ### `up.upscale(…)`
1478
+
1479
+ Upscales a clip (Real-ESRGAN, or Topaz with model: "topaz").
1480
+
1481
+ - **Looks:** The same shot with more detail: sharper edges, less mush. Generate cheap at 720p, upscale the keeper.
1482
+ - **For:** source. **Fights:** Short budgets and timelines: it is slow (minutes) and billed.
1483
+ - **Fit:** Billed per call and cached; non-deterministic: the same prompt gives a different result unless the cache hits.
1484
+ - **Also called:** `up.upscaleVideo(…)`, `up.enhance(…)`
1485
+
1486
+ ### `lottie.file(…)`
1487
+
1488
+ Plays a Lottie or dotLottie animation file as a layer.
1489
+
1490
+ - **Looks:** The vector animation you supply (icons, illustrations, UI motion), crisp at any size, on a transparent background; loops by default.
1491
+ - **For:** texture, demo, brand. **Fights:** Nothing intrinsic; quality is the file's.
1492
+ - **Fit:** Needs a .json or .lottie file. Options: loop, segment, fit, theme.
1493
+ - **Also called:** `lottie.asset(…)`, `lottie.json(…)`, `lottie.dotLottie(…)`