Mejora la calidad de los videos

Puedes usar Gemini Omni 1.2 Flash para mejorar la calidad de los videos de resoluciones más bajas (360p o 720p) a resoluciones más altas (720p, 1080p o 4K) con la API de Agent Platform. El escalamiento de video independiente te permite iterar en instrucciones con resoluciones más bajas y escalar solo el video final seleccionado, ya sea del turno anterior o de un video generado previamente almacenado en Cloud Storage.

Los siguientes modelos admiten la mejora de la resolución de videos:

Haz clic para expandir los modelos compatibles

Resoluciones y especificaciones admitidas

El reescalado de video independiente admite las siguientes transiciones de resolución y restricciones de entrada:

  • Video de entrada de 360p: Se mejora a 720p o 1080p. No se admite el escalamiento vertical directo de 360p a 4k en una sola solicitud.
  • Video de entrada de 720p: Se mejora a 1080p o 4k. No se admite el escalamiento vertical de 1080p a 4k.
  • Relaciones de aspecto: 16:9 (horizontal) o 9:16 (vertical).
  • Velocidad de fotogramas: 24 fotogramas por segundo (se conserva en el video de salida).
  • Duración: Hasta 15 segundos
  • Uso de tokens y precios: El escalamiento de video independiente omite el razonamiento de texto y siempre genera cero tokens de entrada (total_input_tokens: 0). Los tokens de video de salida se facturan al mismo precio de token de video de salida que todas las demás tareas de Omni 1.2 Flash, según el par de resolución de origen y destino (2,896 tokens de video de salida por segundo para 360p a 720p y 720p a 1080p, 5,792 tokens de video de salida por segundo para 360p a 1080p y 11,584 tokens de video de salida por segundo para 720p a 4k).

Requisitos de las solicitudes

Cuando envíes una solicitud de mejora de video independiente, asegúrate de que cumpla con los siguientes requisitos:

  • Especifica task: "upscale": Debes establecer generation_config.video_config.task en "upscale". Si omites task: "upscale", la API interpreta la solicitud como una operación de edición de video ("edit").
  • Especifica un resolution de destino: Debes especificar el resolution de destino ("720p", "1080p" o "4k") en response_format. Si omites el resolution de destino, se muestra un error.
  • Proporciona una fuente de video: Proporciona un video de entrada en input ("type": "video") o establece previous_interaction_id para mejorar la resolución de un video generado en el turno con estado inmediatamente anterior. En las interacciones de varios turnos, solo se considera el turno inmediatamente anterior cuando se ubica el video para mejorar la resolución.
  • Parámetros opcionales: Puedes especificar generation_config.seed para obtener un resultado reproducible y adjuntar etiquetas de metadatos personalizados (labels) para organizar las solicitudes y hacer un seguimiento de los costos facturados.

Prueba Gemini Omni en un Colab

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud . Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Enable the Agent Platform API, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Enable the Agent Platform API, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  6. Configura la autenticación para tu entorno.

    Selecciona la pestaña según cómo planeas usar las muestras de esta página:

    Console

    Cuando usas la consola de Google Cloud para acceder a los servicios y las APIs de Google Cloud , no necesitas configurar la autenticación.

    REST

    Para usar las muestras de la API de REST incluidas en esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a la gcloud CLI.

      Instala Google Cloud CLI.

      Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

    Para obtener más información, consulta Autentícate para usar REST en la documentación de autenticación de Google Cloud .

Reescala videos con Omni 1.2 Flash

Para mejorar la calidad de los videos con Omni 1.2 Flash, selecciona uno de los siguientes modos de interacción:

REST

La mejora de la resolución de video puede tardar más de un minuto en completarse. Puedes elegir entre varios modos de interacción según tu flujo de trabajo:

  • Síncrono: sin estado (video subido): Establece store en false para mejorar la resolución de un video de 360p o 720p de Cloud Storage en una sola solicitud sin conservar el estado de interacción en el servidor.
  • Síncrono: con estado (turno anterior): Haz referencia al previous_interaction_id del turno con estado inmediatamente anterior para mejorar la resolución de un video de 360p o 720p generado anteriormente.
  • Síncrono: transmisión con estado: Establece store y stream en true para transmitir las actualizaciones de estado de la interacción y el video de salida.
  • Asíncrono: Establece background en true para ejecutar el escalamiento de video en segundo plano y recuperar el resultado más tarde con el ID de interacción.

Las interacciones almacenadas y asíncronas se conservan durante un máximo de 7 días.

Para obtener más información sobre el uso de los modelos de Gemini Omni con la API de Interactions, consulta la API de Interactions.

Síncrona: sin estado

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: Es una cadena que representa el ID del proyecto de Google Cloud .
  • MODEL_ID: Es una cadena que representa el ID del modelo que se usará. El siguiente es el valor aceptado:
    • "gemini-omni-1.2-flash"
  • CLOUD_STORAGE_VIDEO_URI: Es una cadena que representa el URI de Cloud Storage que contiene el video de entrada (360p o 720p, hasta 15 segundos). Por ejemplo: "gs://video-bucket/input/video.mp4"
  • VIDEO_MIME: Es una cadena que representa un tipo de MIME de video. Los siguientes son valores aceptados:
    • video/3gpp
    • video/mp4
    • video/mpeg
    • video/quicktime
    • video/webm
    • video/x-flv
    • video/x-ms-wmv
  • CLOUD_STORAGE_OUTPUT_URI: Opcional: Es una cadena que representa el bucket de Cloud Storage en el que se almacenará el video mejorado. Si no se proporciona, se devuelven los bytes de video en la respuesta. Por ejemplo: "gs://video-bucket/output/".
  • OUTPUT_RESOLUTION: Obligatorio. Es una cadena que representa la resolución de salida de destino. Los valores admitidos dependen de la resolución del video de entrada:
    • Para videos de entrada de 360p: "720p" o "1080p"
    • Para videos de entrada de 720p: "1080p" o "4k"

Método HTTP y URL:

POST https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/interactions

Cuerpo JSON de la solicitud:

{
  "model": "MODEL_ID",
  "store": false,
  "input": [
    {
      "type": "video",
      "uri": "CLOUD_STORAGE_VIDEO_URI",
      "mime_type": "VIDEO_MIME"
    }
  ],
  "response_format": [
    {
      "type": "video",
      "delivery": "uri",
      "gcs_uri": "CLOUD_STORAGE_OUTPUT_URI",
      "resolution": "OUTPUT_RESOLUTION"
    }
  ],
  "generation_config": {
    "video_config": {
      "task": "upscale"
    }
  }
}

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

curl -X POST \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/interactions"

PowerShell

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

$headers = @{ "Authorization" = "Bearer TOKEN" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/interactions" | Select-Object -Expand Content
La respuesta contiene una interacción con el video de salida mejorado y cero tokens de entrada.
{
  "id": "INTERACTION_ID",
  "model": "gemini-omni-1.2-flash",
  "status": "completed",
  "usage": {
    "total_tokens": 28960,
    "total_input_tokens": 0,
    "output_tokens_by_modality": [
      {
        "modality": "video",
        "tokens": 28960
      }
    ],
    "total_output_tokens": 28960
  },
  "steps": [
    { 
      "type": "model_output",
      "content": [
        {
          "type": "video",
          "uri": "gs://some/output_path/123.mp4",
          "mime_type": "video/mp4" 
        }
      ]
    }
  ],
  "object": "interaction",
  "role": "model",
  "created": "2026-11-05T02:17:56Z",
  "updated": "2026-11-05T02:17:56Z"
}

Síncrona: con estado

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: Es una cadena que representa el ID del proyecto de Google Cloud .
  • MODEL_ID: Es una cadena que representa el ID del modelo que se usará. El siguiente es el valor aceptado:
    • "gemini-omni-1.2-flash"
  • PREVIOUS_INTERACTION_ID: Es el ID de interacción del turno con estado inmediatamente anterior que generó un video de 360p o 720p (hasta 15 segundos).
  • CLOUD_STORAGE_OUTPUT_URI: Opcional: Es una cadena que representa el bucket de Cloud Storage en el que se almacenará el video mejorado. Si no se proporciona, se devuelven los bytes de video en la respuesta. Por ejemplo: "gs://video-bucket/output/".
  • OUTPUT_RESOLUTION: Obligatorio. Es una cadena que representa la resolución de salida de destino. Los valores admitidos dependen de la resolución de video del turno anterior:
    • Para videos de 360p: "720p" o "1080p"
    • Para videos de 720p: "1080p" o "4k"

Método HTTP y URL:

POST https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/interactions

Cuerpo JSON de la solicitud:

{
  "model": "MODEL_ID",
  "previous_interaction_id": "PREVIOUS_INTERACTION_ID",
  "background": false,
  "store": true,
  "stream": false,
  "input": [
    {
      "type": "user_input",
      "content": [
        {
          "type": "text",
          "text": "Upsample video."
        }
      ]
    }
  ],
  "response_format": [
    {
      "type": "video",
      "delivery": "uri",
      "gcs_uri": "CLOUD_STORAGE_OUTPUT_URI",
      "resolution": "OUTPUT_RESOLUTION"
    }
  ],
  "generation_config": {
    "video_config": {
      "task": "upscale"
    }
  }
}

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

curl -X POST \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/interactions"

PowerShell

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

$headers = @{ "Authorization" = "Bearer TOKEN" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/interactions" | Select-Object -Expand Content
La respuesta contiene una interacción con el video de salida mejorado y cero tokens de entrada.
{
  "id": "INTERACTION_ID",
  "previous_interaction_id": "PREVIOUS_INTERACTION_ID",
  "model": "gemini-omni-1.2-flash",
  "status": "completed",
  "usage": {
    "total_tokens": 28960,
    "total_input_tokens": 0,
    "output_tokens_by_modality": [
      {
        "modality": "video",
        "tokens": 28960
      }
    ],
    "total_output_tokens": 28960
  },
  "steps": [
    { 
      "type": "model_output",
      "content": [
        {
          "type": "video",
          "uri": "gs://some/output_path/123.mp4",
          "mime_type": "video/mp4" 
        }
      ]
    }
  ],
  "object": "interaction",
  "role": "model",
  "created": "2026-11-05T02:17:56Z",
  "updated": "2026-11-05T02:17:56Z"
}
Usa INTERACTION_ID para obtener el video mejorado:

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: Es una cadena que representa el ID del proyecto de Google Cloud .
  • INTERACTION_ID: Es el ID de interacción de la solicitud asíncrona.

Método HTTP y URL:

GET https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/interactions/INTERACTION_ID

Para enviar tu solicitud, elige una de estas opciones:

curl

Ejecuta el siguiente comando:

curl -X GET \
-H "Authorization: Bearer TOKEN" \
"https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/interactions/INTERACTION_ID"

PowerShell

Ejecuta el siguiente comando:

$headers = @{ "Authorization" = "Bearer TOKEN" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/interactions/INTERACTION_ID" | Select-Object -Expand Content
La respuesta tiene un formato similar al siguiente:
{
  "id":"INTERACTION_ID",
  "model":"gemini-omni-1.2-flash",
  "status":"completed",
  "usage":{
    "total_tokens":479,
    "total_input_tokens":26,
    "input_tokens_by_modality":[
      {
        "modality":"text",
        "tokens":26
      },
      {
        "modality":"image",
        "tokens":124
      }
    ],
    "output_tokens_by_modality": [
      {
        "modality": "video",
        "tokens": 28832
      }
    ],
    "total_output_tokens":28832,
    "total_thought_tokens":453
  },
  "steps":[
    {
      "type": "user_input",
      "content": [
        {
          "type": "text",
          "text": "5 second, 9:16 video. Use the image as the first frame."
        },
        {
          "type": "image",
          "uri": "gs://some/path",
          "mime_type": "image/png"
        }
      ]
    },
    {
      "type":"thought",
      "summary":[
        {
          "type":"text",
          "text":"MODEL THOUGHTS"
        }
      ]
    },
    { 
      "type":"model_output",
      "content":[
        {
          "type":"video",
          "data":"VIDEO DATA",
          "mime_type":"video/mp4" 
        }
      ]
    }
  ],
  "object":"interaction",
  "role":"model",
  "created":"2026-05-29T02:17:56Z",
  "updated":"2026-05-29T02:17:56Z"
}

Síncrona: transmisión con estado

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: Es una cadena que representa el ID del proyecto de Google Cloud .
  • MODEL_ID: Es una cadena que representa el ID del modelo que se usará. El siguiente es el valor aceptado:
    • "gemini-omni-1.2-flash"
  • CLOUD_STORAGE_VIDEO_URI: Es una cadena que representa el URI de Cloud Storage que contiene el video de entrada (360p o 720p, hasta 15 segundos). Por ejemplo: "gs://video-bucket/input/video.mp4"
  • VIDEO_MIME: Es una cadena que representa un tipo de MIME de video. Los siguientes son valores aceptados:
    • video/3gpp
    • video/mp4
    • video/mpeg
    • video/quicktime
    • video/webm
    • video/x-flv
    • video/x-ms-wmv
  • CLOUD_STORAGE_OUTPUT_URI: Opcional: Es una cadena que representa el bucket de Cloud Storage en el que se almacenará el video mejorado. Si no se proporciona, se devuelven los bytes de video en la respuesta. Por ejemplo: "gs://video-bucket/output/".
  • OUTPUT_RESOLUTION: Obligatorio. Es una cadena que representa la resolución de salida de destino. Los valores admitidos dependen de la resolución del video de entrada:
    • Para videos de entrada de 360p: "720p" o "1080p"
    • Para videos de entrada de 720p: "1080p" o "4k"

Método HTTP y URL:

POST https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/interactions

Cuerpo JSON de la solicitud:

{
  "model": "MODEL_ID",
  "background": false,
  "store": true,
  "stream": true,
  "input": [
    {
      "type": "user_input",
      "content": [
        {
          "type": "video",
          "uri": "CLOUD_STORAGE_VIDEO_URI",
          "mime_type": "VIDEO_MIME"
        }
      ]
    }
  ],
  "response_format": [
    {
      "type": "video",
      "delivery": "uri",
      "gcs_uri": "CLOUD_STORAGE_OUTPUT_URI",
      "resolution": "OUTPUT_RESOLUTION"
    }
  ],
  "generation_config": {
    "video_config": {
      "task": "upscale"
    }
  }
}

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

curl -X POST \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/interactions"

PowerShell

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

$headers = @{ "Authorization" = "Bearer TOKEN" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/interactions" | Select-Object -Expand Content
La respuesta es un flujo de eventos enviados por el servidor (SSE) que contiene el video de salida mejorado.
event: interaction.created
data: {"interaction":{"id":"INTERACTION_ID","status":"in_progress","object":"interaction","model":"gemini-omni-1.2-flash"},"event_type":"interaction.created"}

event: interaction.status_update
data: {"interaction_id":"INTERACTION_ID","status":"in_progress","event_type":"interaction.status_update"}

event: step.start
data: {"index":0,"step":{"type":"model_output"},"event_type":"step.start"}

event: step.delta
data: {"index":0,"delta":{"mime_type":"video/mp4","uri":"gs://some/output_path/123.mp4","type":"video"},"event_id":"EVENT_ID","event_type":"step.delta"}

event: step.stop
data: {"index":0,"event_type":"step.stop"}

event: interaction.completed
data: {"interaction":{"id":"INTERACTION_ID","status":"completed","usage":{"total_tokens":28960,"total_input_tokens":0,"total_output_tokens":28960,"output_tokens_by_modality":[{"modality":"video","tokens":28960}]},"created":"2026-11-05T21:26:20Z","updated":"2026-11-05T21:26:20Z","event_id":"EVENT_ID","object":"interaction","model":"gemini-omni-1.2-flash"},"event_id":"EVENT_ID","event_type":"interaction.completed"}

event: done
data: [DONE]
Usa INTERACTION_ID con `?stream=true` para transmitir la interacción almacenada y el video mejorado:

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: Es una cadena que representa el ID del proyecto de Google Cloud .
  • INTERACTION_ID: Es el ID de interacción de la solicitud.

Método HTTP y URL:

GET https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/interactions/INTERACTION_ID?stream=true

Para enviar tu solicitud, elige una de estas opciones:

curl

Ejecuta el siguiente comando:

curl -X GET \
-H "Authorization: Bearer TOKEN" \
"https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/interactions/INTERACTION_ID?stream=true"

PowerShell

Ejecuta el siguiente comando:

$headers = @{ "Authorization" = "Bearer TOKEN" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/interactions/INTERACTION_ID?stream=true" | Select-Object -Expand Content
La respuesta es un flujo de eventos enviados por el servidor (SSE) en un formato similar al siguiente:
event: interaction.created
data: {"interaction":{"id":"INTERACTION_ID","status":"in_progress","object":"interaction","model":"gemini-omni-1.2-flash"},"event_type":"interaction.created"}

event: interaction.status_update
data: {"interaction_id":"INTERACTION_ID","status":"in_progress","event_type":"interaction.status_update"}

event: step.start
data: {"index":0,"step":{"type":"thought"},"event_type":"step.start"}

event: step.delta
data: {"index":0,"delta":{"content":{"text":"MODEL THOUGHTS","type":"text"},"type":"thought_summary"},"event_id":"EVENT_ID","event_type":"step.delta"}

event: step.delta
data: {"index":0,"delta":{"content":{"text":"MODEL THOUGHTS","type":"text"},"type":"thought_summary"},"event_id":"EVENT_ID","event_type":"step.delta"}

event: step.delta
data: {"index":0,"delta":{"signature":"...","type":"thought_signature"},"event_type":"step.delta"}

event: step.stop
data: {"index":0,"event_type":"step.stop"}

event: step.start
data: {"index":1,"step":{"type":"model_output"},"event_type":"step.start"}

event: step.delta
data: {"index":1,"delta":{"mime_type":"video/mp4","uri":"gs://some/output_path/123.mp4","type":"video"},"event_id":"EVENT_ID","event_type":"step.delta"}

event: step.stop
data: {"index":1,"event_type":"step.stop"}

event: interaction.completed
data: {"interaction":{"id":"INTERACTION_ID","status":"completed","usage":{"total_tokens":17664,"total_input_tokens":21,"input_tokens_by_modality":[{"modality":"text","tokens":21}],"total_output_tokens":17376,"output_tokens_by_modality":[{"modality":"video","tokens":17376}],"total_thought_tokens":267},"created":"2026-08-12T21:33:08Z","updated":"2026-08-12T21:33:08Z","event_id":"EVENT_ID","object":"interaction","model":"gemini-omni-1.2-flash"},"event_id":"EVENT_ID","event_type":"interaction.completed"}

event: done
data: [DONE]

Asíncrono

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: Es una cadena que representa el ID del proyecto de Google Cloud .
  • MODEL_ID: Es una cadena que representa el ID del modelo que se usará. El siguiente es el valor aceptado:
    • "gemini-omni-1.2-flash"
  • CLOUD_STORAGE_VIDEO_URI: Es una cadena que representa el URI de Cloud Storage que contiene el video de entrada (360p o 720p, hasta 15 segundos). Por ejemplo: "gs://video-bucket/input/video.mp4"
  • VIDEO_MIME: Es una cadena que representa un tipo de MIME de video. Los siguientes son valores aceptados:
    • video/3gpp
    • video/mp4
    • video/mpeg
    • video/quicktime
    • video/webm
    • video/x-flv
    • video/x-ms-wmv
  • CLOUD_STORAGE_OUTPUT_URI: Opcional: Es una cadena que representa el bucket de Cloud Storage en el que se almacenará el video mejorado. Si no se proporciona, se devuelven los bytes de video en la respuesta. Por ejemplo: "gs://video-bucket/output/".
  • OUTPUT_RESOLUTION: Obligatorio. Es una cadena que representa la resolución de salida de destino. Los valores admitidos dependen de la resolución del video de entrada:
    • Para videos de entrada de 360p: "720p" o "1080p"
    • Para videos de entrada de 720p: "1080p" o "4k"

Método HTTP y URL:

POST https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/interactions

Cuerpo JSON de la solicitud:

{
  "model": "MODEL_ID",
  "background": true,
  "input": [
    {
      "type": "video",
      "uri": "CLOUD_STORAGE_VIDEO_URI",
      "mime_type": "VIDEO_MIME"
    }
  ],
  "response_format": [
    {
      "type": "video",
      "delivery": "uri",
      "gcs_uri": "CLOUD_STORAGE_OUTPUT_URI",
      "resolution": "OUTPUT_RESOLUTION"
    }
  ],
  "generation_config": {
    "video_config": {
      "task": "upscale"
    }
  }
}

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

curl -X POST \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/interactions"

PowerShell

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

$headers = @{ "Authorization" = "Bearer TOKEN" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/interactions" | Select-Object -Expand Content
La respuesta contiene un ID de interacción, que usas para recuperar el video mejorado.
{
  "id": "INTERACTION_ID",
  "status": "in_progress",
  "object": "interaction"
}
Más adelante, usa INTERACTION_ID para obtener el video mejorado:

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: Es una cadena que representa el ID del proyecto de Google Cloud .
  • INTERACTION_ID: Es el ID de interacción de la solicitud asíncrona.

Método HTTP y URL:

GET https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/interactions/INTERACTION_ID

Para enviar tu solicitud, elige una de estas opciones:

curl

Ejecuta el siguiente comando:

curl -X GET \
-H "Authorization: Bearer TOKEN" \
"https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/interactions/INTERACTION_ID"

PowerShell

Ejecuta el siguiente comando:

$headers = @{ "Authorization" = "Bearer TOKEN" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/interactions/INTERACTION_ID" | Select-Object -Expand Content
La respuesta tiene un formato similar al siguiente:
{
  "id":"INTERACTION_ID",
  "model":"gemini-omni-1.2-flash",
  "status":"completed",
  "usage":{
    "total_tokens":479,
    "total_input_tokens":26,
    "input_tokens_by_modality":[
      {
        "modality":"text",
        "tokens":26
      },
      {
        "modality":"image",
        "tokens":124
      }
    ],
    "output_tokens_by_modality": [
      {
        "modality": "video",
        "tokens": 28832
      }
    ],
    "total_output_tokens":28832,
    "total_thought_tokens":453
  },
  "steps":[
    {
      "type": "user_input",
      "content": [
        {
          "type": "text",
          "text": "5 second, 9:16 video. Use the image as the first frame."
        },
        {
          "type": "image",
          "uri": "gs://some/path",
          "mime_type": "image/png"
        }
      ]
    },
    {
      "type":"thought",
      "summary":[
        {
          "type":"text",
          "text":"MODEL THOUGHTS"
        }
      ]
    },
    { 
      "type":"model_output",
      "content":[
        {
          "type":"video",
          "data":"VIDEO DATA",
          "mime_type":"video/mp4" 
        }
      ]
    }
  ],
  "object":"interaction",
  "role":"model",
  "created":"2026-05-29T02:17:56Z",
  "updated":"2026-05-29T02:17:56Z"
}

¿Qué sigue?