mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
feat: Add Save Preprocessed Image To Board
This commit is contained in:
parent
243e76dd80
commit
d251124196
@ -10,8 +10,8 @@ import {
|
|||||||
TypesafeDroppableData,
|
TypesafeDroppableData,
|
||||||
} from 'features/dnd/types';
|
} from 'features/dnd/types';
|
||||||
import { memo, useCallback, useMemo, useState } from 'react';
|
import { memo, useCallback, useMemo, useState } from 'react';
|
||||||
import { FaUndo } from 'react-icons/fa';
|
import { FaSave, FaUndo } from 'react-icons/fa';
|
||||||
import { useGetImageDTOQuery } from 'services/api/endpoints/images';
|
import { imagesApi, useGetImageDTOQuery } from 'services/api/endpoints/images';
|
||||||
import { PostUploadAction } from 'services/api/types';
|
import { PostUploadAction } from 'services/api/types';
|
||||||
import IAIDndImageIcon from '../../../common/components/IAIDndImageIcon';
|
import IAIDndImageIcon from '../../../common/components/IAIDndImageIcon';
|
||||||
import {
|
import {
|
||||||
@ -26,11 +26,13 @@ type Props = {
|
|||||||
|
|
||||||
const selector = createSelector(
|
const selector = createSelector(
|
||||||
stateSelector,
|
stateSelector,
|
||||||
({ controlNet }) => {
|
({ controlNet, gallery }) => {
|
||||||
const { pendingControlImages } = controlNet;
|
const { pendingControlImages } = controlNet;
|
||||||
|
const { autoAddBoardId } = gallery;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
pendingControlImages,
|
pendingControlImages,
|
||||||
|
autoAddBoardId,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
defaultSelectorOptions
|
defaultSelectorOptions
|
||||||
@ -47,7 +49,7 @@ const ControlNetImagePreview = ({ isSmall, controlNet }: Props) => {
|
|||||||
|
|
||||||
const dispatch = useAppDispatch();
|
const dispatch = useAppDispatch();
|
||||||
|
|
||||||
const { pendingControlImages } = useAppSelector(selector);
|
const { pendingControlImages, autoAddBoardId } = useAppSelector(selector);
|
||||||
|
|
||||||
const [isMouseOverImage, setIsMouseOverImage] = useState(false);
|
const [isMouseOverImage, setIsMouseOverImage] = useState(false);
|
||||||
|
|
||||||
@ -62,6 +64,43 @@ const ControlNetImagePreview = ({ isSmall, controlNet }: Props) => {
|
|||||||
const handleResetControlImage = useCallback(() => {
|
const handleResetControlImage = useCallback(() => {
|
||||||
dispatch(controlNetImageChanged({ controlNetId, controlImage: null }));
|
dispatch(controlNetImageChanged({ controlNetId, controlImage: null }));
|
||||||
}, [controlNetId, dispatch]);
|
}, [controlNetId, dispatch]);
|
||||||
|
|
||||||
|
const handleSaveControlImage = useCallback(() => {
|
||||||
|
if (!processedControlImage) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
dispatch(
|
||||||
|
imagesApi.endpoints.addImageToBoard.initiate({
|
||||||
|
board_id: autoAddBoardId,
|
||||||
|
imageDTO: {
|
||||||
|
...processedControlImage,
|
||||||
|
is_intermediate: false,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
// THIS PART WORKS
|
||||||
|
// fetch(processedControlImage.image_url)
|
||||||
|
// .then((res) => res.blob())
|
||||||
|
// .then((blob) => {
|
||||||
|
// dispatch(
|
||||||
|
// imagesApi.endpoints.uploadImage.initiate({
|
||||||
|
// file: new File([blob], processedControlImage.image_name, {
|
||||||
|
// type: 'image/png',
|
||||||
|
// }),
|
||||||
|
// image_category: processedControlImage.image_category,
|
||||||
|
// is_intermediate: false,
|
||||||
|
// board_id: autoAddBoardId === 'none' ? undefined : autoAddBoardId,
|
||||||
|
// postUploadAction: {
|
||||||
|
// type: 'TOAST',
|
||||||
|
// toastOptions: { title: 'Processed Image Saved to Assets' },
|
||||||
|
// },
|
||||||
|
// })
|
||||||
|
// );
|
||||||
|
// });
|
||||||
|
}, [processedControlImage, autoAddBoardId, dispatch]);
|
||||||
|
|
||||||
const handleMouseEnter = useCallback(() => {
|
const handleMouseEnter = useCallback(() => {
|
||||||
setIsMouseOverImage(true);
|
setIsMouseOverImage(true);
|
||||||
}, []);
|
}, []);
|
||||||
@ -122,11 +161,19 @@ const ControlNetImagePreview = ({ isSmall, controlNet }: Props) => {
|
|||||||
isDropDisabled={shouldShowProcessedImage || !isEnabled}
|
isDropDisabled={shouldShowProcessedImage || !isEnabled}
|
||||||
postUploadAction={postUploadAction}
|
postUploadAction={postUploadAction}
|
||||||
>
|
>
|
||||||
|
<>
|
||||||
<IAIDndImageIcon
|
<IAIDndImageIcon
|
||||||
onClick={handleResetControlImage}
|
onClick={handleResetControlImage}
|
||||||
icon={controlImage ? <FaUndo /> : undefined}
|
icon={controlImage ? <FaUndo /> : undefined}
|
||||||
tooltip="Reset Control Image"
|
tooltip="Reset Control Image"
|
||||||
/>
|
/>
|
||||||
|
<IAIDndImageIcon
|
||||||
|
onClick={handleSaveControlImage}
|
||||||
|
icon={controlImage ? <FaSave size={16} /> : undefined}
|
||||||
|
tooltip="Save Control Image"
|
||||||
|
styleOverrides={{ marginTop: 6 }}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
</IAIDndImage>
|
</IAIDndImage>
|
||||||
|
|
||||||
<Box
|
<Box
|
||||||
|
Loading…
x
Reference in New Issue
Block a user