fix(ui): fix initial image for uploads

This commit is contained in:
psychedelicious 2023-04-29 19:11:20 +10:00
parent 0cad204e74
commit 2e4e9434c1
4 changed files with 23 additions and 21 deletions

View File

@ -166,7 +166,7 @@ const CurrentImageButtons = (props: CurrentImageButtonsProps) => {
const handleClickUseAsInitialImage = useCallback(() => {
if (!image) return;
if (isLightboxOpen) dispatch(setIsLightboxOpen(false));
dispatch(initialImageSelected(image.name));
dispatch(initialImageSelected({ name: image.name, type: image.type }));
// dispatch(setInitialImage(currentImage));
// dispatch(setActiveTab('img2img'));

View File

@ -5,7 +5,6 @@ import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
import SelectImagePlaceholder from 'common/components/SelectImagePlaceholder';
import { useGetUrl } from 'common/util/getUrl';
import useGetImageByNameAndType from 'features/gallery/hooks/useGetImageByName';
import { selectResultsById } from 'features/gallery/store/resultsSlice';
import {
clearInitialImage,
initialImageSelected,
@ -16,15 +15,13 @@ import { DragEvent, useCallback, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { ImageType } from 'services/api';
import ImageToImageOverlay from 'common/components/ImageToImageOverlay';
import { initialImageSelector } from 'features/parameters/store/generationSelectors';
const initialImagePreviewSelector = createSelector(
[(state: RootState) => state],
(state) => {
const { initialImage } = state.generation;
const image = selectResultsById(state, initialImage as string);
[initialImageSelector],
(initialImage) => {
return {
initialImage: image,
initialImage,
};
},
{ memoizeOptions: { resultEqualityCheck: isEqual } }
@ -71,7 +68,7 @@ const InitialImagePreview = () => {
return;
}
dispatch(initialImageSelected(image.name));
dispatch(initialImageSelected({ name, type }));
},
[getImageByNameAndType, dispatch]
);

View File

@ -1,10 +1,6 @@
import { createSelector } from '@reduxjs/toolkit';
import { RootState } from 'app/store/store';
import { gallerySelector } from 'features/gallery/store/gallerySelectors';
import {
selectResultsById,
selectResultsEntities,
} from 'features/gallery/store/resultsSlice';
import { selectResultsById } from 'features/gallery/store/resultsSlice';
import { selectUploadsById } from 'features/gallery/store/uploadsSlice';
import { isEqual } from 'lodash-es';
@ -25,11 +21,14 @@ export const mayGenerateMultipleImagesSelector = createSelector(
export const initialImageSelector = createSelector(
[(state: RootState) => state, generationSelector],
(state, generation) => {
const { initialImage: initialImageName } = generation;
const { initialImage } = generation;
return (
selectResultsById(state, initialImageName as string) ??
selectUploadsById(state, initialImageName as string)
);
if (initialImage?.type === 'results') {
return selectResultsById(state, initialImage.name);
}
if (initialImage?.type === 'uploads') {
return selectUploadsById(state, initialImage.name);
}
}
);

View File

@ -5,13 +5,19 @@ import { getPromptAndNegative } from 'common/util/getPromptAndNegative';
import promptToString from 'common/util/promptToString';
import { seedWeightsToString } from 'common/util/seedWeightPairs';
import { clamp } from 'lodash-es';
import { ImageField, ImageType } from 'services/api';
export type InitialImage = {
name: string;
type: ImageType;
};
export interface GenerationState {
cfgScale: number;
height: number;
img2imgStrength: number;
infillMethod: string;
initialImage?: InvokeAI._Image | string; // can be an Image or url
initialImage?: InitialImage; // can be an Image or url
iterations: number;
maskPath: string;
perlin: number;
@ -345,7 +351,7 @@ export const generationSlice = createSlice({
setVerticalSymmetrySteps: (state, action: PayloadAction<number>) => {
state.verticalSymmetrySteps = action.payload;
},
initialImageSelected: (state, action: PayloadAction<string>) => {
initialImageSelected: (state, action: PayloadAction<InitialImage>) => {
state.initialImage = action.payload;
state.isImageToImageEnabled = true;
},