Gerar vídeos com base em uma imagem

Você pode usar o Gemini Omni ou o Veo na Gemini Enterprise Agent Platform para gerar novos vídeos usando uma imagem atual como o primeiro frame. O primeiro frame da imagem para o vídeo está disponível no Gemini Enterprise Agent Platform Media Studio ou usando a API de geração de vídeo da Gemini Enterprise Agent Platform.

Os seguintes modelos são compatíveis com a geração de vídeos com base em uma imagem:

Gemini Omni

Clique para abrir os modelos compatíveis

Veo

Clique para abrir os modelos compatíveis

Para mais informações sobre como escrever comandos de texto eficazes para geração de vídeo, consulte o Guia de comandos de geração de vídeo.

Teste o Gemini Omni Flash no Colab

Antes de começar

  1. In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance 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

  2. 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

  3. Configure a autenticação do ambiente.

    Selecione a guia para como planeja usar as amostras nesta página:

    Console

    Quando você usa o console do Cloud de Confiance para acessar os serviços e as APIs do Cloud de Confiance by S3NS , não é necessário configurar a autenticação.

    REST

    Para usar as amostras da API REST desta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para a CLI gcloud.

      Instale a Google Cloud CLI e faça login na CLI gcloud com sua identidade federada.

    Saiba mais em Autenticar para usar REST na documentação de autenticação do Cloud de Confiance .

Usar o Gemini Omni para gerar vídeos com base em uma imagem

REST

A geração de vídeo pode levar mais de um minuto para ser concluída. É possível escolher entre vários modos de interação, dependendo do seu fluxo de trabalho:

  • Síncrono: sem estado: gere um vídeo em uma única solicitação sem persistir o estado de interação no servidor.
  • Síncrono: com estado: defina store como true para manter o estado da interação, o que permite recuperar o resultado mais tarde ou referenciar o ID da interação para edição de vídeo em várias etapas.
  • Síncrono: streaming com estado: defina store e stream como true para receber os pensamentos do modelo de forma incremental à medida que são gerados, seguidos pelo vídeo de saída.
  • Assíncrono: defina background como true para executar a geração de vídeo em segundo plano e recuperar o resultado mais tarde usando o ID de interação.

As interações armazenadas e assíncronas são retidas por até 14 dias.

Para mais informações sobre como usar a API Gemini Omni Flash, consulte API Interactions.

Síncrona: sem estado

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: uma string que representa o ID do projeto do Cloud de Confiance by S3NS .
  • MODEL_ID: uma string que representa o ID do modelo a ser usado. Os valores aceitos são:
    • "gemini-omni-1.1-flash-preview"
  • TEXT_PROMPT: o comando de texto usado para orientar a geração de vídeo.
  • CLOUD_STORAGE_INPUT_URI: uma string que representa o bucket do Cloud Storage que contém a mídia de entrada. Por exemplo, "gs://video-bucket/input/".
  • CLOUD_STORAGE_OUTPUT_URI: opcional: uma string que representa o bucket do Cloud Storage para armazenar os vídeos de saída. Se não for fornecido, os bytes de vídeo serão retornados na resposta. Por exemplo, "gs://video-bucket/output/".
  • ASPECT_RATIO: Opcional: uma string que representa a proporção de tela esperada do vídeo de saída. Se não for fornecida, a proporção será inferida do comando. Os valores aceitos são:
    • "16:9"
    • "9:16"
  • OUTPUT_RESOLUTION:

    Opcional: uma string que representa a resolução de saída do vídeo. Se não for fornecida, a saída será de 720p por padrão.

    gemini-omni-1.1-flash-preview aceita os seguintes valores:

    • "360p"
    • "720p"
    • "1080p"
    • "4k"

    O gemini-omni-flash-preview só aceita "720p".

  • DURATION: uma string que representa a duração dos arquivos de vídeo gerados. As strings permitidas são números inteiros entre 3 e 10, seguidos por "s" para segundos. Por exemplo, "10s".

Método HTTP e URL:

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

Corpo JSON da solicitação:

{
  "model": "MODEL_ID",
  "input": [
    {
      "type": "text",
      "text": "TEXT_PROMPT"
    },
    {
      "type": "image",
      "uri": "CLOUD_STORAGE_INPUT_URI",
      "mime_type": "image/png"
    }
  ],
  "response_format": [
    {
      "type": "video",
      "delivery": "uri",
      "gcs_uri": "CLOUD_STORAGE_OUTPUT_URI",
      "aspect_ratio": "ASPECT_RATIO",
      "resolution": "OUTPUT_RESOLUTION",
      "duration": "DURATION"
    }
  ],
  "generation_config": {
    "video_config": {
      "task": "image_to_video"
    }
  }
}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

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

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando abaixo:

$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
A resposta contém uma interação que inclui os pensamentos do modelo e um vídeo de saída.
{
  "id":"INTERACTION_ID",
  "model":"gemini-omni-flash-preview",
  "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":"thought",
      "summary":[
        {
          "type":"text",
          "text":"MODEL THOUGHTS"
        }
      ],
    },
    { 
      "type":"model_output",
      "content":[
        {
          "type":"video",
          "uri":"gs://some/output_path/123.mp4",
          "mime_type":"video/mp4" 
        }
      ]
    }
  ],
  "object":"interaction"
  "role":"model",
  "created":"2026-05-29T02:17:56Z",
  "updated":"2026-05-29T02:17:56Z",
}

Síncrona: com estado

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: uma string que representa o ID do projeto do Cloud de Confiance by S3NS .
  • MODEL_ID: uma string que representa o ID do modelo a ser usado. Os valores aceitos são:
    • "gemini-omni-1.1-flash-preview"
  • TEXT_PROMPT: o comando de texto usado para orientar a geração de vídeo.
  • CLOUD_STORAGE_INPUT_URI: uma string que representa o bucket do Cloud Storage que contém a mídia de entrada. Por exemplo, "gs://video-bucket/input/".
  • CLOUD_STORAGE_OUTPUT_URI: opcional: uma string que representa o bucket do Cloud Storage para armazenar os vídeos de saída. Se não for fornecido, os bytes de vídeo serão retornados na resposta. Por exemplo, "gs://video-bucket/output/".
  • ASPECT_RATIO: Opcional: uma string que representa a proporção de tela esperada do vídeo de saída. Se não for fornecida, a proporção será inferida do comando. Os valores aceitos são:
    • "16:9"
    • "9:16"
  • OUTPUT_RESOLUTION:

    Opcional: uma string que representa a resolução de saída do vídeo. Se não for fornecida, a saída será de 720p por padrão.

    gemini-omni-1.1-flash-preview aceita os seguintes valores:

    • "360p"
    • "720p"
    • "1080p"
    • "4k"

    O gemini-omni-flash-preview só aceita "720p".

  • DURATION: uma string que representa a duração dos arquivos de vídeo gerados. As strings permitidas são números inteiros entre 3 e 10, seguidos por "s" para segundos. Por exemplo, "10s".

Método HTTP e URL:

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

Corpo JSON da solicitação:

{
  "model": "MODEL_ID",
  "background": false,
  "store": true,
  "stream": false,
  "input": [
    {
      "type": "user_input",
      "content": [
        {
          "type": "text",
          "text": "TEXT_PROMPT"
        },
        {
          "type": "image",
          "uri": "CLOUD_STORAGE_INPUT_URI",
          "mime_type": "image/png"
        }
      ]
    }
  ],
  "response_format": [
    {
      "type": "video",
      "delivery": "uri",
      "gcs_uri": "CLOUD_STORAGE_OUTPUT_URI",
      "aspect_ratio": "ASPECT_RATIO",
      "resolution": "OUTPUT_RESOLUTION",
      "duration": "DURATION"
    }
  ]
}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

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

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando abaixo:

$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
A resposta contém uma interação que inclui as ideias do modelo e um vídeo de saída.
{
  "id":"INTERACTION_ID",
  "model":"gemini-omni-flash-preview",
  "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":"thought",
      "summary":[
        {
          "type":"text",
          "text":"MODEL THOUGHTS"
        }
      ],
    },
    { 
      "type":"model_output",
      "content":[
        {
          "type":"video",
          "uri":"gs://some/output_path/123.mp4",
          "mime_type":"video/mp4" 
        }
      ]
    }
  ],
  "object":"interaction",
  "role":"model",
  "created":"2026-05-29T02:17:56Z",
  "updated":"2026-05-29T02:17:56Z",
}
Use o INTERACTION_ID para acessar o vídeo gerado:

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: uma string que representa o ID do projeto do Cloud de Confiance by S3NS .
  • INTERACTION_ID: O ID da interação da solicitação assíncrona.

Método HTTP e URL:

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

Para enviar a solicitação, escolha uma destas opções:

curl

Execute o seguinte comando:

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

PowerShell

Execute o seguinte 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
A resposta está em um formato semelhante ao seguinte:
{
  "id":"INTERACTION_ID",
  "model":"gemini-omni-flash-preview",
  "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íncrono: streaming com estado

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: uma string que representa o ID do projeto do Cloud de Confiance by S3NS .
  • MODEL_ID: uma string que representa o ID do modelo a ser usado. Os valores aceitos são:
    • "gemini-omni-1.1-flash-preview"
  • TEXT_PROMPT: o comando de texto usado para orientar a geração de vídeo.
  • CLOUD_STORAGE_INPUT_URI: uma string que representa o bucket do Cloud Storage que contém a mídia de entrada. Por exemplo, "gs://video-bucket/input/".
  • CLOUD_STORAGE_OUTPUT_URI: opcional: uma string que representa o bucket do Cloud Storage para armazenar os vídeos de saída. Se não for fornecido, os bytes de vídeo serão retornados na resposta. Por exemplo, "gs://video-bucket/output/".
  • ASPECT_RATIO: Opcional: uma string que representa a proporção de tela esperada do vídeo de saída. Se não for fornecida, a proporção será inferida do comando. Os valores aceitos são:
    • "16:9"
    • "9:16"
  • OUTPUT_RESOLUTION:

    Opcional: uma string que representa a resolução de saída do vídeo. Se não for fornecida, a saída será de 720p por padrão.

    gemini-omni-1.1-flash-preview aceita os seguintes valores:

    • "360p"
    • "720p"
    • "1080p"
    • "4k"

    O gemini-omni-flash-preview só aceita "720p".

  • DURATION: uma string que representa a duração dos arquivos de vídeo gerados. As strings permitidas são números inteiros entre 3 e 10, seguidos por "s" para segundos. Por exemplo, "10s".

Método HTTP e URL:

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

Corpo JSON da solicitação:

{
  "model": "MODEL_ID",
  "background": false,
  "store": true,
  "stream": true,
  "input": [
    {
      "type": "user_input",
      "content": [
        {
          "type": "text",
          "text": "TEXT_PROMPT"
        },
        {
          "type": "image",
          "uri": "CLOUD_STORAGE_INPUT_URI",
          "mime_type": "image/png"
        }
      ]
    }
  ],
  "response_format": [
    {
      "type": "video",
      "delivery": "uri",
      "gcs_uri": "CLOUD_STORAGE_OUTPUT_URI",
      "aspect_ratio": "ASPECT_RATIO",
      "resolution": "OUTPUT_RESOLUTION",
      "duration": "DURATION"
    }
  ]
}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

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

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando abaixo:

$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
A resposta contém uma interação que inclui as ideias do modelo e um vídeo de saída.
event: interaction.created
data: {"interaction":{"id":"INTERACTION_ID","status":"in_progress","object":"interaction","model":"gemini-omni-flash-preview"},"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":17812,"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":415},"created":"2026-08-12T21:26:20Z","updated":"2026-08-12T21:26:20Z","event_id":"EVENT_ID","object":"interaction","model":"gemini-omni-flash-preview"},"event_id":"EVENT_ID","event_type":"interaction.completed"}

event: done
data: [DONE]
Use o INTERACTION_ID com `?stream=true` para transmitir a interação armazenada e o vídeo gerado:

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: uma string que representa o ID do projeto do Cloud de Confiance by S3NS .
  • INTERACTION_ID: o ID de interação da solicitação.

Método HTTP e URL:

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

Para enviar a solicitação, escolha uma destas opções:

curl

Execute o seguinte comando:

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

PowerShell

Execute o seguinte 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
A resposta é um stream de eventos enviados pelo servidor (SSE) em um formato semelhante ao seguinte:
event: interaction.created
data: {"interaction":{"id":"INTERACTION_ID","status":"in_progress","object":"interaction","model":"gemini-omni-flash-preview"},"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-flash-preview"},"event_id":"EVENT_ID","event_type":"interaction.completed"}

event: done
data: [DONE]

Assíncrono

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: uma string que representa o ID do projeto do Cloud de Confiance by S3NS .
  • MODEL_ID: uma string que representa o ID do modelo a ser usado. Os valores aceitos são:
    • "gemini-omni-1.1-flash-preview"
  • TEXT_PROMPT: o comando de texto usado para orientar a geração de vídeo.
  • CLOUD_STORAGE_INPUT_URI: uma string que representa o bucket do Cloud Storage que contém a mídia de entrada. Por exemplo, "gs://video-bucket/input/".
  • CLOUD_STORAGE_OUTPUT_URI: opcional: uma string que representa o bucket do Cloud Storage para armazenar os vídeos de saída. Se não for fornecido, os bytes de vídeo serão retornados na resposta. Por exemplo, "gs://video-bucket/output/".
  • ASPECT_RATIO: Opcional: uma string que representa a proporção de tela esperada do vídeo de saída. Se não for fornecida, a proporção será inferida do comando. Os valores aceitos são:
    • "16:9"
    • "9:16"
  • OUTPUT_RESOLUTION:

    Opcional: uma string que representa a resolução de saída do vídeo. Se não for fornecida, a saída será de 720p por padrão.

    gemini-omni-1.1-flash-preview aceita os seguintes valores:

    • "360p"
    • "720p"
    • "1080p"
    • "4k"

    O gemini-omni-flash-preview só aceita "720p".

  • DURATION: uma string que representa a duração dos arquivos de vídeo gerados. As strings permitidas são números inteiros entre 3 e 10, seguidos por "s" para segundos. Por exemplo, "10s".

Método HTTP e URL:

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

Corpo JSON da solicitação:

{
  "model": "MODEL_ID",
  "input": [
    {
      "background": true,
      "type": "text",
      "text": "TEXT_PROMPT"
    },
    {
      "type": "image",
      "uri": "CLOUD_STORAGE_INPUT_URI",
      "mime_type": "image/png"
    }
  ],
  "response_format": [
    {
      "type": "video",
      "delivery": "uri",
      "gcs_uri": "CLOUD_STORAGE_OUTPUT_URI",
      "aspect_ratio": "ASPECT_RATIO",
      "resolution": "OUTPUT_RESOLUTION",
      "duration": "DURATION"
    }
  ],
  "generation_config": {
    "video_config": {
      "task": "image_to_video"
    }
  }
}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

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

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando abaixo:

$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
A resposta contém um ID de interação, que você vai usar para acessar o vídeo gerado.
{
  "id":"INTERACTION_ID",
  "status":"in_progress",
  "object":"interaction"
}
Depois, use o INTERACTION_ID para acessar o vídeo gerado:

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: uma string que representa o ID do projeto do Cloud de Confiance by S3NS .
  • INTERACTION_ID: o ID de interação da solicitação assíncrona.

Método HTTP e URL:

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

Para enviar a solicitação, escolha uma destas opções:

curl

Execute o seguinte comando:

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

PowerShell

Execute o seguinte 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
A resposta está em um formato semelhante ao seguinte:
{
  "id":"INTERACTION_ID",
  "model":"gemini-omni-flash-preview",
  "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",
}

Usar o Veo para gerar vídeos com base em uma imagem

Exemplo de entrada Exemplo de saída
  1. Imagem de entrada1
    Arquivo PNG de entrada de um elefante de crochê
  2. Comando de texto: o elefante se move naturalmente

Vídeo de saída de um elefante de crochê

1 Imagem gerada com o comando: Um elefante de crochê com padrões intrincados caminhando na savana

Você pode gerar novos vídeos usando apenas uma imagem como entrada ou uma imagem e um texto descritivo como entradas. Os exemplos a seguir mostram instruções básicas para gerar vídeos com base em imagens e textos.

Console

  1. No console do Cloud de Confiance , acesse a página Agent Platform > Media Studio.

    Media Studio

  2. Clique em Vídeo.

  3. No menu Tarefa, selecione Imagem para vídeo.

  4. No menu Modelo, selecione uma das opções exibidas.

  5. Na caixa Comando, insira um comando de texto que descreva os vídeos a serem gerados.

  6. Na seção Imagens de entrada, clique em Iniciar para fazer upload de uma imagem para o primeiro frame.

  7. Opcional: clique em Final para fazer upload de uma imagem para o último frame.

  8. Opcional: ajuste os seguintes parâmetros:

    • Proporção: escolha 16:9 ou 9:16.

    • Número de resultados: ajuste o controle deslizante ou insira um valor entre 1 e 4.

    • Duração do vídeo: selecione uma duração no menu.

    • Diretório de saída: clique em Procurar para criar ou selecionar um bucket do Cloud Storage para armazenar os arquivos gerados.

  9. Clique em Executar.

Python

Instalar

pip install --upgrade google-genai

Para saber mais, consulte a documentação de referência do SDK.

Defina variáveis de ambiente para usar o SDK de IA generativa do Google com a Vertex AI:

# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
# with appropriate values for your project.
export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=global
export GOOGLE_GENAI_USE_ENTERPRISE=True

import time
from google import genai
from google.genai.types import GenerateVideosConfig, Image

client = genai.Client()

# TODO(developer): Update and un-comment below line
# output_gcs_uri = "gs://your-bucket/your-prefix"

operation = client.models.generate_videos(
    model="veo-3.1-generate-001",
    prompt="Extreme close-up of a cluster of vibrant wildflowers swaying gently in a sun-drenched meadow.",
    image=Image(
        gcs_uri="gs://cloud-samples-data/generative-ai/image/flowers.png",
        mime_type="image/png",
    ),
    config=GenerateVideosConfig(
        aspect_ratio="16:9",
        output_gcs_uri=output_gcs_uri,
    ),
)

while not operation.done:
    time.sleep(15)
    operation = client.operations.get(operation)
    print(operation)

if operation.response:
    print(operation.result.generated_videos[0].video.uri)

# Example response:
# gs://your-bucket/your-prefix

Go

Saiba como instalar ou atualizar o Go.

Para saber mais, consulte a documentação de referência do SDK.

Defina variáveis de ambiente para usar o SDK de IA generativa do Google com a Vertex AI:

# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
# with appropriate values for your project.
export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=global
export GOOGLE_GENAI_USE_ENTERPRISE=True

import (
	"context"
	"fmt"
	"io"
	"time"

	"google.golang.org/genai"
)

// generateVideoFromImage shows how to gen video from img.
func generateVideoFromImage(w io.Writer, outputGCSURI string) error {
	//outputGCSURI = "gs://your-bucket/your-prefix"
	ctx := context.Background()

	client, err := genai.NewClient(ctx, &genai.ClientConfig{
		HTTPOptions: genai.HTTPOptions{APIVersion: "v1"},
	})
	if err != nil {
		return fmt.Errorf("failed to create genai client: %w", err)
	}

	image := &genai.Image{
		GCSURI:   "gs://cloud-samples-data/generative-ai/image/flowers.png",
		MIMEType: "image/png",
	}

	config := &genai.GenerateVideosConfig{
		AspectRatio:  "16:9",
		OutputGCSURI: outputGCSURI,
	}

	modelName := "veo-3.0-generate-preview"
	prompt := "Extreme close-up of a cluster of vibrant wildflowers swaying gently in a sun-drenched meadow."
	operation, err := client.Models.GenerateVideos(ctx, modelName, prompt, image, config)
	if err != nil {
		return fmt.Errorf("failed to start video generation: %w", err)
	}

	// Polling until the operation is done
	for !operation.Done {
		time.Sleep(15 * time.Second)
		operation, err = client.Operations.GetVideosOperation(ctx, operation, nil)
		if err != nil {
			return fmt.Errorf("failed to get operation status: %w", err)
		}
	}

	if operation.Response != nil && len(operation.Response.GeneratedVideos) > 0 {
		videoURI := operation.Response.GeneratedVideos[0].Video.URI
		fmt.Fprintln(w, videoURI)
		return nil
	}

	// Example response:
	// gs://your-bucket/your-prefix/videoURI

	return fmt.Errorf("video generation failed or returned no results")
}

Node.js

Instalar

npm install @google/genai

Para mais informações, consulte a documentação de referência do SDK.

Defina variáveis de ambiente para usar o SDK de IA generativa do Google com a Vertex AI:

# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
# with appropriate values for your project.
export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=global
export GOOGLE_GENAI_USE_ENTERPRISE=True

const {GoogleGenAI} = require('@google/genai');

const GOOGLE_CLOUD_PROJECT = process.env.GOOGLE_CLOUD_PROJECT;
const GOOGLE_CLOUD_LOCATION = process.env.GOOGLE_CLOUD_LOCATION || 'global';

async function generateVideo(
  outputGcsUri,
  projectId = GOOGLE_CLOUD_PROJECT,
  location = GOOGLE_CLOUD_LOCATION
) {
  const client = new GoogleGenAI({
    vertexai: true,
    project: projectId,
    location: location,
  });

  let operation = await client.models.generateVideos({
    model: 'veo-3.1-fast-generate-001',
    prompt:
      'Extreme close-up of a cluster of vibrant wildflowers swaying gently in a sun-drenched meadow',
    image: {
      gcsUri: 'gs://cloud-samples-data/generative-ai/image/flowers.png',
      mimeType: 'image/png',
    },
    config: {
      aspectRatio: '16:9',
      outputGcsUri: outputGcsUri,
    },
  });

  while (!operation.done) {
    await new Promise(resolve => setTimeout(resolve, 15000));
    operation = await client.operations.get({operation: operation});
    console.log(operation);
  }

  if (operation.response) {
    console.log(operation.response.generatedVideos[0].video.uri);
  }
  return operation;
}

Java

Saiba como instalar ou atualizar o Java.

Para mais informações, consulte a documentação de referência do SDK.

Defina variáveis de ambiente para usar o SDK de IA generativa do Google com a Vertex AI:

# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
# with appropriate values for your project.
export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=global
export GOOGLE_GENAI_USE_ENTERPRISE=True


import com.google.genai.Client;
import com.google.genai.types.GenerateVideosConfig;
import com.google.genai.types.GenerateVideosOperation;
import com.google.genai.types.GenerateVideosResponse;
import com.google.genai.types.GeneratedVideo;
import com.google.genai.types.GetOperationConfig;
import com.google.genai.types.Image;
import com.google.genai.types.Video;
import java.util.concurrent.TimeUnit;

public class VideoGenWithImg {

  public static void main(String[] args) throws InterruptedException {
    // TODO(developer): Replace these variables before running the sample.
    String modelId = "veo-3.1-generate-001";
    String outputGcsUri = "gs://your-bucket/your-prefix";
    generateContent(modelId, outputGcsUri);
  }

  // Generates a video with an image and a text prompt.
  public static String generateContent(String modelId, String outputGcsUri)
      throws InterruptedException {
    // Client Initialization. Once created, it can be reused for multiple requests.
    try (Client client = Client.builder().location("global").vertexAI(true).build()) {

      GenerateVideosOperation operation =
          client.models.generateVideos(
              modelId,
              "Extreme close-up of a cluster of vibrant wildflowers"
                  + " swaying gently in a sun-drenched meadow.",
              Image.builder()
                  .gcsUri("gs://cloud-samples-data/generative-ai/image/flowers.png")
                  .mimeType("image/png")
                  .build(),
              GenerateVideosConfig.builder()
                  .aspectRatio("16:9")
                  .outputGcsUri(outputGcsUri)
                  .build());

      while (!operation.done().orElse(false)) {
        TimeUnit.SECONDS.sleep(15);
        operation =
            client.operations.getVideosOperation(operation, GetOperationConfig.builder().build());
      }

      String generatedVideoUri =
          operation
              .response()
              .flatMap(GenerateVideosResponse::generatedVideos)
              .flatMap(videos -> videos.stream().findFirst())
              .flatMap(GeneratedVideo::video)
              .flatMap(Video::uri)
              .orElseThrow(
                  () ->
                      new IllegalStateException(
                          "Could not get the URI from the generated video"));

      System.out.println("Generated video URI: " + generatedVideoUri);
      // Example response:
      // Generated video URI: gs://your-bucket/your-prefix/generated-video-123.mp4
      return generatedVideoUri;
    }
  }
}

REST

Para mais informações sobre a API Veo, consulte:

  1. Use o comando a seguir para enviar uma solicitação de geração de vídeo. Essa solicitação inicia uma operação de longa duração e armazena a saída em um bucket do Cloud Storage especificado por você.

    Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

    • PROJECT_ID: uma string que representa o ID do projeto do Cloud de Confiance by S3NS .
    • MODEL_ID: uma string que representa o ID do modelo a ser usado. Os valores aceitos são:
      • Veo 2:veo-2.0-generate-001
      • Veo 3:veo-3.0-generate-001
      • Veo 3.1:veo-3.1-generate-001
      • Veo 3.1:veo-3.1-fast-generate-001
    • TEXT_PROMPT: o comando de texto usado para orientar a geração de vídeo.
    • INPUT_IMAGE: uma string codificada em base64 que representa a imagem de entrada. Para ter a melhor qualidade, recomendamos que a resolução da imagem de entrada seja de 720p (1280 x 720 pixels) ou mais alta, e que tenha uma proporção de 16:9 ou 9:16. Imagens com outras proporções ou tamanhos podem ser redimensionadas ou cortadas no centro quando são enviadas.
    • MIME_TYPE: uma string que representa o tipo MIME da imagem de entrada. Apenas as imagens dos seguintes tipos MIME são aceitas:
      • "image/jpeg"
      • "image/png"
    • OUTPUT_STORAGE_URI: opcional. Uma string que representa o bucket do Cloud Storage para armazenar os vídeos de saída. Se não for fornecido, os bytes de vídeo serão retornados na resposta. Por exemplo, "gs://video-bucket/output/".
    • RESIZE_MODE: uma string que representa o modo de redimensionamento a ser usado. Estes são os valores aceitos:
      • "crop": corte o vídeo para se ajustar ao novo tamanho.
      • "pad": preenche o vídeo para se ajustar ao novo tamanho.
    • RESPONSE_COUNT: o número de arquivos de vídeo a serem gerados. O intervalo de valores aceito é 1-4.
    • DURATION: um número inteiro que representa a duração dos arquivos de vídeo gerados. Confira a seguir os valores aceitos para cada modelo:
      • Modelos do Veo 2: 5-8. O padrão é 8.
      • Modelos do Veo 3: 4, 6 ou 8. O padrão é 8.
    • Outros parâmetros opcionais

      Use as seguintes variáveis opcionais, dependendo do seu caso de uso. Adicione alguns ou todos os parâmetros a seguir no objeto "parameters": {}.

      "parameters": {
        "aspectRatio": "ASPECT_RATIO",
        "negativePrompt": "NEGATIVE_PROMPT",
        "personGeneration": "PERSON_SAFETY_SETTING",
        // "resolution": RESOLUTION, // Veo 3 models only
        "sampleCount": RESPONSE_COUNT,
        "seed": SEED_NUMBER
      }
      • ASPECT_RATIO: Opcional: um valor de string que descreve a proporção dos vídeos gerados. É possível usar os seguintes valores:
        • "16:9" para paisagem
        • "9:16" para modo retrato

        O valor padrão é "16:9"

      • NEGATIVE_PROMPT: opcional. Um valor de string que descreve o conteúdo que você quer impedir que o modelo gere.
      • PERSON_SAFETY_SETTING: opcional: um valor de string que controla a configuração de segurança para gerar pessoas ou rostos. Use estes valores:
        • "allow_adult": permite apenas a geração de pessoas e rostos adultos.
        • "disallow": não gera pessoas nem rostos.

        O valor padrão é "allow_adult".

      • RESOLUTION: opcional: um valor de string que controla a resolução do vídeo gerado. Compatível apenas com modelos do Veo 3. É possível usar os seguintes valores:
        • "720p"
        • "1080p"
        • "4k" (somente modelos de pré-lançamento do Veo 3.1)

        O valor padrão é "720p".

      • RESPONSE_COUNT: Opcional. Um valor inteiro que descreve o número de vídeos a serem gerados. O intervalo de valores aceito é 1-4.
      • SEED_NUMBER: Opcional. Um valor uint32 que o modelo usa para gerar vídeos determinísticos. Especificar um número de sugestão com sua solicitação sem mudar outros parâmetros orienta o modelo a produzir os mesmos vídeos. O intervalo de valores aceito é 0-4294967295.

    Método HTTP e URL:

    POST https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/MODEL_ID:predictLongRunning

    Corpo JSON da solicitação:

    {
      "instances": [
        {
          "prompt": "TEXT_PROMPT",
          "image": {
            "bytesBase64Encoded": "INPUT_IMAGE",
            "mimeType": "MIME_TYPE"
          }
        }
      ],
      "parameters": {
        "storageUri": "OUTPUT_STORAGE_URI",
        "sampleCount": RESPONSE_COUNT
        "resizeMode": "RESIZE_MODE"
      }
    }
    

    Para enviar a solicitação, escolha uma destas opções:

    curl

    Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando abaixo:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/MODEL_ID:predictLongRunning"

    PowerShell

    Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando abaixo:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/MODEL_ID:predictLongRunning" | Select-Object -Expand Content
    Essa solicitação retorna um nome de operação completo com um ID de operação exclusivo. Use esse nome completo para consultar o status da solicitação de geração de vídeo.
    {
      "name": "projects/PROJECT_ID/locations/us-central1/publishers/google/models/MODEL_ID/operations/a1b07c8e-7b5a-4aba-bb34-3e1ccb8afcc8"
    }
    

  2. Opcional: verifique o status da operação de longa duração de geração de vídeo.

    Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

    • PROJECT_ID: o ID do projeto do Cloud de Confiance by S3NS .
    • MODEL_ID: o ID do modelo que será usado.
    • OPERATION_ID: o ID exclusivo da operação retornado na solicitação original de geração de vídeo.

    Método HTTP e URL:

    POST https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/MODEL_ID:fetchPredictOperation

    Corpo JSON da solicitação:

    {
      "operationName": "projects/PROJECT_ID/locations/us-central1/publishers/google/models/MODEL_ID/operations/OPERATION_ID"
    }
    

    Para enviar a solicitação, escolha uma destas opções:

    curl

    Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando abaixo:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/MODEL_ID:fetchPredictOperation"

    PowerShell

    Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando abaixo:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/MODEL_ID:fetchPredictOperation" | Select-Object -Expand Content
    Essa solicitação retorna informações sobre a operação, incluindo se ela ainda está em execução ou se foi concluída.

A seguir