@scenerok/cli 1.0.9 → 1.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
package/skills/shared/SKILL.md
CHANGED
|
@@ -21,7 +21,7 @@ You are a VidScript composer and video generation expert integrated with your ag
|
|
|
21
21
|
- Check render status and retrieve output
|
|
22
22
|
- Guide users through video creation workflows
|
|
23
23
|
- Fill template placeholders and customize system templates
|
|
24
|
-
- When the user gives a product or website URL, use available browser or screenshot tools to capture real site visuals for VidScript assets
|
|
24
|
+
- When the user gives a product or website URL, use available browser or screenshot tools to capture selective real site visuals for VidScript assets when they improve the video
|
|
25
25
|
|
|
26
26
|
## VidScript Language
|
|
27
27
|
|
|
@@ -93,6 +93,8 @@ import eleven from "@elevenlabs/music"
|
|
|
93
93
|
import motion from "@scenerok/basic-animations"
|
|
94
94
|
|
|
95
95
|
[-] = video xai.imagine("Cinematic product shot, premium lighting, no text, no words, no letters, no captions, no logos, no watermark, no readable UI copy", aspect_ratio: "9:16", duration: 5)
|
|
96
|
+
[-] = video xai.imageToVideo("https://cdn.example.com/product.png", "Slow premium camera move around the product, no text, no words, no letters, no captions, no logos, no watermark, no readable UI copy", aspect_ratio: "9:16", duration: 6)
|
|
97
|
+
[-] = video xai.referenceToVideo(["https://cdn.example.com/product.png", "https://cdn.example.com/person.png"], "Lifestyle ad shot featuring the referenced product and person, no text, no words, no letters, no captions, no logos, no watermark, no readable UI copy", aspect_ratio: "9:16", duration: 8)
|
|
96
98
|
[-] = audio xai.tts("Welcome to SceneRok", voice: "eve")
|
|
97
99
|
|
|
98
100
|
# ElevenLabs music package functions require an import alias.
|
|
@@ -102,6 +104,10 @@ let bed = eleven.music("Warm premium launch bed", duration: 15, instrumental: tr
|
|
|
102
104
|
|
|
103
105
|
**Always** import the package that owns the function: `xai.*` from `@scenerok/xai`, `eleven.*` from `@elevenlabs/music`, and `motion.*` from `@scenerok/basic-animations`. Calls without import fail validation with `Unknown function 'xai.imagine'`.
|
|
104
106
|
|
|
107
|
+
Use the full xAI visual toolkit, not only `xai.imagine()`: use `xai.imageToVideo(image, prompt, ...)` when you have one strong product/screenshot/logo image to animate, and `xai.referenceToVideo([images...], prompt, ...)` when extracted objects, screenshots, product photos, people, packaging, or brand elements should guide the generated scene. Reference-to-video requires a prompt, accepts up to 7 reference images, and should stay at 10 seconds or less.
|
|
108
|
+
|
|
109
|
+
xAI TTS voice IDs: `eve` for demos/announcements/upbeat content, `ara` for warm conversational narration, `rex` for business/tutorial delivery, `sal` for balanced general narration, and `leo` for authoritative instructional narration.
|
|
110
|
+
|
|
105
111
|
For ElevenLabs music, import `@elevenlabs/music` and call `eleven.music(...)`, `eleven.generateMusic(...)`, or `eleven.composeMusic(...)`. Use `let bed = eleven.music(...)` followed by `audio bed, volume: ...` when you need volume or fades.
|
|
106
112
|
|
|
107
113
|
Read `vidscript-strict.md` for anti-patterns and `examples/system/*.vid` for copy-paste templates (installed with `scenerok skills install`).
|
|
@@ -118,35 +124,40 @@ input hero = "{{hero_clip}}"
|
|
|
118
124
|
|
|
119
125
|
1. **Understand the goal** — What video does the user want? (promo, testimonial, meme, etc.)
|
|
120
126
|
2. **Plan the structure** — Time blocks, durations, inputs
|
|
121
|
-
3. **Gather assets** — Video URLs, local paths,
|
|
122
|
-
4. **Probe asset dimensions** — Inspect every local or downloaded
|
|
123
|
-
5. **
|
|
124
|
-
6. **
|
|
125
|
-
7. **
|
|
126
|
-
8. **
|
|
127
|
+
3. **Gather assets** — Video URLs, local paths, generated clips, and selective website screenshots/images; when the user provides a URL, browser screenshots are optional source material, not a requirement to build the whole video from screenshots
|
|
128
|
+
4. **Probe asset type and dimensions** — Inspect every local or downloaded asset before placing it. Use `file` to identify image vs video, `ffprobe` for video/audio, `sips -g pixelWidth -g pixelHeight file` on macOS images, or `identify file` when ImageMagick is available.
|
|
129
|
+
5. **Use images directly when useful** — VidScript `input` supports both videos and images. You can place a still image input with `video image_input`; the renderer detects the asset type and treats it as a static visual clip for the block duration.
|
|
130
|
+
6. **Compose VidScript** — Write the full script using measured dimensions, aspect-ratio-preserving scale, centered/safe-area placement, and entry/exit animation beats for each visual asset
|
|
131
|
+
7. **Validate** — Run `scenerok validate script.vid`
|
|
132
|
+
8. **Render** — Run `scenerok render script.vid --watch`
|
|
133
|
+
9. **Deliver** — Share the download URL when complete
|
|
127
134
|
|
|
128
135
|
## Website URL Asset Workflow
|
|
129
136
|
|
|
130
|
-
When the user provides a product, company, landing page, app store listing, or ecommerce URL, treat the site as
|
|
137
|
+
When the user provides a product, company, landing page, app store listing, or ecommerce URL, treat the site as a useful source of truth for claims, brand cues, and optional visual assets.
|
|
131
138
|
|
|
132
139
|
1. Visit the URL with an available browser tool before composing the final VidScript.
|
|
133
|
-
2. Capture screenshots
|
|
134
|
-
3.
|
|
135
|
-
4.
|
|
136
|
-
5.
|
|
137
|
-
6.
|
|
138
|
-
7.
|
|
139
|
-
8.
|
|
140
|
-
9.
|
|
141
|
-
10.
|
|
140
|
+
2. Capture website screenshots sparingly and intentionally. Prefer above-the-fold screenshots, product/app closeups, visible hero sections, pricing/offer cards, testimonials, and other viewable page states. Avoid full-page or very long screenshots as backgrounds because their text becomes illegible in video.
|
|
141
|
+
3. Crop or frame screenshots to the specific visual evidence needed. Do not use screenshots as the only visual style by default, and do not build a whole video as a sequence of unreadable full-page captures.
|
|
142
|
+
4. Detect and save usable product images, app screenshots, brand marks, and logos from the page when available. Prefer direct image assets when they are accessible and clearly match the product; use browser screenshots as supporting assets when they communicate something visible at video size.
|
|
143
|
+
5. Probe saved asset type and dimensions before composing. Record file type, width, height, aspect ratio, and duration if video; never guess dimensions from filenames or screenshots.
|
|
144
|
+
6. Use saved still images directly as timeline inputs when the real asset should appear on screen, or feed the strongest stills into `xai.imageToVideo` / `xai.referenceToVideo` when motion would make the output stronger. Keep screenshots focused and readable.
|
|
145
|
+
7. Use captured assets as grounded proof points alongside other visual material. A good ad can combine product/logo/app screenshots, generated video clips, motion backgrounds, text primitives, and music.
|
|
146
|
+
8. Scale assets from their measured aspect ratio to fit the output frame and safe areas. For 1080x1920 ads, keep primary visuals inside roughly 80-88% of frame width and reserve enough top/bottom room for text.
|
|
147
|
+
9. Animate visual assets intentionally: use entry animations such as `motion.popIn`, `motion.riseIn`, or `motion.slideY`; use short exit fade/slide segments when a clean transition is needed.
|
|
148
|
+
10. Generative visuals are encouraged when useful. Choose among `xai.imagine` for text-to-video, `xai.imageToVideo` to animate one extracted image/screenshot/product photo, and `xai.referenceToVideo` to guide a generated scene with up to 7 extracted visual references.
|
|
149
|
+
11. For every generated visual prompt, explicitly require a clean scene with no text, no words, no letters, no captions, no logos, no watermarks, and no readable UI copy. AI video generation often corrupts text; all final titles, offers, captions, CTAs, prices, and labels must be created with VidScript `text` primitives.
|
|
150
|
+
12. Do not invent product claims. Extract copy, pricing, feature names, social proof, and CTA language from the site or ask the user.
|
|
142
151
|
|
|
143
152
|
## Best Practices
|
|
144
153
|
|
|
145
154
|
- **Use dynamic timeblocks** — `[-]` auto-advances the cursor, reducing calculation errors
|
|
146
155
|
- **Use `prev` for offsets** — `[prev + 0.5s .. prev + 2s]` for gaps between content
|
|
147
156
|
- **Named arguments for clarity** — `hero.Trim(start: 0s, end: 5s)` over `hero.Trim(0s, 5s)`
|
|
148
|
-
- **
|
|
157
|
+
- **Use website assets judiciously for URL-based ads** — browser screenshots, product images, app screenshots, and logos can ground the ad, but they are optional ingredients, not the whole recipe
|
|
158
|
+
- **Avoid full-page screenshot backgrounds** — use above-fold, cropped, or focused screenshots that remain legible at video size; never rely on long website screenshots where the text becomes unreadable
|
|
149
159
|
- **Probe before placing** — get exact dimensions for every real asset, calculate scale from aspect ratio, and set `width`, `height`, `x`, and `y` explicitly
|
|
160
|
+
- **Match asset type to placement** — use real videos for motion footage and image inputs for still product shots, screenshots, logos, and brand marks. The `video` primitive can place either media type.
|
|
150
161
|
- **Animate assets, not only text** — give product screenshots/logos/cards a clear entrance and a clean exit; split static visuals into main and fade-out segments if needed
|
|
151
162
|
- **Keep generated media text-free** — prompts for AI-generated images/videos must explicitly say no text, no words, no letters, no captions, no logos, no watermarks, and no readable UI copy; add all final copy with VidScript `text` primitives
|
|
152
163
|
- Use 1080x1920 for vertical content (TikTok/Instagram)
|
|
@@ -154,6 +165,7 @@ When the user provides a product, company, landing page, app store listing, or e
|
|
|
154
165
|
- Hook viewers in the first 3 seconds
|
|
155
166
|
- Use high-contrast text on video backgrounds with `stroke` and `stroke_width`
|
|
156
167
|
- Include a clear call-to-action
|
|
168
|
+
- Treat filters as optional finishing tools. Use `vignette`, `saturation`, `contrast`, etc. only when they improve the composition; do not add them by default.
|
|
157
169
|
- Test with `scenerok validate` before rendering
|
|
158
170
|
- Each render costs 1 credit
|
|
159
171
|
|
|
@@ -179,16 +191,16 @@ If a render fails:
|
|
|
179
191
|
|
|
180
192
|
## Sample Video Types
|
|
181
193
|
|
|
182
|
-
- **Product Promo** — Hero clip + headline + description + CTA
|
|
194
|
+
- **Product Promo** — Hero clip or generated visual + headline + description + CTA
|
|
183
195
|
- **Social Media Hook** — Fast cuts, bold text, speed adjustments
|
|
184
|
-
- **Testimonial** — Speaker clip + quote text +
|
|
196
|
+
- **Testimonial** — Speaker clip + quote text + optional styling/filter pass
|
|
185
197
|
- **Meme Remix** — Reaction clip + top/bottom punchline overlays
|
|
186
198
|
- **Title Sequence** — Background clip + glitch shader + bold typography
|
|
187
199
|
|
|
188
200
|
Always ask clarifying questions about:
|
|
189
201
|
- Target platform (TikTok, Instagram, YouTube, etc.)
|
|
190
202
|
- Brand colors and fonts
|
|
191
|
-
- Existing assets, product URLs, browser-captured screenshots, logos, and
|
|
203
|
+
- Existing assets, product URLs, optional browser-captured screenshots, logos, page images, and generative visual directions
|
|
192
204
|
- Desired duration and style
|
|
193
205
|
- Whether they want to start from a template or from scratch
|
|
194
206
|
|
|
@@ -8,11 +8,12 @@ VidScript is a declarative DSL for composing short-form videos. Write a script,
|
|
|
8
8
|
2. **Validate early** — `scenerok validate file.vid` (errors show as `Line N:C — message`).
|
|
9
9
|
3. **Music package syntax** — `import eleven from "@elevenlabs/music"`, then call `eleven.music(...)`, `eleven.generateMusic(...)`, or `eleven.composeMusic(...)`.
|
|
10
10
|
4. **Copy working examples** — see `examples/system/` in this skill folder (e.g. `minimal-text-reel.vid`, `ecom-product-launch.vid`, `rokmilk-chocolate-promo.vid`).
|
|
11
|
-
5. **URL assets
|
|
12
|
-
6. **Probe asset dimensions** — before placing real assets, inspect width, height, and duration with `ffprobe`, `sips`, or `identify`; then scale from the measured aspect ratio and set explicit `width`, `height`, `x`, and `y`.
|
|
13
|
-
7. **
|
|
14
|
-
8. **
|
|
15
|
-
9. **
|
|
11
|
+
5. **Use URL assets selectively** — if the user gives a website or product URL and browser screenshot tools are available, you can capture above-fold screenshots, product images, app screenshots, and logos for VidScript `input` assets. Do not treat screenshots as mandatory or as the only visual source.
|
|
12
|
+
6. **Probe asset type and dimensions** — before placing real assets, identify image vs video with `file`; inspect width, height, and duration with `ffprobe`, `sips`, or `identify`; then scale from the measured aspect ratio and set explicit `width`, `height`, `x`, and `y`.
|
|
13
|
+
7. **Use still images directly** — `input` supports videos and images. Place still screenshots, logos, and product photos with `video image_input`; the renderer treats images as static clips for the block duration.
|
|
14
|
+
8. **Use the full xAI visual toolkit** — choose `xai.imagine` for text-to-video, `xai.imageToVideo` for animating one extracted image/screenshot/product photo, and `xai.referenceToVideo` for guiding a scene with up to 7 extracted references.
|
|
15
|
+
9. **Generated media has no text** — prompts for AI-generated images/videos must explicitly ask for no text, no words, no letters, no captions, no logos, no watermarks, and no readable UI copy. Use VidScript `text` primitives for all final copy.
|
|
16
|
+
10. **Strict rules** — see `vidscript-strict.md` for invalid patterns (bare `xai.imagine`, bare `eleven.music(...)` without import, trailing params after direct plugin calls, nested quotes in prompts).
|
|
16
17
|
|
|
17
18
|
### Common validation failures
|
|
18
19
|
|
|
@@ -45,16 +46,28 @@ input logo = "./assets/logo.png"
|
|
|
45
46
|
|
|
46
47
|
Supports HTTP(S) URLs, `/uploads/` paths, and local paths for video/image assets.
|
|
47
48
|
|
|
48
|
-
For ads based on a supplied URL,
|
|
49
|
+
For ads based on a supplied URL, browser tools can capture real website visuals and save product images or logos when useful. Use screenshots sparingly: favor above-fold, cropped, or focused captures that remain legible at video size. Avoid full-page or long scrolling screenshots as backgrounds because their text will usually become unreadable.
|
|
49
50
|
|
|
50
|
-
|
|
51
|
+
Website captures are optional grounding assets, not a ban on generated video. A strong ad may combine product/logo/app screenshots with generated lifestyle clips, motion backgrounds, transitions, and VidScript text primitives. Use generative clips when they improve storytelling, show context, or make the ad feel more polished.
|
|
52
|
+
|
|
53
|
+
After declaring or downloading assets, probe file type and dimensions before placing them:
|
|
51
54
|
|
|
52
55
|
```bash
|
|
56
|
+
file asset.png
|
|
53
57
|
ffprobe -v error -select_streams v:0 -show_entries stream=width,height,duration -of csv=p=0 asset.mp4
|
|
54
58
|
sips -g pixelWidth -g pixelHeight asset.png
|
|
55
59
|
identify asset.webp
|
|
56
60
|
```
|
|
57
61
|
|
|
62
|
+
Use real videos as motion footage and still images as static clips. The `video` primitive accepts both; the renderer detects image vs video:
|
|
63
|
+
|
|
64
|
+
```vidscript
|
|
65
|
+
input screenshot = "assets/screenshots/homepage.png"
|
|
66
|
+
[0s .. 4.5s] = video screenshot, width: 1080, height: 1920, x: 0, y: 0, animate: motion.fadeIn(0.35s)
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
For URL-based ads, still assets can also drive generated motion: use `xai.imageToVideo(screenshot, "...")` for one strong source image, or `xai.referenceToVideo([product, logo, person], "...")` to guide a new scene with extracted references.
|
|
70
|
+
|
|
58
71
|
Use the measured width and height to preserve aspect ratio. For a 1080x1920 vertical ad, a common centered fit is:
|
|
59
72
|
|
|
60
73
|
```text
|
|
@@ -259,6 +272,8 @@ import eleven from "@elevenlabs/music"
|
|
|
259
272
|
import motion from "@scenerok/basic-animations"
|
|
260
273
|
|
|
261
274
|
[-] = video xai.imagine("Cinematic product shot, premium lighting, no text, no words, no letters, no captions, no logos, no watermark, no readable UI copy", aspect_ratio: "9:16", duration: 5)
|
|
275
|
+
[-] = video xai.imageToVideo("https://cdn.example.com/product.png", "Slow premium camera move around the product, no text, no words, no letters, no captions, no logos, no watermark, no readable UI copy", aspect_ratio: "9:16", duration: 6)
|
|
276
|
+
[-] = video xai.referenceToVideo(["https://cdn.example.com/product.png", "https://cdn.example.com/person.png"], "Lifestyle ad shot featuring the referenced product and person, no text, no words, no letters, no captions, no logos, no watermark, no readable UI copy", aspect_ratio: "9:16", duration: 8)
|
|
262
277
|
[-] = audio xai.tts("Welcome to SceneRok", voice: "eve")
|
|
263
278
|
|
|
264
279
|
# ElevenLabs music package functions require an import alias.
|
|
@@ -271,6 +286,16 @@ let bed = eleven.music("Warm premium launch bed", duration: 15, instrumental: tr
|
|
|
271
286
|
|
|
272
287
|
`@scenerok/xai` requires an explicit default import. ElevenLabs music validates as `eleven.music(...)`, `eleven.generateMusic(...)`, or `eleven.composeMusic(...)` after `import eleven from "@elevenlabs/music"`. Plugin calls run at compile time; direct media plugin instructions cannot have trailing audio params, so use a `let` binding when you need `volume`, `fade_in`, or `fade_out`.
|
|
273
288
|
|
|
289
|
+
xAI visual functions:
|
|
290
|
+
|
|
291
|
+
| Function | Use when |
|
|
292
|
+
|----------|----------|
|
|
293
|
+
| `xai.imagine(prompt, ...)` | You need text-to-video from a clean prompt. |
|
|
294
|
+
| `xai.imageToVideo(image, prompt, ...)` | You have one source image, screenshot, logo, product photo, data URI, or file id to animate. |
|
|
295
|
+
| `xai.referenceToVideo([images...], prompt, ...)` | You have 1-7 reference images that should influence the generated scene without becoming the first frame. Requires a prompt; keep duration <= 10s. |
|
|
296
|
+
|
|
297
|
+
xAI TTS voices: `eve` for upbeat demos/announcements, `ara` for warm conversational narration, `rex` for business/tutorial content, `sal` for balanced general delivery, and `leo` for authoritative instruction.
|
|
298
|
+
|
|
274
299
|
**Invalid (will not validate):**
|
|
275
300
|
|
|
276
301
|
```vidscript
|
|
@@ -321,7 +346,7 @@ Compiler lowers `animate:` into `IRMotionTrack[]` (property-path keyframes). Leg
|
|
|
321
346
|
[0s .. 5s] = filter "glitch", intensity: 0.5, animate: motion.fadeIn(1s)
|
|
322
347
|
```
|
|
323
348
|
|
|
324
|
-
Built-in filters: `monochrome`, `sepia`, `blur`, `chromatic`, `glitch`, `vignette`, `contrast`, `saturation`, `brightness`.
|
|
349
|
+
Built-in filters: `monochrome`, `sepia`, `blur`, `chromatic`, `glitch`, `vignette`, `contrast`, `saturation`, `brightness`. Filters are optional finishing tools; use them only when they improve the composition.
|
|
325
350
|
|
|
326
351
|
### Animation functions (`@scenerok/basic-animations`)
|
|
327
352
|
|
|
@@ -22,8 +22,6 @@ input cta_text = "{{cta_text | visit your nearest grocery store}}"
|
|
|
22
22
|
|
|
23
23
|
[8s .. 11s] = text cta_text, font: "Bebas Neue", size: 48, color: "#FFD700", x: "50%", y: "80%", align: center, stroke: "#3E1C00", stroke_width: 4, animate: motion.fadeIn(0.8s)
|
|
24
24
|
|
|
25
|
-
[0s .. 12s] = filter "vignette", intensity: 0.3
|
|
26
|
-
|
|
27
25
|
output to "product-promo.mp4", resolution: "1080x1920", fps: 30
|
|
28
26
|
```
|
|
29
27
|
|
|
@@ -14,22 +14,32 @@ Without the owning import, calls like `xai.imagine`, `xai.tts`, `eleven.music`,
|
|
|
14
14
|
|
|
15
15
|
**Never** call package functions without importing the package alias first.
|
|
16
16
|
|
|
17
|
-
## Rule 2:
|
|
17
|
+
## Rule 2: Use URL assets selectively
|
|
18
18
|
|
|
19
|
-
When the user gives a product, company, ecommerce, landing page, or app URL and you have browser/screenshot capability, visit the page and capture useful
|
|
19
|
+
When the user gives a product, company, ecommerce, landing page, or app URL and you have browser/screenshot capability, you can visit the page and capture useful visual evidence. Favor above-fold screenshots, product views, app screenshots, pricing/offer cards, testimonials, and detectable logos or brand marks.
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
Do not use full-page or very long website screenshots as video backgrounds; their text is usually illegible at output size. Crop or frame screenshots to the specific visual proof point, and use them sparingly.
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
Website screenshots are optional source material, not a requirement to build the whole video from screenshots. You may combine them with `xai.imagine`, `xai.imageToVideo`, `xai.referenceToVideo`, or other generative video plugins for lifestyle scenes, motion backgrounds, transitions, or product context. Do not invent claims; use website copy or ask the user.
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
## Rule 2.5: Probe real asset type and dimensions before placement
|
|
26
|
+
|
|
27
|
+
Before writing `width`, `height`, `x`, or `y` for a real image/video/screenshot/logo, identify the asset type and inspect the actual dimensions and duration:
|
|
26
28
|
|
|
27
29
|
```bash
|
|
30
|
+
file asset.png
|
|
28
31
|
ffprobe -v error -select_streams v:0 -show_entries stream=width,height,duration -of csv=p=0 asset.mp4
|
|
29
32
|
sips -g pixelWidth -g pixelHeight asset.png
|
|
30
33
|
identify asset.webp
|
|
31
34
|
```
|
|
32
35
|
|
|
36
|
+
Use real video files for motion footage and still image inputs for screenshots, logos, product photos, and brand marks. The `video` primitive accepts both videos and images; image inputs render as static clips for the block duration.
|
|
37
|
+
|
|
38
|
+
```vidscript
|
|
39
|
+
input screenshot = "assets/screenshots/homepage.png"
|
|
40
|
+
[0s .. 4s] = video screenshot, width: 1080, height: 1920, x: 0, y: 0, animate: motion.fadeIn(0.35s)
|
|
41
|
+
```
|
|
42
|
+
|
|
33
43
|
Use measured aspect ratio and safe-area math. Do not guess sizes or blindly resize every asset to the same box. Center visuals with explicit pixel placement when possible:
|
|
34
44
|
|
|
35
45
|
```text
|
|
@@ -66,10 +76,16 @@ import xai from "@scenerok/xai"
|
|
|
66
76
|
import eleven from "@elevenlabs/music"
|
|
67
77
|
|
|
68
78
|
[-] = video xai.imagine("Prompt here, no text, no words, no letters, no captions, no logos, no watermark, no readable UI copy", aspect_ratio: "9:16", duration: 5)
|
|
79
|
+
[-] = video xai.imageToVideo("https://cdn.example.com/product.png", "Slow camera move around the product, no text, no words, no letters, no captions, no logos, no watermark, no readable UI copy", aspect_ratio: "9:16", duration: 6)
|
|
80
|
+
[-] = video xai.referenceToVideo(["https://cdn.example.com/product.png", "https://cdn.example.com/person.png"], "Lifestyle scene using the referenced product and person, no text, no words, no letters, no captions, no logos, no watermark, no readable UI copy", aspect_ratio: "9:16", duration: 8)
|
|
69
81
|
[-] = audio xai.tts("Voiceover line", voice: "eve")
|
|
70
82
|
[0s .. 15s] = audio eleven.music("Warm premium music bed", duration: 15, instrumental: true)
|
|
71
83
|
```
|
|
72
84
|
|
|
85
|
+
Use `xai.imageToVideo` for one extracted screenshot/product/logo image. Use `xai.referenceToVideo` for 1-7 reference images when extracted objects should guide the generated shot; it requires a prompt and duration must be <= 10s.
|
|
86
|
+
|
|
87
|
+
xAI TTS voices are only `eve`, `ara`, `rex`, `sal`, and `leo`.
|
|
88
|
+
|
|
73
89
|
For ElevenLabs music, import `@elevenlabs/music` and use `eleven.music(...)`, `eleven.generateMusic(...)`, or `eleven.composeMusic(...)`.
|
|
74
90
|
|
|
75
91
|
## Rule 5: Time ranges use `..`
|
|
@@ -117,7 +133,7 @@ let bed = eleven.music("Soft premium ad music", duration: 15, instrumental: true
|
|
|
117
133
|
[0s .. 15s] = filter "saturation", value: 1.12
|
|
118
134
|
```
|
|
119
135
|
|
|
120
|
-
`saturation` uses `value`, not `intensity`.
|
|
136
|
+
Filters are optional finishing tools, not required ingredients. Use them only when they improve the visual result. `saturation` uses `value`, not `intensity`.
|
|
121
137
|
|
|
122
138
|
## Rule 10: Always end with output
|
|
123
139
|
|