allow_adult for personGeneration is currently not supported. — Veo API image-to-video treated as text-to-video
The exact error
400 INVALID_ARGUMENT: allow_adult for personGeneration is currently not supported.
What it means
Veo decided your request was text-to-video, and text-to-video does not accept allow_adult.
Google’s Veo docs list which personGeneration value each mode accepts. Text-to-video and video extension take "allow_all" only. Image-to-video, interpolation (first and last frame) and reference images take "allow_adult" only. So allow_adult is valid, but only when the request really is image-based.
The confusing part is that most people who hit this believe they sent an image. In Google AI Developers Forum thread 181139, a developer using veo-3.1-generate-preview through the Gemini API with google-genai 2.22.0 got this error on their image-to-video path. They asked whether allow_adult needed a project allowlist. A forum moderator answered that it does not. The moderator explained that the error appears when the request is evaluated as text-to-video “because an input image was not supplied or recognized in the request payload.”
In other words, the image was missing or in a place Veo did not look, so the request fell back to text-to-video, and the allow_adult value no longer fit.
How to confirm it’s this
- The response is HTTP 400
INVALID_ARGUMENTwith the message above. The developer in the thread quoted it with the400 INVALID_ARGUMENT:prefix shown at the top of this page. - Log the exact request body or SDK arguments at the moment of the call. Check that the image is present and not empty. In the thread, the developer had two code paths, one of which never passed a first frame.
- For REST calls, Google’s Veo examples place the starting image inside the instance, as
instances[0].imagewith aninlineDataobject that holdsmimeTypeanddata. An image placed anywhere else may not be recognized.
Fix
Pass the image in the place the SDK expects it. The moderator in thread 181139 gave this Python pattern for the Gemini API:
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",
),
)
Google’s Veo page also shows a second shape, with image= passed directly to generate_videos next to prompt=. Either way, the image has to be a real image object, not None and not an empty string.
Then match the value to the mode:
- Image-to-video, interpolation or reference images: send
allow_adult. - Text-to-video with no image: send
allow_all, or omit the parameter, as the moderator suggested. - Video extension: the docs list
allow_allonly, so do not reuse anallow_adultconfig for extension calls.
If your code builds one config object and reuses it across modes, choose personGeneration per call instead.
Retry or not
No. The service rejects the combination of mode and value, and an identical request gets the same 400. The moderator’s answer names a specific cause, a missing or unrecognized image, and that does not change between attempts. Fix the payload or the value, then send a new request. An agent should not spend retries or backoff time on this error.
When it’s not this
allow_all for personGeneration is currently not supported.This is the mirror image. It applies to image-based modes, and Google’s docs say that in EU, UK, CH and MENA locationsallow_adultis the only allowed value. If you are in one of those regions, your text-to-video calls sit between both rules. Read that page before changing values back and forth.- An image that arrives but cannot be decoded. In forum thread 128760, a Veo 3.1 REST call with an image got a separate 400,
Unable to process input image. That message points at the image data, not atpersonGeneration. - A project allowlist. The moderator said none is needed for
allow_adultwithveo-3.1-generate-preview. Allowlist errors, such as the one for frame interpolation, use a different status and name the feature.
Related errors
- allow_all for personGeneration is currently not supported
- Veo unable to process input image
- Frame interpolation is not allowlisted
- Use case not supported
- Veo videos filtered out
Error text last verified against the sources below on .