From 40d4cabecd5e1644a85bf004e01bd5f46b325a65 Mon Sep 17 00:00:00 2001
From: psychedelicious <4822129+psychedelicious@users.noreply.github.com>
Date: Thu, 11 May 2023 14:18:35 +1000
Subject: [PATCH] feat(ui): improve image overlay
---
.../components/ImageMetadataOverlay.tsx | 54 +++++++++++++++++++
.../common/components/ImageToImageOverlay.tsx | 37 -------------
.../components/CurrentImagePreview.tsx | 32 ++++++-----
.../ImageToImage/InitialImagePreview.tsx | 4 +-
4 files changed, 74 insertions(+), 53 deletions(-)
create mode 100644 invokeai/frontend/web/src/common/components/ImageMetadataOverlay.tsx
delete mode 100644 invokeai/frontend/web/src/common/components/ImageToImageOverlay.tsx
diff --git a/invokeai/frontend/web/src/common/components/ImageMetadataOverlay.tsx b/invokeai/frontend/web/src/common/components/ImageMetadataOverlay.tsx
new file mode 100644
index 0000000000..64d5e1beef
--- /dev/null
+++ b/invokeai/frontend/web/src/common/components/ImageMetadataOverlay.tsx
@@ -0,0 +1,54 @@
+import { Badge, Flex } from '@chakra-ui/react';
+import { Image } from 'app/types/invokeai';
+import { isNumber, isString } from 'lodash-es';
+import { useMemo } from 'react';
+
+type ImageMetadataOverlayProps = {
+ image: Image;
+};
+
+const ImageMetadataOverlay = ({ image }: ImageMetadataOverlayProps) => {
+ const dimensions = useMemo(() => {
+ if (!isNumber(image.metadata?.width) || isNumber(!image.metadata?.height)) {
+ return;
+ }
+
+ return `${image.metadata?.width} × ${image.metadata?.height}`;
+ }, [image.metadata]);
+
+ const model = useMemo(() => {
+ if (!isString(image.metadata?.invokeai?.node?.model)) {
+ return;
+ }
+
+ return image.metadata?.invokeai?.node?.model;
+ }, [image.metadata]);
+
+ return (
+
+ {dimensions && (
+
+ {dimensions}
+
+ )}
+ {model && (
+
+ {model}
+
+ )}
+
+ );
+};
+
+export default ImageMetadataOverlay;
diff --git a/invokeai/frontend/web/src/common/components/ImageToImageOverlay.tsx b/invokeai/frontend/web/src/common/components/ImageToImageOverlay.tsx
deleted file mode 100644
index 9d864f5c9c..0000000000
--- a/invokeai/frontend/web/src/common/components/ImageToImageOverlay.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-import { Badge, Box, Flex } from '@chakra-ui/react';
-import { Image } from 'app/types/invokeai';
-
-type ImageToImageOverlayProps = {
- image: Image;
-};
-
-const ImageToImageOverlay = ({ image }: ImageToImageOverlayProps) => {
- return (
-
-
-
- {image.metadata?.width} × {image.metadata?.height}
-
-
-
- );
-};
-
-export default ImageToImageOverlay;
diff --git a/invokeai/frontend/web/src/features/gallery/components/CurrentImagePreview.tsx b/invokeai/frontend/web/src/features/gallery/components/CurrentImagePreview.tsx
index a86407d5c8..b1dbed5a81 100644
--- a/invokeai/frontend/web/src/features/gallery/components/CurrentImagePreview.tsx
+++ b/invokeai/frontend/web/src/features/gallery/components/CurrentImagePreview.tsx
@@ -12,6 +12,7 @@ import CurrentImageHidden from './CurrentImageHidden';
import { DragEvent, memo, useCallback } from 'react';
import { systemSelector } from 'features/system/store/systemSelectors';
import ImageFallbackSpinner from './ImageFallbackSpinner';
+import ImageMetadataOverlay from 'common/components/ImageMetadataOverlay';
export const imagesSelector = createSelector(
[uiSelector, gallerySelector, systemSelector],
@@ -89,20 +90,23 @@ const CurrentImagePreview = () => {
/>
) : (
image && (
- }
- onDragStart={handleDragStart}
- sx={{
- objectFit: 'contain',
- maxWidth: '100%',
- maxHeight: '100%',
- height: 'auto',
- position: 'absolute',
- borderRadius: 'base',
- }}
- />
+ <>
+ }
+ onDragStart={handleDragStart}
+ sx={{
+ objectFit: 'contain',
+ maxWidth: '100%',
+ maxHeight: '100%',
+ height: 'auto',
+ position: 'absolute',
+ borderRadius: 'base',
+ }}
+ />
+
+ >
)
)}
{shouldShowImageDetails && image && 'metadata' in image && (
diff --git a/invokeai/frontend/web/src/features/parameters/components/Parameters/ImageToImage/InitialImagePreview.tsx b/invokeai/frontend/web/src/features/parameters/components/Parameters/ImageToImage/InitialImagePreview.tsx
index 8c8a52c857..3de1e1cebb 100644
--- a/invokeai/frontend/web/src/features/parameters/components/Parameters/ImageToImage/InitialImagePreview.tsx
+++ b/invokeai/frontend/web/src/features/parameters/components/Parameters/ImageToImage/InitialImagePreview.tsx
@@ -8,7 +8,7 @@ import { addToast } from 'features/system/store/systemSlice';
import { DragEvent, useCallback } from 'react';
import { useTranslation } from 'react-i18next';
import { ImageType } from 'services/api';
-import ImageToImageOverlay from 'common/components/ImageToImageOverlay';
+import ImageMetadataOverlay from 'common/components/ImageMetadataOverlay';
import { generationSelector } from 'features/parameters/store/generationSelectors';
import { initialImageSelected } from 'features/parameters/store/actions';
import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions';
@@ -80,7 +80,7 @@ const InitialImagePreview = () => {
borderRadius: 'base',
}}
/>
-
+
>
)}
{!initialImage?.url && }