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传入,必填且仅支持 1 个视频,输入视频时长不超过 15 秒 - 输入尺寸: 仅支持 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
计费说明: 按实际视频输出 token 用量结算,不收取输入或思考 token 费用。输出 token 用量与输入视频时长及输入、目标分辨率组合有关。提交时的费用为预估,最终按实际用量结算。
720p, 1080p, 4k "1080p"
可省略;显式传入时仅支持 auto。输出时长跟随输入视频,不支持指定秒数。
auto "auto"
可省略;显式传入时仅支持 auto。输出画面比例跟随输入视频,不支持指定其他比例。
auto "auto"
随机种子,默认随机
说明:
- 取值范围:
0~4294967295 - 固定 seed 可提升结果可复现性
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
任务状态。创建接口恒返回 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