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-ext",
"prompt": "a girl is dancing happily in a sunny garden",
"duration": 10,
"resolution": "1080p",
"aspect_ratio": "9:16"
}'
import requests
url = "https://api.apimart.ai/v1/videos/generations"
payload = {
"model": "gemini-omni-1.1-flash-ext",
"prompt": "a girl is dancing happily in a sunny garden",
"duration": 10,
"resolution": "1080p",
"aspect_ratio": "9:16"
}
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-ext",
prompt: "a girl is dancing happily in a sunny garden",
duration: 10,
resolution: "1080p",
aspect_ratio: "9:16"
};
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-ext",
"prompt": "a girl is dancing happily in a sunny garden",
"duration": 10,
"resolution": "1080p",
"aspect_ratio": "9:16",
}
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": "Invalid request parameters",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Authentication failed. Please check your API key",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Insufficient account balance. Please recharge and try again",
"type": "payment_required"
}
}
{
"error": {
"code": 429,
"message": "Too many requests. Please try again later",
"type": "rate_limit_error"
}
}
gemini-omni-1.1-flash-ext
gemini-omni-1.1-flash-ext Videogenerierung
- Einheitliches Videogenerierungsmodell gemini-omni-1.1-flash-ext
- Unterstützt Text-to-Video, Image-to-Video mit einem Bild, Referenzvideo und Fusion von 3 Referenzbildern
- Unterstützt 720p / 1080p / 4k Auflösung sowie Dauern von 4 / 6 / 8 / 10 Sekunden
- Asynchrone Task-API. Zuerst wird eine Aufgabe eingereicht, anschließend wird das Ergebnis über die Task-ID abgefragt
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-ext",
"prompt": "a girl is dancing happily in a sunny garden",
"duration": 10,
"resolution": "1080p",
"aspect_ratio": "9:16"
}'
import requests
url = "https://api.apimart.ai/v1/videos/generations"
payload = {
"model": "gemini-omni-1.1-flash-ext",
"prompt": "a girl is dancing happily in a sunny garden",
"duration": 10,
"resolution": "1080p",
"aspect_ratio": "9:16"
}
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-ext",
prompt: "a girl is dancing happily in a sunny garden",
duration: 10,
resolution: "1080p",
aspect_ratio: "9:16"
};
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-ext",
"prompt": "a girl is dancing happily in a sunny garden",
"duration": 10,
"resolution": "1080p",
"aspect_ratio": "9:16",
}
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": "Invalid request parameters",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Authentication failed. Please check your API key",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Insufficient account balance. Please recharge and try again",
"type": "payment_required"
}
}
{
"error": {
"code": 429,
"message": "Too many requests. Please try again later",
"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-ext",
"prompt": "a girl is dancing happily in a sunny garden",
"duration": 10,
"resolution": "1080p",
"aspect_ratio": "9:16"
}'
import requests
url = "https://api.apimart.ai/v1/videos/generations"
payload = {
"model": "gemini-omni-1.1-flash-ext",
"prompt": "a girl is dancing happily in a sunny garden",
"duration": 10,
"resolution": "1080p",
"aspect_ratio": "9:16"
}
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-ext",
prompt: "a girl is dancing happily in a sunny garden",
duration: 10,
resolution: "1080p",
aspect_ratio: "9:16"
};
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-ext",
"prompt": "a girl is dancing happily in a sunny garden",
"duration": 10,
"resolution": "1080p",
"aspect_ratio": "9:16",
}
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": "Invalid request parameters",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Authentication failed. Please check your API key",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Insufficient account balance. Please recharge and try again",
"type": "payment_required"
}
}
{
"error": {
"code": 429,
"message": "Too many requests. Please try again later",
"type": "rate_limit_error"
}
}
Authentifizierung
string
erforderlich
Alle Anfragen erfordern eine Authentifizierung per Bearer Token.API-Schlüssel abrufen:Besuchen Sie die Seite zur API-Schlüsselverwaltung, um Ihren API-Schlüssel zu erhalten.Fügen Sie beim Senden von Anfragen den folgenden Header hinzu:
Authorization: Bearer YOUR_API_KEY
Anfrageparameter
string
erforderlich
Name des Videogenerierungsmodells. Muss
gemini-omni-1.1-flash-ext sein.boolean
Standard:"false"
Legt fest, ob der Inhalt vor dem Absenden des Videoauftrags moderiert wird.
true: Prompts und Eingabebilder mitomni-moderation-latestprüfenfalseoder nicht angegeben: keine Moderationsanfrage und damit keine zusätzlichen Moderationskosten oder Verzögerung (Standard)
string
erforderlich
Beschreibung des Videoinhalts. Wir empfehlen, Szene, Subjekt, Aktion, Umgebung, Kameraführung, visuellen Stil und Audiohinweise detailliert zu beschreiben.Beispiel:
"a girl is dancing happily in a sunny garden"integer
Standard:"6"
Videodauer in Sekunden.Unterstützte Werte:
4, 6, 8, 10.Andere Werte wie
5 oder 7 geben einen invalid_duration-Fehler zurück.Übergeben Sie
duration nicht, wenn Sie ein Referenzvideo hochladen. duration und video_urls können nicht gleichzeitig übergeben werden.string
Standard:"720p"
Auflösung des Videos. Werte sind unabhängig von der Groß-/Kleinschreibung.Unterstützte Werte:
360p720p1080p4k
Andere Auflösungen geben einen
invalid_resolution-Fehler zurück.string
Standard:"16:9"
Seitenverhältnis des Videos. Damit steuern Sie die Ausgabe in Quer- oder Hochformat.Übliche Werte:
16:9— Querformat9:16— Hochformat
16:9string
Kompatibilitätsfeld. Hat die gleiche Bedeutung wie
aspect_ratio. Wenn beide angegeben sind, halten Sie sie konsistent.string
Generierungstyp, der angibt, wie die Bilder verwendet werden.Optionen:
frame- Erstes-Bild-Modus.image_urlsdarf nur 1 Bild enthalten, das als erstes Bild des Videos verwendet wird.reference- Referenzmodus.image_urlskann 1 oder 3 Bilder enthalten, die als Referenzbilder verwendet werden.
Wenn
generation_type frame ist, unterstützt image_urls nur 1 Bild; die Übergabe einer anderen Anzahl gibt einen unsupported_image_count-Fehler zurück.array<url>
Array mit URLs der Referenzbilder. Sie können es weglassen, 1 Bild oder 3 Bilder bereitstellen, abhängig von
generation_type:- Weggelassen oder leeres Array: Text-to-Video
- 1 Bild: Image-to-Video mit einem Bild
- 3 Bilder: Fusion von Referenzbildern (nur unterstützt, wenn
generation_typereferenceist)
generation_type:generation_typeistframe: Es darf nur 1 Bild hochgeladen werden.generation_typeistreference: Es können 1 oder 3 Bilder hochgeladen werden.
Der Modus „Erstes Bild + letztes Bild” mit 2 Bildern wird nicht unterstützt. Die Übergabe von 2 Bildern gibt einen
unsupported_image_count-Fehler zurück. 4 oder mehr Bilder sind nicht vollständig verifiziert und werden nicht empfohlen.array<url>
Array mit URLs der Referenzvideos. Sie können es weglassen oder 1 Referenzvideo bereitstellen.Es werden nur öffentlich zugängliche HTTP/HTTPS-Video-URLs unterstützt. Es kann zusammen mit
image_urls übergeben werden: Bilder dienen als Identitäts- oder Kompositionsreferenz, das Video als Bewegungsreferenz.gemini-omni-1.1-flash-ext unterstützt nur 0 oder 1 Referenzvideo. Die Übergabe von 2 oder mehr Videos gibt einen unsupported_video_count-Fehler zurück.Übergeben Sie
duration nicht, wenn Sie video_urls übergeben. video_urls und duration können nicht gleichzeitig übergeben werden.Antwort
integer
Statuscode der Antwort. Erfolgreiche Anfragen geben
200 zurück.array
Aufgabenergebnis abfragen
Die Videogenerierung erfolgt asynchron. Nach der Einreichung gibt die API einetask_id zurück. Verwenden Sie den Endpunkt Aufgabenstatus abrufen, um Fortschritt und Ergebnisse abzufragen.
cURL
curl --request GET \
--url https://api.apimart.ai/v1/tasks/task_01KS1H7ZYSJWH1N779S2FSHTKA \
--header 'Authorization: Bearer <token>'
Beispiel für ein erfolgreiches Ergebnis
{
"code": 200,
"data": {
"id": "task_01KS1H7ZYSJWH1N779S2FSHTKA",
"status": "completed",
"progress": 100,
"created": 1779246294,
"completed": 1779246534,
"actual_time": 240,
"estimated_time": 600,
"cost": 0.4,
"credits_cost": 4,
"result": {
"videos": [
{
"url": ["https://cdn.example.com/videos/abc.mp4"],
"expires_at": 1779332760
}
]
}
}
}
Beispiel für ein fehlgeschlagenes Ergebnis
{
"code": 200,
"data": {
"id": "task_01KS1H7ZYSJWH1N779S2FSHTKA",
"status": "failed",
"progress": 100,
"created": 1779246294,
"completed": 1779246534,
"actual_time": 240,
"estimated_time": 600,
"cost": 0,
"credits_cost": 0,
"error": {
"message": "invalid duration 7, must be one of 4/6/8/10",
"code": "task_failed"
}
}
}
Anwendungsfälle
Szenario 1: Text-zu-Video
{
"model": "gemini-omni-1.1-flash-ext",
"prompt": "a beautiful sunset over the ocean with seagulls flying",
"duration": 6,
"resolution": "720p",
"aspect_ratio": "16:9"
}
Szenario 2: Video mit einem Bild
{
"model": "gemini-omni-1.1-flash-ext",
"prompt": "make the character smile and slowly turn around, cinematic camera motion",
"duration": 6,
"resolution": "1080p",
"aspect_ratio": "9:16",
"image_urls": ["https://example.com/character.jpg"]
}
Szenario 3: Fusion von 3 Referenzbildern
{
"model": "gemini-omni-1.1-flash-ext",
"prompt": "a creative scene combining these elements with smooth camera motion",
"duration": 10,
"resolution": "1080p",
"aspect_ratio": "9:16",
"image_urls": [
"https://example.com/scene.jpg",
"https://example.com/character.jpg",
"https://example.com/product.jpg"
]
}
Szenario 4: Kurzes 4K-Video
{
"model": "gemini-omni-1.1-flash-ext",
"prompt": "close-up of a hummingbird hovering in front of a red flower",
"duration": 4,
"resolution": "4k",
"aspect_ratio": "16:9"
}
Szenario 5: Generierung mit Referenzvideo
{
"model": "gemini-omni-1.1-flash-ext",
"prompt": "the same scene but at night with neon lights",
"resolution": "720p",
"aspect_ratio": "16:9",
"video_urls": ["https://example.com/reference.mp4"]
}
Fehlercodes
| HTTP | Fehlertyp | Bedeutung | Empfohlene Aktion |
|---|---|---|---|
| 400 | invalid_request_error | model ist nicht gemini-omni-1.1-flash-ext, prompt ist leer oder das JSON-Format ist ungültig | Überprüfen Sie den Request-Body |
| 400 | invalid_duration | duration ist nicht 4, 6, 8 oder 10 | Verwenden Sie eine unterstützte Dauer |
| 400 | invalid_resolution | resolution ist nicht 720p, 1080p oder 4k | Verwenden Sie eine unterstützte Auflösung |
| 400 | unsupported_image_count | Anzahl von image_urls nicht unterstützt, meist durch die Übergabe von 2 Bildern verursacht | Verwenden Sie 0, 1 oder 3 Bilder |
| 400 | unsupported_video_count | Anzahl von video_urls nicht unterstützt, meist durch die Übergabe von 2 oder mehr Videos verursacht | Verwenden Sie 0 oder 1 Referenzvideo |
| 401 | authentication_error | Ungültiges Token | Überprüfen Sie den Bearer Token |
| 402 | payment_required | Unzureichendes Guthaben | Aufladen und erneut versuchen |
| 429 | rate_limit_error | Ratenlimit überschritten | Parallelität reduzieren oder es später erneut versuchen |
data.error zurück. Häufige Ursachen sind vorübergehende Kontingenterschöpfungen beim Upstream, fehlgeschlagene Inhaltsmoderation oder Timeout beim Upstream.