From e815694a4906bd20b0c7fed27b0759ec1b983767 Mon Sep 17 00:00:00 2001 From: Juan Dominguez Date: Wed, 24 Sep 2025 17:20:03 -0300 Subject: [PATCH 1/5] feat(genai): add new genai sdk image generation samples --- genai/snippets/pom.xml | 4 + ...ImageGenCannyCtrlTypeWithTextAndImage.java | 84 ++++++++++++ .../ImageGenRawReferenceWithTextAndImage.java | 84 ++++++++++++ ...geGenScribbleCtrlTypeWithTextAndImage.java | 86 ++++++++++++ ...mageGenStyleReferenceWithTextAndImage.java | 85 ++++++++++++ ...geGenSubjectReferenceWithTextAndImage.java | 106 +++++++++++++++ .../imagegeneration/ImageGenerationIT.java | 126 ++++++++++++++++++ 7 files changed, 575 insertions(+) create mode 100644 genai/snippets/src/main/java/genai/imagegeneration/ImageGenCannyCtrlTypeWithTextAndImage.java create mode 100644 genai/snippets/src/main/java/genai/imagegeneration/ImageGenRawReferenceWithTextAndImage.java create mode 100644 genai/snippets/src/main/java/genai/imagegeneration/ImageGenScribbleCtrlTypeWithTextAndImage.java create mode 100644 genai/snippets/src/main/java/genai/imagegeneration/ImageGenStyleReferenceWithTextAndImage.java create mode 100644 genai/snippets/src/main/java/genai/imagegeneration/ImageGenSubjectReferenceWithTextAndImage.java create mode 100644 genai/snippets/src/test/java/genai/imagegeneration/ImageGenerationIT.java diff --git a/genai/snippets/pom.xml b/genai/snippets/pom.xml index 32015ec0bf4..ceb3d11f914 100644 --- a/genai/snippets/pom.xml +++ b/genai/snippets/pom.xml @@ -53,6 +53,10 @@ google-genai 1.15.0 + + com.google.cloud + google-cloud-storage + junit junit diff --git a/genai/snippets/src/main/java/genai/imagegeneration/ImageGenCannyCtrlTypeWithTextAndImage.java b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenCannyCtrlTypeWithTextAndImage.java new file mode 100644 index 00000000000..03ff2dc7144 --- /dev/null +++ b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenCannyCtrlTypeWithTextAndImage.java @@ -0,0 +1,84 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package genai.imagegeneration; + +// [START googlegenaisdk_imggen_canny_ctrl_type_with_txt_img] + +import com.google.genai.Client; +import com.google.genai.types.ControlReferenceConfig; +import com.google.genai.types.ControlReferenceImage; +import com.google.genai.types.EditImageConfig; +import com.google.genai.types.EditImageResponse; +import com.google.genai.types.GeneratedImage; +import com.google.genai.types.Image; +import java.util.List; +import java.util.Optional; + +public class ImageGenCannyCtrlTypeWithTextAndImage { + + public static void main(String[] args) { + // TODO(developer): Replace these variables before running the sample. + String modelId = "imagen-3.0-capability-001"; + String outputGcsUri = "gs://your-bucket/your-prefix"; + generateImageWithCannyCtrl(modelId, outputGcsUri); + } + + // Generates an image with a canny control reference image and text input + public static Optional generateImageWithCannyCtrl(String modelId, String outputGcsUri) { + // Client Initialization. Once created, it can be reused for multiple requests. + try (Client client = Client.builder().location("global").vertexAI(true).build()) { + // Create a reference image out of an existing canny edge image signal + // using https://storage.googleapis.com/cloud-samples-data/generative-ai/image/car_canny.png + ControlReferenceImage controlReferenceImage = + ControlReferenceImage.builder() + .referenceId(1) + .referenceImage( + Image.builder() + .gcsUri("gs://cloud-samples-data/generative-ai/image/car_canny.png") + .build()) + .config(ControlReferenceConfig.builder().controlType("CONTROL_TYPE_CANNY").build()) + .build(); + + EditImageResponse imageResponse = + client.models.editImage( + modelId, + "a watercolor painting of a red car[1] driving on a road", + List.of(controlReferenceImage), + EditImageConfig.builder() + .editMode("EDIT_MODE_CONTROLLED_EDITING") + .numberOfImages(1) + .safetyFilterLevel("BLOCK_MEDIUM_AND_ABOVE") + .personGeneration("ALLOW_ADULT") + .outputGcsUri(outputGcsUri) + .build()); + + Image generatedImage = + imageResponse + .generatedImages() + .flatMap(generatedImages -> generatedImages.stream().findFirst()) + .flatMap(GeneratedImage::image) + .orElseThrow(() -> new IllegalStateException("No image was generated by the model.")); + + generatedImage.gcsUri().ifPresent(System.out::println); + // Example response: + // gs://your-bucket/your-prefix + + return generatedImage.gcsUri(); + } + } +} +// [END googlegenaisdk_imggen_canny_ctrl_type_with_txt_img] \ No newline at end of file diff --git a/genai/snippets/src/main/java/genai/imagegeneration/ImageGenRawReferenceWithTextAndImage.java b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenRawReferenceWithTextAndImage.java new file mode 100644 index 00000000000..4ae81481b57 --- /dev/null +++ b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenRawReferenceWithTextAndImage.java @@ -0,0 +1,84 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package genai.imagegeneration; + +// [START googlegenaisdk_imggen_raw_reference_with_txt_img] + +import com.google.genai.Client; +import com.google.genai.types.EditImageConfig; +import com.google.genai.types.EditImageResponse; +import com.google.genai.types.GeneratedImage; +import com.google.genai.types.Image; +import com.google.genai.types.RawReferenceImage; +import java.util.List; +import java.util.Optional; + +public class ImageGenRawReferenceWithTextAndImage { + + public static void main(String[] args) { + // TODO(developer): Replace these variables before running the sample. + String modelId = "imagen-3.0-capability-001"; + String outputGcsUri = "gs://your-bucket/your-prefix"; + generateImageWithRawReference(modelId, outputGcsUri); + } + + // Generates an image with a raw reference image and text input + public static Optional generateImageWithRawReference( + String modelId, String outputGcsUri) { + // Client Initialization. Once created, it can be reused for multiple requests. + try (Client client = Client.builder().location("global").vertexAI(true).build()) { + // Create a raw reference image of teacup stored in Google Cloud Storage + // using https://storage.googleapis.com/cloud-samples-data/generative-ai/image/teacup-1.png + RawReferenceImage rawReferenceImage = + RawReferenceImage.builder() + .referenceId(1) + .referenceImage( + Image.builder() + .gcsUri("gs://cloud-samples-data/generative-ai/image/teacup-1.png") + .build()) + .build(); + + EditImageResponse imageResponse = + client.models.editImage( + modelId, + "transform the subject in the image so that " + + "the teacup[1] is made entirely out of chocolate", + List.of(rawReferenceImage), + EditImageConfig.builder() + .editMode("EDIT_MODE_DEFAULT") + .numberOfImages(1) + .safetyFilterLevel("BLOCK_MEDIUM_AND_ABOVE") + .personGeneration("ALLOW_ADULT") + .outputGcsUri(outputGcsUri) + .build()); + + Image generatedImage = + imageResponse + .generatedImages() + .flatMap(generatedImages -> generatedImages.stream().findFirst()) + .flatMap(GeneratedImage::image) + .orElseThrow(() -> new IllegalStateException("No image was generated by the model.")); + + generatedImage.gcsUri().ifPresent(System.out::println); + // Example response: + // gs://your-bucket/your-prefix + + return generatedImage.gcsUri(); + } + } +} +// [END googlegenaisdk_imggen_raw_reference_with_txt_img] \ No newline at end of file diff --git a/genai/snippets/src/main/java/genai/imagegeneration/ImageGenScribbleCtrlTypeWithTextAndImage.java b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenScribbleCtrlTypeWithTextAndImage.java new file mode 100644 index 00000000000..d3d3f08b04d --- /dev/null +++ b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenScribbleCtrlTypeWithTextAndImage.java @@ -0,0 +1,86 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package genai.imagegeneration; + +// [START googlegenaisdk_imggen_scribble_ctrl_type_with_txt_img] + +import com.google.genai.Client; +import com.google.genai.types.ControlReferenceConfig; +import com.google.genai.types.ControlReferenceImage; +import com.google.genai.types.EditImageConfig; +import com.google.genai.types.EditImageResponse; +import com.google.genai.types.GeneratedImage; +import com.google.genai.types.Image; +import java.util.List; +import java.util.Optional; + +public class ImageGenScribbleCtrlTypeWithTextAndImage { + + public static void main(String[] args) { + // TODO(developer): Replace these variables before running the sample. + String modelId = "imagen-3.0-capability-001"; + String outputGcsUri = "gs://your-bucket/your-prefix"; + generateImageWithScribbleCtrl(modelId, outputGcsUri); + } + + // Generates an image with a scribble control reference image and text input + public static Optional generateImageWithScribbleCtrl( + String modelId, String outputGcsUri) { + // Client Initialization. Once created, it can be reused for multiple requests. + try (Client client = Client.builder().location("global").vertexAI(true).build()) { + // Create a reference image out of an existing scribble image signal + // using + // https://storage.googleapis.com/cloud-samples-data/generative-ai/image/car_scribble.png + ControlReferenceImage controlReferenceImage = + ControlReferenceImage.builder() + .referenceId(1) + .referenceImage( + Image.builder() + .gcsUri("gs://cloud-samples-data/generative-ai/image/car_scribble.png") + .build()) + .config(ControlReferenceConfig.builder().controlType("CONTROL_TYPE_SCRIBBLE").build()) + .build(); + + EditImageResponse imageResponse = + client.models.editImage( + modelId, + "an oil painting showing the side of a red car[1]", + List.of(controlReferenceImage), + EditImageConfig.builder() + .editMode("EDIT_MODE_CONTROLLED_EDITING") + .numberOfImages(1) + .safetyFilterLevel("BLOCK_MEDIUM_AND_ABOVE") + .personGeneration("ALLOW_ADULT") + .outputGcsUri(outputGcsUri) + .build()); + + Image generatedImage = + imageResponse + .generatedImages() + .flatMap(generatedImages -> generatedImages.stream().findFirst()) + .flatMap(GeneratedImage::image) + .orElseThrow(() -> new IllegalStateException("No image was generated by the model.")); + + generatedImage.gcsUri().ifPresent(System.out::println); + // Example response: + // gs://your-bucket/your-prefix + + return generatedImage.gcsUri(); + } + } +} +// [END googlegenaisdk_imggen_scribble_ctrl_type_with_txt_img] \ No newline at end of file diff --git a/genai/snippets/src/main/java/genai/imagegeneration/ImageGenStyleReferenceWithTextAndImage.java b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenStyleReferenceWithTextAndImage.java new file mode 100644 index 00000000000..2425da51efc --- /dev/null +++ b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenStyleReferenceWithTextAndImage.java @@ -0,0 +1,85 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package genai.imagegeneration; + +// [START googlegenaisdk_imggen_style_reference_with_txt_img] + +import com.google.genai.Client; +import com.google.genai.types.EditImageConfig; +import com.google.genai.types.EditImageResponse; +import com.google.genai.types.GeneratedImage; +import com.google.genai.types.Image; +import com.google.genai.types.StyleReferenceConfig; +import com.google.genai.types.StyleReferenceImage; +import java.util.List; +import java.util.Optional; + +public class ImageGenStyleReferenceWithTextAndImage { + + public static void main(String[] args) { + // TODO(developer): Replace these variables before running the sample. + String modelId = "imagen-3.0-capability-001"; + String outputGcsUri = "gs://your-bucket/your-prefix"; + generateImageWithStyleReference(modelId, outputGcsUri); + } + + // Generates an image with a style reference image and text input + public static Optional generateImageWithStyleReference( + String modelId, String outputGcsUri) { + // Client Initialization. Once created, it can be reused for multiple requests. + try (Client client = Client.builder().location("global").vertexAI(true).build()) { + // Create a style reference image of a neon sign stored in Google Cloud Storage + // using https://storage.googleapis.com/cloud-samples-data/generative-ai/image/neon.png + StyleReferenceImage styleReferenceImage = + StyleReferenceImage.builder() + .referenceId(1) + .referenceImage( + Image.builder() + .gcsUri("gs://cloud-samples-data/generative-ai/image/neon.png") + .build()) + .config(StyleReferenceConfig.builder().styleDescription("neon sign").build()) + .build(); + + EditImageResponse imageResponse = + client.models.editImage( + modelId, + "generate an image of a neon sign [1] with the words: have a great day", + List.of(styleReferenceImage), + EditImageConfig.builder() + .editMode("EDIT_MODE_DEFAULT") + .numberOfImages(1) + .safetyFilterLevel("BLOCK_MEDIUM_AND_ABOVE") + .personGeneration("ALLOW_ADULT") + .outputGcsUri(outputGcsUri) + .build()); + + Image generatedImage = + imageResponse + .generatedImages() + .flatMap(generatedImages -> generatedImages.stream().findFirst()) + .flatMap(GeneratedImage::image) + .orElseThrow(() -> new IllegalStateException("No image was generated by the model.")); + + generatedImage.gcsUri().ifPresent(System.out::println); + // Example response: + // gs://your-bucket/your-prefix + + return generatedImage.gcsUri(); + } + } +} +// [END googlegenaisdk_imggen_style_reference_with_txt_img] \ No newline at end of file diff --git a/genai/snippets/src/main/java/genai/imagegeneration/ImageGenSubjectReferenceWithTextAndImage.java b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenSubjectReferenceWithTextAndImage.java new file mode 100644 index 00000000000..3b58cd14355 --- /dev/null +++ b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenSubjectReferenceWithTextAndImage.java @@ -0,0 +1,106 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package genai.imagegeneration; + +// [START googlegenaisdk_imggen_subj_refer_ctrl_refer_with_txt_imgs] + +import com.google.genai.Client; +import com.google.genai.types.ControlReferenceConfig; +import com.google.genai.types.ControlReferenceImage; +import com.google.genai.types.EditImageConfig; +import com.google.genai.types.EditImageResponse; +import com.google.genai.types.GeneratedImage; +import com.google.genai.types.Image; +import com.google.genai.types.SubjectReferenceConfig; +import com.google.genai.types.SubjectReferenceImage; +import java.util.List; +import java.util.Optional; + +public class ImageGenSubjectReferenceWithTextAndImage { + + public static void main(String[] args) { + // TODO(developer): Replace these variables before running the sample. + String modelId = "imagen-3.0-capability-001"; + String outputGcsUri = "gs://example-cloud-bucket-5439474/java-genai-samples-tests"; + // "gs://your-bucket/your-prefix"; + generateImageWithSubjectAndControlReference(modelId, outputGcsUri); + } + + // Generates an image with a subject reference image, control reference image and text input + public static Optional generateImageWithSubjectAndControlReference( + String modelId, String outputGcsUri) { + // Client Initialization. Once created, it can be reused for multiple requests. + try (Client client = Client.builder().location("global").vertexAI(true).build()) { + // Create subject and control reference images of a photograph stored in Google Cloud Storage + // using https://storage.googleapis.com/cloud-samples-data/generative-ai/image/person.png + SubjectReferenceImage subjectReferenceImage = + SubjectReferenceImage.builder() + .referenceId(1) + .referenceImage( + Image.builder() + .gcsUri("gs://cloud-samples-data/generative-ai/image/person.png") + .build()) + .config( + SubjectReferenceConfig.builder() + .subjectDescription("a headshot of a woman") + .subjectType("SUBJECT_TYPE_PERSON") + .build()) + .build(); + + ControlReferenceImage controlReferenceImage = + ControlReferenceImage.builder() + .referenceId(2) + .referenceImage( + Image.builder() + .gcsUri("gs://cloud-samples-data/generative-ai/image/person.png") + .build()) + .config( + ControlReferenceConfig.builder().controlType("CONTROL_TYPE_FACE_MESH").build()) + .build(); + + EditImageResponse imageResponse = + client.models.editImage( + modelId, + "a portrait of a woman[1] in the pose of the control image[2]in a watercolor style by" + + " a professional artist, light and low-contrast stokes, bright pastel colors," + + " a warm atmosphere, clean background, grainy paper, bold visible brushstrokes," + + " patchy details", + List.of(subjectReferenceImage, controlReferenceImage), + EditImageConfig.builder() + .editMode("EDIT_MODE_DEFAULT") + .numberOfImages(1) + .safetyFilterLevel("BLOCK_MEDIUM_AND_ABOVE") + .personGeneration("ALLOW_ADULT") + .outputGcsUri(outputGcsUri) + .build()); + + Image generatedImage = + imageResponse + .generatedImages() + .flatMap(generatedImages -> generatedImages.stream().findFirst()) + .flatMap(GeneratedImage::image) + .orElseThrow(() -> new IllegalStateException("No image was generated by the model.")); + + generatedImage.gcsUri().ifPresent(System.out::println); + // Example response: + // gs://your-bucket/your-prefix + + return generatedImage.gcsUri(); + } + } +} +// [END googlegenaisdk_imggen_subj_refer_ctrl_refer_with_txt_imgs] \ No newline at end of file diff --git a/genai/snippets/src/test/java/genai/imagegeneration/ImageGenerationIT.java b/genai/snippets/src/test/java/genai/imagegeneration/ImageGenerationIT.java new file mode 100644 index 00000000000..ee15a2faae9 --- /dev/null +++ b/genai/snippets/src/test/java/genai/imagegeneration/ImageGenerationIT.java @@ -0,0 +1,126 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package genai.imagegeneration; + +import static com.google.common.truth.Truth.assertThat; +import static com.google.common.truth.Truth.assertWithMessage; + +import com.google.api.gax.paging.Page; +import com.google.cloud.storage.Blob; +import com.google.cloud.storage.Storage; +import com.google.cloud.storage.StorageOptions; +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.util.Optional; +import java.util.UUID; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class ImageGenerationIT { + + private static final String IMAGGEN_3_MODEL = "imagen-3.0-capability-001"; + private static final String BUCKET_NAME = "java-docs-samples-testing"; + private static final String PREFIX = "img-generation-" + UUID.randomUUID(); + private static final String OUTPUT_GCS_URI = String.format("gs://%s/%s", BUCKET_NAME, PREFIX); + private ByteArrayOutputStream bout; + private PrintStream out; + + // Check if the required environment variables are set. + public static void requireEnvVar(String envVarName) { + assertWithMessage(String.format("Missing environment variable '%s' ", envVarName)) + .that(System.getenv(envVarName)) + .isNotEmpty(); + } + + @BeforeClass + public static void checkRequirements() { + requireEnvVar("GOOGLE_CLOUD_PROJECT"); + } + + @AfterClass + public static void cleanup() { + Storage storage = StorageOptions.getDefaultInstance().getService(); + Page blobs = storage.list(BUCKET_NAME, Storage.BlobListOption.prefix(PREFIX)); + + for (Blob blob : blobs.iterateAll()) { + storage.delete(blob.getBlobId()); + } + } + + @Before + public void setUp() { + bout = new ByteArrayOutputStream(); + out = new PrintStream(bout); + System.setOut(out); + } + + @After + public void tearDown() { + System.setOut(null); + } + + @Test + public void testImageGenCannyCtrlTypeWithTextAndImage() { + Optional response = + ImageGenCannyCtrlTypeWithTextAndImage.generateImageWithCannyCtrl( + IMAGGEN_3_MODEL, OUTPUT_GCS_URI); + assertThat(response).isPresent(); + assertThat(response.get()).isNotEmpty(); + } + + @Test + public void testImageGenRawReferenceWithTextAndImage() { + Optional response = + ImageGenRawReferenceWithTextAndImage.generateImageWithRawReference( + IMAGGEN_3_MODEL, OUTPUT_GCS_URI); + assertThat(response).isPresent(); + assertThat(response.get()).isNotEmpty(); + } + + @Test + public void testImageGenScribbleCtrlTypeWithTextAndImage() { + Optional response = + ImageGenScribbleCtrlTypeWithTextAndImage.generateImageWithScribbleCtrl( + IMAGGEN_3_MODEL, OUTPUT_GCS_URI); + assertThat(response).isPresent(); + assertThat(response.get()).isNotEmpty(); + } + + @Test + public void testImageGenStyleReferenceWithTextAndImage() { + Optional response = + ImageGenStyleReferenceWithTextAndImage.generateImageWithStyleReference( + IMAGGEN_3_MODEL, OUTPUT_GCS_URI); + assertThat(response).isPresent(); + assertThat(response.get()).isNotEmpty(); + } + + @Test + public void testImageGenSubjectReferenceWithTextAndImage() { + Optional response = + ImageGenSubjectReferenceWithTextAndImage.generateImageWithSubjectAndControlReference( + IMAGGEN_3_MODEL, OUTPUT_GCS_URI); + assertThat(response).isPresent(); + assertThat(response.get()).isNotEmpty(); + } +} \ No newline at end of file From abeeb6b0b685d3749057694d7036ac4b4d137f03 Mon Sep 17 00:00:00 2001 From: Juan Dominguez Date: Thu, 25 Sep 2025 18:10:18 -0300 Subject: [PATCH 2/5] refactor: change bucket prefix in tests --- .../src/test/java/genai/imagegeneration/ImageGenerationIT.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/genai/snippets/src/test/java/genai/imagegeneration/ImageGenerationIT.java b/genai/snippets/src/test/java/genai/imagegeneration/ImageGenerationIT.java index ee15a2faae9..e77e8fe4b3f 100644 --- a/genai/snippets/src/test/java/genai/imagegeneration/ImageGenerationIT.java +++ b/genai/snippets/src/test/java/genai/imagegeneration/ImageGenerationIT.java @@ -40,7 +40,7 @@ public class ImageGenerationIT { private static final String IMAGGEN_3_MODEL = "imagen-3.0-capability-001"; private static final String BUCKET_NAME = "java-docs-samples-testing"; - private static final String PREFIX = "img-generation-" + UUID.randomUUID(); + private static final String PREFIX = "genai-img-generation-" + UUID.randomUUID(); private static final String OUTPUT_GCS_URI = String.format("gs://%s/%s", BUCKET_NAME, PREFIX); private ByteArrayOutputStream bout; private PrintStream out; From 73a8f2be8910ed21080c7d1ea5af30da67926c46 Mon Sep 17 00:00:00 2001 From: Juan Dominguez Date: Thu, 25 Sep 2025 18:40:05 -0300 Subject: [PATCH 3/5] refactor: change output bucket in subject reference sample and change variable name in tests --- .../ImageGenSubjectReferenceWithTextAndImage.java | 3 +-- .../genai/imagegeneration/ImageGenerationIT.java | 12 ++++++------ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/genai/snippets/src/main/java/genai/imagegeneration/ImageGenSubjectReferenceWithTextAndImage.java b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenSubjectReferenceWithTextAndImage.java index 3b58cd14355..bbb5bb251c7 100644 --- a/genai/snippets/src/main/java/genai/imagegeneration/ImageGenSubjectReferenceWithTextAndImage.java +++ b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenSubjectReferenceWithTextAndImage.java @@ -35,8 +35,7 @@ public class ImageGenSubjectReferenceWithTextAndImage { public static void main(String[] args) { // TODO(developer): Replace these variables before running the sample. String modelId = "imagen-3.0-capability-001"; - String outputGcsUri = "gs://example-cloud-bucket-5439474/java-genai-samples-tests"; - // "gs://your-bucket/your-prefix"; + String outputGcsUri = "gs://your-bucket/your-prefix"; generateImageWithSubjectAndControlReference(modelId, outputGcsUri); } diff --git a/genai/snippets/src/test/java/genai/imagegeneration/ImageGenerationIT.java b/genai/snippets/src/test/java/genai/imagegeneration/ImageGenerationIT.java index e77e8fe4b3f..be3b377e8e5 100644 --- a/genai/snippets/src/test/java/genai/imagegeneration/ImageGenerationIT.java +++ b/genai/snippets/src/test/java/genai/imagegeneration/ImageGenerationIT.java @@ -38,7 +38,7 @@ @RunWith(JUnit4.class) public class ImageGenerationIT { - private static final String IMAGGEN_3_MODEL = "imagen-3.0-capability-001"; + private static final String IMAGEN_3_MODEL = "imagen-3.0-capability-001"; private static final String BUCKET_NAME = "java-docs-samples-testing"; private static final String PREFIX = "genai-img-generation-" + UUID.randomUUID(); private static final String OUTPUT_GCS_URI = String.format("gs://%s/%s", BUCKET_NAME, PREFIX); @@ -83,7 +83,7 @@ public void tearDown() { public void testImageGenCannyCtrlTypeWithTextAndImage() { Optional response = ImageGenCannyCtrlTypeWithTextAndImage.generateImageWithCannyCtrl( - IMAGGEN_3_MODEL, OUTPUT_GCS_URI); + IMAGEN_3_MODEL, OUTPUT_GCS_URI); assertThat(response).isPresent(); assertThat(response.get()).isNotEmpty(); } @@ -92,7 +92,7 @@ public void testImageGenCannyCtrlTypeWithTextAndImage() { public void testImageGenRawReferenceWithTextAndImage() { Optional response = ImageGenRawReferenceWithTextAndImage.generateImageWithRawReference( - IMAGGEN_3_MODEL, OUTPUT_GCS_URI); + IMAGEN_3_MODEL, OUTPUT_GCS_URI); assertThat(response).isPresent(); assertThat(response.get()).isNotEmpty(); } @@ -101,7 +101,7 @@ public void testImageGenRawReferenceWithTextAndImage() { public void testImageGenScribbleCtrlTypeWithTextAndImage() { Optional response = ImageGenScribbleCtrlTypeWithTextAndImage.generateImageWithScribbleCtrl( - IMAGGEN_3_MODEL, OUTPUT_GCS_URI); + IMAGEN_3_MODEL, OUTPUT_GCS_URI); assertThat(response).isPresent(); assertThat(response.get()).isNotEmpty(); } @@ -110,7 +110,7 @@ public void testImageGenScribbleCtrlTypeWithTextAndImage() { public void testImageGenStyleReferenceWithTextAndImage() { Optional response = ImageGenStyleReferenceWithTextAndImage.generateImageWithStyleReference( - IMAGGEN_3_MODEL, OUTPUT_GCS_URI); + IMAGEN_3_MODEL, OUTPUT_GCS_URI); assertThat(response).isPresent(); assertThat(response.get()).isNotEmpty(); } @@ -119,7 +119,7 @@ public void testImageGenStyleReferenceWithTextAndImage() { public void testImageGenSubjectReferenceWithTextAndImage() { Optional response = ImageGenSubjectReferenceWithTextAndImage.generateImageWithSubjectAndControlReference( - IMAGGEN_3_MODEL, OUTPUT_GCS_URI); + IMAGEN_3_MODEL, OUTPUT_GCS_URI); assertThat(response).isPresent(); assertThat(response.get()).isNotEmpty(); } From 854f8472db310f54aa50d1bc6ca8ed969493ba95 Mon Sep 17 00:00:00 2001 From: Juan Dominguez Date: Wed, 1 Oct 2025 18:09:32 -0300 Subject: [PATCH 4/5] refactor: apply some suggestions to the samples --- .../ImageGenCannyCtrlTypeWithTextAndImage.java | 10 ++++++---- .../ImageGenRawReferenceWithTextAndImage.java | 10 +++++----- .../ImageGenScribbleCtrlTypeWithTextAndImage.java | 11 ++++++----- .../ImageGenStyleReferenceWithTextAndImage.java | 10 +++++----- .../ImageGenSubjectReferenceWithTextAndImage.java | 11 ++++++----- .../java/genai/imagegeneration/ImageGenerationIT.java | 10 +++++----- 6 files changed, 33 insertions(+), 29 deletions(-) diff --git a/genai/snippets/src/main/java/genai/imagegeneration/ImageGenCannyCtrlTypeWithTextAndImage.java b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenCannyCtrlTypeWithTextAndImage.java index 03ff2dc7144..cef99bc5bc1 100644 --- a/genai/snippets/src/main/java/genai/imagegeneration/ImageGenCannyCtrlTypeWithTextAndImage.java +++ b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenCannyCtrlTypeWithTextAndImage.java @@ -34,11 +34,11 @@ public static void main(String[] args) { // TODO(developer): Replace these variables before running the sample. String modelId = "imagen-3.0-capability-001"; String outputGcsUri = "gs://your-bucket/your-prefix"; - generateImageWithCannyCtrl(modelId, outputGcsUri); + cannyEdgeCustomization(modelId, outputGcsUri); } - // Generates an image with a canny control reference image and text input - public static Optional generateImageWithCannyCtrl(String modelId, String outputGcsUri) { + // Generates an image based on a canny edge image and text prompt + public static Optional cannyEdgeCustomization(String modelId, String outputGcsUri) { // Client Initialization. Once created, it can be reused for multiple requests. try (Client client = Client.builder().location("global").vertexAI(true).build()) { // Create a reference image out of an existing canny edge image signal @@ -53,6 +53,8 @@ public static Optional generateImageWithCannyCtrl(String modelId, String .config(ControlReferenceConfig.builder().controlType("CONTROL_TYPE_CANNY").build()) .build(); + // The `[1]` in the prompt refers to the `referenceId` assigned to + // the control reference image. EditImageResponse imageResponse = client.models.editImage( modelId, @@ -81,4 +83,4 @@ public static Optional generateImageWithCannyCtrl(String modelId, String } } } -// [END googlegenaisdk_imggen_canny_ctrl_type_with_txt_img] \ No newline at end of file +// [END googlegenaisdk_imggen_canny_ctrl_type_with_txt_img] diff --git a/genai/snippets/src/main/java/genai/imagegeneration/ImageGenRawReferenceWithTextAndImage.java b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenRawReferenceWithTextAndImage.java index 4ae81481b57..12aea8a9470 100644 --- a/genai/snippets/src/main/java/genai/imagegeneration/ImageGenRawReferenceWithTextAndImage.java +++ b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenRawReferenceWithTextAndImage.java @@ -33,12 +33,11 @@ public static void main(String[] args) { // TODO(developer): Replace these variables before running the sample. String modelId = "imagen-3.0-capability-001"; String outputGcsUri = "gs://your-bucket/your-prefix"; - generateImageWithRawReference(modelId, outputGcsUri); + styleTransferCustomization(modelId, outputGcsUri); } - // Generates an image with a raw reference image and text input - public static Optional generateImageWithRawReference( - String modelId, String outputGcsUri) { + // Generates an image in a new style based on a raw reference image and text prompt + public static Optional styleTransferCustomization(String modelId, String outputGcsUri) { // Client Initialization. Once created, it can be reused for multiple requests. try (Client client = Client.builder().location("global").vertexAI(true).build()) { // Create a raw reference image of teacup stored in Google Cloud Storage @@ -52,6 +51,7 @@ public static Optional generateImageWithRawReference( .build()) .build(); + // The `[1]` in the prompt refers to the `referenceId` assigned to the raw reference image. EditImageResponse imageResponse = client.models.editImage( modelId, @@ -81,4 +81,4 @@ public static Optional generateImageWithRawReference( } } } -// [END googlegenaisdk_imggen_raw_reference_with_txt_img] \ No newline at end of file +// [END googlegenaisdk_imggen_raw_reference_with_txt_img] diff --git a/genai/snippets/src/main/java/genai/imagegeneration/ImageGenScribbleCtrlTypeWithTextAndImage.java b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenScribbleCtrlTypeWithTextAndImage.java index d3d3f08b04d..fbe351d11e5 100644 --- a/genai/snippets/src/main/java/genai/imagegeneration/ImageGenScribbleCtrlTypeWithTextAndImage.java +++ b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenScribbleCtrlTypeWithTextAndImage.java @@ -34,12 +34,11 @@ public static void main(String[] args) { // TODO(developer): Replace these variables before running the sample. String modelId = "imagen-3.0-capability-001"; String outputGcsUri = "gs://your-bucket/your-prefix"; - generateImageWithScribbleCtrl(modelId, outputGcsUri); + scribbleCustomization(modelId, outputGcsUri); } - // Generates an image with a scribble control reference image and text input - public static Optional generateImageWithScribbleCtrl( - String modelId, String outputGcsUri) { + // Generates an image based on a scribble image and text prompt + public static Optional scribbleCustomization(String modelId, String outputGcsUri) { // Client Initialization. Once created, it can be reused for multiple requests. try (Client client = Client.builder().location("global").vertexAI(true).build()) { // Create a reference image out of an existing scribble image signal @@ -55,6 +54,8 @@ public static Optional generateImageWithScribbleCtrl( .config(ControlReferenceConfig.builder().controlType("CONTROL_TYPE_SCRIBBLE").build()) .build(); + // The `[1]` in the prompt refers to the `referenceId` assigned to the control reference + // image. EditImageResponse imageResponse = client.models.editImage( modelId, @@ -83,4 +84,4 @@ public static Optional generateImageWithScribbleCtrl( } } } -// [END googlegenaisdk_imggen_scribble_ctrl_type_with_txt_img] \ No newline at end of file +// [END googlegenaisdk_imggen_scribble_ctrl_type_with_txt_img] diff --git a/genai/snippets/src/main/java/genai/imagegeneration/ImageGenStyleReferenceWithTextAndImage.java b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenStyleReferenceWithTextAndImage.java index 2425da51efc..f264dad741e 100644 --- a/genai/snippets/src/main/java/genai/imagegeneration/ImageGenStyleReferenceWithTextAndImage.java +++ b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenStyleReferenceWithTextAndImage.java @@ -34,12 +34,11 @@ public static void main(String[] args) { // TODO(developer): Replace these variables before running the sample. String modelId = "imagen-3.0-capability-001"; String outputGcsUri = "gs://your-bucket/your-prefix"; - generateImageWithStyleReference(modelId, outputGcsUri); + styleCustomization(modelId, outputGcsUri); } - // Generates an image with a style reference image and text input - public static Optional generateImageWithStyleReference( - String modelId, String outputGcsUri) { + // Transfers the style of a reference image to a new image using a text prompt + public static Optional styleCustomization(String modelId, String outputGcsUri) { // Client Initialization. Once created, it can be reused for multiple requests. try (Client client = Client.builder().location("global").vertexAI(true).build()) { // Create a style reference image of a neon sign stored in Google Cloud Storage @@ -54,6 +53,7 @@ public static Optional generateImageWithStyleReference( .config(StyleReferenceConfig.builder().styleDescription("neon sign").build()) .build(); + // The `[1]` in the prompt refers to the `referenceId` assigned to the style reference image. EditImageResponse imageResponse = client.models.editImage( modelId, @@ -82,4 +82,4 @@ public static Optional generateImageWithStyleReference( } } } -// [END googlegenaisdk_imggen_style_reference_with_txt_img] \ No newline at end of file +// [END googlegenaisdk_imggen_style_reference_with_txt_img] diff --git a/genai/snippets/src/main/java/genai/imagegeneration/ImageGenSubjectReferenceWithTextAndImage.java b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenSubjectReferenceWithTextAndImage.java index bbb5bb251c7..31b8f5c84a1 100644 --- a/genai/snippets/src/main/java/genai/imagegeneration/ImageGenSubjectReferenceWithTextAndImage.java +++ b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenSubjectReferenceWithTextAndImage.java @@ -36,12 +36,11 @@ public static void main(String[] args) { // TODO(developer): Replace these variables before running the sample. String modelId = "imagen-3.0-capability-001"; String outputGcsUri = "gs://your-bucket/your-prefix"; - generateImageWithSubjectAndControlReference(modelId, outputGcsUri); + subjectCustomization(modelId, outputGcsUri); } - // Generates an image with a subject reference image, control reference image and text input - public static Optional generateImageWithSubjectAndControlReference( - String modelId, String outputGcsUri) { + // Customizes a subject reference image with a control reference image and text prompt + public static Optional subjectCustomization(String modelId, String outputGcsUri) { // Client Initialization. Once created, it can be reused for multiple requests. try (Client client = Client.builder().location("global").vertexAI(true).build()) { // Create subject and control reference images of a photograph stored in Google Cloud Storage @@ -71,6 +70,8 @@ public static Optional generateImageWithSubjectAndControlReference( ControlReferenceConfig.builder().controlType("CONTROL_TYPE_FACE_MESH").build()) .build(); + // The `[1]` and `[2]` in the prompt refer to the `referenceId` assigned to + // the subject reference and control reference images. EditImageResponse imageResponse = client.models.editImage( modelId, @@ -102,4 +103,4 @@ public static Optional generateImageWithSubjectAndControlReference( } } } -// [END googlegenaisdk_imggen_subj_refer_ctrl_refer_with_txt_imgs] \ No newline at end of file +// [END googlegenaisdk_imggen_subj_refer_ctrl_refer_with_txt_imgs] diff --git a/genai/snippets/src/test/java/genai/imagegeneration/ImageGenerationIT.java b/genai/snippets/src/test/java/genai/imagegeneration/ImageGenerationIT.java index d91ac8e7ec1..eb6aa392ee7 100644 --- a/genai/snippets/src/test/java/genai/imagegeneration/ImageGenerationIT.java +++ b/genai/snippets/src/test/java/genai/imagegeneration/ImageGenerationIT.java @@ -87,7 +87,7 @@ public void tearDown() { @Test public void testImageGenCannyCtrlTypeWithTextAndImage() { Optional response = - ImageGenCannyCtrlTypeWithTextAndImage.generateImageWithCannyCtrl( + ImageGenCannyCtrlTypeWithTextAndImage.cannyEdgeCustomization( IMAGEN_3_MODEL, OUTPUT_GCS_URI); assertThat(response).isPresent(); assertThat(response.get()).isNotEmpty(); @@ -96,7 +96,7 @@ public void testImageGenCannyCtrlTypeWithTextAndImage() { @Test public void testImageGenRawReferenceWithTextAndImage() { Optional response = - ImageGenRawReferenceWithTextAndImage.generateImageWithRawReference( + ImageGenRawReferenceWithTextAndImage.styleTransferCustomization( IMAGEN_3_MODEL, OUTPUT_GCS_URI); assertThat(response).isPresent(); assertThat(response.get()).isNotEmpty(); @@ -105,7 +105,7 @@ public void testImageGenRawReferenceWithTextAndImage() { @Test public void testImageGenScribbleCtrlTypeWithTextAndImage() { Optional response = - ImageGenScribbleCtrlTypeWithTextAndImage.generateImageWithScribbleCtrl( + ImageGenScribbleCtrlTypeWithTextAndImage.scribbleCustomization( IMAGEN_3_MODEL, OUTPUT_GCS_URI); assertThat(response).isPresent(); assertThat(response.get()).isNotEmpty(); @@ -114,7 +114,7 @@ public void testImageGenScribbleCtrlTypeWithTextAndImage() { @Test public void testImageGenStyleReferenceWithTextAndImage() { Optional response = - ImageGenStyleReferenceWithTextAndImage.generateImageWithStyleReference( + ImageGenStyleReferenceWithTextAndImage.styleCustomization( IMAGEN_3_MODEL, OUTPUT_GCS_URI); assertThat(response).isPresent(); assertThat(response.get()).isNotEmpty(); @@ -123,7 +123,7 @@ public void testImageGenStyleReferenceWithTextAndImage() { @Test public void testImageGenSubjectReferenceWithTextAndImage() { Optional response = - ImageGenSubjectReferenceWithTextAndImage.generateImageWithSubjectAndControlReference( + ImageGenSubjectReferenceWithTextAndImage.subjectCustomization( IMAGEN_3_MODEL, OUTPUT_GCS_URI); assertThat(response).isPresent(); assertThat(response.get()).isNotEmpty(); From af3dd395b0ff8d4a705b0d4e203ceb1ff5f2371b Mon Sep 17 00:00:00 2001 From: Juan Dominguez Date: Thu, 2 Oct 2025 23:57:19 -0300 Subject: [PATCH 5/5] add a more extensive header to each sample --- .../ImageGenCannyCtrlTypeWithTextAndImage.java | 14 ++++++++++++-- .../ImageGenRawReferenceWithTextAndImage.java | 14 ++++++++++++-- ...mageGenScribbleCtrlTypeWithTextAndImage.java | 17 ++++++++++++++--- .../ImageGenStyleReferenceWithTextAndImage.java | 13 ++++++++++++- ...mageGenSubjectReferenceWithTextAndImage.java | 14 +++++++++++++- 5 files changed, 63 insertions(+), 9 deletions(-) diff --git a/genai/snippets/src/main/java/genai/imagegeneration/ImageGenCannyCtrlTypeWithTextAndImage.java b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenCannyCtrlTypeWithTextAndImage.java index cef99bc5bc1..a47128809f5 100644 --- a/genai/snippets/src/main/java/genai/imagegeneration/ImageGenCannyCtrlTypeWithTextAndImage.java +++ b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenCannyCtrlTypeWithTextAndImage.java @@ -37,7 +37,18 @@ public static void main(String[] args) { cannyEdgeCustomization(modelId, outputGcsUri); } - // Generates an image based on a canny edge image and text prompt + /** + * Generates an image with a Canny edge image and text prompt. + * + *

This function demonstrates controlled customization. It uses a "Canny edge" image, which is + * a black-and-white line drawing that outlines the shapes of objects. The model is instructed to + * follow this structural outline to generate an image based the text prompt. + * + * @param modelId The GenAI model to use for generating the image. + * @param outputGcsUri A GCS URI where the generated image will be saved. Example: + * "gs://your-bucket/your-prefix" + * @return An Optional containing the GCS URI of the generated image if successful. + */ public static Optional cannyEdgeCustomization(String modelId, String outputGcsUri) { // Client Initialization. Once created, it can be reused for multiple requests. try (Client client = Client.builder().location("global").vertexAI(true).build()) { @@ -78,7 +89,6 @@ public static Optional cannyEdgeCustomization(String modelId, String out generatedImage.gcsUri().ifPresent(System.out::println); // Example response: // gs://your-bucket/your-prefix - return generatedImage.gcsUri(); } } diff --git a/genai/snippets/src/main/java/genai/imagegeneration/ImageGenRawReferenceWithTextAndImage.java b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenRawReferenceWithTextAndImage.java index 12aea8a9470..18b5c648f1d 100644 --- a/genai/snippets/src/main/java/genai/imagegeneration/ImageGenRawReferenceWithTextAndImage.java +++ b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenRawReferenceWithTextAndImage.java @@ -36,7 +36,18 @@ public static void main(String[] args) { styleTransferCustomization(modelId, outputGcsUri); } - // Generates an image in a new style based on a raw reference image and text prompt + /** + * Generates an image in a new style based on a raw reference image and text prompt. + * + *

This function demonstrates style transfer customization. It uses a raw reference image of a + * "teacup". The model is instructed to recreate the reference image in a new style based on the + * text prompt. + * + * @param modelId The GenAI model to use for generating the image. + * @param outputGcsUri A GCS URI where the generated image will be saved. Example: + * "gs://your-bucket/your-prefix" + * @return An Optional containing the GCS URI of the generated image if successful. + */ public static Optional styleTransferCustomization(String modelId, String outputGcsUri) { // Client Initialization. Once created, it can be reused for multiple requests. try (Client client = Client.builder().location("global").vertexAI(true).build()) { @@ -76,7 +87,6 @@ public static Optional styleTransferCustomization(String modelId, String generatedImage.gcsUri().ifPresent(System.out::println); // Example response: // gs://your-bucket/your-prefix - return generatedImage.gcsUri(); } } diff --git a/genai/snippets/src/main/java/genai/imagegeneration/ImageGenScribbleCtrlTypeWithTextAndImage.java b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenScribbleCtrlTypeWithTextAndImage.java index fbe351d11e5..09dc64259e2 100644 --- a/genai/snippets/src/main/java/genai/imagegeneration/ImageGenScribbleCtrlTypeWithTextAndImage.java +++ b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenScribbleCtrlTypeWithTextAndImage.java @@ -37,7 +37,18 @@ public static void main(String[] args) { scribbleCustomization(modelId, outputGcsUri); } - // Generates an image based on a scribble image and text prompt + /** + * Generates an image with a Scribble image and text prompt. + * + *

This function demonstrates controlled customization. It uses a "Scribble" image, which is a + * rough drawing with a black background and white lines. The model is instructed to follow this + * structural outline to generate an image based the text prompt. + * + * @param modelId The GenAI model to use for generating the image. + * @param outputGcsUri A GCS URI where the generated image will be saved. Example: + * "gs://your-bucket/your-prefix" + * @return An Optional containing the GCS URI of the generated image if successful. + */ public static Optional scribbleCustomization(String modelId, String outputGcsUri) { // Client Initialization. Once created, it can be reused for multiple requests. try (Client client = Client.builder().location("global").vertexAI(true).build()) { @@ -54,8 +65,8 @@ public static Optional scribbleCustomization(String modelId, String outp .config(ControlReferenceConfig.builder().controlType("CONTROL_TYPE_SCRIBBLE").build()) .build(); - // The `[1]` in the prompt refers to the `referenceId` assigned to the control reference - // image. + // The `[1]` in the prompt refers to the `referenceId` assigned to the + // control reference image. EditImageResponse imageResponse = client.models.editImage( modelId, diff --git a/genai/snippets/src/main/java/genai/imagegeneration/ImageGenStyleReferenceWithTextAndImage.java b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenStyleReferenceWithTextAndImage.java index f264dad741e..887b76b99a3 100644 --- a/genai/snippets/src/main/java/genai/imagegeneration/ImageGenStyleReferenceWithTextAndImage.java +++ b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenStyleReferenceWithTextAndImage.java @@ -37,7 +37,18 @@ public static void main(String[] args) { styleCustomization(modelId, outputGcsUri); } - // Transfers the style of a reference image to a new image using a text prompt + /** + * Generates an image with a style reference image and text prompt + * + *

This function demonstrates style customization. It uses a style reference image of a "neon + * sign". The model is instructed to transfer the style of the reference image to a new image + * based on the text prompt. + * + * @param modelId The GenAI model to use for generating the image. + * @param outputGcsUri A GCS URI where the generated image will be saved. Example: + * "gs://your-bucket/your-prefix" + * @return An Optional containing the GCS URI of the generated image if successful. + */ public static Optional styleCustomization(String modelId, String outputGcsUri) { // Client Initialization. Once created, it can be reused for multiple requests. try (Client client = Client.builder().location("global").vertexAI(true).build()) { diff --git a/genai/snippets/src/main/java/genai/imagegeneration/ImageGenSubjectReferenceWithTextAndImage.java b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenSubjectReferenceWithTextAndImage.java index 31b8f5c84a1..511cd64fb2a 100644 --- a/genai/snippets/src/main/java/genai/imagegeneration/ImageGenSubjectReferenceWithTextAndImage.java +++ b/genai/snippets/src/main/java/genai/imagegeneration/ImageGenSubjectReferenceWithTextAndImage.java @@ -39,7 +39,19 @@ public static void main(String[] args) { subjectCustomization(modelId, outputGcsUri); } - // Customizes a subject reference image with a control reference image and text prompt + /** + * Demonstrates subject customization. + * + *

This function customizes a subject image using a subject reference image of type person, + * control reference image of type face mesh and text prompt. The model generates a new image of a + * person by adapting the subject reference image based on the control reference image and the + * given prompt. + * + * @param modelId The GenAI model to use for generating the image. + * @param outputGcsUri A GCS URI where the generated image will be saved. Example: + * "gs://your-bucket/your-prefix" + * @return An Optional containing the GCS URI of the generated image if successful. + */ public static Optional subjectCustomization(String modelId, String outputGcsUri) { // Client Initialization. Once created, it can be reused for multiple requests. try (Client client = Client.builder().location("global").vertexAI(true).build()) {