curl --request POST \
--url https://api.apimart.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "gemini-omni-1.1-flash",
"prompt": "A marble rolling fast on a chain reaction style track, continuous smooth shot.",
"aspect_ratio": "16:9",
"resolution": "1080p"
}'
import requests
url = "https://api.apimart.ai/v1/videos/generations"
payload = {
"model": "gemini-omni-1.1-flash",
"prompt": "A marble rolling fast on a chain reaction style track, continuous smooth shot.",
"aspect_ratio": "16:9",
"resolution": "1080p"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/videos/generations";
const payload = {
model: "gemini-omni-1.1-flash",
prompt: "A marble rolling fast on a chain reaction style track, continuous smooth shot.",
aspect_ratio: "16:9",
resolution: "1080p"
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
url := "https://api.apimart.ai/v1/videos/generations"
payload := map[string]interface{}{
"model": "gemini-omni-1.1-flash",
"prompt": "A marble rolling fast on a chain reaction style track, continuous smooth shot.",
"aspect_ratio": "16:9",
"resolution": "1080p",
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01KS1H7ZYSJWH1N779S2FSHTKA"
}
]
}
{
"error": {
"code": 400,
"message": "Parameter permintaan tidak valid",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Autentikasi gagal. Periksa kunci API Anda",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Saldo akun tidak cukup. Isi saldo dan coba lagi",
"type": "payment_required"
}
}
{
"error": {
"code": 429,
"message": "Terlalu banyak permintaan. Coba lagi nanti",
"type": "rate_limit_error"
}
}
Gemini Omni 1.1 Flash
Pembuatan Video Gemini Omni 1.1 Flash
- Model resmi Google Gemini Omni 1.1 Flash untuk pembuatan video multimodal serbaguna
- Mendukung teks-ke-video, gambar-ke-video, referensi multi-subjek, interpolasi frame awal dan akhir, pengeditan, serta perpanjangan video
- Mendukung 360p / 720p / 1080p / 4K, 24 fps, dan keluaran 3–10 detik dengan audio yang dihasilkan
- API tugas asinkron; lihat hasil berdasarkan ID tugas setelah pengiriman
POST
/
v1
/
videos
/
generations
curl --request POST \
--url https://api.apimart.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "gemini-omni-1.1-flash",
"prompt": "A marble rolling fast on a chain reaction style track, continuous smooth shot.",
"aspect_ratio": "16:9",
"resolution": "1080p"
}'
import requests
url = "https://api.apimart.ai/v1/videos/generations"
payload = {
"model": "gemini-omni-1.1-flash",
"prompt": "A marble rolling fast on a chain reaction style track, continuous smooth shot.",
"aspect_ratio": "16:9",
"resolution": "1080p"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/videos/generations";
const payload = {
model: "gemini-omni-1.1-flash",
prompt: "A marble rolling fast on a chain reaction style track, continuous smooth shot.",
aspect_ratio: "16:9",
resolution: "1080p"
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
url := "https://api.apimart.ai/v1/videos/generations"
payload := map[string]interface{}{
"model": "gemini-omni-1.1-flash",
"prompt": "A marble rolling fast on a chain reaction style track, continuous smooth shot.",
"aspect_ratio": "16:9",
"resolution": "1080p",
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01KS1H7ZYSJWH1N779S2FSHTKA"
}
]
}
{
"error": {
"code": 400,
"message": "Parameter permintaan tidak valid",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Autentikasi gagal. Periksa kunci API Anda",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Saldo akun tidak cukup. Isi saldo dan coba lagi",
"type": "payment_required"
}
}
{
"error": {
"code": 429,
"message": "Terlalu banyak permintaan. Coba lagi nanti",
"type": "rate_limit_error"
}
}
curl --request POST \
--url https://api.apimart.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "gemini-omni-1.1-flash",
"prompt": "A marble rolling fast on a chain reaction style track, continuous smooth shot.",
"aspect_ratio": "16:9",
"resolution": "1080p"
}'
import requests
url = "https://api.apimart.ai/v1/videos/generations"
payload = {
"model": "gemini-omni-1.1-flash",
"prompt": "A marble rolling fast on a chain reaction style track, continuous smooth shot.",
"aspect_ratio": "16:9",
"resolution": "1080p"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/videos/generations";
const payload = {
model: "gemini-omni-1.1-flash",
prompt: "A marble rolling fast on a chain reaction style track, continuous smooth shot.",
aspect_ratio: "16:9",
resolution: "1080p"
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
url := "https://api.apimart.ai/v1/videos/generations"
payload := map[string]interface{}{
"model": "gemini-omni-1.1-flash",
"prompt": "A marble rolling fast on a chain reaction style track, continuous smooth shot.",
"aspect_ratio": "16:9",
"resolution": "1080p",
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01KS1H7ZYSJWH1N779S2FSHTKA"
}
]
}
{
"error": {
"code": 400,
"message": "Parameter permintaan tidak valid",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Autentikasi gagal. Periksa kunci API Anda",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Saldo akun tidak cukup. Isi saldo dan coba lagi",
"type": "payment_required"
}
}
{
"error": {
"code": 429,
"message": "Terlalu banyak permintaan. Coba lagi nanti",
"type": "rate_limit_error"
}
}
Autentikasi
string
wajib
Semua API memerlukan autentikasi Bearer Token.Dapatkan kunci API:Kunjungi halaman pengelolaan kunci API untuk mendapatkan kunci API Anda.Tambahkan ke header permintaan saat digunakan:
Authorization: Bearer YOUR_API_KEY
Parameter permintaan
string
wajib
Nama model pembuatan video. Harus
gemini-omni-1.1-flash.string
Instruksi teks. Untuk teks-ke-video, jelaskan adegan. Untuk gambar-ke-video, pengeditan, atau perpanjangan video, jelaskan gerakan, gaya, atau perubahan yang diinginkan.
Berikan setidaknya
prompt atau media (image_urls, gambar frame awal/akhir, atau video_urls).string
default:"720p"
Resolusi video keluaran. Huruf besar dan kecil tidak dibedakan.Nilai yang tersedia:
360p720p(default)1080p4k
2160p diperlakukan sebagai 4k. Resolusi menentukan tingkat deposit yang ditahan dan biaya utama keluaran video.Resolusi yang tidak didukung akan mengembalikan error
invalid_resolution.string
default:"16:9"
Rasio aspek video untuk memilih keluaran lanskap atau potret.Didukung:
16:9- Lanskap (default)9:16- Potret
16:9.Saat
video_urls diberikan, keluaran biasanya mengikuti rasio aspek video masukan sehingga aspect_ratio mungkin tidak diterapkan.array<string>
Array gambar referensi. Hanya URL HTTP/HTTPS yang dapat diakses publik yang didukung.
- Berikan 1 gambar: digunakan sebagai frame awal video secara default
- Berikan beberapa gambar: digunakan sebagai referensi subjek atau gaya; jelaskan tujuan dan hubungan setiap gambar dalam
prompt
image_urls dan gambar frame awal/akhir dibatasi maksimal 10 gambar secara total.string
Gambar frame awal. Hanya URL HTTP/HTTPS yang dapat diakses publik yang didukung.
- Diberikan sendiri: menggunakan gambar sebagai frame awal video
- Diberikan bersama
last_frame_image: membuat transisi video yang mulus dari frame awal ke frame akhir
string
Gambar frame akhir. Hanya URL HTTP/HTTPS yang dapat diakses publik yang didukung dan harus diberikan bersama
first_frame_image.Memberikan hanya
last_frame_image akan mengembalikan invalid_frame_images. Gunakan rasio yang sama untuk kedua gambar dan samakan dengan aspect_ratio.Untuk frame awal atau pasangan frame awal/akhir, kedua metode berikut memberikan hasil yang sama. Pilih salah satu dan jangan berikan keduanya:
- Gunakan
first_frame_image/last_frame_image - Gunakan
image_with_rolesdenganrolediatur kefirst_frame/last_frame
array<object>
Array gambar dengan peran. Ini adalah alternatif yang setara dengan
Contoh:
first_frame_image / last_frame_image dan juga dapat mendeklarasikan gambar referensi.Tampilkan Elemen image_with_roles
Tampilkan Elemen image_with_roles
[
{"url": "https://example.com/start.jpg", "role": "first_frame"},
{"url": "https://example.com/end.jpg", "role": "last_frame"}
]
Jika
image_urls juga diberikan, parameter tersebut diprioritaskan untuk referensi dan tidak digabungkan dengan referensi dalam image_with_roles. Semua gambar yang benar-benar digunakan, termasuk frame awal dan akhir, dibatasi maksimal 10 secara total.array<string>
Array video yang akan diedit atau diperpanjang. Saat ini maksimal satu video dapat diberikan dan durasinya tidak boleh lebih dari 10 detik.Hanya URL langsung video HTTP/HTTPS yang dapat diakses publik yang didukung. Tautan YouTube tidak didukung.
video_urls dan extend_from_task_id saling eksklusif. Berikan hanya salah satu.object
Objek parameter tambahan untuk menentukan tujuan pembuatan secara eksplisit.
Tampilkan Field metadata
Tampilkan Field metadata
string
Jenis tugas yang tersedia:
text_to_video: teks-ke-videoimage_to_video: gambar-ke-videoreference_to_video: referensi-ke-videoedit: pengeditan videoextend: perpanjangan video
Untuk interpolasi frame awal dan akhir, model menyimpulkan jenis tugas secara otomatis dan platform tidak meneruskan
metadata.task.string
task_id lokal dari tugas pembuatan sebelumnya. Gunakan untuk pengeditan percakapan atau perpanjangan lanjutan tanpa mengunggah ulang video sebelumnya.Tugas yang dirujuk harus milik pengguna saat ini, berstatus berhasil, dan merupakan tugas model Gemini Omni.extend_from_task_id dan video_urls saling eksklusif. Berikan hanya salah satu.Model ini tidak memiliki parameter
duration. Durasi setiap keluaran ditentukan secara otomatis berdasarkan konten, biasanya 3–10 detik. Untuk mengatur tempo, jelaskan dalam prompt menggunakan bahasa alami atau rentang waktu.Respons
integer
Kode status respons.
200 menunjukkan berhasil.array
Melihat hasil tugas
Pembuatan video berjalan asinkron. Setelah menerimatask_id, gunakan API Dapatkan status tugas untuk melihat progres dan hasil.
cURL
curl --request GET \
--url https://api.apimart.ai/v1/tasks/task_01KS1H7ZYSJWH1N779S2FSHTKA \
--header 'Authorization: Bearer <token>'
completed atau failed. Batas waktu keseluruhan klien yang disarankan adalah 10 menit.
Contoh hasil berhasil
{
"code": 200,
"data": {
"id": "task_01KS1H7ZYSJWH1N779S2FSHTKA",
"status": "completed",
"progress": 100,
"cost": 1.52,
"credits_cost": 15.2,
"result": {
"videos": [
{
"url": ["https://cdn.example.com/gemini_omni_xxx.mp4"],
"expires_at": 1788518400
}
]
}
}
}
Kasus penggunaan
Kasus 1: teks-ke-video (4K)
{
"model": "gemini-omni-1.1-flash",
"prompt": "a blue butterfly landing on a flower, macro, soft light, no dialogue",
"aspect_ratio": "9:16",
"resolution": "4k"
}
Kasus 2: interpolasi frame awal dan akhir
{
"model": "gemini-omni-1.1-flash",
"prompt": "smooth transition, camera slowly pushes in",
"first_frame_image": "https://example.com/start.jpg",
"last_frame_image": "https://example.com/end.jpg",
"resolution": "720p"
}
Kasus 3: referensi multi-subjek
{
"model": "gemini-omni-1.1-flash",
"prompt": "the cat playfully bats at the ball of yarn",
"image_urls": [
"https://example.com/cat.png",
"https://example.com/yarn.png"
],
"resolution": "720p"
}
Kasus 4: mendeklarasikan frame awal dan akhir dengan peran gambar
{
"model": "gemini-omni-1.1-flash",
"prompt": "a smooth cinematic transition from sunrise to a starry night",
"image_with_roles": [
{"url": "https://example.com/sunrise.jpg", "role": "first_frame"},
{"url": "https://example.com/night.jpg", "role": "last_frame"}
],
"resolution": "1080p"
}
Kasus 5: pengeditan video
{
"model": "gemini-omni-1.1-flash",
"prompt": "Make the violin invisible. Keep everything else the same.",
"video_urls": ["https://example.com/clip.mp4"]
}
Keep everything else the same agar bagian lainnya tetap konsisten.
Kasus 6: perpanjangan percakapan
{
"model": "gemini-omni-1.1-flash",
"prompt": "Extend this video: the camera pans across the mountains.",
"extend_from_task_id": "task_01AAA"
}