curl --request POST \
--url https://api.evolink.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "gemini-omni-1.2-flash-video-upscale",
"video_urls": [
"https://example.com/source-720p.mp4"
],
"quality": "1080p"
}
'import requests
url = "https://api.evolink.ai/v1/videos/generations"
payload = {
"model": "gemini-omni-1.2-flash-video-upscale",
"video_urls": ["https://example.com/source-720p.mp4"],
"quality": "1080p"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'gemini-omni-1.2-flash-video-upscale',
video_urls: ['https://example.com/source-720p.mp4'],
quality: '1080p'
})
};
fetch('https://api.evolink.ai/v1/videos/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.evolink.ai/v1/videos/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'gemini-omni-1.2-flash-video-upscale',
'video_urls' => [
'https://example.com/source-720p.mp4'
],
'quality' => '1080p'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.evolink.ai/v1/videos/generations"
payload := strings.NewReader("{\n \"model\": \"gemini-omni-1.2-flash-video-upscale\",\n \"video_urls\": [\n \"https://example.com/source-720p.mp4\"\n ],\n \"quality\": \"1080p\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.evolink.ai/v1/videos/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"gemini-omni-1.2-flash-video-upscale\",\n \"video_urls\": [\n \"https://example.com/source-720p.mp4\"\n ],\n \"quality\": \"1080p\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.evolink.ai/v1/videos/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"gemini-omni-1.2-flash-video-upscale\",\n \"video_urls\": [\n \"https://example.com/source-720p.mp4\"\n ],\n \"quality\": \"1080p\"\n}"
response = http.request(request)
puts response.read_body{
"created": 1757169743,
"id": "task-unified-1757169743-7cvnl5zw",
"model": "gemini-omni-1.2-flash-video-upscale",
"object": "video.generation.task",
"progress": 0,
"status": "processing",
"task_info": {
"can_cancel": false,
"estimated_time": 60,
"video_duration": 5
},
"type": "video",
"usage": {
"billing_rule": "per_token",
"credits_reserved": 102.34,
"user_group": "default"
}
}{
"error": {
"code": "invalid_request",
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid or expired token",
"type": "authentication_error"
}
}{
"error": {
"code": "insufficient_quota",
"message": "Insufficient quota. Please top up your account.",
"type": "insufficient_quota"
}
}{
"error": {
"code": "model_access_denied",
"message": "Token does not have access to model: gemini-omni-1.2-flash-video-upscale",
"type": "invalid_request_error"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Too many requests, please try again later",
"type": "rate_limit_error"
}
}{
"error": {
"code": "internal_error",
"message": "Internal server error",
"type": "api_error"
}
}Gemini Omni 1.2 Flash 動画アップスケール
- Gemini Omni 1.2 Flash(
gemini-omni-1.2-flash-video-upscale)は、元の映像内容と音声を維持して動画を高解像度化します。プロンプトは不要です。 - 動画:
video_urlsは最大15秒の動画1本が必須です。 - 入力サイズ: 16:9または9:16の標準サイズのみ。
640×360、1280×720、1920×1080、または縦向きの360×640、720×1280、1080×1920。 - 目標解像度:
qualityは必須です。360p →720pまたは1080p、720p →1080pまたは4k、1080p →4k。 - 出力: 長さ、アスペクト比、音声は入力に合わせます。フレームレートは24 fpsです。
seedの固定で再現性を高められます。- 非同期処理です。タスクIDで状態を確認してください。
- リンクは24時間有効です。早めに保存してください。
動画アップスケールでは prompt を使用しません。指定しても無視されます。
curl --request POST \
--url https://api.evolink.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "gemini-omni-1.2-flash-video-upscale",
"video_urls": [
"https://example.com/source-720p.mp4"
],
"quality": "1080p"
}
'import requests
url = "https://api.evolink.ai/v1/videos/generations"
payload = {
"model": "gemini-omni-1.2-flash-video-upscale",
"video_urls": ["https://example.com/source-720p.mp4"],
"quality": "1080p"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'gemini-omni-1.2-flash-video-upscale',
video_urls: ['https://example.com/source-720p.mp4'],
quality: '1080p'
})
};
fetch('https://api.evolink.ai/v1/videos/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.evolink.ai/v1/videos/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'gemini-omni-1.2-flash-video-upscale',
'video_urls' => [
'https://example.com/source-720p.mp4'
],
'quality' => '1080p'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.evolink.ai/v1/videos/generations"
payload := strings.NewReader("{\n \"model\": \"gemini-omni-1.2-flash-video-upscale\",\n \"video_urls\": [\n \"https://example.com/source-720p.mp4\"\n ],\n \"quality\": \"1080p\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.evolink.ai/v1/videos/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"gemini-omni-1.2-flash-video-upscale\",\n \"video_urls\": [\n \"https://example.com/source-720p.mp4\"\n ],\n \"quality\": \"1080p\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.evolink.ai/v1/videos/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"gemini-omni-1.2-flash-video-upscale\",\n \"video_urls\": [\n \"https://example.com/source-720p.mp4\"\n ],\n \"quality\": \"1080p\"\n}"
response = http.request(request)
puts response.read_body{
"created": 1757169743,
"id": "task-unified-1757169743-7cvnl5zw",
"model": "gemini-omni-1.2-flash-video-upscale",
"object": "video.generation.task",
"progress": 0,
"status": "processing",
"task_info": {
"can_cancel": false,
"estimated_time": 60,
"video_duration": 5
},
"type": "video",
"usage": {
"billing_rule": "per_token",
"credits_reserved": 102.34,
"user_group": "default"
}
}{
"error": {
"code": "invalid_request",
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid or expired token",
"type": "authentication_error"
}
}{
"error": {
"code": "insufficient_quota",
"message": "Insufficient quota. Please top up your account.",
"type": "insufficient_quota"
}
}{
"error": {
"code": "model_access_denied",
"message": "Token does not have access to model: gemini-omni-1.2-flash-video-upscale",
"type": "invalid_request_error"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Too many requests, please try again later",
"type": "rate_limit_error"
}
}{
"error": {
"code": "internal_error",
"message": "Internal server error",
"type": "api_error"
}
}承認
##すべてのインターフェースはBearer Tokenによる認証が必要です##
API Key の取得:
API Key 管理ページ にアクセスして API Key を取得してください
利用時はリクエストヘッダーに以下を追加します:
Authorization: Bearer YOUR_API_KEY
ボディ
モデル名。固定値は gemini-omni-1.2-flash-video-upscale です。
gemini-omni-1.2-flash-video-upscale "gemini-omni-1.2-flash-video-upscale"
アップスケール対象の動画配列。必須で1本のみ対応します。HTTP/HTTPS動画URL、mp4形式、最大 15 秒。サイズは 640×360、1280×720、1920×1080、または縦向きの 360×640、720×1280、1080×1920 のみです。
1 element["https://example.com/source-720p.mp4"]
目標解像度。必須で、入力解像度より高い必要があります。
- 入力360p:
720p、1080p。 - 入力720p:
1080p、4k。 - 入力1080p:
4k。
課金について: 実際の動画出力トークン使用量に基づいて精算され、入力トークンや思考トークンの料金は発生しません。出力トークン数は、入力動画の長さと入力・出力解像度の組み合わせによって変わります。送信時の料金は見積額であり、最終的な料金は実際の使用量に基づいて精算されます。
720p, 1080p, 4k "1080p"
省略可能です。指定する場合は auto のみ使用できます。出力時間は入力動画に従い、秒数を指定することはできません。
auto "auto"
省略可能です。指定する場合は auto のみ使用できます。出力のアスペクト比は入力動画に従い、他の比率を指定することはできません。
auto "auto"
乱数シード。既定ではランダムです。範囲は 0〜4294967295。固定すると再現性を高められます。
0 <= x <= 429496729542
タスク完了後のHTTPSコールバックアドレス
コールバックのタイミング:
- タスクの完了(completed)、失敗(failed)、キャンセル(cancelled)時にトリガーされます
- 課金確定後に送信されます
セキュリティ制限:
- HTTPSプロトコルのみ対応
- 内部ネットワークIPアドレス(127.0.0.1、10.x.x.x、172.16-31.x.x、192.168.x.x など)へのコールバックは禁止
- URLの長さは
2048文字以内
コールバックの仕組み:
- タイムアウト時間:
10秒 - 失敗後は最大
3回まで再試行します(失敗後それぞれ1秒/2秒/4秒後に再試行します) - コールバックのレスポンスボディの形式はタスク照会インターフェースの返却形式と同一です
- コールバックアドレスが2xxステータスコードを返した場合は成功とみなし、それ以外のステータスコードは再試行をトリガーします
"https://your-domain.com/webhooks/video-task-completed"
レスポンス
動画タスクの作成に成功しました
タスク作成のタイムスタンプ
1757169743
タスクID
"task-unified-1757169743-7cvnl5zw"
実際に使用されたモデル名
"gemini-omni-1.2-flash-video-upscale"
タスクの具体的な種別
video.generation.task タスクの進捗率 (0-100)
0 <= x <= 1000
タスクの状態。作成APIは常に processing を返します。内部状態の pending もクライアントには processing として公開されます。
pending, processing, completed, failed "processing"
動画タスクの詳細情報
Show child attributes
Show child attributes
タスクの出力タイプ
text, image, audio, video "video"
使用量と課金情報
Show child attributes
Show child attributes