From d4fed504c22d8a50ff2afcc6cab5a995ca9309da Mon Sep 17 00:00:00 2001 From: poemsforaphrodite Date: Fri, 2 Jan 2026 22:34:45 +0530 Subject: [PATCH 1/2] feat: Introduce `resize_mode` parameter to `GenerateVideosConfig` and add tests for 'pad' and 'crop' modes in image-to-video generation. --- .../tests/models/test_generate_videos.py | 41 +++++++++++++++++++ google/genai/types.py | 9 ++++ 2 files changed, 50 insertions(+) diff --git a/google/genai/tests/models/test_generate_videos.py b/google/genai/tests/models/test_generate_videos.py index a60c69a63..3d5216357 100644 --- a/google/genai/tests/models/test_generate_videos.py +++ b/google/genai/tests/models/test_generate_videos.py @@ -101,6 +101,7 @@ negative_prompt="ugly, low quality", enhance_prompt=True, compression_quality=types.VideoCompressionQuality.LOSSLESS, + resize_mode="pad", ), ), exception_if_mldev=( @@ -252,6 +253,28 @@ "output_gcs_uri parameter is not supported in Gemini API" ), ), + pytest_helper.TestTableItem( + name="test_image_to_video_with_resize_mode_pad", + parameters=types._GenerateVideosParameters( + model=VEO_MODEL_LATEST, + image=LOCAL_IMAGE, + config=types.GenerateVideosConfig( + number_of_videos=1, + resize_mode="pad", + ), + ), + ), + pytest_helper.TestTableItem( + name="test_image_to_video_with_resize_mode_crop", + parameters=types._GenerateVideosParameters( + model=VEO_MODEL_LATEST, + image=LOCAL_IMAGE, + config=types.GenerateVideosConfig( + number_of_videos=1, + resize_mode="crop", + ), + ), + ), ] pytestmark = pytest_helper.setup( @@ -538,6 +561,24 @@ def test_reference_images_to_video_poll(client): assert operation.result.generated_videos[0].video.uri +def test_image_to_video_resize_mode_poll(client): + operation = client.models.generate_videos( + model=VEO_MODEL_LATEST, + image=GCS_IMAGE if client.vertexai else LOCAL_IMAGE, + config=types.GenerateVideosConfig( + output_gcs_uri=OUTPUT_GCS_URI if client.vertexai else None, + resize_mode="crop", + ), + ) + while not operation.done: + # Skip the sleep when in replay mode. + if client._api_client._mode not in ("replay", "auto"): + time.sleep(20) + operation = client.operations.get(operation=operation) + + assert operation.result.generated_videos[0].video.uri + + def test_video_edit_outpaint_poll(client): # Editing videos is only supported in Vertex AI. if not client.vertexai: diff --git a/google/genai/types.py b/google/genai/types.py index d421a36bf..6ff918cc7 100644 --- a/google/genai/types.py +++ b/google/genai/types.py @@ -9900,6 +9900,11 @@ class GenerateVideosConfig(_common.BaseModel): default=None, description="""Compression quality of the generated videos.""", ) + resize_mode: Optional[str] = Field( + default=None, + description="""The resize mode for image-to-video generation. Supported values + are: pad, crop. Default is pad when not specified.""", + ) class GenerateVideosConfigDict(TypedDict, total=False): @@ -9969,6 +9974,10 @@ class GenerateVideosConfigDict(TypedDict, total=False): compression_quality: Optional[VideoCompressionQuality] """Compression quality of the generated videos.""" + resize_mode: Optional[str] + """The resize mode for image-to-video generation. Supported values + are: pad, crop. Default is pad when not specified.""" + GenerateVideosConfigOrDict = Union[ GenerateVideosConfig, GenerateVideosConfigDict From 825d7bb548df280c3f3b22e5df7f387cd62ffaed Mon Sep 17 00:00:00 2001 From: poemsforaphrodite Date: Fri, 2 Jan 2026 22:56:05 +0530 Subject: [PATCH 2/2] feat: Add support for `resize_mode` parameter in image conversion. --- google/genai/models.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/google/genai/models.py b/google/genai/models.py index 478c8a6c6..0aa29ead1 100644 --- a/google/genai/models.py +++ b/google/genai/models.py @@ -1854,6 +1854,13 @@ def _GenerateVideosConfig_to_mldev( 'compression_quality parameter is not supported in Gemini API.' ) + if getv(from_object, ['resize_mode']) is not None: + setv( + parent_object, + ['parameters', 'resizeMode'], + getv(from_object, ['resize_mode']), + ) + return to_object @@ -1970,6 +1977,13 @@ def _GenerateVideosConfig_to_vertex( getv(from_object, ['compression_quality']), ) + if getv(from_object, ['resize_mode']) is not None: + setv( + parent_object, + ['parameters', 'resizeMode'], + getv(from_object, ['resize_mode']), + ) + return to_object