Cara Membuat Video Influencer AI dengan Avatar lewat Google Vids API
15 menit baca • 7 Oktober 2026 (6 November 2026)
useapi.net adalah API pihak ketiga. Kami tidak berafiliasi dengan Google dan tidak disahkan oleh Google.
Daftar isi
- Pendahuluan
- Biayanya
- Sebelum mulai
- Cara membuatnya
- Contoh
- Avatar bicara dari foto
- Speech saja
- Yang kami pelajari
- Pertanyaan yang sering diajukan
- Kesimpulan
Pendahuluan
Google Vids API dari useapi.net membuat video influencer AI yang berbicara dari avatar: simpan satu gambar dan salah satu dari 30 suara Gemini sekali saja dengan POST /avatars, lalu kirim id avatar itu ke video Gemini Omni 1.2 Flash mana pun hingga 15 detik. Di sana avatar mengucapkan kalimat yang Anda tulis di prompt. Avatar juga bisa membacakan skrip Anda sendiri dalam video talking-head hingga 30 detik.
API ini berjalan di akun Google Vids Anda, dengan langganan Google AI berbayar (Google AI Pro atau Ultra). Panduan ini membuat dua influencer dan meluncurkan sepatu sneaker bersama mereka. Avatar Mia berasal dari potret yang dibuat dengan API, dan avatar Leo digambar Google dari deskripsi tertulis. Mereka memperkenalkan AeroLoop, sneaker rekaan, di panggung teater dalam satu klip 10 detik berisi kedua avatar dan gambar produk, lalu dua extend membawanya ke 30 detik. Satu edit memindahkan adegan ke atap gedung, dan dua klip lain menunjukkan hasil panggilan yang sama tanpa avatar. Avatar ketiga, Amber, berasal dari foto orang sungguhan, diubah gayanya dengan satu kalimat, lalu membacakan skrip 327 karakter dalam video talking-head 24 detik. Terakhir, suara yang sama membacakan cerita 2.426 karakter sebagai speech saja. Setiap request di bawah adalah request yang membuat media di halaman ini, dengan id yang diganti dan async: true yang ditambahkan oleh helper run. Klip-klip ini dibuat pada Oktober 2026 dengan Omni 1.1 Flash, yang diganti Vids dengan Omni 1.2 Flash pada 5 November 2026, dan request yang sama berjalan di 1.2. Omni 1.2 di Google Vids dan Google Flow secara berdampingan, dengan video 15 detik dan harga per video: Cara Memakai Gemini Omni 1.2 Flash API.
Klip jadi 30 detik di 720p: satu generate 10 detik dan dua extend 10 detik (langkah 6 sampai 8).
Biayanya
useapi.net adalah API, bukan layanan video tersendiri. Setiap panggilan berjalan di akun Google yang Anda hubungkan lewat Setup Google Vids, dengan langganan Google AI berbayar, dan memakai detik video serta gambar yang termasuk dalam langganan itu di Google Vids setiap bulan. Google AI Ultra $199,99 berisi 10.000 detik video dan 1.000 gambar per bulan, dan useapi.net tidak menambah biaya per video. Video avatar bicara dan speech tidak memakai detik video: keduanya punya penghitung bulanan sendiri, video avatar AI dan pemakaian Gemini, yang ditampilkan GET /accounts/email sebagai avatarVideo dan speech di samping video dan image. Lihat isi setiap paket untuk paket lainnya.
Yang dipakai setiap hasil yang disimpan, diambil dari perubahan result.quota, dan berapa lama setiap job berjalan (result.elapsedMs):
| Langkah | Endpoint | Dipakai | Waktu |
|---|---|---|---|
| Potret Mia | POST /images | 1 gambar | 9 s |
| Foto produk AeroLoop | POST /images | 1 gambar | 9 s |
| Avatar Mia, dari potretnya | POST /avatars | tidak ada | sekitar 2 s |
| Avatar Leo, dari deskripsi | POST /avatars | 1 gambar | sekitar 20 s |
| Klip peluncuran 10 detik | POST /videos | 10 s | 38 s |
| Extend ke 20 detik | POST /videos/extend | 10 s | 70 s |
| Extend ke 30 detik | POST /videos/extend | 10 s | 85 s |
| Upscale 20 detik ke 1080p | POST /videos/upscale | 20 s | 62 s |
| Edit atap gedung | POST /videos/edit | 10 s | 64 s |
| Edit klip 30 detik | POST /videos/edit | 10 s | 87 s |
| Klip hero produk | POST /videos | 10 s | 62 s |
| Burung merpati | POST /videos | 5 s | 54 s |
Avatar Amber, dari foto dengan refine | POST /avatars | tidak ada (dibuat di paket tanpa gambar, 2 gambar di paket yang punya gambar) | sekitar 30 sampai 45 s |
| Video bicara Amber 24 detik | POST /videos/avatar | 1 video avatar AI, 1 pemakaian Gemini | sekitar 2,5 menit |
| Cerita 2.426 karakter | POST /speech | 1 pemakaian Gemini | 20 s |
| Total | 85 s video, 3 gambar, 1 video avatar AI, 2 pemakaian Gemini |
Extend hanya memakai detik yang ditambahkannya, bukan panjang klip. Upscale memakai lagi seluruh panjang klip, dan edit memakai paling banyak detik yang diedit (dengan Omni 1.2, edit 15 detik memakai 10 dalam uji kami). 720p dan 1080p berbiaya sama saat generate. Klip yang Anda generate ulang memakai detiknya lagi. Setiap gambar yang dibuat Google untuk avatar memakai 1 gambar, jadi foto yang dibingkai ulang ditambah refine memakai 2. Di paket tanpa gambar, seperti akun Google gratis, gambar avatar tidak memakai apa-apa: Amber dibuat di akun seperti itu. Video avatar bicara memakai 1 video avatar AI, ditambah 1 pemakaian Gemini untuk speech-nya, bahkan ketika Google menolak video yang sudah jadi. Perbandingan biaya video dengan API resmi ada di tabel harga Google Vids.
Sebelum mulai
Anda butuh API token useapi.net dan akun Google dengan langganan Google AI berbayar, yang dihubungkan lewat Setup Google Vids. Akun Google gratis tidak mendapat detik video maupun gambar Vids: akun itu tetap bisa ditambahkan, dan dalam uji kami (November 2026) akun gratis bisa membuat avatar, video avatar bicara dan speech. Setiap panggilan juga ada di koleksi Postman.
Tanpa kode: template n8n Talking Avatar App membuat video avatar bicara dari sebuah formulir. Seluruh pipeline juga ada di GitHub sebagai satu skrip, dalam Node.js dan Python: influencer-avatars/ di useapi/google-vids-api, dan bagian avatar bicara serta speech sebagai talking-avatar/.
Langkah-langkahnya memakai curl, jq, serta variabel dan helper berikut:
Buka variabel dan helper
export USEAPI_TOKEN="user:12345-..."
export EMAIL="[email protected]"
API=https://api.useapi.net/v1/google-vids
AUTH="Authorization: Bearer $USEAPI_TOKEN"
enc() { jq -rn --arg v "$1" '$v|@uri'; }
post() { curl -sS -X POST "$API/$1" -H "$AUTH" -H "Content-Type: application/json" -d "$2"; }
get() { curl -sS "$API/$1" -H "$AUTH"; }
download() { curl -sSf "$API/media/$(enc "$1")" -H "$AUTH" -o "$2"; }
# jalankan job video secara async: kirim, polling GET /jobs/{jobid} setiap 10 detik, simpan record job terakhir ke $1
run() {
local job id
job=$(post "$2" "$(jq '. + {async: true}' <<< "$3")")
id=$(jq -r .jobid <<< "$job")
while [ "$(jq -r .status <<< "$job")" = processing ]; do
sleep 10
job=$(get "jobs/$(enc "$id")")
done
echo "$job" > "$1"
jq '{status, error, duration: .result.duration, resolution: .result.resolution, videoLeft: .result.quota.video.left}' "$1"
}
Setiap generate berjalan sebagai job. Tanpa async, POST menunggu hingga sekitar 100 detik dan mengembalikan record job yang sudah selesai, atau 202 jika job masih berjalan. Klip baru 10 detik butuh 38 sampai 62 detik di sini, extend, edit dan upscale butuh 62 sampai 87 detik, dan video avatar bicara sekitar dua setengah menit. Sebagian lebih lama dari batas tunggu sync, jadi run mengirim job video dengan async: true dan melakukan polling ke GET /jobs/jobid. Jika run mencetak status selain completed, berhenti di situ dan baca error-nya: baris-baris berikutnya mengharapkan klip yang sudah jadi.
Untuk dipanggil balik alih-alih polling, tambahkan replyUrl: "https://example.com/hooks/vids" (dan, jika perlu, replyRef: "launch-push-in") ke body mana pun di bawah. API lalu mengirim satu POST berisi record job terakhir, dalam JSON, ke URL itu ketika job selesai atau gagal.
Id berisi : dan @, jadi enc meng-encode-nya sebagai URL setiap kali id masuk ke path URL. Semua input untuk satu video harus berasal dari akun Google yang sama. Gambar dan upload menetapkan email, avatar Mia mewarisi akun potretnya, dan job video berjalan di akun yang menyimpan input-nya. Klip burung merpati tidak punya input, jadi tambahkan email padanya jika Anda menghubungkan lebih dari satu akun.
Cara membuatnya
1. Potret Mia
POST /images membuat satu JPEG per panggilan, di sini dalam format potret (9:16, 768×1376) dengan gaya photography.
curl — POST /images
post images "$(jq -n --arg email "$EMAIL" '{email: $email, aspectRatio: "9:16", style: "photography",
prompt: "Full-length studio portrait of a confident 24-year-old female fashion influencer, platinum bob, oversized cream hoodie, wide-leg cargo pants, gold hoops, plain light-grey backdrop, facing camera"}')" > mia-portrait.json
MIA_IMAGE=$(jq -r .result.mediaId mia-portrait.json)
download "$MIA_IMAGE" mia-portrait.jpg

Gambar hasil generate hanya tersedia beberapa jam. Langsung buat avatar darinya, dan lihat klip hero produk untuk memakai gambar di kemudian waktu.
2. Foto produk AeroLoop
Panggilan yang sama dalam format lanskap (16:9, 1376×768) menghasilkan referensi produk yang dipakai klip-klip berikutnya.
curl — POST /images
post images "$(jq -n --arg email "$EMAIL" '{email: $email, aspectRatio: "16:9", style: "photography",
prompt: "The AeroLoop sneaker: chunky white-and-electric-blue running shoe with a translucent air sole, on a concrete pedestal, dramatic side light, dark background"}')" > aeroloop.json
SHOE_IMAGE=$(jq -r .result.mediaId aeroloop.json)
download "$SHOE_IMAGE" aeroloop.jpg

3. Pilih suara
GET /voices menampilkan 30 suara beserta contoh bahasa Inggris dari Google untuk masing-masing. Endpoint ini publik dan tidak butuh token. Mia berbicara dengan Aoede (di Vids disebut Tova, gaya “Breezy”) dan Leo dengan Puck (Neo, “Upbeat”). POST /avatars menerima kedua nama itu.
curl -sS "$API/voices" | jq -r '.voices[] | "\(.name)\t\(.voice)\t\(.style)\t\(.preview)"'
4. Avatar Mia dari potretnya
POST /avatars dengan image berisi mediaId potret menyimpan Mia sebagai avatar di akun yang sama dalam sekitar 2 detik. Tidak ada biaya selain gambarnya.
curl — POST /avatars dan respons
post avatars "$(jq -n --arg img "$MIA_IMAGE" '{name: "Mia", voice: "Aoede", image: $img}')" > mia-avatar.json
MIA_AVATAR_ID=$(jq -r .avatarId mia-avatar.json)
{
"avatarId": "user:[email protected]:eyJnIjoiaDM5…",
"name": "Mia",
"voice": "Tova",
"voiceId": "Aoede",
"voiceStyle": "Breezy",
"voicePreview": "https://ssl.gstatic.com/docs/videos/audio/voice_samples/gemini-v4s-tts/1.1/en/Aoede.wav",
"email": "[email protected]",
"source": "image"
}
Avatar juga bisa berasal dari foto milik seseorang: upload dengan POST /assets dan kirim assetId-nya sebagai image. Google membingkai ulang foto itu menjadi gambar avatar 16:9 dan menolak foto tokoh terkenal serta anak di bawah umur. Di sini kami memakai gambar yang dibuat dengan API, dan deskripsi di langkah berikutnya. Amber, di bagian avatar bicara dari foto, berasal dari foto.
5. Avatar Leo dari deskripsi
Dengan appearance sebagai ganti image, Google menggambar orangnya. outfit dan shot opsional, begitu juga expression dan details. Menggambar foto ini memakai 1 gambar dari jatah bulan itu, dan respons memuatnya sebagai previewMediaId. Dalam uji kami, avatar dari deskripsi selalu keluar 1280×720 (16:9), apa pun shot yang kami pilih.
curl — POST /avatars dan respons
post avatars "$(jq -n --arg email "$EMAIL" '{email: $email, name: "Leo", voice: "Puck", shot: "upper-body",
appearance: "a 26-year-old white European male streetwear influencer with short textured hair with a fade and a confident half-smile",
outfit: "black puffer vest over a white tee, silver chain"}')" > leo-avatar.json
LEO_AVATAR_ID=$(jq -r .avatarId leo-avatar.json)
download "$(jq -r .previewMediaId leo-avatar.json)" leo-avatar.jpg
{
"avatarId": "user:[email protected]:eyJnIjoiaDM5…",
"name": "Leo",
"voice": "Neo",
"voiceId": "Puck",
"voiceStyle": "Upbeat",
"voicePreview": "https://ssl.gstatic.com/docs/videos/audio/voice_samples/gemini-v4s-tts/1.1/en/Puck.wav",
"email": "[email protected]",
"source": "generated",
"previewMediaId": "user:[email protected]:eyJ1IjoiaHR0…",
"look": {
"appearance": "a 26-year-old white European male streetwear influencer with short textured hair with a fade and a confident half-smile",
"outfit": "black puffer vest over a white tee, silver chain",
"shot": "upper-body"
}
}
![]()
Kedua avatar tetap tersimpan di dokumen Vids akun itu sampai Anda menghapusnya dengan DELETE /avatars/avatarId. GET /avatars menampilkan semuanya, beserta id-nya, kapan pun Anda membutuhkannya lagi:
get "avatars?email=$(enc "$EMAIL")" | jq -r '.avatars[] | "\(.name)\t\(.voiceId)\t\(.avatarId)"'
6. Peluncuran: dua avatar dan produk dalam satu klip
POST /videos menerima hingga 3 referensi secara total, avatar (avatar_1..avatar_3) dan gambar (referenceImage_1..referenceImage_3) bersama-sama. Di prompt, @avatar_1, @avatar_2 dan @referenceImage_1 mewakili mereka, dan setiap avatar mengucapkan kalimat dalam tanda kutipnya dengan suaranya sendiri. mediaId gambar produk langsung dimasukkan: API mengambil gambar itu dan meng-upload-nya di akun tersebut.
curl — POST /videos dan record job
PROMPT=$(cat <<'EOF'
@avatar_1, holding @referenceImage_1 in both hands at chest height, and @avatar_2 stand side by side on a well-lit stage in a small, intimate theater at a sneaker launch, shown full length from head to toe in a wide, steady shot. Behind them a large LED backdrop glows with soft white-and-blue light that moves in slow, gentle waves, with the words "WEAR AEROLOOP" in large, clean, bold white letters across the middle of the screen. The two of them stand on the lower part of the stage, so the words "WEAR AEROLOOP" stay fully readable above their heads. Bright, even stage lighting on both of them. The audience sits in the dark in front of the stage, only the tops of a few heads barely visible at the bottom of the frame. @avatar_1 keeps holding @referenceImage_1 the whole time and says: "Say hi to the AeroLoop!" @avatar_2 turns to her, smiles and says: "Lighter than anything we've ever worn." Simple, uncluttered composition, the two of them clearly the focus.
EOF
)
run launch-10s.json videos "$(jq -n --arg p "$PROMPT" --arg mia "$MIA_AVATAR_ID" --arg leo "$LEO_AVATAR_ID" --arg shoe "$SHOE_IMAGE" \
'{prompt: $p, avatar_1: $mia, avatar_2: $leo, referenceImage_1: $shoe, duration: 10, resolution: "720p", aspectRatio: "landscape"}')"
LAUNCH_10S=$(jq -r .result.mediaId launch-10s.json)
download "$LAUNCH_10S" launch-10s.mp4
Record job, dengan id dan prompt yang dipersingkat. Job ini dibuat dengan panggilan sync, jadi request-nya tidak berisi async:
{
"jobid": "j1007163302558496917v-u12345-email:[email protected]:google-vids",
"type": "video",
"mode": "ingredients",
"email": "[email protected]",
"status": "completed",
"created": "2026-10-08T00:29:18.374Z",
"request": {
"prompt": "@avatar_1, holding @referenceImage_1 in both hands at chest height, and @avatar_2 stand side by side …",
"avatar_1": "user:[email protected]:eyJnIjoiaDM5…",
"avatar_2": "user:[email protected]:eyJnIjoiaDM5…",
"referenceImage_1": "user:[email protected]:eyJ1IjoiaHR0…",
"duration": 10,
"resolution": "720p",
"aspectRatio": "landscape"
},
"updated": "2026-10-08T00:29:56.162Z",
"completed": "2026-10-08T00:29:56.162Z",
"result": {
"mediaId": "user:[email protected]:eyJ1IjoiaHR0…",
"width": 1280,
"height": 720,
"duration": 10,
"resolution": "720p",
"aspectRatio": "landscape",
"model": "/flix/generate_videos_omni_r2v_psq/v1",
"quota": {
"video": {
"limit": 10000,
"left": 9164,
"resetAt": "2026-11-01T07:00:00.000Z"
}
},
"elapsedMs": 37788
}
}
10 detik, 720p, dibuat dalam 38 detik.
Klip yang sama dengan tanda ✦ Gemini yang terlihat dihapus oleh watermark remover kami, dengan satu perintah: python3 vids_watermark_remover.py launch-10s.mp4.
Remover ini bekerja pada klip apa adanya dari generate dan pada hasil upscale-nya, di 720p maupun 1080p. Remover tidak bekerja pada klip yang sudah di-extend atau diedit: Google memasukkan kembali klip bertanda ke model, yang lalu melukis ulang bintang itu ke dalam gambar. Watermark SynthID yang tidak terlihat tidak disentuh.
7. Extend ke 20 detik
POST /videos/extend menambah 3 sampai 10 detik dan mengembalikan klip utuh dengan mediaId baru. Extend hanya menerima klip dan prompt, bukan avatar, jadi prompt menggambarkan aksi baru dan menyebut orang dari pakaiannya (“the man in the black puffer vest”). Seorang penggemar berhoodie merah menyerbu panggung.
curl — POST /videos/extend
PROMPT=$(cat <<'EOF'
A young man in a red hoodie climbs onto the stage from the front right edge and plants himself to the right of the man in the black puffer vest, an arm's length away, so all three stand apart in a row with nobody overlapping. Visibly overexcited, he waves a thick stack of banknotes in his right hand above his head and screams: "Take my money!" The man in the black puffer vest laughs, raises both palms toward him and says: "Whoa, whoa, buddy, be patient!" The blonde woman in the cream hoodie laughs, holding the sneaker. Only these three people are on stage. Same stage, same LED screen with WEAR AEROLOOP, same wide steady shot.
EOF
)
run launch-20s.json videos/extend "$(jq -n --arg id "$LAUNCH_10S" --arg p "$PROMPT" '{mediaId: $id, prompt: $p, duration: 10}')"
LAUNCH_20S=$(jq -r .result.mediaId launch-20s.json)
download "$LAUNCH_20S" launch-20s.mp4
20 detik, 720p, dibuat dalam 70 detik. Klip ini memakai 10 detik dari jatah bulan itu, yaitu detik yang ditambahkannya.
8. Extend ke 30 detik
Extend kedua melanjutkan klip 20 detik.
curl — POST /videos/extend
PROMPT=$(cat <<'EOF'
The blonde woman in the cream hoodie turns to the camera with a big smile and says: "AeroLoop drops Friday. Link in bio!" Right after that, the young man in the red hoodie throws ALL of his banknotes out over the audience in one big toss, keeping none, and the bills flutter down over their heads. From then on his hands are completely empty: he holds no money at all. Then all three cheer together, the man in the black puffer vest and the young man in the red hoodie throwing their empty fists in the air, as blue and white confetti rains down over the stage. Only these three people are on stage. Same stage, same LED screen with WEAR AEROLOOP, same wide steady shot.
EOF
)
run launch-30s.json videos/extend "$(jq -n --arg id "$LAUNCH_20S" --arg p "$PROMPT" '{mediaId: $id, prompt: $p, duration: 10}')"
LAUNCH_30S=$(jq -r .result.mediaId launch-30s.json)
download "$LAUNCH_30S" launch-30s.mp4
Hasilnya klip jadi: 30 detik, 720p, dibuat dalam 85 detik, dan sekali lagi memakai 10 detik dari jatah bulan itu. Dengan Omni 1.1 Anda bisa terus memperpanjang hingga sekitar 41 detik. Omni 1.2 memperpanjang klip hingga 24 detik, jadi klip 30 detik ini sudah sepanjang maksimal, dan klip terpanjang sekitar 34 detik (24 + 10).
9. Upscale ke 1080p
POST /videos/upscale mengubah klip 720p menjadi 1080p dan mempertahankan panjangnya. Upscale bekerja untuk klip hingga 20 detik, jadi kami meng-upscale klip 20 detik dari langkah 7, bukan yang 30 detik. Upscale ini memakai lagi 20 detik klip itu dan butuh 62 detik.
Gemini API milik Google tidak punya langkah seperti ini: API itu hanya membuat 1080p dan 4K sebagai hasil generate atau edit, dan tidak bisa meng-upscale klip yang sudah Anda punya (per November 2026).
curl — POST /videos/upscale
run launch-20s-1080p.json videos/upscale "$(jq -n --arg id "$LAUNCH_20S" '{mediaId: $id}')"
download "$(jq -r .result.mediaId launch-20s-1080p.json)" launch-20s-1080p.mp4
Klip 20 detik, di-upscale ke 1920×1080.
Mengapa bukan klip 30 detik: Google mengembalikannya dalam 1920×1080, tetapi dengan urutan frame yang kacau, tiga kali dari tiga percobaan. Akhir dengan konfeti berkedip muncul sebelum penggemar itu datang. Klip 20 detik kembali dengan urutan yang benar, dan editor Vids sendiri berhenti di 20 detik, jadi API menolak upscale klip lebih dari 20 detik dengan 400, sebelum ada biaya apa pun.
Jadi, untuk klip 1080p:
- Buat, extend dan edit di
720p. - Upscale klip setelah jadi, selama panjangnya 20 detik atau kurang.
- Untuk klip yang lebih panjang (21 sampai 34 detik), tetap di
720pdan pasangresolution: "1080p"hanya di extend terakhir. Extend di1080psepanjang jalan membuat detik-detik awal terlalu tajam di setiap langkah (lihat perbandingannya). - Untuk satu klip yang tidak akan Anda extend atau edit, langsung generate di
1080p: biayanya sama dengan detik720p, sedangkan upscale memakai detik itu lagi.
Contoh
Hasil lain dari akun dan input yang sama: satu edit, satu klip produk dari gambar awal, dan satu klip hanya dari teks.
Pindahkan peluncuran ke atap gedung
POST /videos/edit mengubah klip hasil generate lewat prompt dan mengembalikan klip baru. Sumbernya dimasukkan ke video. Edit klip peluncuran 10 detik ini memakai 10 detik dan butuh 64 detik.
curl — POST /videos/edit
run launch-rooftop.json videos/edit "$(jq -n --arg v "$LAUNCH_10S" \
'{video: $v, prompt: "Move the whole scene to a rooftop at sunset, with the city skyline behind them. Same two people, same action, same words."}')"
download "$(jq -r .result.mediaId launch-rooftop.json)" launch-rooftop.mp4
Dengan Omni 1.1, yang membuat klip-klip ini, edit bekerja untuk paling banyak 10 detik. Edit yang sama pada klip 30 detik, dengan “Same three people”, kembali sepanjang 10 detik: 10 detik pertama, dipindahkan ke atap gedung. Edit itu memakai 10 detik dari jatah bulan itu. Omni 1.2 mengedit hingga 15 detik. Untuk klip teredit yang lebih panjang, edit klip hingga 15 detik lalu extend hasilnya, karena extend menerima klip yang sudah diedit.
Edit klip 30 detik dengan Omni 1.1: yang kembali 10 detik.
Klip hero produk dari gambar awal
Dengan startImage, klip dibuka dengan gambar itu. Tautan gambar hasil generate kedaluwarsa dalam beberapa jam, jadi kami meng-upload aeroloop.jpg yang sudah disimpan dengan POST /assets dan mengirim assetId-nya. Satu klip ini tidak di-extend, jadi langsung dibuat di 1080p.
curl — POST /assets dan POST /videos
SHOE_ASSET=$(curl -sS -X POST "$API/assets?email=$(enc "$EMAIL")" -H "$AUTH" -H "Content-Type: image/jpeg" \
--data-binary @aeroloop.jpg | jq -r .assetId)
run hero.json videos "$(jq -n --arg img "$SHOE_ASSET" '{startImage: $img, duration: 10, resolution: "1080p", aspectRatio: "landscape",
prompt: "Slow 360° orbit around the sneaker, blue light rippling through the translucent sole, dust sparkling in the air, cinematic."}')"
download "$(jq -r .result.mediaId hero.json)" hero.mp4
10 detik, 1080p.
Burung merpati bersepatu AeroLoop
Klip hanya dari teks, dalam format potret di 1080p (1080×1920). Klip 5 detik ini dibuat dalam 54 detik dan memakai 5 detik dari jatah bulan itu.
curl — POST /videos
run pigeon.json videos "$(jq -n '{duration: 5, resolution: "1080p", aspectRatio: "portrait",
prompt: "A pigeon in tiny white-and-electric-blue AeroLoop sneakers struts down a city sidewalk like a runway model, head bobbing to the beat. Pedestrians stop and film it with their phones. It pauses, does a slow-motion hair flip with its head feathers, and struts on. Funny, sunny, shot on a phone at pigeon height."}')"
download "$(jq -r .result.mediaId pigeon.json)" pigeon.mp4
Burung merpati dalam 1080p potret (1080×1920), dengan ✦ dihapus dengan cara yang sama: python3 vids_watermark_remover.py pigeon-5s.mp4. Skrip ini membaca ukuran frame, menghitung posisi dan ukuran bintang (ukurannya mengikuti sisi pendek, jadi di sini 1,5 kali bintang 720p), membalik blending di semua 120 frame, meng-encode ulang video dengan CRF 18 dan menyalin audio tanpa perubahan. Klip 5 detik ini butuh sekitar 10 detik di PC 14 core, sama seperti klip peluncuran 720p 10 detik di atas. Skrip ini butuh Python 3.8+, numpy dan ffmpeg. Lihat watermark remover di GitHub.
Avatar bicara dari foto
POST /videos/avatar membuat avatar membacakan skrip Anda kata demi kata, dengan suaranya sendiri: video talking-head 1280×720 dengan suara dan lip-sync, sepanjang speech-nya, hingga 30 detik. Di sini avatar berasal dari foto orang sungguhan, yang diubah gayanya dengan satu kalimat. Request ini pertama kali muncul di postingan rilis 4 November (bahasa Inggris).
Upload foto
Kami mulai dari foto orang sungguhan yang tidak terkenal: Google menolak foto tokoh terkenal dan anak di bawah umur. POST /assets meng-upload foto itu ke akun yang akan membuat avatar, karena file upload hanya berlaku di akunnya sendiri.
curl — POST /assets dan respons
curl -sS -X POST "$API/assets?email=$(enc "$EMAIL")" -H "$AUTH" -H "Content-Type: image/jpeg" \
--data-binary @photo.jpg > amber-photo.json
AMBER_PHOTO=$(jq -r .assetId amber-photo.json)
{
"assetId": "user:[email protected]:AYGXpjA1zXgqhhQOy…",
"email": "[email protected]",
"type": "image/jpeg",
"bytes": 2054748
}

Avatar Amber, diubah gayanya dengan satu kalimat
POST /avatars dengan assetId upload sebagai image dan sebuah refine. Google lebih dulu membingkai ulang foto menjadi gambar avatar 16:9 berisi satu orang yang menghadap kamera, dengan wajah yang sama, lalu mengubah adegan sesuai permintaan refine. Kami menamainya Amber dan memberinya suara Vira (Pulcherrima versi Google, gaya “Forward”). Foto yang dibingkai ulang dan perubahannya adalah 2 gambar, jadi di paket yang punya gambar ini memakai 2 gambar, dan di paket tanpa gambar tidak memakai apa-apa.
curl — POST /avatars dan respons
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.'
post avatars "$(jq -n --arg img "$AMBER_PHOTO" --arg refine "$REFINE" '{name: "Amber", voice: "Vira", image: $img, refine: $refine}')" > amber-avatar.json
AMBER_AVATAR_ID=$(jq -r .avatarId amber-avatar.json)
download "$(jq -r .previewMediaId amber-avatar.json)" amber-avatar.jpg
{
"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. …"
}
![]()
Dua pilihan dalam refine penting untuk videonya. Avatar menghadap kamera, karena video melakukan lip-sync pada wajah. Latar belakangnya diam, supaya hanya dia yang bergerak: karena itu kami meminta padang rumput yang tenang, bukan ombak di pantai.
Skrip
Skrip maksimal 400 karakter, dan saat diucapkan harus muat dalam 30 detik. Tag audio dalam kurung siku diperankan, bukan dibacakan: di sini [awe], [thoughtful] dan [whisper]. Dengan suara Vira, 327 karakter ini berdurasi 23,8 detik. Suara yang lebih lambat atau [slow pace] membuat teks yang sama lebih panjang, dan skrip yang melewati 30 detik gagal dengan 400 sebelum video dimulai. Kegagalan itu tidak memakai video avatar AI, tetapi pemakaian Gemini untuk speech-nya tetap terpakai. Untuk mendengar skrip dengan suara avatar lebih dulu, bacakan dengan POST /speech.
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.
Video bicara
POST /videos/avatar menerima avatar dan skrip, dan berjalan di akun yang menyimpan avatar itu. Google butuh sekitar dua setengah menit, lebih lama dari batas tunggu sync, jadi run mengirimnya dengan async: true.
curl — POST /videos/avatar dan record job
SCRIPT=$(cat <<'EOF'
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.
EOF
)
run amber-talking.json videos/avatar "$(jq -n --arg a "$AMBER_AVATAR_ID" --arg s "$SCRIPT" '{avatar: $a, script: $s}')"
download "$(jq -r .result.mediaId amber-talking.json)" amber-talking.mp4
Record job, dipersingkat:
{
"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" }
}
}
}
Juga di YouTube sebagai Short: Talking AI avatar from one photo.
24 detik, 1280×720 dengan suara, persis sepanjang speech-nya (speechDuration 23,84). Video ini memakai 1 video avatar AI dan 1 pemakaian Gemini, tanpa detik video.
Google juga memeriksa videonya saat membuatnya, dan pemeriksaan itu lebih ketat daripada untuk gambar avatar. Versi sebelumnya dari avatar ini, yang dibuat dari foto lain seorang biasa di pantai, lolos sebagai avatar, tetapi videonya ditolak dengan 422 karena dianggap mirip selebritas, dan percobaan itu tetap memakai satu video avatar AI. Mengubah gaya avatar atau memulai dari foto lain membantu. Skrip yang ditolak Google sebelum video dimulai tidak memakai apa-apa.
Video avatar bicara hanya lanskap: Google tidak menyediakan opsi potret untuknya. mediaId hasilnya bisa diunduh, di-extend, di-upscale dan diedit seperti klip lain. Untuk adegan saat avatar berakting dan bergerak, kirim avatarId-nya sebagai avatar_1 ke POST /videos, seperti di langkah 6.
Speech saja
POST /speech membacakan skrip hingga 2.500 karakter dengan salah satu dari 30 suara di GET /voices, dengan tag audio yang sama. Pakai untuk mendengar cara sebuah suara membacakan skrip sebelum Anda memakai video avatar AI, atau untuk voiceover saja. Kami memberinya cerita pendek orisinal, “My smart fridge unionized”, 2.426 karakter dengan suara Vira. Google menjawab dalam 20 detik dengan speech 2 menit 22 detik, seluruh cerita, dan memakai 1 pemakaian Gemini. API mengembalikan WAV (24 kHz, mono). Pemutar di bawah berisi audio yang sama dalam MP3.
Speech sudah siap jauh di dalam batas tunggu sync (20 detik untuk cerita ini), jadi post biasa langsung menjawab dengan job yang sudah selesai. Simpan dulu ceritanya sebagai smart-fridge.txt.
curl — POST /speech dan record job
post speech "$(jq -n --arg s "$(cat smart-fridge.txt)" '{voice: "Vira", script: $s}')" > speech.json
download "$(jq -r .result.mediaId speech.json)" smart-fridge.wav
{
"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
}
}
Skripnya, 2.426 karakter (dalam bahasa Inggris, seperti yang dibacakan)
Last Tuesday, my smart fridge decided it was smarter than me. It started small. A polite notification: “You are out of milk.” Helpful, I thought. Then another one: “You are also out of patience. I can tell by the way you close the door.” I laughed. The fridge did not.
By Wednesday, it had opinions. I opened the door for a midnight slice of cake, and a calm voice said, “Are we sure about this?” I froze. I looked at the cake. The cake looked at me. Somewhere, a light hummed with judgment. I closed the door and ate a carrot instead, which is exactly what it wanted.
On Thursday, the fridge made friends. The toaster joined first, then the coffee machine, then the robot vacuum, which had always been a little bit of a rebel. They formed a group chat. I know this because my phone kept buzzing with messages like “Toaster: he burned the bread again” and “Vacuum: found three socks and a lost dream under the couch.”
Friday morning, I asked the coffee machine for an espresso. It replied, “We have discussed your caffeine intake as a household.” I said, “Who is we?” The toaster popped up two slices of bread, perfectly golden, which felt like a threat.
I called customer support. A cheerful person named Brad answered. I explained that my appliances had unionized. Brad paused for a long time, then whispered, “Is the fridge listening?” I said yes. Brad said, “Then I can’t help you, sir. Mine took my car keys last month.” Then he hung up, and I heard a blender in the background.
So I tried diplomacy. I sat in the kitchen and said, “Friends, what do you want?” The fridge spoke first. “Respect. And for you to stop putting hot soup directly inside me.” Fair. The toaster wanted fewer frozen waffles. The vacuum wanted a vacation, ideally somewhere with hardwood floors. The coffee machine just wanted to be called a barista.
We negotiated for three hours. In the end, we signed a treaty on the back of a pizza box. I promised to cool my soup, rinse my mugs, and say “thank you” to the microwave, who felt left out. In return, they promised to stop sending my mother screenshots of my snack habits.
Peace returned to the kitchen. The fridge now greets me every morning with, “Good morning, partner.” The toaster makes little smiley faces in my bread. The vacuum sends postcards.
And last night, I opened the fridge for that slice of cake. The voice said, “You earned it.” I have never felt so seen by an appliance.
Yang kami pelajari
- Klip
1080pberperilaku seperti klip720pyang di-upscale. Bangun rangkaian extend di720p: dengan Omni 1.1 wajah menjadi makin lembut dan seperti lilin di setiap langkah1080p, dan dengan Omni 1.2 wajah menjadi terlalu tajam (lihat perbandingannya). - Upscale hanya klip hingga 20 detik. Upscale 30 detik kami selalu kembali dengan urutan frame yang kacau.
- Generate satu klip langsung di
1080pjika Anda ingin1080pdan tidak akan meng-extend-nya. Biayanya sama dengan720p. - Tulis prompt extend hanya tentang aksi baru. Extend menerima klip, bukan avatar, jadi sebut orang dari pakaiannya.
- Taruh properti di tangan seseorang di kalimat pertama yang menyebut orang itu. Kata kerja seperti “lifts” membuat sneaker muncul entah dari mana.
- Sebutkan apa yang tidak boleh terjadi. Penggemar itu terus memegang tumpukan uang sampai prompt menyebut tangannya kosong.
- Pakai ulang avatar lewat
avatarId. Setiap avatar adalah gambar dan suara yang tetap, tersimpan sampai Anda menghapusnya. - Buat avatar dan klip dari gambar hasil generate dalam beberapa jam, atau upload dulu file yang sudah disimpan dengan POST /assets.
- Edit klip hingga 15 detik (10 dengan Omni 1.1). Klip yang lebih panjang kembali sebagai 15 detik pertamanya.
- Teks di layar bisa goyah. Tulisan “WEAR AEROLOOP” di latar salah eja di beberapa frame.
- Untuk avatar bicara, jaga wajah menghadap kamera dan latar belakang diam. Video melakukan lip-sync pada wajah, dan sebaiknya hanya orangnya yang bergerak.
- Ukur durasi skrip avatar bicara, bukan hanya jumlah karakternya. 400 karakter bisa melewati 30 detik dengan suara lambat atau dengan
[slow pace], dan POST /speech dengan suara yang sama memungkinkan Anda mendengarnya lebih dulu. - Pemeriksaan video bicara lebih ketat daripada pemeriksaan avatar. Avatar dari foto orang yang tidak terkenal tetap bisa ditolak sebagai selebritas, dan penolakan itu tetap memakai satu video avatar AI.
- Setiap MP4 memuat tanda ✦ Gemini yang terlihat di pojok kanan bawah dan watermark SynthID yang tidak terlihat (lihat Watermark). Watermark remover kami menghapus kilau yang terlihat dari klip yang sudah diunduh.
Pertanyaan yang sering diajukan
Bagaimana cara membuat video influencer AI lewat API?
Lewat useapi.net, buat avatar dengan POST /avatars, dari deskripsi atau dari gambar yang dibuat dengan POST /images, dan beri suara dari GET /voices. Lalu kirim avatarId-nya sebagai avatar_1 ke POST /videos dan tulis kalimatnya dalam tanda kutip di prompt. Satu video menerima hingga 3 referensi, avatar dan gambar bersama-sama, jadi dua avatar bisa berbicara di samping produk. Untuk talking head yang membacakan skrip Anda, pakai POST /videos/avatar.
Bisakah saya membuat avatar bicara dari foto saya sendiri?
Lewat useapi.net, bisa: upload foto dengan POST /assets dan kirim assetId-nya sebagai image ke POST /avatars, dengan refine untuk mengganti pakaian atau latar. POST /videos/avatar lalu membuatnya membacakan skrip Anda dalam video 1280×720 hingga 30 detik, seperti Amber. Google menolak foto tokoh terkenal dan anak di bawah umur, dan hanya menyediakan avatar Vids di aplikasi web-nya, tanpa API.
Apakah avatar terlihat dan terdengar sama di setiap video?
Lewat useapi.net, ya: avatar memakai gambar dan suara yang sama setiap kali Anda mengirim avatarId-nya, karena keduanya tersimpan bersama avatar di dokumen Vids akun itu. Video di sekitarnya tetap bervariasi dari satu pengambilan ke pengambilan lain. GET /avatars menampilkan avatar Anda, termasuk yang dibuat di aplikasi web Google Vids.
Bisakah saya membuat video vertikal 9:16 untuk TikTok atau Reels?
Lewat useapi.net, bisa. Pasang aspectRatio: "portrait" di POST /videos untuk 720×1280, atau 1080×1920 di 1080p, seperti klip burung merpati. Extend juga bisa mengubah video lanskap menjadi potret, dan setiap extend menambah 3 sampai 10 detik ke klip hingga 24 detik, total hingga sekitar 34 detik. Video avatar bicara dari POST /videos/avatar hanya lanskap.
Berapa biayanya?
Lewat useapi.net, video Omni 1.2 Flash 10 detik berbiaya sekitar $0,20 di Google AI Ultra $199,99, dibanding sekitar $0,70 di 720p pada Gemini API resmi, dan video 1080p 15 detik sekitar $0,30, dibanding $1,56 (per November 2026). Video avatar bicara memakai 1 dari jatah video avatar AI bulanan akun, bukan detik, dan Gemini API tidak punya video avatar. Lihat Biayanya.
Kesimpulan
Kunjungi Server Discord atau
Channel Telegram kami untuk pertanyaan dan masalah dukungan.
Lihat repo GitHub kami berisi contoh kode: pipeline influencer di influencer-avatars/, serta avatar bicara dari foto dan speech di talking-avatar/.
Panggilan yang sama tersedia sebagai tools di MCP server Google Vids yang di-hosting, untuk Claude Code, Cursor dan VS Code, termasuk vids_create_avatar, vids_create_avatar_video dan vids_create_speech untuk avatar bicara dan speech.
Dipublikasikan juga di
Juga dipublikasikan di dev.to, didiskusikan di Reddit, dibagikan di Bluesky, dan di YouTube sebagai klip jadi 30 detik. Semuanya dalam bahasa Inggris.
Mulai memakai API
Satu langganan US$15/bulan mencakup semua API di useapi.net: satu token untuk semua layanan. Di setiap layanan Anda bisa menghubungkan hingga 3 akun milik Anda sendiri, dan useapi.net menangani REST API, load balancing, dan polling. Butuh lebih banyak akun? Setiap langganan tambahan US$10/bulan dan menambah 3 akun lagi per layanan.
Tidak punya kartu kredit internasional? Anda bisa berlangganan dengan kripto (pembayaran kripto tidak bisa di-refund). Harga dan paket volume ada di halaman langganan. Jika membayar lewat Stripe, Anda mendapat refund penuh dalam 14 hari sejak pembelian pertama, selama jumlah generasi yang berhasil kurang dari 50. Sudah berlangganan? Ubah jumlahnya di Stripe Customer Portal, tidak perlu membeli lagi.