Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions firebase-ai/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# Unreleased
* [changed] Added better description for requests which fail due to the Gemini API not being
configured.
* [changed] Added a `dilation` parameter to `ImagenMaskReference.generateMaskAndPadForOutpainting`
(#7260)

# 17.1.0
=======
Expand Down
2 changes: 2 additions & 0 deletions firebase-ai/api.txt
Original file line number Diff line number Diff line change
Expand Up @@ -698,12 +698,14 @@ package com.google.firebase.ai.type {
@com.google.firebase.ai.type.PublicPreviewAPI public abstract class ImagenMaskReference extends com.google.firebase.ai.type.ImagenReferenceImage {
method public static final java.util.List<com.google.firebase.ai.type.ImagenReferenceImage> generateMaskAndPadForOutpainting(com.google.firebase.ai.type.ImagenInlineImage image, com.google.firebase.ai.type.Dimensions newDimensions);
method public static final java.util.List<com.google.firebase.ai.type.ImagenReferenceImage> generateMaskAndPadForOutpainting(com.google.firebase.ai.type.ImagenInlineImage image, com.google.firebase.ai.type.Dimensions newDimensions, com.google.firebase.ai.type.ImagenImagePlacement newPosition = com.google.firebase.ai.type.ImagenImagePlacement.CENTER);
method public static final java.util.List<com.google.firebase.ai.type.ImagenReferenceImage> generateMaskAndPadForOutpainting(com.google.firebase.ai.type.ImagenInlineImage image, com.google.firebase.ai.type.Dimensions newDimensions, com.google.firebase.ai.type.ImagenImagePlacement newPosition = com.google.firebase.ai.type.ImagenImagePlacement.CENTER, double dilation = 0.01);
field public static final com.google.firebase.ai.type.ImagenMaskReference.Companion Companion;
}

public static final class ImagenMaskReference.Companion {
method public java.util.List<com.google.firebase.ai.type.ImagenReferenceImage> generateMaskAndPadForOutpainting(com.google.firebase.ai.type.ImagenInlineImage image, com.google.firebase.ai.type.Dimensions newDimensions);
method public java.util.List<com.google.firebase.ai.type.ImagenReferenceImage> generateMaskAndPadForOutpainting(com.google.firebase.ai.type.ImagenInlineImage image, com.google.firebase.ai.type.Dimensions newDimensions, com.google.firebase.ai.type.ImagenImagePlacement newPosition = com.google.firebase.ai.type.ImagenImagePlacement.CENTER);
method public java.util.List<com.google.firebase.ai.type.ImagenReferenceImage> generateMaskAndPadForOutpainting(com.google.firebase.ai.type.ImagenInlineImage image, com.google.firebase.ai.type.Dimensions newDimensions, com.google.firebase.ai.type.ImagenImagePlacement newPosition = com.google.firebase.ai.type.ImagenImagePlacement.CENTER, double dilation = 0.01);
}

@com.google.firebase.ai.type.PublicPreviewAPI public final class ImagenPersonFilterLevel {
Expand Down
2 changes: 1 addition & 1 deletion firebase-ai/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@
# See the License for the specific language governing permissions and
# limitations under the License.

version=17.1.1
version=17.2.0
latestReleasedVersion=17.1.0
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,29 @@ internal constructor(maskConfig: ImagenMaskConfig, image: ImagenInlineImage? = n
image: ImagenInlineImage,
newDimensions: Dimensions,
newPosition: ImagenImagePlacement = ImagenImagePlacement.CENTER,
): List<ImagenReferenceImage> =
generateMaskAndPadForOutpainting(image, newDimensions, newPosition, 0.01)

/**
* Generates two reference images of [ImagenRawImage] and [ImagenRawMask]. These images are
* generated in this order:
* * One [ImagenRawImage] containing the original image, padded out to the new dimensions with
* black pixels, with the original image placed at the given placement
* * One [ImagenRawMask] of the same dimensions containing white everywhere except at the
* placement original image. This is the format expected by Imagen for outpainting requests.
*
* @param image the original image
* @param newDimensions the new dimensions for outpainting. These new dimensions *must* be more
* than the original image.
* @param newPosition the placement of the original image within the new outpainted image.
* @param dilation the dilation for the outpainting mask. See: [ImagenRawMask].
*/
@JvmStatic
public fun generateMaskAndPadForOutpainting(
image: ImagenInlineImage,
newDimensions: Dimensions,
newPosition: ImagenImagePlacement = ImagenImagePlacement.CENTER,
dilation: Double = 0.01
): List<ImagenReferenceImage> {
val originalBitmap = image.asBitmap()
if (
Expand Down Expand Up @@ -180,7 +203,7 @@ internal constructor(maskConfig: ImagenMaskConfig, image: ImagenInlineImage? = n
newImageCanvas.drawBitmap(originalBitmap, null, normalizedImageRectangle, null)
return listOf(
ImagenRawImage(newImageBitmap.toImagenInlineImage()),
ImagenRawMask(maskBitmap.toImagenInlineImage()),
ImagenRawMask(maskBitmap.toImagenInlineImage(), dilation),
)
}
}
Expand Down