def image_edit()

in backend-apis/app/routers/p2_content_creator.py [0:0]


def image_edit(data: EditImageRequest) -> GenerateOrEditImageResponse:
    """
    # Image editing with Imagen

    ## Request body [EditImageRequest]:
    **prompt**: *string*
    - Prompt for editing the image

    **base_image_name**: *string*
    - Base image name to be collected from Google Cloud Storage /images

    **mask_image_name**: *string* = ""
    - Mask image name to be collected from Google Cloud Storage /images

    **number_of_images**: *int* = 1
    - Number of images to generate

    **negative_prompt**: *string* = ""
    - Negative prompt for editing the image

    ## Response body [GenerateOrEditImageResponse]:
    **generated_images**: *list[GeneratedImage]*

    ## GeneratedImage:
    **image_name**: *string*
    - Name of the image in Cloud Storage

    **image_size**: *tuple(int, int)*
    - Size of the generated image

    **images_parameters**: *dict*
    - Parameters used to generate the image

    ## Raises
    **HTTPException** - *404* - Image not found in Cloud Storage

    **HTTPException** - *400* - Error editing image with Imagen

    """
    try:
        if not data.mask_image_name:
            mask = None
        else:
            mask = Image(
                image_bytes=utils_imagen.image_name_to_bytes(
                    data.mask_image_name
                )
            )
        base_image = Image(
            image_bytes=utils_imagen.image_name_to_bytes(data.base_image_name)
        )
    except NotFound as e:
        raise HTTPException(
            status_code=404,
            detail="Image not found in Cloud Storage " + str(e),
        ) from e
    try:
        imagen_responses = utils_imagen.image_generate_model.edit_image(
            prompt=data.prompt,
            base_image=base_image,
            mask=mask,
            number_of_images=data.number_of_images,
            negative_prompt=data.negative_prompt,
        )
    except GoogleAPICallError as e:
        raise HTTPException(
            status_code=400, detail="Error editing image with Imagen " + str(e)
        ) from e
    generated_images = []
    for image in imagen_responses:
        image_name = utils_imagen.upload_image_to_storage(
            image._image_bytes  # pylint:  disable=protected-access
        )
        generated_images.append(
            GenerateOrEditImageResponse.GeneratedImage(
                image_name=image_name,
                image_size=image._size,  # pylint:  disable=protected-access
                image_parameters=image.generation_parameters,
            )
        )

    return GenerateOrEditImageResponse(generated_images=generated_images)