Table of contents

  1. Step 1: upload the photo
  2. Step 2: the avatar, restyled in one sentence
  3. Step 3: the script
  4. Step 4: the talking video
  5. Speech on its own: 2,426 characters in one call
  6. Good to know

From a photo to a talking video, and speech on its own

November 4, 2026

The Google Vids API can now make an avatar talk for up to 30 seconds:

  • POST /avatars makes an avatar from a photo (or from a description, an image, or another avatar), and refine restyles it in words: clothes, place, light, a logo on the shirt
  • POST /videos/avatar has the avatar read your script, word for word, in its own voice: a 1280×720 talking-head video with lip sync, as long as the speech (up to 30 seconds)
  • POST /speech turns a script of up to 2,500 characters into speech in any of the 30 Gemini voices, to hear a voice first or to use the audio on its own

This post makes one avatar end to end. Every request below is the real one, and every picture and video is the real output.

Step 1: upload the photo

We started from a photo of a real person (not a famous one: Google refuses photos of prominent people), uploaded with POST /assets to the Google account that will make the avatar. An uploaded file only works on its own account.

The original photo: a woman with long red hair in a white dress, standing in front of a cream curtain

curl — POST /assets
curl --location 'https://api.useapi.net/v1/google-vids/[email protected]' \
--header 'Authorization: Bearer user:12345-…' \
--header 'Content-Type: image/jpeg' \
--data-binary '@photo.jpg'
{
    "assetId": "user:[email protected]:AYGXpjA1zXgqhhQOy…",
    "email": "[email protected]",
    "type": "image/jpeg",
    "bytes": 2054748
}

Step 2: the avatar, restyled in one sentence

POST /avatars with the photo as image and a refine: Google reframes the photo into an avatar picture, then changes the scene as asked while keeping the person. We named her Amber and gave her the voice Vira. Avatar pictures cost nothing on a plan without images; on a plan with images each picture Google makes counts one image.

Amber, the avatar made from the photo: a hilltop at sunset with a glass of red wine

curl — POST /avatars
curl --location 'https://api.useapi.net/v1/google-vids/avatars' \
--header 'Authorization: Bearer user:12345-…' \
--form 'name="Amber"' \
--form 'voice="Vira"' \
--form 'image="user:[email protected]:AYGXpjA1zXgqhhQOy…"' \
--form 'refine="Sitting relaxed in a simple wooden chair on a hilltop, facing the camera. She holds a glass of red wine in her left hand. Wind is blowing her hair. Behind her a still, open field of tall golden grass under a spectacular sunset sky in orange, pink and violet, warm soft light, no water, no movement in the background."'
{
    "avatarId": "user:[email protected]:eyJnIjoiaDcyMzdmZjVi…",
    "name": "Amber",
    "voice": "Vira",
    "voiceId": "Pulcherrima",
    "voiceStyle": "Forward",
    "email": "[email protected]",
    "source": "photo",
    "previewMediaId": "user:[email protected]:eyJ1IjoiaHR0cHM6Ly9s…",
    "refine": "Sitting relaxed in a simple wooden chair on a hilltop, facing the camera. …"
}

Two things we learned on the way:

  • The avatar must face the camera: the video lip-syncs the face.
  • Pick a still background, so that she is the only thing that moves in the video. That is why we asked for a quiet field instead of waves on a beach.

Step 3: the script

The script is up to 400 characters, and spoken it has to fit in 30 seconds. Audio tags in square brackets are performed, not read: [awe], [thoughtful] and [whisper] here. In Vira’s voice these 327 characters ran 23.8 seconds; a slower voice or [slow pace] makes the same text longer, and a script that runs past 30 seconds is refused before the video starts.

Hi there. [awe] Can you believe this view? The sun is sinking behind the hills, the sky turned pink and gold, and the tall grass glows like it’s on fire. [thoughtful] I come up here at the end of every busy day, just to slow down. No emails, no rush, only the quiet field and this glass of wine. [whisper] Stay a little longer.

Step 4: the talking video

POST /videos/avatar with the avatar and the script. Google took about two and a half minutes; the video is 1280×720 with sound, 24 seconds long, exactly the length of the speech. It used one of the account’s monthly AI avatar videos.

The same video as a YouTube Short: Talking AI avatar from one photo.

curl — POST /videos/avatar
curl --location 'https://api.useapi.net/v1/google-vids/videos/avatar' \
--header 'Authorization: Bearer user:12345-…' \
--form 'avatar="user:[email protected]:eyJnIjoiaDcyMzdmZjVi…"' \
--form 'script="Hi there. [awe] Can you believe this view? The sun is sinking behind the hills, the sky turned pink and gold, and the tall grass glows like it'\''s on fire. [thoughtful] I come up here at the end of every busy day, just to slow down. No emails, no rush, only the quiet field and this glass of wine. [whisper] Stay a little longer."' \
--form 'async="true"'
{
    "jobid": "j1105035516096819105a-u12345-email:[email protected]:google-vids",
    "type": "avatarVideo",
    "email": "[email protected]",
    "status": "completed",
    "result": {
        "mediaId": "user:[email protected]:eyJ1IjoiaHR0cHM6Ly9j…",
        "width": 1280,
        "height": 720,
        "duration": 24,
        "resolution": "720p",
        "aspectRatio": "landscape",
        "speechDuration": 23.84,
        "quota": {
            "avatarVideo": { "limit": 10, "left": 6, "resetAt": "2026-12-01T08:00:00.000Z" }
        }
    }
}

The job runs in the background (async: true); GET /jobs/jobid returns it until it completes, and GET /media/mediaId downloads the MP4.

Speech on its own: 2,426 characters in one call

POST /speech voices any script of up to 2,500 characters in one of the 30 voices. We gave it a short original story, “My smart fridge unionized”, in the voice Vira. Google answered in 20 seconds with 2 minutes 22 seconds of speech, the whole story. It used one of the account’s monthly Gemini uses. The API returns a WAV (24 kHz mono); the player below is the same audio as an MP3.

curl — POST /speech
curl --location 'https://api.useapi.net/v1/google-vids/speech' \
--header 'Authorization: Bearer user:12345-…' \
--form 'voice="Vira"' \
--form 'script="Last Tuesday, my smart fridge decided it was smarter than me. It started small. A polite notification: \"You are out of milk.\" … I have never felt so seen by an appliance."'
{
    "jobid": "j1105025759739671733s-u12345-email:[email protected]:google-vids",
    "type": "speech",
    "email": "[email protected]",
    "status": "completed",
    "result": {
        "mediaId": "user:[email protected]:eyJ1IjoiaHR0cHM6Ly9j…",
        "duration": 142,
        "model": "/flix/generate_text_to_speech/v1",
        "quota": {
            "speech": { "limit": 50, "left": 31, "resetAt": "2026-12-01T08:00:00.000Z" }
        },
        "elapsedMs": 20174
    }
}

GET /media/mediaId downloads the WAV.

Good to know

  • Cost. Each video uses one AI avatar video from the account’s monthly allowance, plus one Gemini use for the speech. GET /accounts/email shows what is left (avatarVideo, speech). The avatar itself and its changes cost nothing on a plan without images.
  • Google checks the video too, and still counts a refusal. The check while making the video is stricter than the one for avatar pictures: an earlier version of this avatar, made from a different photo of an ordinary person on a beach, was refused as looking like a celebrity, and that attempt still used a video. Restyling or using another photo helped.
  • Landscape only. Google has no portrait option for talking avatars.
  • Longer scenes with action are POST /videos with the avatar as avatar_1: 3 to 10 seconds where the avatar acts and speaks the lines you write in the prompt.
  • MCP. The same features are in the Google Vids MCP server: vids_create_avatar, vids_create_avatar_video and vids_create_speech.