Overview
A studio video is a single video composed from an ordered list of whole-frame scenes — avatar clips, still images, and existing video footage — concatenated in the order you send them. You describe the scenes; HeyGen owns the layout, derives each scene’s duration, center-crops every scene to one global output canvas, and returns a singlevideo_id for the finished MP4.
Create one by passing "type": "studio" to POST /v3/videos — the same endpoint that renders avatar, image, and cinematic_avatar videos:
Rendering is all-or-nothing: one request produces one video, and every scene renders or none do. Output settings — aspect ratio, resolution, captions — are global, set once per request.
Studio videos define their scenes in the request, which is ideal for programmatic composition. To render a reusable layout you’ve designed visually in HeyGen Studio, use a HeyGen Studio Template instead.
Quick Example
A three-scene video: a title card held for three seconds, an avatar delivering the message, and an existing clip as the outro.Response
GET /v3/videos/{video_id} until status is completed, then read the download URL — or pass a callback_url to receive a webhook when the video is ready.
Request Body
The output container is MP4.
Scene Types
Every scene fills the whole frame and carries atype discriminator that determines its remaining fields.
Avatar Video Scenes
"type": "avatar_video" renders a speaking scene. Its input object has "type": "avatar" and references an avatar you already have by avatar_id. The scene’s duration is derived from the audio.
Mirrors the standalone avatar creation mode, minus the output settings — those are global on the studio request. Any avatar look works, exactly as in the standalone mode: video avatars, studio avatars, and photo avatars. To use a photo avatar (a “talking photo”), pass its look id as avatar_id.
Provide exactly one audio source:
script (with voice_id or a default voice), audio_url, or audio_asset_id.
To lip-sync your own photo, register it as a photo avatar first via the photo-avatar API, then use its look id as
avatar_id here. A studio scene references existing avatars; it does not animate a raw image inline.Choosing an engine
Theavatar input accepts an optional engine object, defaulting to Avatar IV when omitted. Pass { "type": "avatar_v" } for cross-reference-driven animation on Avatar V — check supported_api_engines on the avatar look to confirm eligibility. On Avatar V you may also set engine.reference_look_id to an instant_avatar look in the same avatar group to pin the animation reference; when omitted, video avatars self-reference and photo avatars auto-select a sibling. expressiveness applies on Avatar IV; motion_prompt applies to photo avatars on either engine and to video avatars on Avatar V.
Image Scenes
"type": "image" shows a still image in one of two modes — choose exactly one:
- Silent — set
duration(seconds) and no audio source. The image holds on screen for that long. - Narrated — set exactly one audio source and omit
duration. The scene length follows the audio.
Video Scenes
"type": "video" drops an existing clip into the sequence at its own length.
Asset input
The image/video scenesource field takes an asset object, discriminated by type. Provide one of:
Captions
Pass acaption object to generate captions across the full composed video. A sidecar subtitle file is always returned via subtitle_url in the chosen file_format; add style to additionally burn the captions into the rendered video — the sidecar is still delivered.
Rendering at Scale
Studio requests batch like every other/v3/videos creation mode: include them as items in POST /v3/videos/batches to submit many compositions in one call and poll a single batch_id — see Batch Videos.
