Veo 3.1 image-to-video rejects documented personGeneration=allow_adult

I am using the Gemini API with google-genai 2.22.0.

A Veo request using veo-3.1-generate-preview fails with:

400 INVALID_ARGUMENT: allow_adult for personGeneration is currently not supported.

The failing request uses:

personGeneration=allow_adult

The CLI image-to-video path passes a generated first frame as the image input. The GUI path is a separate text-to-video path and does not pass a first frame.

According to the current Veo 3.1 documentation, allow_adult is the supported value for image-to-video, while allow_all is used for text-to-video and video extension:

Could Google please confirm:

  1. Is personGeneration=allow_adult currently supported for Gemini API image-to-video with veo-3.1-generate-preview?

  2. Does this capability currently require project-level allowlist/enablement?

  3. If an allowlist or project-level permission is required, can it be enabled for my project?

  4. If no allowlist is required, what specifically causes the API to return this exact error for allow_adult?

Project ID: gen-lang-client-039218386..

Use case: I am building an automated animation pipeline that generates short video shots from generated first-frame images. The videos contain fictional animated/CG characters rather than real people.

I am not attempting to bypass any safety restrictions. I am trying to use the documented personGeneration=allow_adult setting for image-to-video.

Thank you.

Hello @Shaul_Perets,

personGeneration="allow_adult" is supported for Image-to-Video generation with veo-3.1-generate-preview, but it is not supported for Text-to-Video generation.

The 400 INVALID_ARGUMENT: allow_adult for personGeneration is currently not supported. error occurs when the request is evaluated as Text-to-Video because an input image was not supplied or recognized in the request payload. For Text-to-Video requests, personGeneration must be allow_all.

No project-level allowlist is required.. To use allow_adult, ensure your request includes the input image using the supported SDK pattern:

from google import genai
from google.genai import types

client = genai.Client()

image = types.Image.from_file(location="path/to/first_frame.png")

operation = client.models.generate_videos(
    model="veo-3.1-generate-preview",
    source=types.GenerateVideosSource(
        prompt="A person walking down a city street at sunset.",
        image=image,
    ),
    config=types.GenerateVideosConfig(
        aspect_ratio="16:9",
        person_generation="allow_adult",
    ),
)

Next steps:

  • Pass the input image through source=types.GenerateVideosSource(..., image=image) when specifying person_generation="allow_adult".
  • If generating Text-to-Video without an input image, set person_generation="allow_all" or omit the parameter.
  • If you still face issues, let us know.