Skip to main content

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 single video_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:
Each scene is one of three types: 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
Generation is asynchronous. Poll 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 a type 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

The avatar 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 scene source field takes an asset object, discriminated by type. Provide one of:

Captions

Pass a caption 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.