diff --git a/invokeai/frontend/web/public/locales/en.json b/invokeai/frontend/web/public/locales/en.json
index 5f34bbb2e78..08b095f21ec 100644
--- a/invokeai/frontend/web/public/locales/en.json
+++ b/invokeai/frontend/web/public/locales/en.json
@@ -152,8 +152,8 @@
"orderBy": "Order By",
"outpaint": "outpaint",
"outputs": "Outputs",
- "postprocessing": "Post Processing",
- "random": "Random",
+ "postprocessing": "Post Processing", "random": "Random",
+ "recall": "Recall",
"reportBugLabel": "Report Bug",
"safetensors": "Safetensors",
"save": "Save",
@@ -393,10 +393,11 @@
"compareHelp1": "Hold Alt while clicking a gallery image or using the arrow keys to change the compare image.",
"compareHelp2": "Press M to cycle through comparison modes.",
"compareHelp3": "Press C to swap the compared images.",
- "compareHelp4": "Press Z or Esc to exit.",
- "openViewer": "Open Viewer",
+ "compareHelp4": "Press Z or Esc to exit.", "openViewer": "Open Viewer",
"closeViewer": "Close Viewer",
- "move": "Move"
+ "move": "Move",
+ "recallParametersCanvasWarning": "Recalling parameters will potentially overwrite your current canvas settings and may affect active layers. Some canvas parameters may be overwritten.",
+ "activeCanvasData": "Active Canvas Data: {{data}}"
},
"hotkeys": {
"hotkeys": "Hotkeys",
diff --git a/invokeai/frontend/web/src/app/components/GlobalModalIsolator.tsx b/invokeai/frontend/web/src/app/components/GlobalModalIsolator.tsx
index da982d105f5..2f0b93a25af 100644
--- a/invokeai/frontend/web/src/app/components/GlobalModalIsolator.tsx
+++ b/invokeai/frontend/web/src/app/components/GlobalModalIsolator.tsx
@@ -11,6 +11,7 @@ import { FullscreenDropzone } from 'features/dnd/FullscreenDropzone';
import { DynamicPromptsModal } from 'features/dynamicPrompts/components/DynamicPromptsPreviewModal';
import DeleteBoardModal from 'features/gallery/components/Boards/DeleteBoardModal';
import { ImageContextMenu } from 'features/gallery/components/ImageContextMenu/ImageContextMenu';
+import { RecallMetadataConfirmationAlertDialog } from 'features/gallery/components/ImageGrid/RecallMetadataConfirmationAlertDialog';
import { ShareWorkflowModal } from 'features/nodes/components/sidePanel/workflow/WorkflowLibrary/ShareWorkflowModal';
import { WorkflowLibraryModal } from 'features/nodes/components/sidePanel/workflow/WorkflowLibrary/WorkflowLibraryModal';
import { CancelAllExceptCurrentQueueItemConfirmationAlertDialog } from 'features/queue/components/CancelAllExceptCurrentQueueItemConfirmationAlertDialog';
@@ -47,9 +48,9 @@ export const GlobalModalIsolator = memo(() => {
-
-
+
+
diff --git a/invokeai/frontend/web/src/features/gallery/components/ImageContextMenu/ImageMenuItemMetadataRecallActions.tsx b/invokeai/frontend/web/src/features/gallery/components/ImageContextMenu/ImageMenuItemMetadataRecallActions.tsx
index 3df7be7e04e..4195fb37d72 100644
--- a/invokeai/frontend/web/src/features/gallery/components/ImageContextMenu/ImageMenuItemMetadataRecallActions.tsx
+++ b/invokeai/frontend/web/src/features/gallery/components/ImageContextMenu/ImageMenuItemMetadataRecallActions.tsx
@@ -1,8 +1,9 @@
import { Menu, MenuButton, MenuItem, MenuList } from '@invoke-ai/ui-library';
import { SubMenuButtonContent, useSubMenu } from 'common/hooks/useSubMenu';
+import { useRecallMetadataWithConfirmation } from 'features/gallery/components/ImageGrid/RecallMetadataConfirmationAlertDialog';
import { useImageDTOContext } from 'features/gallery/contexts/ImageDTOContext';
import { useImageActions } from 'features/gallery/hooks/useImageActions';
-import { memo } from 'react';
+import { memo, useCallback } from 'react';
import { useTranslation } from 'react-i18next';
import {
PiArrowBendUpLeftBold,
@@ -17,10 +18,19 @@ export const ImageMenuItemMetadataRecallActions = memo(() => {
const { t } = useTranslation();
const imageDTO = useImageDTOContext();
const subMenu = useSubMenu();
+ const { recallWithConfirmation } = useRecallMetadataWithConfirmation();
const { recallAll, remix, recallSeed, recallPrompts, hasMetadata, hasSeed, hasPrompts, createAsPreset } =
useImageActions(imageDTO);
+ const handleRecallAll = useCallback(() => {
+ if (hasMetadata) {
+ recallWithConfirmation(() => {
+ recallAll();
+ });
+ }
+ }, [hasMetadata, recallAll, recallWithConfirmation]);
+
return (
}>