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": "Ungültige Anfrageparameter",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Authentifizierung fehlgeschlagen. Prüfen Sie Ihren API-Schlüssel",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Kontoguthaben unzureichend. Laden Sie Guthaben auf und versuchen Sie es erneut",
"type": "payment_required"
}
}
{
"error": {
"code": 429,
"message": "Zu viele Anfragen. Versuchen Sie es später erneut",
"type": "rate_limit_error"
}
}
Gemini Omni 1.1 Flash
Gemini Omni 1.1 Flash Videogenerierung
- Googles offizielles multimodales All-in-One-Modell Gemini Omni 1.1 Flash zur Videogenerierung
- Unterstützt Text-zu-Video, Bild-zu-Video, Referenzen mehrerer Motive, Interpolation von Start- und Endbild, Videobearbeitung und -fortsetzung
- Unterstützt 360p / 720p / 1080p / 4K, 24 fps und 3–10 Sekunden lange Ausgaben mit generiertem Audio
- Asynchrone Aufgaben-API; Ergebnisse nach dem Senden über die Aufgaben-ID abrufen
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": "Ungültige Anfrageparameter",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Authentifizierung fehlgeschlagen. Prüfen Sie Ihren API-Schlüssel",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Kontoguthaben unzureichend. Laden Sie Guthaben auf und versuchen Sie es erneut",
"type": "payment_required"
}
}
{
"error": {
"code": 429,
"message": "Zu viele Anfragen. Versuchen Sie es später erneut",
"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": "Ungültige Anfrageparameter",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Authentifizierung fehlgeschlagen. Prüfen Sie Ihren API-Schlüssel",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Kontoguthaben unzureichend. Laden Sie Guthaben auf und versuchen Sie es erneut",
"type": "payment_required"
}
}
{
"error": {
"code": 429,
"message": "Zu viele Anfragen. Versuchen Sie es später erneut",
"type": "rate_limit_error"
}
}
Authentifizierung
string
erforderlich
Alle APIs erfordern die Authentifizierung mit einem Bearer Token.API-Schlüssel abrufen:Rufen Sie die API-Schlüsselverwaltung auf, um Ihren API-Schlüssel zu erhalten.Fügen Sie ihn dem Anfrageheader hinzu:
Authorization: Bearer YOUR_API_KEY
Anfrageparameter
string
erforderlich
Name des Videogenerierungsmodells. Muss
gemini-omni-1.1-flash sein.string
Textanweisung. Beschreiben Sie bei Text-zu-Video die Szene und bei Bild-zu-Video, Videobearbeitung oder -fortsetzung die Bewegung, den Stil oder die gewünschte Änderung.
Geben Sie mindestens
prompt oder Medien (image_urls, Start-/Endbilder oder video_urls) an.string
Standard:"720p"
Auflösung des Ausgabevideos. Groß-/Kleinschreibung wird nicht berücksichtigt.Verfügbare Werte:
360p720p(Standard)1080p4k
2160p wird als 4k behandelt. Die Auflösung bestimmt die Höhe der Vorabreservierung und die wesentlichen Kosten der Videoausgabe.Eine nicht unterstützte Auflösung führt zum Fehler
invalid_resolution.string
Standard:"16:9"
Seitenverhältnis des Videos zur Auswahl von Quer- oder Hochformat.Unterstützt:
16:9– Querformat (Standard)9:16– Hochformat
16:9 behandelt.Wenn
video_urls angegeben ist, übernimmt die Ausgabe normalerweise das Seitenverhältnis des Eingabevideos; aspect_ratio ist dann möglicherweise wirkungslos.array<string>
Array mit Referenzbildern. Unterstützt werden nur öffentlich erreichbare HTTP/HTTPS-URLs.
- 1 Bild: wird standardmäßig als Startbild des Videos verwendet
- Mehrere Bilder: dienen als Motiv- oder Stilreferenzen; beschreiben Sie Zweck und Beziehung der Bilder in
prompt
image_urls und Start-/Endbilder dürfen zusammen höchstens 10 Bilder enthalten.string
Startbild. Unterstützt wird nur eine öffentlich erreichbare HTTP/HTTPS-URL.
- Allein angegeben: verwendet das Bild als Startbild des Videos
- Mit
last_frame_imageangegeben: erzeugt einen fließenden Übergang vom Start- zum Endbild
string
Endbild. Unterstützt wird nur eine öffentlich erreichbare HTTP/HTTPS-URL; es muss zusammen mit
first_frame_image angegeben werden.Wird nur
last_frame_image angegeben, wird invalid_frame_images zurückgegeben. Verwenden Sie für beide Bilder dasselbe Seitenverhältnis und stimmen Sie es auf aspect_ratio ab.Für ein Startbild oder ein Start-/Endbildpaar sind die folgenden Methoden gleichwertig. Wählen Sie eine davon und geben Sie nicht beide an:
first_frame_image/last_frame_imageverwendenimage_with_rolesverwenden undroleauffirst_frame/last_framesetzen
array<object>
Array mit Bildern und Rollen. Dies ist eine gleichwertige Alternative zu
Beispiel:
first_frame_image / last_frame_image und kann auch Referenzbilder deklarieren.Anzeigen image_with_roles-Element
Anzeigen image_with_roles-Element
[
{"url": "https://example.com/start.jpg", "role": "first_frame"},
{"url": "https://example.com/end.jpg", "role": "last_frame"}
]
Wenn zusätzlich
image_urls angegeben ist, hat es für Referenzbilder Vorrang und wird nicht mit Referenzen in image_with_roles kombiniert. Insgesamt dürfen höchstens 10 Bilder einschließlich Start- und Endbild verwendet werden.array<string>
Array mit Videos zur Bearbeitung oder Fortsetzung. Derzeit ist höchstens ein Video mit maximal 10 Sekunden Länge erlaubt.Unterstützt werden nur öffentlich erreichbare direkte HTTP/HTTPS-Video-URLs. YouTube-Links werden nicht unterstützt.
video_urls und extend_from_task_id schließen sich gegenseitig aus. Geben Sie nur eines an.object
Objekt mit Zusatzparametern zur expliziten Angabe der Generierungsabsicht.
Anzeigen metadata-Felder
Anzeigen metadata-Felder
string
Verfügbare Aufgabentypen:
text_to_video: Text-zu-Videoimage_to_video: Bild-zu-Videoreference_to_video: Referenz-zu-Videoedit: Videobearbeitungextend: Videofortsetzung
Bei der Interpolation von Start- und Endbild leitet das Modell den Aufgabentyp automatisch ab; die Plattform übergibt
metadata.task nicht.string
Lokale
task_id der vorherigen Generierungsaufgabe. Verwenden Sie sie für dialogbasierte Bearbeitung oder weitere Fortsetzung, ohne das vorherige Video erneut hochzuladen.Die referenzierte Aufgabe muss dem aktuellen Benutzer gehören, erfolgreich abgeschlossen sein und ein Gemini-Omni-Modell verwenden.extend_from_task_id und video_urls schließen sich gegenseitig aus. Geben Sie nur eines an.Dieses Modell besitzt keinen Parameter
duration. Die Dauer jeder Ausgabe wird inhaltsabhängig automatisch bestimmt und beträgt normalerweise 3–10 Sekunden. Beschreiben Sie das gewünschte Tempo in prompt in natürlicher Sprache oder mit Zeitbereichen.Antwort
integer
Antwortstatuscode. Bei Erfolg
200.array
Aufgabenergebnis abrufen
Die Videogenerierung läuft asynchron. Verwenden Sie nach Erhalt dertask_id die API Aufgabenstatus abrufen, um Fortschritt und Ergebnis abzufragen.
cURL
curl --request GET \
--url https://api.apimart.ai/v1/tasks/task_01KS1H7ZYSJWH1N779S2FSHTKA \
--header 'Authorization: Bearer <token>'
completed oder failed. Für den gesamten Client wird ein Timeout von 10 Minuten empfohlen.
Beispiel für ein erfolgreiches Ergebnis
{
"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
}
]
}
}
}
Anwendungsfälle
Anwendungsfall 1: Text-zu-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"
}
Anwendungsfall 2: Interpolation von Start- und Endbild
{
"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"
}
Anwendungsfall 3: Referenzen mehrerer Motive
{
"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"
}
Anwendungsfall 4: Start- und Endbild über Bildrollen
{
"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"
}
Anwendungsfall 5: Videobearbeitung
{
"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 hinzu, um den übrigen Inhalt konsistent zu halten.
Anwendungsfall 6: Dialogbasierte Fortsetzung
{
"model": "gemini-omni-1.1-flash",
"prompt": "Extend this video: the camera pans across the mountains.",
"extend_from_task_id": "task_01AAA"
}