Générer des vidéos à partir d'une image

Vous pouvez utiliser Gemini Omni ou Veo sur Gemini Enterprise Agent Platform pour générer des vidéos à partir d'une image existante comme première image. La génération de vidéo à partir d'une image de première image est disponible via Gemini Enterprise Agent Platform Media Studio ou à l'aide de l'API de génération de vidéo Gemini Enterprise Agent Platform.

Les modèles suivants sont compatibles avec la génération de vidéos à partir d'une image :

Gemini Omni

Cliquez pour développer la liste des modèles compatibles

Veo

Cliquez pour développer la liste des modèles compatibles

Pour en savoir plus sur l'écriture de requêtes de texte efficaces pour la génération de vidéos, consultez le guide des requêtes pour la génération de vidéos.

Essayer Gemini Omni Flash dans un notebook Colab

Avant de commencer

  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. Configurez l'authentification pour votre environnement.

    Sélectionnez l'onglet correspondant à la façon dont vous prévoyez d'utiliser les exemples de cette page :

    Console

    Lorsque vous utilisez la console Cloud de Confiance pour accéder aux services et aux API Cloud de Confiance by S3NS , vous n'avez pas besoin de configurer l'authentification.

    REST

    Pour utiliser les exemples API REST de cette page dans un environnement de développement local, vous devez utiliser les identifiants que vous fournissez à la gcloud CLI.

      Installez la Google Cloud CLI, puis connectez-vous à la gcloud CLI avec votre identité fédérée.

    Pour en savoir plus, consultez la section S'authentifier pour utiliser REST dans la documentation sur l'authentification Cloud de Confiance .

Utiliser Gemini Omni pour générer des vidéos à partir d'une image

REST

La génération de la vidéo peut prendre plus d'une minute. Vous pouvez choisir parmi plusieurs modes d'interaction en fonction de votre workflow :

  • Synchrone : sans état : générez une vidéo en une seule requête sans conserver l'état d'interaction sur le serveur.
  • Synchronisation : avec état : définissez store sur true pour conserver l'état de l'interaction, ce qui vous permet de récupérer le résultat ultérieurement ou de faire référence à l'ID d'interaction pour le montage vidéo en plusieurs étapes.
  • Synchronous : streaming avec état : définissez store et stream sur true pour recevoir les réflexions du modèle de manière incrémentielle à mesure qu'elles sont générées, suivies de la vidéo de sortie.
  • Asynchrone : définissez background sur true pour exécuter la génération de vidéo en arrière-plan et récupérer le résultat ultérieurement à l'aide de l'ID d'interaction.

Les interactions stockées et asynchrones sont conservées pendant 14 jours au maximum.

Pour en savoir plus sur l'utilisation de l'API Gemini Omni Flash, consultez API Interactions.

Synchrone : sans état

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • PROJECT_ID : chaîne représentant l'ID de votre projet Cloud de Confiance by S3NS .
  • MODEL_ID : chaîne représentant l'ID du modèle à utiliser. Les valeurs suivantes sont acceptées :
    • "gemini-omni-1.1-flash-preview"
  • TEXT_PROMPT : prompt textuel utilisé pour guider la génération de vidéos.
  • CLOUD_STORAGE_INPUT_URI : Chaîne représentant le bucket Cloud Storage contenant le contenu multimédia d'entrée. Exemple : "gs://video-bucket/input/".
  • CLOUD_STORAGE_OUTPUT_URI (facultatif) : chaîne représentant le bucket Cloud Storage dans lequel stocker les vidéos de sortie. Si cette valeur n'est pas fournie, les octets vidéo sont renvoyés dans la réponse. Exemple : "gs://video-bucket/output/".
  • ASPECT_RATIO (facultatif) : chaîne représentant le format attendu de la vidéo de sortie. Si aucune valeur n'est fournie, le format est déduit de la requête. Les valeurs suivantes sont acceptées :
    • "16:9"
    • "9:16"
  • OUTPUT_RESOLUTION :

    Facultatif : chaîne représentant la résolution de sortie de la vidéo. Si aucune valeur n'est fournie, la sortie est définie par défaut sur 720p.

    gemini-omni-1.1-flash-preview accepte les valeurs suivantes :

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

    gemini-omni-flash-preview n'est compatible qu'avec "720p".

  • DURATION : chaîne représentant la durée des fichiers vidéo générés. Les chaînes autorisées sont des entiers compris entre 3 et 10, suivis de "s" pour les secondes. Par exemple, "10s".

Méthode HTTP et URL :

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

Corps JSON de la requête :

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

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

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

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

$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 réponse contient une interaction qui inclut les réflexions du modèle et une vidéo de sortie.
{
  "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",
}

Synchrone : avec état

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • PROJECT_ID : chaîne représentant l'ID de votre projet Cloud de Confiance by S3NS .
  • MODEL_ID : chaîne représentant l'ID du modèle à utiliser. Les valeurs suivantes sont acceptées :
    • "gemini-omni-1.1-flash-preview"
  • TEXT_PROMPT : prompt textuel utilisé pour guider la génération de vidéos.
  • CLOUD_STORAGE_INPUT_URI : Chaîne représentant le bucket Cloud Storage contenant le contenu multimédia d'entrée. Exemple : "gs://video-bucket/input/".
  • CLOUD_STORAGE_OUTPUT_URI (facultatif) : chaîne représentant le bucket Cloud Storage dans lequel stocker les vidéos de sortie. Si cette valeur n'est pas fournie, les octets vidéo sont renvoyés dans la réponse. Exemple : "gs://video-bucket/output/".
  • ASPECT_RATIO (facultatif) : chaîne représentant le format attendu de la vidéo de sortie. Si aucune valeur n'est fournie, le format est déduit de la requête. Les valeurs suivantes sont acceptées :
    • "16:9"
    • "9:16"
  • OUTPUT_RESOLUTION :

    Facultatif : chaîne représentant la résolution de sortie de la vidéo. Si aucune valeur n'est fournie, la sortie est définie par défaut sur 720p.

    gemini-omni-1.1-flash-preview accepte les valeurs suivantes :

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

    gemini-omni-flash-preview n'est compatible qu'avec "720p".

  • DURATION : chaîne représentant la durée des fichiers vidéo générés. Les chaînes autorisées sont des entiers compris entre 3 et 10, suivis de "s" pour les secondes. Par exemple, "10s".

Méthode HTTP et URL :

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

Corps JSON de la requête :

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

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

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

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

$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 réponse contient une interaction qui inclut les réflexions du modèle et une vidéo de sortie.
{
  "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",
}
Utilisez INTERACTION_ID pour obtenir la vidéo générée :

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • PROJECT_ID : chaîne représentant l'ID de votre projet Cloud de Confiance by S3NS .
  • INTERACTION_ID : ID d'interaction de la requête asynchrone.

Méthode HTTP et URL :

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

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Exécutez la commande suivante :

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

PowerShell

Exécutez la commande suivante :

$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 réponse est semblable à ce qui suit :
{
  "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",
}

Synchrone : streaming avec état

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • PROJECT_ID : chaîne représentant l'ID de votre projet Cloud de Confiance by S3NS .
  • MODEL_ID : chaîne représentant l'ID du modèle à utiliser. Les valeurs suivantes sont acceptées :
    • "gemini-omni-1.1-flash-preview"
  • TEXT_PROMPT : prompt textuel utilisé pour guider la génération de vidéos.
  • CLOUD_STORAGE_INPUT_URI : Chaîne représentant le bucket Cloud Storage contenant le contenu multimédia d'entrée. Exemple : "gs://video-bucket/input/".
  • CLOUD_STORAGE_OUTPUT_URI (facultatif) : chaîne représentant le bucket Cloud Storage dans lequel stocker les vidéos de sortie. Si cette valeur n'est pas fournie, les octets vidéo sont renvoyés dans la réponse. Exemple : "gs://video-bucket/output/".
  • ASPECT_RATIO (facultatif) : chaîne représentant le format attendu de la vidéo de sortie. Si aucune valeur n'est fournie, le format est déduit de la requête. Les valeurs suivantes sont acceptées :
    • "16:9"
    • "9:16"
  • OUTPUT_RESOLUTION :

    Facultatif : chaîne représentant la résolution de sortie de la vidéo. Si aucune valeur n'est fournie, la sortie est définie par défaut sur 720p.

    gemini-omni-1.1-flash-preview accepte les valeurs suivantes :

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

    gemini-omni-flash-preview n'est compatible qu'avec "720p".

  • DURATION : chaîne représentant la durée des fichiers vidéo générés. Les chaînes autorisées sont des entiers compris entre 3 et 10, suivis de "s" pour les secondes. Par exemple, "10s".

Méthode HTTP et URL :

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

Corps JSON de la requête :

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

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

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

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

$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 réponse contient une interaction qui inclut les réflexions du modèle et une vidéo de sortie.
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]
Utilisez INTERACTION_ID avec `?stream=true` pour diffuser l'interaction stockée et la vidéo générée :

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • PROJECT_ID : chaîne représentant l'ID de votre projet Cloud de Confiance by S3NS .
  • INTERACTION_ID : ID d'interaction de la requête.

Méthode HTTP et URL :

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

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Exécutez la commande suivante :

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

PowerShell

Exécutez la commande suivante :

$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 réponse est un flux d'événements envoyés par le serveur (SSE) dans un format semblable à celui-ci :
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]

Asynchrone

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • PROJECT_ID : chaîne représentant l'ID de votre projet Cloud de Confiance by S3NS .
  • MODEL_ID : chaîne représentant l'ID du modèle à utiliser. Les valeurs suivantes sont acceptées :
    • "gemini-omni-1.1-flash-preview"
  • TEXT_PROMPT : prompt textuel utilisé pour guider la génération de vidéos.
  • CLOUD_STORAGE_INPUT_URI : Chaîne représentant le bucket Cloud Storage contenant le contenu multimédia d'entrée. Exemple : "gs://video-bucket/input/".
  • CLOUD_STORAGE_OUTPUT_URI (facultatif) : chaîne représentant le bucket Cloud Storage dans lequel stocker les vidéos de sortie. Si cette valeur n'est pas fournie, les octets vidéo sont renvoyés dans la réponse. Exemple : "gs://video-bucket/output/".
  • ASPECT_RATIO (facultatif) : chaîne représentant le format attendu de la vidéo de sortie. Si aucune valeur n'est fournie, le format est déduit de la requête. Les valeurs suivantes sont acceptées :
    • "16:9"
    • "9:16"
  • OUTPUT_RESOLUTION :

    Facultatif : chaîne représentant la résolution de sortie de la vidéo. Si aucune valeur n'est fournie, la sortie est définie par défaut sur 720p.

    gemini-omni-1.1-flash-preview accepte les valeurs suivantes :

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

    gemini-omni-flash-preview n'est compatible qu'avec "720p".

  • DURATION : chaîne représentant la durée des fichiers vidéo générés. Les chaînes autorisées sont des entiers compris entre 3 et 10, suivis de "s" pour les secondes. Par exemple, "10s".

Méthode HTTP et URL :

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

Corps JSON de la requête :

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

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

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

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

$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 réponse contient un ID d'interaction, que vous utiliserez pour obtenir la vidéo que vous avez générée.
{
  "id":"INTERACTION_ID",
  "status":"in_progress",
  "object":"interaction"
}
Utilisez ensuite INTERACTION_ID pour obtenir la vidéo générée :

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • PROJECT_ID : chaîne représentant l'ID de votre projet Cloud de Confiance by S3NS .
  • INTERACTION_ID : ID d'interaction de la requête asynchrone.

Méthode HTTP et URL :

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

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Exécutez la commande suivante :

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

PowerShell

Exécutez la commande suivante :

$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 réponse est au format suivant :
{
  "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",
}

Utiliser Veo pour générer des vidéos à partir d'une image

Exemple d'entrée Exemple de sortie
  1. Image d'entrée1
    Fichier PNG d'entrée d'un éléphant fait au crochet
  2. Prompt textuel : l'éléphant se déplace naturellement

Vidéo de sortie d'un éléphant fait au crochet

1 Image générée à partir du prompt suivant : Un éléphant, fait au crochet avec des motifs complexes, marchant dans la savane

Vous pouvez générer des vidéos inédites en n'utilisant qu'une image, ou une image et un texte descriptif comme entrées. Dans les exemples suivants, vous trouverez les instructions de base pour générer des vidéos à partir d'images et de texte.

Console

  1. Dans la console Cloud de Confiance , accédez à la page Agent Platform>Media Studio.

    Media Studio

  2. Cliquez sur Vidéo.

  3. Dans le menu Tâche, sélectionnez Image vers vidéo.

  4. Dans le menu Modèle, sélectionnez un modèle parmi les options affichées.

  5. Dans la zone Prompt, saisissez un prompt textuel décrivant les vidéos à générer.

  6. Dans la section Images d'entrée, cliquez sur Démarrer pour importer une image pour la première image.

  7. Facultatif : cliquez sur Fin pour importer une image pour la dernière image.

  8. Facultatif : Ajustez les paramètres suivants :

    • Format : choisissez 16:9 ou 9:16.

    • Nombre de résultats : ajustez le curseur ou saisissez une valeur comprise entre 1 et 4.

    • Durée de la vidéo : sélectionnez une durée de vidéo dans le menu.

    • Répertoire de sortie : cliquez sur Parcourir pour créer ou sélectionner un bucket Cloud Storage afin d'y stocker les fichiers générés.

  9. Cliquez sur Exécuter.

Python

Installer

pip install --upgrade google-genai

Pour en savoir plus, consultez la documentation de référence du SDK.

Définissez des variables d'environnement pour utiliser le SDK Google Gen AI avec 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

Découvrez comment installer ou mettre à jour le Go.

Pour en savoir plus, consultez la documentation de référence du SDK.

Définissez des variables d'environnement pour utiliser le SDK Google Gen AI avec 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

Installer

npm install @google/genai

Pour en savoir plus, consultez la documentation de référence du SDK.

Définissez des variables d'environnement pour utiliser le SDK Google Gen AI avec 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

Découvrez comment installer ou mettre à jour le Java.

Pour en savoir plus, consultez la documentation de référence du SDK.

Définissez des variables d'environnement pour utiliser le SDK Google Gen AI avec 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

Pour en savoir plus sur l'API Veo, consultez les ressources suivantes :

  1. Utilisez la commande suivante pour envoyer une requête de génération de vidéo. Cette requête lance une opération de longue durée et stocke le résultat dans un bucket Cloud Storage que vous spécifiez.

    Avant d'utiliser les données de requête, effectuez les remplacements suivants :

    • PROJECT_ID : chaîne représentant l'ID de votre projet Cloud de Confiance by S3NS .
    • MODEL_ID : chaîne représentant l'ID du modèle à utiliser. Les valeurs suivantes sont acceptées :
      • 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 : prompt textuel utilisé pour guider la génération de vidéos.
    • INPUT_IMAGE : chaîne encodée en base64 qui représente l'image d'entrée. Pour une qualité optimale, nous vous recommandons d'utiliser une image d'entrée d'une résolution de 720p (1 280 x 720 pixels) ou supérieure, et d'un format 16:9 ou 9:16. Les images de formats ou de tailles différents peuvent être redimensionnées ou recadrées au centre lors de l'importation.
    • MIME_TYPE : chaîne représentant le type MIME de l'image d'entrée. Seules les images des types MIME suivants sont acceptées :
      • "image/jpeg"
      • "image/png"
    • OUTPUT_STORAGE_URI : (facultatif) chaîne représentant le bucket Cloud Storage dans lequel stocker les vidéos de sortie. Si cette valeur n'est pas fournie, les octets vidéo sont renvoyés dans la réponse. Par exemple : "gs://video-bucket/output/".
    • RESIZE_MODE : chaîne représentant le mode de redimensionnement à utiliser. Les valeurs suivantes sont acceptées :
      • "crop" : recadrez la vidéo pour l'adapter à la nouvelle taille.
      • "pad" : ajoutez des marges à la vidéo pour l'adapter à la nouvelle taille.
    • RESPONSE_COUNT : nombre de fichiers vidéo à générer. La plage de valeurs acceptée est 1-4.
    • DURATION : entier représentant la durée des fichiers vidéo générés. Voici les valeurs acceptées pour chaque modèle :
      • Modèles Veo 2 : 5-8. La valeur par défaut est 8.
      • Modèles Veo 3 : 4, 6 ou 8. La valeur par défaut est 8.
    • Paramètres facultatifs supplémentaires

      Utilisez les variables facultatives suivantes en fonction de votre cas d'utilisation. Ajoutez l'ensemble ou une partie des paramètres suivants dans l'objet "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 : (facultatif) : valeur de chaîne décrivant le format des vidéos générées. Vous pouvez utiliser les valeurs suivantes :
        • "16:9" pour le mode paysage
        • "9:16" pour le mode Portrait

        La valeur par défaut est "16:9".

      • NEGATIVE_PROMPT : (facultatif) valeur de chaîne décrivant le contenu que vous souhaitez empêcher le modèle de générer.
      • PERSON_SAFETY_SETTING : (Facultatif) Valeur de chaîne qui contrôle le paramètre de sécurité pour la génération de personnes ou de visages. Vous pouvez utiliser les valeurs suivantes :
        • "allow_adult" : n'autoriser que la génération de personnes et de visages d'adultes.
        • "disallow" : ne génère pas de personnes ni de visages.

        La valeur par défaut est "allow_adult".

      • RESOLUTION (facultatif) : valeur de chaîne qui contrôle la résolution de la vidéo générée. Compatible uniquement avec les modèles Veo 3. Vous pouvez utiliser les valeurs suivantes :
        • "720p"
        • "1080p"
        • "4k" (modèles Veo 3.1 (preview) uniquement)

        La valeur par défaut est "720p".

      • RESPONSE_COUNT : Facultatif. Valeur entière décrivant le nombre de vidéos à générer. La plage de valeurs acceptée est 1-4.
      • SEED_NUMBER : facultatif. Valeur uint32 que le modèle utilise pour générer des vidéos déterministes. Si vous spécifiez un numéro source avec votre requête sans modifier d'autres paramètres, vous indiquez au modèle de produire les mêmes vidéos. La plage de valeurs acceptée est comprise entre 0 et 4294967295.

    Méthode HTTP et URL :

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

    Corps JSON de la requête :

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

    Pour envoyer votre requête, choisissez l'une des options suivantes :

    curl

    Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

    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

    Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

    $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
    Cette requête renvoie un nom d'opération complet avec un ID d'opération unique. Utilisez ce nom d'opération complet pour interroger l'état de la requête de génération de vidéo.
    {
      "name": "projects/PROJECT_ID/locations/us-central1/publishers/google/models/MODEL_ID/operations/a1b07c8e-7b5a-4aba-bb34-3e1ccb8afcc8"
    }
    

  2. Facultatif : vérifiez l'état de l'opération de longue durée de génération de la vidéo.

    Avant d'utiliser les données de requête, effectuez les remplacements suivants :

    • PROJECT_ID : ID de votre projet Cloud de Confiance by S3NS .
    • MODEL_ID : ID du modèle à utiliser.
    • OPERATION_ID : ID d'opération unique renvoyé dans la requête de génération de vidéo d'origine.

    Méthode HTTP et URL :

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

    Corps JSON de la requête :

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

    Pour envoyer votre requête, choisissez l'une des options suivantes :

    curl

    Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

    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

    Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

    $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
    Cette requête renvoie des informations sur l'opération, y compris si elle est toujours en cours d'exécution ou si elle est terminée.

Étapes suivantes