Skip to main content

Overview

Scenes lets you build a video as a storyboard: a list of scenes, each of a different type, played in order. Combine talking avatars, your own clips, avatars over a screen recording and AI-generated transitions. It works well for tutorials, marketing videos, educational content and stories told in several parts. Each scene needs a type; scenes play in the order you list them. Avatar IDs come from GET /v1/avatar/list, voice IDs from GET /v1/voice/list, and every mediaId, startFrameMediaId and endFrameMediaId must be a file from your own Hooked library (any other ID answers 400, e.g. scenes.0.mediaId: Media "abc" not found.).

Basic Multi-Scene Video

A video scene plays one of your clips. Add a script and a voiceId to narrate it. The narration of video scenes is only played when every scene of the project is a video scene, as here.

Tutorial with Picture in Picture

A picture_in_picture scene puts the avatar, cut out from its background, over your media. Avatar and picture-in-picture scenes speak the script in the avatar’s own voice, so they take no voiceId.

AI Transition Video

A start_end_frame scene generates a clip that starts on one of your images and, optionally, ends on another. It needs startFrameMediaId, framePrompt, frameDuration (seconds) and frameModel (veo_3_1, seedance_2_0 or kling_3_0); endFrameMediaId is optional. To narrate it, add a script and a voiceId (and voiceSettings if you want): the clip then lasts as long as the narration.

Getting the Video

The create call answers right away with { success: true, data: { projectId, status }, message }. Then wait for your webhook or poll the project:
The render starts as soon as the project is completed; video fills in a minute or two later.
Send an Idempotency-Key header to retry safely: if a request times out or answers 5xx, sending it again with the same key and body returns the first answer instead of creating (and charging) the project twice.
Teams in bring-your-own-keys mode are not charged credits for generation but need their own provider keys in Settings → AI keys: OpenRouter always, ElevenLabs when a video or start_end_frame scene is narrated, Gemini when there is an avatar or picture-in-picture scene, and Bria for picture-in-picture. A missing key answers 402 with code: "missing_credentials" and the list in missingProviders, before anything is created. Managed teams pay 13 credits per project, plus 100 per started 15 seconds of script (about 2.5 words per second) for each avatar and picture-in-picture scene and each narrated video scene, plus the transition model’s per-second rate for each start_end_frame scene (for the narration’s length when it is narrated).

Tips for Scenes Videos

Plan Your Storyboard: Outline your scenes before creating. Each scene should serve a clear purpose in the narrative.
Consistent Avatar: Use the same avatar across scenes for continuity, unless intentionally switching perspectives.
Vary Scene Types: Mix avatar, video, and PiP scenes to keep viewers engaged and add visual variety.
Smooth Transitions: Write scripts that flow naturally between scenes. End one scene leading into the next.
Optimize Duration: Keep individual scenes focused. Split long content into multiple shorter scenes.
Use AI Transitions: Use start/end frame scenes for visual effects between still images.

Scene Types

Up to 50 scenes per project. Scripts are up to 5,000 characters per scene.

Other Fields

AI Models for Transitions

The older values kling_2_5 and seedance_1_5 are no longer available and answer 400.

Use Cases

  • Tutorials: Combine avatar explanations with screen recordings and demos
  • Marketing Videos: Mix talking head with product shots and lifestyle footage
  • Educational Content: Alternate between instructor and visual demonstrations
  • Storytelling: Create narrative videos with multiple scenes and perspectives
  • Before/After: Use AI transitions to show transformations

Handling the Webhook Response

Webhooks are signed: check the Hooked-Signature header as shown in Webhooks. Answer 200 quickly; Hooked tries 3 times with a 10-second timeout.