Skip to content

Imagen Editing #7075

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 24 commits into from
Jul 23, 2025
Merged

Imagen Editing #7075

merged 24 commits into from
Jul 23, 2025

Conversation

davidmotson
Copy link
Collaborator

@davidmotson davidmotson commented Jun 24, 2025

Adds Imagen Editing controls which allows for inpainting, outpainting, style transfer, subject references, and controlnet features.

Copy link
Contributor

github-actions bot commented Jun 24, 2025

📝 PRs merging into main branch

Our main branch should always be in a releasable state. If you are working on a larger change, or if you don't want this change to see the light of the day just yet, consider using a feature branch first, and only merge into the main branch when the code complete and ready to be released.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Summary of Changes

Hello @davidmotson, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces image editing capabilities to the Firebase AI Imagen model, allowing developers to perform inpainting and outpainting operations. It includes new configuration options and request construction logic to support these features, as well as a utility function for converting Bitmap objects to ImagenInlineImage.

Highlights

  • Imagen Editing Functionality: Introduces the ability to edit images using inpainting and outpainting techniques via the editImage function in ImagenModel.kt.
  • New Configuration Options: Adds ImagenEditingConfig to configure image editing parameters such as edit mode, mask, and mask dilation.
  • Request Construction: Modifies the request construction logic to handle both image generation and editing requests, including the use of reference images and masks.
  • Bitmap Conversion: Adds a utility function to convert Bitmap objects to ImagenInlineImage for easier integration with existing Android code.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in issue comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist is currently in preview and may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments to provide feedback.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

The code changes introduce new image editing options, including inpainting and outpainting, by adding new classes and modifying existing ones to support these features. The changes include new data classes for edit modes and configurations, as well as modifications to the request construction logic to handle image editing requests.

@google-oss-bot
Copy link
Contributor

google-oss-bot commented Jun 24, 2025

Coverage Report 1

Affected Products

No changes between base commit (ae14842) and merge commit (e75c9e5).

Test Logs

  1. https://storage.googleapis.com/firebase-sdk-metric-reports/4kwmm5Dxgm.html

Copy link
Contributor

github-actions bot commented Jun 24, 2025

Test Results

 24 files   -  1 034   24 suites   - 1 034   44s ⏱️ - 35m 15s
102 tests  -  5 883  102 ✅  -  5 861  0 💤  - 22  0 ❌ ±0 
204 runs   - 11 829  204 ✅  - 11 785  0 💤  - 44  0 ❌ ±0 

Results for commit e710498. ± Comparison against base commit e4955d9.

This pull request removes 5883 tests.
com.google.android.datatransport.cct.CctBackendFactoryTest ‑ create_returnCCTBackend_WhenBackendNameIsCCT
com.google.android.datatransport.cct.CctDestinationTest ‑ cctDestination_shouldOnlySupportProtoAndJson
com.google.android.datatransport.cct.CctDestinationTest ‑ cctDestination_shouldSupportProtoAndJson
com.google.android.datatransport.cct.CctTransportBackendTest ‑ decorate_whenOffline_shouldProperlyPopulateNetworkInfo
com.google.android.datatransport.cct.CctTransportBackendTest ‑ decorate_whenOnline_shouldProperlyPopulateNetworkInfo
com.google.android.datatransport.cct.CctTransportBackendTest ‑ schedule_shouldAddCookieOnPseudonymousIds
com.google.android.datatransport.cct.CctTransportBackendTest ‑ schedule_shouldDropCookieOnMixedPseudonymousIds
com.google.android.datatransport.cct.CctTransportBackendTest ‑ send_CompressedResponseIsUncompressed
com.google.android.datatransport.cct.CctTransportBackendTest ‑ send_whenBackendRedirectsMoreThan5Times_shouldOnlyRedirect4Times
com.google.android.datatransport.cct.CctTransportBackendTest ‑ send_whenBackendRedirects_shouldCorrectlyFollowTheRedirectViaPost
…

♻️ This comment has been updated with latest results.

@google-oss-bot
Copy link
Contributor

The public api surface has changed for the subproject firebase-ai:
error: Added method com.google.firebase.ai.ImagenModel.editImage(String,com.google.firebase.ai.type.ImagenEditingConfig,kotlin.coroutines.Continuation<? super com.google.firebase.ai.type.ImagenGenerationResponse<com.google.firebase.ai.type.ImagenInlineImage>>) [AddedMethod]
error: Added class com.google.firebase.ai.type.ImagenEditMode [AddedClass]
error: Added class com.google.firebase.ai.type.ImagenEditingConfig [AddedClass]
error: Added class com.google.firebase.ai.type.ImagenEditingConfigKt [AddedClass]
error: Added class com.google.firebase.ai.type.ImagenInlineImageKt [AddedClass]

Please update the api.txt files for the subprojects being affected by this change by running ./gradlew ${subproject}:generateApiTxtFile. Also perform a major/minor bump accordingly.

@google-oss-bot
Copy link
Contributor

google-oss-bot commented Jun 24, 2025

Size Report 1

Affected Products

  • firebase-ai

    TypeBase (ae14842)Merge (e75c9e5)Diff
    aar830 kB914 kB+83.6 kB (+10.1%)
    apk (aggressive)1.58 MB1.61 MB+35.2 kB (+2.2%)
    apk (release)10.7 MB10.7 MB+68.2 kB (+0.6%)

Test Logs

  1. https://storage.googleapis.com/firebase-sdk-metric-reports/IBUI90ygkp.html

@google-oss-bot
Copy link
Contributor

The public api surface has changed for the subproject firebase-ai:
error: Added method com.google.firebase.ai.ImagenModel.editImage(String,com.google.firebase.ai.type.ImagenEditingConfig,kotlin.coroutines.Continuation<? super com.google.firebase.ai.type.ImagenGenerationResponse<com.google.firebase.ai.type.ImagenInlineImage>>) [AddedMethod]
error: Added class com.google.firebase.ai.type.ImagenEditMode [AddedClass]
error: Added class com.google.firebase.ai.type.ImagenEditingConfig [AddedClass]
error: Added class com.google.firebase.ai.type.ImagenEditingConfigKt [AddedClass]
error: Added class com.google.firebase.ai.type.ImagenInlineImageKt [AddedClass]

Please update the api.txt files for the subprojects being affected by this change by running ./gradlew ${subproject}:generateApiTxtFile. Also perform a major/minor bump accordingly.

@davidmotson davidmotson changed the title Add imagen editing options like inpainting and outpainting Imagen Editing Jul 17, 2025
@google-oss-bot
Copy link
Contributor

The public api surface has changed for the subproject firebase-ai:
error: Added field com.google.firebase.ai.type.ImagenControlType.CANNY [AddedField]
error: Added field com.google.firebase.ai.type.ImagenControlType.COLOR_SUPERPIXEL [AddedField]
error: Added field com.google.firebase.ai.type.ImagenControlType.FACE_MESH [AddedField]
error: Added field com.google.firebase.ai.type.ImagenControlType.SCRIBBLE [AddedField]
error: Removed method com.google.firebase.ai.type.ImagenControlType.Companion.getCANNY() [RemovedMethod]
error: Removed method com.google.firebase.ai.type.ImagenControlType.Companion.getCOLOR_SUPERPIXEL() [RemovedMethod]
error: Removed method com.google.firebase.ai.type.ImagenControlType.Companion.getFACE_MESH() [RemovedMethod]
error: Removed method com.google.firebase.ai.type.ImagenControlType.Companion.getSCRIBBLE() [RemovedMethod]
error: Added field com.google.firebase.ai.type.ImagenEditMode.INPAINT_INSERTION [AddedField]
error: Added field com.google.firebase.ai.type.ImagenEditMode.INPAINT_REMOVAL [AddedField]
error: Added field com.google.firebase.ai.type.ImagenEditMode.OUTPAINT [AddedField]
error: Removed method com.google.firebase.ai.type.ImagenEditMode.Companion.getINPAINT_INSERTION() [RemovedMethod]
error: Removed method com.google.firebase.ai.type.ImagenEditMode.Companion.getINPAINT_REMOVAL() [RemovedMethod]
error: Removed method com.google.firebase.ai.type.ImagenEditMode.Companion.getOUTPAINT() [RemovedMethod]
error: Added method com.google.firebase.ai.type.ImagenImagePlacement.fromCoordinate(int,int) [AddedMethod]
error: Added field com.google.firebase.ai.type.ImagenImagePlacement.BOTTOM_CENTER [AddedField]
error: Added field com.google.firebase.ai.type.ImagenImagePlacement.BOTTOM_LEFT [AddedField]
error: Added field com.google.firebase.ai.type.ImagenImagePlacement.BOTTOM_RIGHT [AddedField]
error: Added field com.google.firebase.ai.type.ImagenImagePlacement.CENTER [AddedField]
error: Added field com.google.firebase.ai.type.ImagenImagePlacement.LEFT_CENTER [AddedField]
error: Added field com.google.firebase.ai.type.ImagenImagePlacement.RIGHT_CENTER [AddedField]
error: Added field com.google.firebase.ai.type.ImagenImagePlacement.TOP_CENTER [AddedField]
error: Added field com.google.firebase.ai.type.ImagenImagePlacement.TOP_LEFT [AddedField]
error: Added field com.google.firebase.ai.type.ImagenImagePlacement.TOP_RIGHT [AddedField]
error: Removed method com.google.firebase.ai.type.ImagenImagePlacement.Companion.getBOTTOM_CENTER() [RemovedMethod]
error: Removed method com.google.firebase.ai.type.ImagenImagePlacement.Companion.getBOTTOM_LEFT() [RemovedMethod]
error: Removed method com.google.firebase.ai.type.ImagenImagePlacement.Companion.getBOTTOM_RIGHT() [RemovedMethod]
error: Removed method com.google.firebase.ai.type.ImagenImagePlacement.Companion.getCENTER() [RemovedMethod]
error: Removed method com.google.firebase.ai.type.ImagenImagePlacement.Companion.getLEFT_CENTER() [RemovedMethod]
error: Removed method com.google.firebase.ai.type.ImagenImagePlacement.Companion.getRIGHT_CENTER() [RemovedMethod]
error: Removed method com.google.firebase.ai.type.ImagenImagePlacement.Companion.getTOP_CENTER() [RemovedMethod]
error: Removed method com.google.firebase.ai.type.ImagenImagePlacement.Companion.getTOP_LEFT() [RemovedMethod]
error: Removed method com.google.firebase.ai.type.ImagenImagePlacement.Companion.getTOP_RIGHT() [RemovedMethod]
error: Added method com.google.firebase.ai.type.ImagenMaskReference.generateMaskAndPadForOutpainting(com.google.firebase.ai.type.ImagenInlineImage,com.google.firebase.ai.type.Dimensions) [AddedMethod]
error: Added method com.google.firebase.ai.type.ImagenMaskReference.generateMaskAndPadForOutpainting(com.google.firebase.ai.type.ImagenInlineImage,com.google.firebase.ai.type.Dimensions,com.google.firebase.ai.type.ImagenImagePlacement) [AddedMethod]
error: Added method com.google.firebase.ai.type.ImagenMaskReference.Companion.generateMaskAndPadForOutpainting(com.google.firebase.ai.type.ImagenInlineImage,com.google.firebase.ai.type.Dimensions) [AddedMethod]
error: Added field com.google.firebase.ai.type.ImagenSubjectReferenceType.ANIMAL [AddedField]
error: Added field com.google.firebase.ai.type.ImagenSubjectReferenceType.PERSON [AddedField]
error: Added field com.google.firebase.ai.type.ImagenSubjectReferenceType.PRODUCT [AddedField]
error: Removed method com.google.firebase.ai.type.ImagenSubjectReferenceType.Companion.getANIMAL() [RemovedMethod]
error: Removed method com.google.firebase.ai.type.ImagenSubjectReferenceType.Companion.getPERSON() [RemovedMethod]
error: Removed method com.google.firebase.ai.type.ImagenSubjectReferenceType.Companion.getPRODUCT() [RemovedMethod]

Please update the api.txt files for the subprojects being affected by this change by running ./gradlew ${subproject}:generateApiTxtFile. Also perform a major/minor bump accordingly.

@davidmotson davidmotson merged commit bcc00a5 into main Jul 23, 2025
31 of 32 checks passed
@davidmotson davidmotson deleted the davidmotson.imagen_editing branch July 23, 2025 17:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants