Skip to main content

Features

  • Instant avatar cloning — zero-shot from a single still image.
  • Voice- or text-driven — drive the avatar with an existing audio clip, or generate the driving voice from text in the same request with the TTS API (including voice cloning).
  • Streaming delivery — a dedicated streaming endpoint returns the video as a fragmented-MP4 byte stream, so playback can start before the clip is complete.

Try it in the playground

The fastest way to preview the model is the playground. Pick an avatar, paste text, and press play.

Generate avatars with the API

Higgs Avatar is in public preview. API usage is currently free and rate-limited while we improve reliability, latency, and model quality.
Set the API key in your shell for the current session:
Avatar video generation API is asynchronous:
  1. POST /v1/videos creates a job and returns a Video object with video_id.
  2. GET /v1/videos/{video_id} polls the Video object until status is "completed".
  3. GET /v1/videos/{video_id}/content downloads the rendered MP4.
Every request needs a ref_image (the still photo the avatar is generated from) plus exactly one driving input: an input audio clip (audio-to-video) or an input_tts text request (text-to-video).

Drive with an audio clip

Pass the driving voice in input (an http(s) URL, data URI, or base64). The avatar lip-syncs and moves to that audio. The driving audio sets the video length and is capped at 60 s.

Drive with text

Skip the audio clip and synthesize the driving voice from text in the same request: put a speech request under input_tts (the same body as POST /v1/audio/speech). Pick a speaker with voice, or clone one with ref_audio. Provide exactly one of input or input_tts.

Upload local files

Send the body as multipart/form-data to upload a local ref_image (and input audio) directly, with no base64 encoding. input_tts is passed as a JSON-string field.

Retrieve and download

  • GET /v1/videos/{video_id} returns the Video object — status (queuedin_progresscompleted | failed), progress, size, error. Always JSON.
  • GET /v1/videos/{video_id}/content downloads the rendered MP4 bytes once the video is completed (a 404 until then).

Sizes

size is one of three presets — pick the aspect ratio that matches your reference image so the subject is not cropped:

Limits

A request that violates a limit returns a 4xx with an error code — e.g. invalid_image_format, payload_too_large, audio_too_long, input_too_long, invalid_size, or model_not_found.

Stream the video

For live playback, POST the same body to /v1/videos/stream (a non-standard extension). The response body is the fragmented MP4 byte stream — frames arrive as they are generated, so playback can start before the full clip is ready (append the chunks to an MSE SourceBuffer in the browser, or write them to a .mp4 file). The video id comes back in the X-Video-Id header, and the full MP4 is stored too — so a later GET /v1/videos/{video_id}/content still works.

API reference

Full request body (JSON):
See the API reference for field details and additional options.