Programmable videoVidScriptHyperFrames · HTML → MP4Grok ImagineElevenLabsCloudflare AI GatewayAgent-nativeDeterministic compileProgrammable videoVidScriptHyperFrames · HTML → MP4Grok ImagineElevenLabsCloudflare AI GatewayAgent-nativeDeterministic compile
Video as source of truthAgents author · Models generate · Compiler delivers
Your agent writes the video. You keep the source.
Your agent writes the cut as code, while Grok Imagine, ElevenLabs, and Cloudflare generate assets inside the script. What you get isn’t a lucky clip — it’s a program you can edit, version, and re-run.
Structure-first video that scales like software — never one-shot prompts.
Free to start — every new account gets $2 in credit. No card required. Works in Claude, Cursor, Aider, OpenCode, and Codex.
Trusted by builders usingClaudeCursorAiderOpenCode
scenerok · launch-reel.vid
9:16 · 1080p
The future is compiled
00:04.2 / 00:06.5
Rec
0.0s2.0s4.0s6.0s8.0s
video
cf.imagine()
brand.mp4
text
"The future is compiled"
audio
xai.tts()
eleven.music()
Fig. 01 — A compiled reel. Clips are written in VidScript, generative assets resolve at compile time, and the timeline stays reproducible.
01How SceneRok works
Agents don’t prompt. They program.
Intent becomes VidScript. Generative models execute as functions inside the script. The compiler produces deterministic, reproducible video.
01
Intent
Describe the video or give your agent a brief. No blank timelines.
02
Agent authors VidScript
Your agent writes readable, versionable code using templates and brand rules.
03
Generative plugins at compile
Imported package functions like xai.imagine(), cf.genVideo(), cf.image(), eleven.music(), and xai.tts() run inside the script. Pick any Cloudflare Gateway model with model:.
04
Deterministic composition
The compiler enforces timing, shaders, overlays, and audio mixing. Output is reproducible.
launch-reel.vidVidScript
import cf from"@scenerok/cloudflare"import xai from"@scenerok/xai"input brand = "https://cdn.scenerok.com/samples/brand-hero.mp4"# Generative assets created at compile time — pick any Cloudflare Gateway model[-] = video cf.imagine("minimal product shot, floating in void, soft rim light", model: "pixverse/v6", aspect_ratio: "9:16", duration: 6)
[0s .. 6.5s] = video brand
[0.8s .. 5.8s] = audio xai.tts("This is not generated. This is compiled.", voice: "jessica")
outputto"launch-reel.mp4", resolution: "1080x1920"
Assets from Grok Imagine, Cloudflare AI Gateway, and ElevenLabs are resolved before the timeline is even rendered.
02Choose your interface
Built for three ways of working
I
Creators & motion designers
Web editor first
Real-time visual preview
Direct VidScript control when you need precision
Start from production-grade system templates
II
Agent-first builders
CLI + MCP + Skills
scenerok CLI + MCP server for Claude, Cursor, Aider
Tell your agent what to build, it writes + renders
Stay in your IDE. Never touch a timeline.
III
Teams & systems
Templates + version control
Parameterized templates with enforced brand guardrails
Fork, version, and reuse across campaigns
Simple usage billing + full audit trail
03Inside the language
Generative calls. Deterministic outcomes.
Call frontier models as first-class functions inside VidScript. They run at compile time. You keep full control over timing, composition, and brand rules.
Generative assets are created at compile time — the timeline itself stays declarative, diffable, and repeatable.
reel-01.vidText-to-video + timing
import xai from"@scenerok/xai"import motion from"@scenerok/basic-animations"[-] = video xai.imagine("cyberpunk city at dusk, cinematic", aspect_ratio: "9:16", duration: 4.2)
[2.8s .. 7s] = text "The future is compiled", style: title, animate: motion.fadeIn(0.6s)
reel-02.vidCloudflare Gateway models
import cf from"@scenerok/cloudflare"import motion from"@scenerok/basic-animations"[-] = video cf.imagine("luxury product macro, studio rim light", model: "google/veo-3.1-fast", aspect_ratio: "9:16", duration: 6)
[-] = video cf.image("matching hero still", model: "black-forest-labs/flux-2-pro-preview", aspect_ratio: "9:16")
[0.4s .. 6s] = text "One plugin. Many providers.", animate: motion.fadeIn(0.5s)
reel-03.vidVoice + music + structure
import xai from"@scenerok/xai"import eleven from"@elevenlabs/music"let voice = xai.tts("This is not a prompt. This is a program.", voice: "jessica")
let score = eleven.music("dark electronic tension, 90bpm", duration: 18)
[0s .. 18s] = audio voice
[0s .. 18s] = audio score, volume: 0.35
04What VidScript covers
The edits you make every day. Written in plain words.
VidScript covers the common video editing actions — layering shots, cutting and timing, sound, on-screen text, and exporting. Describe what you want and it shows up in the finished video, exactly as written.
Layering & look
Stack shots and set the mood
Picture-in-picture and overlays
Blend layers together for creative looks
Crop, resize, and round the corners
Cut-out shapes and masks
Pan and zoom across a scene
Color correction and ready-made color looks
Natural motion blur
Smooth transitions between shots
Cutting & timing
Put every moment in the right place
Trim the start and end of any clip
Speed up, slow down, reverse, or freeze a frame
Gradual speed changes
Loop a clip
Line clips up one after another
Frame-accurate timing
Cut on exact timecodes
Film and broadcast frame rates, like 23.976
Mix footage shot at different frame rates
Sound
Keep the audio clean and balanced
Let sound lead or trail the picture
Adjust volume, fade in and out
Lower the music automatically when someone speaks
Start audio from any point in the file
Move sound left or right
Change volume over time
Even, broadcast-ready loudness
Text & titles
Say it on screen
Styled titles with outlines and shadows
Rotate and position text anywhere
Smooth, bouncy, or snappy animation
Split-screen and grid layouts
Text that reveals word by word or letter by letter
Subtitles from a caption file
Reuse & export
Build once, deliver anywhere
Save a sequence as a template and reuse it
Fill-in-the-blank settings for templates
Apply a color look to a whole section
Markers and pauses
Export at the size, frame rate, and quality you need
On-screen timecode
A stand-in when a file goes missing
05HyperFrames · HTML → video
Render any HTML as video.
SceneRok renders HyperFrames — the open HTML + CSS + GSAP → MP4 format — one frame at a time. This is how frontier models work now: they write the creative HTML, and SceneRok turns it into reproducible video that composites over real footage and WebGL.
Bring your own HTML.
Call animations.custom_html() with inline HTML, a URL, a local file, or an uploaded asset. Model-generated or hand-authored — it runs through the same deterministic pipeline as everything else.
Inline html:, a remote URL, a local file, or scenerok://asset
Mounted in a sandboxed cross-origin iframe under a strict CSP
Author at one design size, render to any output resolution
hyperframe.vidVidScript
import animations from"@scenerok/animations"# Model-authored HTML — rendered frame-by-frame into your MP4[0s .. 5s] = animations.custom_html(
html: "<!doctype html>...", designWidth: 1920, designHeight: 1080,
title: "Q3 Launch", accent: "#3b82f6")
# Or call a ready-made block from the HyperFrames catalog[5s .. 12s] = animations.code_morph("const a = 1", "const a = 2", theme: "monokai")
[12s .. 17s] = animations.x_post("SceneRok", "@scenerok", body: "HTML -> MP4")
Frontier models author the HTML; the HyperFrames pipeline seeks it frame-by-frame and captures the composited page into your MP4.
The HyperFrames catalog
77 ready-made blocks you call from VidScript: code animations, terminal and VS Code snippets, lower-thirds, social posts, kinetic text, and iOS liquid glass.
Composites with video + WebGL
HTML layers mount beside the Three.js canvas — an iframe for isolated scenes, inline for overlays that blend with the frame beneath.
Deterministic & frame-accurate
No randomness and no network at render time. The host seeks every frame, so the same source always yields the same MP4.
06@scenerok/cloudflare
One plugin. Every Cloudflare Gateway model.
The Cloudflare media plugin routes image and video generation through Cloudflare AI Gateway and Unified Billing. Use curated first-class models or pass any gateway model id with model:.
Defaults: pixverse/v6 for text-to-video and black-forest-labs/flux-2-pro-preview for stills. Call cf.listModels() from VidScript to inspect the full catalog at compile time.
text to videoimage to videoreference to videoextend video
google/veo-3.1
Google Veo 3.1 video, fixed 4s/6s/8s durations, audio optional.
text to videoimage to video
google/veo-3.1-fast
Google Veo 3.1 Fast lower-latency video, fixed 4s/6s/8s durations.
text to videoimage to video
google/veo-3-fast
Google Veo 3 Fast lower-latency video, fixed 4s/6s/8s durations, audio optional.
text to videoimage to video
xai/grok-imagine-video
xAI Grok Imagine Video through Cloudflare Unified Billing.
text to videoimage to videoreference to videoextend video
xai/grok-imagine-video-1.5-preview
xAI Grok Imagine Video 1.5 preview through Cloudflare Unified Billing.
text to videoimage to videoreference to videoextend video
alibaba/wan-2.7-i2v
Alibaba Wan 2.7 image-to-video, 2-15s, 720P/1080P.
image to video
Image models · 6
black-forest-labs/flux-2-pro-preview
FLUX.2 Pro Preview image generation and multi-reference editing.
openai/gpt-image-2
OpenAI GPT Image 2 through Cloudflare, image generation and editing.
openai/gpt-image-1.5
OpenAI GPT Image 1.5 through Cloudflare, supports transparent PNG workflows.
xai/grok-imagine-image-quality
xAI Grok Imagine image quality model through Cloudflare.
xai/grok-imagine-image
xAI Grok Imagine image model through Cloudflare.
recraft/recraftv4-pro
Recraft V4 Pro production image generation.
07Templates & reuse
Templates with teeth.
Real placeholder semantics. Versioned. Forkable. Parameterized. Dynamic slots can be filled by generative calls, external data feeds, or human input — while brand rules, timing structures, and visual systems remain enforced by the template.
Product Launch
{{hero}}{{offer}}{{cta_voice}}
Drop in new assets or let cf.imagine(), xai.imagine(), and eleven.music() populate the slots.
Founder Testimonial
{{quote}}{{speaker_clip}}{{logo_lockup}}
Drop in new assets or let cf.imagine(), xai.imagine(), and eleven.music() populate the slots.
UGC Remix
{{reaction}}{{caption}}{{sound_design}}
Drop in new assets or let cf.imagine(), xai.imagine(), and eleven.music() populate the slots.
Motion Campaign
{{palette}}{{shader}}{{type_system}}
Drop in new assets or let cf.imagine(), xai.imagine(), and eleven.music() populate the slots.