PineRouterDocs
GuidesModelsAPI referenceApps

Gemini Omni Video

Video model, from $0.394 per job.

Videogemini-omni-video

Use with POST /v1/jobs, POST /v1/videos.

Price

SettingsPrice
1080p, 4s, input, video:off$0.394 per job
4s, 720p, input, video:off$0.394 per job
1080p, 6s, input, video:off$0.525 per job
6s, 720p, input, video:off$0.525 per job
1080p, 8s, input, video:off$0.656 per job
720p, 8s, input, video:off$0.656 per job
1080p, 10s, input, video:off$0.787 per job
10s, 720p, input, video:off$0.787 per job
4k, 4s, input, video:off$0.919 per job
4k, 6s, input, video:off$1.05 per job
1080p, input, video:on$1.05 per job
720p, input, video:on$1.05 per job
4k, 8s, input, video:off$1.18 per job
10s, 4k, input, video:off$1.31 per job
4k, input, video:on$1.57 per job

Input fields

FieldType or optionsDefault
promptstring
image_urlslist
audio_idslist
video_listlist
character_idslist
duration4 6 8 10
aspect_ratio16:9 9:16"16:9"
resolution720p 1080p 4k"720p"
seedinteger

Files are public https links. Safety filters are always on.

Example

curl https://pinerouter.ai/v1/jobs \
  -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" \
  -d '{"model":"gemini-omni-video","input":{"aspect_ratio":"16:9","resolution":"720p","prompt":"Describe what you want"}}'

Then poll GET /v1/jobs/<id> until data.status is succeeded (links in data.outputs), or pass webhook_url to be called when it finishes; see Jobs.

import time, requests

BASE, H = "https://pinerouter.ai", {"Authorization": "Bearer YOUR_API_KEY"}
job = requests.post(f"{BASE}/v1/jobs", headers=H, json={"model":"gemini-omni-video","input":{"aspect_ratio":"16:9","resolution":"720p","prompt":"Describe what you want"}}).json()["data"]
while job["status"] not in ("succeeded", "failed"):
    time.sleep(5)
    job = requests.get(f"{BASE}/v1/jobs/{job['id']}", headers=H).json()["data"]
print(job["outputs"] or job.get("error"))