Generare video da un'immagine

Puoi utilizzare Gemini Omni o Veo su Gemini Enterprise Agent Platform per generare nuovi video utilizzando un'immagine esistente come primo frame. Il primo frame dell'immagine per il video è disponibile tramite Gemini Enterprise Agent Platform Media Studio o utilizzando l'API di generazione di video di Gemini Enterprise Agent Platform.

I seguenti modelli supportano la generazione di video da un'immagine:

Gemini Omni

Fai clic per espandere i modelli supportati

Veo

Fai clic per espandere i modelli supportati

Per saperne di più su come scrivere prompt testuali efficaci per la generazione di video, consulta la guida ai prompt per la generazione di video.

Prova Gemini Omni Flash in Colab

Prima di iniziare

  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. Configura l'autenticazione per l'ambiente.

    Seleziona la scheda in base a come prevedi di utilizzare gli esempi in questa pagina:

    Console

    Quando utilizzi la console Cloud de Confiance per accedere ai servizi e alle API Cloud de Confiance by S3NS , non devi configurare l'autenticazione.

    REST

    Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, utilizzi le credenziali che fornisci a gcloud CLI.

      Installa Google Cloud CLI, quindi accedi a gcloud CLI con la tua identità federata.

    Per saperne di più, consulta Autenticati per usare REST nella documentazione sull'autenticazione di Cloud de Confiance .

Utilizza Gemini Omni per generare video da un'immagine

REST

La generazione di video può richiedere più di un minuto. Puoi scegliere tra diverse modalità di interazione a seconda del tuo workflow:

  • Sincrona: stateless: genera un video in una singola richiesta senza rendere persistente lo stato dell'interazione sul server.
  • Sincrona: stateful: imposta store su true per rendere persistente lo stato dell'interazione, in modo da poter recuperare il risultato in un secondo momento o fare riferimento all'ID interazione per l'editing video multi-turno.
  • Sincrono: streaming stateful: imposta sia store sia stream su true per ricevere i pensieri del modello in modo incrementale man mano che vengono generati, seguiti dal video di output.
  • Asincrono: imposta background su true per eseguire la generazione di video in background e recuperare il risultato in un secondo momento utilizzando l'ID interazione.

Le interazioni archiviate e asincrone vengono conservate per un massimo di 14 giorni.

Per saperne di più sull'utilizzo dell'API Gemini Omni Flash, consulta l'API Interactions.

Sincrona: stateless

Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:

  • PROJECT_ID: una stringa che rappresenta l'ID progetto Cloud de Confiance by S3NS .
  • MODEL_ID: una stringa che rappresenta l'ID del modello da utilizzare. I seguenti sono valori accettati:
    • "gemini-omni-1.1-flash-preview"
  • TEXT_PROMPT: il prompt testuale utilizzato per guidare la generazione di video.
  • CLOUD_STORAGE_INPUT_URI: una stringa che rappresenta il bucket Cloud Storage contenente i contenuti multimediali di input. Ad esempio: "gs://video-bucket/input/".
  • CLOUD_STORAGE_OUTPUT_URI: (Facoltativo) Una stringa che rappresenta il bucket Cloud Storage in cui archiviare i video di output. Se non viene fornito, i byte del video vengono restituiti nella risposta. Ad esempio: "gs://video-bucket/output/".
  • ASPECT_RATIO: (Facoltativo) Una stringa che rappresenta le proporzioni previste del video di output. Se non viene fornito, le proporzioni vengono dedotte dal prompt. I seguenti sono valori accettati:
    • "16:9"
    • "9:16"
  • OUTPUT_RESOLUTION:

    (Facoltativo) Una stringa che rappresenta la risoluzione video in uscita. Se non viene fornito, l'output viene impostato su 720p per impostazione predefinita.

    gemini-omni-1.1-flash-preview supporta i seguenti valori:

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

    gemini-omni-flash-preview supporta solo "720p".

  • DURATION: una stringa che rappresenta la durata dei file video generati. Le stringhe consentite sono numeri interi compresi tra 3 e 10, seguiti da "s" per i secondi. Ad esempio: "10s".

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

{
  "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"
    }
  }
}

Per inviare la richiesta, scegli una di queste opzioni:

curl

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

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

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

$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 risposta contiene un'interazione che include i pensieri del modello e un video di output.
{
  "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",
}

Sincrono: stateful

Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:

  • PROJECT_ID: una stringa che rappresenta l'ID progetto Cloud de Confiance by S3NS .
  • MODEL_ID: una stringa che rappresenta l'ID del modello da utilizzare. I seguenti sono valori accettati:
    • "gemini-omni-1.1-flash-preview"
  • TEXT_PROMPT: il prompt testuale utilizzato per guidare la generazione di video.
  • CLOUD_STORAGE_INPUT_URI: una stringa che rappresenta il bucket Cloud Storage contenente i contenuti multimediali di input. Ad esempio: "gs://video-bucket/input/".
  • CLOUD_STORAGE_OUTPUT_URI: (Facoltativo) Una stringa che rappresenta il bucket Cloud Storage in cui archiviare i video di output. Se non viene fornito, i byte del video vengono restituiti nella risposta. Ad esempio: "gs://video-bucket/output/".
  • ASPECT_RATIO: (Facoltativo) Una stringa che rappresenta le proporzioni previste del video di output. Se non viene fornito, le proporzioni vengono dedotte dal prompt. I seguenti sono valori accettati:
    • "16:9"
    • "9:16"
  • OUTPUT_RESOLUTION:

    (Facoltativo) Una stringa che rappresenta la risoluzione video in uscita. Se non viene fornito, l'output viene impostato su 720p per impostazione predefinita.

    gemini-omni-1.1-flash-preview supporta i seguenti valori:

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

    gemini-omni-flash-preview supporta solo "720p".

  • DURATION: una stringa che rappresenta la durata dei file video generati. Le stringhe consentite sono numeri interi compresi tra 3 e 10, seguiti da "s" per i secondi. Ad esempio: "10s".

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

{
  "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"
    }
  ]
}

Per inviare la richiesta, scegli una di queste opzioni:

curl

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

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

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

$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 risposta contiene un'interazione che include i pensieri del modello e un video di output.
{
  "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",
}
Utilizza INTERACTION_ID per ottenere il video generato:

Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:

  • PROJECT_ID: una stringa che rappresenta l'ID progetto Cloud de Confiance by S3NS .
  • INTERACTION_ID: l'ID interazione della richiesta asincrona.

Metodo HTTP e URL:

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

Per inviare la richiesta, scegli una di queste opzioni:

curl

Esegui questo comando:

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

PowerShell

Esegui questo 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 risposta è in un formato simile al seguente:
{
  "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",
}

Sincrono: flussi di dati con stato

Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:

  • PROJECT_ID: una stringa che rappresenta l'ID progetto Cloud de Confiance by S3NS .
  • MODEL_ID: una stringa che rappresenta l'ID del modello da utilizzare. I seguenti sono valori accettati:
    • "gemini-omni-1.1-flash-preview"
  • TEXT_PROMPT: il prompt testuale utilizzato per guidare la generazione di video.
  • CLOUD_STORAGE_INPUT_URI: una stringa che rappresenta il bucket Cloud Storage contenente i contenuti multimediali di input. Ad esempio: "gs://video-bucket/input/".
  • CLOUD_STORAGE_OUTPUT_URI: (Facoltativo) Una stringa che rappresenta il bucket Cloud Storage in cui archiviare i video di output. Se non viene fornito, i byte del video vengono restituiti nella risposta. Ad esempio: "gs://video-bucket/output/".
  • ASPECT_RATIO: (Facoltativo) Una stringa che rappresenta le proporzioni previste del video di output. Se non viene fornito, le proporzioni vengono dedotte dal prompt. I seguenti sono valori accettati:
    • "16:9"
    • "9:16"
  • OUTPUT_RESOLUTION:

    (Facoltativo) Una stringa che rappresenta la risoluzione video in uscita. Se non viene fornito, l'output viene impostato su 720p per impostazione predefinita.

    gemini-omni-1.1-flash-preview supporta i seguenti valori:

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

    gemini-omni-flash-preview supporta solo "720p".

  • DURATION: una stringa che rappresenta la durata dei file video generati. Le stringhe consentite sono numeri interi compresi tra 3 e 10, seguiti da "s" per i secondi. Ad esempio: "10s".

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

{
  "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"
    }
  ]
}

Per inviare la richiesta, scegli una di queste opzioni:

curl

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

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

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

$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 risposta contiene un'interazione che include i pensieri del modello e un video di output.
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]
Utilizza INTERACTION_ID con "?stream=true" per riprodurre in streaming l'interazione archiviata e il video generato:

Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:

  • PROJECT_ID: una stringa che rappresenta l'ID progetto Cloud de Confiance by S3NS .
  • INTERACTION_ID: l'ID interazione della richiesta.

Metodo HTTP e URL:

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

Per inviare la richiesta, scegli una di queste opzioni:

curl

Esegui questo comando:

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

PowerShell

Esegui questo 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 risposta è uno stream di Server-Sent Events (SSE) in un formato simile al seguente:
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]

Asincrona

Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:

  • PROJECT_ID: una stringa che rappresenta l'ID progetto Cloud de Confiance by S3NS .
  • MODEL_ID: una stringa che rappresenta l'ID del modello da utilizzare. I seguenti sono valori accettati:
    • "gemini-omni-1.1-flash-preview"
  • TEXT_PROMPT: il prompt testuale utilizzato per guidare la generazione di video.
  • CLOUD_STORAGE_INPUT_URI: una stringa che rappresenta il bucket Cloud Storage contenente i contenuti multimediali di input. Ad esempio: "gs://video-bucket/input/".
  • CLOUD_STORAGE_OUTPUT_URI: (Facoltativo) Una stringa che rappresenta il bucket Cloud Storage in cui archiviare i video di output. Se non viene fornito, i byte del video vengono restituiti nella risposta. Ad esempio: "gs://video-bucket/output/".
  • ASPECT_RATIO: (Facoltativo) Una stringa che rappresenta le proporzioni previste del video di output. Se non viene fornito, le proporzioni vengono dedotte dal prompt. I seguenti sono valori accettati:
    • "16:9"
    • "9:16"
  • OUTPUT_RESOLUTION:

    (Facoltativo) Una stringa che rappresenta la risoluzione video in uscita. Se non viene fornito, l'output viene impostato su 720p per impostazione predefinita.

    gemini-omni-1.1-flash-preview supporta i seguenti valori:

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

    gemini-omni-flash-preview supporta solo "720p".

  • DURATION: una stringa che rappresenta la durata dei file video generati. Le stringhe consentite sono numeri interi compresi tra 3 e 10, seguiti da "s" per i secondi. Ad esempio: "10s".

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

{
  "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"
    }
  }
}

Per inviare la richiesta, scegli una di queste opzioni:

curl

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

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

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

$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 risposta contiene un ID interazione, che utilizzerai per ottenere il video generato.
{
  "id":"INTERACTION_ID",
  "status":"in_progress",
  "object":"interaction"
}
In un secondo momento, utilizza INTERACTION_ID per ottenere il video generato:

Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:

  • PROJECT_ID: una stringa che rappresenta l'ID progetto Cloud de Confiance by S3NS .
  • INTERACTION_ID: l'ID interazione della richiesta asincrona.

Metodo HTTP e URL:

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

Per inviare la richiesta, scegli una di queste opzioni:

curl

Esegui questo comando:

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

PowerShell

Esegui questo 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 risposta è in un formato simile al seguente:
{
  "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",
}

Utilizza Veo per generare video da un'immagine

Input di esempio Esempio di output
  1. Immagine di input1
    File PNG di input di un elefante lavorato all'uncinetto
  2. Prompt testuale: l'elefante si muove in modo naturale

Video di output di un elefante lavorato all'uncinetto

1 Immagine generata dal prompt: Un elefante all'uncinetto con motivi intricati che cammina nella savana

Puoi generare nuovi video utilizzando solo un'immagine come input o un'immagine e un testo descrittivo come input. Gli esempi riportati di seguito mostrano le istruzioni di base per generare video da immagini e testo.

Console

  1. Nella console Cloud de Confiance , vai alla pagina Agent Platform > Media Studio.

    Media Studio

  2. Fai clic su Video.

  3. Nel menu Attività, seleziona Da immagine a video.

  4. Dal menu Modello, seleziona un modello tra le opzioni visualizzate.

  5. Nella casella Prompt, inserisci un prompt di testo che descriva i video da generare.

  6. Nella sezione Immagini di input, fai clic su Inizia per caricare un'immagine per il primo frame.

  7. (Facoltativo) Fai clic su Fine per caricare un'immagine per l'ultimo frame.

  8. (Facoltativo) Modifica i seguenti parametri:

    • Proporzioni: scegli 16:9 o 9:16.

    • Numero di risultati: regola il cursore o inserisci un valore compreso tra 1 e 4.

    • Durata video: seleziona una durata video dal menu.

    • Directory di output: fai clic su Sfoglia per creare o selezionare un bucket Cloud Storage in cui archiviare i file generati.

  9. Fai clic su Esegui.

Python

Installa

pip install --upgrade google-genai

Per saperne di più, consulta la documentazione di riferimento dell'SDK.

Imposta le variabili di ambiente per utilizzare l'SDK Google Gen AI con 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

Scopri come installare o aggiornare l'Go.

Per saperne di più, consulta la documentazione di riferimento dell'SDK.

Imposta le variabili di ambiente per utilizzare l'SDK Google Gen AI con 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

Installa

npm install @google/genai

Per saperne di più, consulta la documentazione di riferimento dell'SDK.

Imposta le variabili di ambiente per utilizzare l'SDK Google Gen AI con 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

Scopri come installare o aggiornare l'Java.

Per saperne di più, consulta la documentazione di riferimento dell'SDK.

Imposta le variabili di ambiente per utilizzare l'SDK Google Gen AI con 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

Per saperne di più sull'API Veo, consulta le seguenti risorse:

  1. Utilizza il seguente comando per inviare una richiesta di generazione di video. Questa richiesta avvia un'operazione a lunga esecuzione e archivia l'output in un bucket Cloud Storage da te specificato.

    Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:

    • PROJECT_ID: una stringa che rappresenta l'ID progetto Cloud de Confiance by S3NS .
    • MODEL_ID: una stringa che rappresenta l'ID del modello da utilizzare. I seguenti sono valori accettati:
      • Veo 3.1:veo-3.1-generate-001
      • Veo 3.1:veo-3.1-fast-generate-001
    • TEXT_PROMPT: il prompt testuale utilizzato per guidare la generazione di video.
    • INPUT_IMAGE: una stringa con codifica in base64 che rappresenta l'immagine di input. Per una qualità ottimale, ti consigliamo di utilizzare un'immagine di input con una risoluzione di 720p (1280 x 720 pixel) o superiore e con proporzioni di 16:9 o 9:16. Le immagini con altre proporzioni o dimensioni potrebbero essere ridimensionate o ritagliate al centro durante il caricamento.
    • MIME_TYPE: una stringa che rappresenta il tipo MIME dell'immagine di input. Sono supportate solo le immagini dei seguenti tipi MIME:
      • "image/jpeg"
      • "image/png"
    • OUTPUT_STORAGE_URI: (facoltativo) una stringa che rappresenta il bucket Cloud Storage in cui archiviare i video di output. Se non viene fornito, i byte del video vengono restituiti nella risposta. Ad esempio: "gs://video-bucket/output/".
    • RESIZE_MODE: una stringa che rappresenta la modalità di ridimensionamento da utilizzare. I valori accettati sono:
      • "crop": ritaglia il video per adattarlo alle nuove dimensioni.
      • "pad": aggiungi spaziatura interna al video per adattarlo alle nuove dimensioni.
    • RESPONSE_COUNT: il numero di file video da generare. L'intervallo di valori accettato è 1-4.
    • DURATION: un numero intero che rappresenta la durata dei file video generati. I valori accettati sono 4, 6 o 8. Il valore predefinito è 8.
    • Parametri facoltativi aggiuntivi

      Utilizza le seguenti variabili facoltative in base al tuo caso d'uso. Aggiungi alcuni o tutti i seguenti parametri nell'oggetto "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: (Facoltativo) Un valore stringa che descrive le proporzioni dei video generati. Puoi utilizzare i seguenti valori:
        • "16:9" per l'orientamento orizzontale
        • "9:16" per ritratto

        Il valore predefinito è "16:9"

      • NEGATIVE_PROMPT: (Facoltativo) un valore stringa che descrive i contenuti che vuoi impedire al modello di generare.
      • PERSON_SAFETY_SETTING: (Facoltativo) Un valore stringa che controlla l'impostazione di sicurezza per la generazione di persone o volti. Puoi utilizzare i seguenti valori:
        • "allow_adult": consente solo la generazione di persone e volti adulti.
        • "disallow": non genera persone o volti.

        Il valore predefinito è "allow_adult".

      • RESOLUTION: (Facoltativo) Un valore stringa che controlla la risoluzione del video generato. Supportato solo dai modelli Veo 3. Puoi utilizzare i seguenti valori:
        • "720p"
        • "1080p"
        • "4k" (solo modelli di anteprima Veo 3.1)

        Il valore predefinito è "720p".

      • RESPONSE_COUNT: (Facoltativo) Un valore intero che descrive il numero di video da generare. L'intervallo di valori accettato è 1-4.
      • SEED_NUMBER: (Facoltativo) Un valore uint32 utilizzato dal modello per generare video deterministici. Se specifichi un numero seed con la richiesta senza modificare altri parametri, il modello genera gli stessi video. L'intervallo di valori accettato è 0-4294967295.

    Metodo 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 della richiesta:

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

    Per inviare la richiesta, scegli una di queste opzioni:

    curl

    Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

    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

    Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

    $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
    Questa richiesta restituisce un nome di operazione completo con un ID operazione univoco. Utilizza questo nome completo dell'operazione per eseguire il polling dello stato della richiesta di generazione di video.
    {
      "name": "projects/PROJECT_ID/locations/us-central1/publishers/google/models/MODEL_ID/operations/a1b07c8e-7b5a-4aba-bb34-3e1ccb8afcc8"
    }
    

  2. (Facoltativo) Controlla lo stato dell'operazione a lunga esecuzione della generazione di video.

    Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:

    • PROJECT_ID: il tuo ID progetto Cloud de Confiance by S3NS .
    • MODEL_ID: l'ID del modello da utilizzare.
    • OPERATION_ID: l'ID operazione univoco restituito nella richiesta di generazione del video originale.

    Metodo 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 della richiesta:

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

    Per inviare la richiesta, scegli una di queste opzioni:

    curl

    Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

    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

    Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

    $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
    Questa richiesta restituisce informazioni sull'operazione, tra cui se è ancora in esecuzione o se è stata completata.

Passaggi successivi