mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
feat(ui): shift around init image recall logic
Retrieving the DTO happens as part of the metadata parsing, not recall. This way, we don't show the option to recall a nonexistent image. This matches the flow for other metadata entities like models - we don't show the model recall button if the model isn't available.
This commit is contained in:
parent
adc30045a6
commit
55f7a7737a
@ -193,6 +193,7 @@ export const handlers = {
|
|||||||
getLabel: () => t('metadata.initImage'),
|
getLabel: () => t('metadata.initImage'),
|
||||||
parser: parsers.initialImage,
|
parser: parsers.initialImage,
|
||||||
recaller: recallers.initialImage,
|
recaller: recallers.initialImage,
|
||||||
|
renderValue: async (imageDTO) => imageDTO.image_name,
|
||||||
}),
|
}),
|
||||||
negativePrompt: buildHandlers({
|
negativePrompt: buildHandlers({
|
||||||
getLabel: () => t('metadata.negativePrompt'),
|
getLabel: () => t('metadata.negativePrompt'),
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import { getStore } from 'app/store/nanostores/store';
|
||||||
import {
|
import {
|
||||||
initialControlNet,
|
initialControlNet,
|
||||||
initialIPAdapter,
|
initialIPAdapter,
|
||||||
@ -20,7 +21,6 @@ import type {
|
|||||||
ParameterHeight,
|
ParameterHeight,
|
||||||
ParameterHRFEnabled,
|
ParameterHRFEnabled,
|
||||||
ParameterHRFMethod,
|
ParameterHRFMethod,
|
||||||
ParameterInitialImage,
|
|
||||||
ParameterModel,
|
ParameterModel,
|
||||||
ParameterNegativePrompt,
|
ParameterNegativePrompt,
|
||||||
ParameterNegativeStylePromptSDXL,
|
ParameterNegativeStylePromptSDXL,
|
||||||
@ -59,6 +59,8 @@ import {
|
|||||||
isParameterWidth,
|
isParameterWidth,
|
||||||
} from 'features/parameters/types/parameterSchemas';
|
} from 'features/parameters/types/parameterSchemas';
|
||||||
import { get, isArray, isString } from 'lodash-es';
|
import { get, isArray, isString } from 'lodash-es';
|
||||||
|
import { imagesApi } from 'services/api/endpoints/images';
|
||||||
|
import type { ImageDTO } from 'services/api/types';
|
||||||
import {
|
import {
|
||||||
isControlNetModelConfig,
|
isControlNetModelConfig,
|
||||||
isIPAdapterModelConfig,
|
isIPAdapterModelConfig,
|
||||||
@ -137,8 +139,13 @@ const parseCFGRescaleMultiplier: MetadataParseFunc<ParameterCFGRescaleMultiplier
|
|||||||
const parseScheduler: MetadataParseFunc<ParameterScheduler> = (metadata) =>
|
const parseScheduler: MetadataParseFunc<ParameterScheduler> = (metadata) =>
|
||||||
getProperty(metadata, 'scheduler', isParameterScheduler);
|
getProperty(metadata, 'scheduler', isParameterScheduler);
|
||||||
|
|
||||||
const parseInitialImage: MetadataParseFunc<ParameterInitialImage> = (metadata) =>
|
const parseInitialImage: MetadataParseFunc<ImageDTO> = async (metadata) => {
|
||||||
getProperty(metadata, 'init_image', isParameterInitialImage);
|
const imageName = await getProperty(metadata, 'init_image', isParameterInitialImage);
|
||||||
|
const imageDTORequest = getStore().dispatch(imagesApi.endpoints.getImageDTO.initiate(imageName));
|
||||||
|
const imageDTO = await imageDTORequest.unwrap();
|
||||||
|
imageDTORequest.unsubscribe();
|
||||||
|
return imageDTO;
|
||||||
|
};
|
||||||
|
|
||||||
const parseWidth: MetadataParseFunc<ParameterWidth> = (metadata) => getProperty(metadata, 'width', isParameterWidth);
|
const parseWidth: MetadataParseFunc<ParameterWidth> = (metadata) => getProperty(metadata, 'width', isParameterWidth);
|
||||||
|
|
||||||
|
@ -35,7 +35,6 @@ import type {
|
|||||||
ParameterHeight,
|
ParameterHeight,
|
||||||
ParameterHRFEnabled,
|
ParameterHRFEnabled,
|
||||||
ParameterHRFMethod,
|
ParameterHRFMethod,
|
||||||
ParameterInitialImage,
|
|
||||||
ParameterModel,
|
ParameterModel,
|
||||||
ParameterNegativePrompt,
|
ParameterNegativePrompt,
|
||||||
ParameterNegativeStylePromptSDXL,
|
ParameterNegativeStylePromptSDXL,
|
||||||
@ -63,7 +62,7 @@ import {
|
|||||||
setRefinerStart,
|
setRefinerStart,
|
||||||
setRefinerSteps,
|
setRefinerSteps,
|
||||||
} from 'features/sdxl/store/sdxlSlice';
|
} from 'features/sdxl/store/sdxlSlice';
|
||||||
import { imagesApi } from 'services/api/endpoints/images';
|
import type { ImageDTO } from 'services/api/types';
|
||||||
|
|
||||||
const recallPositivePrompt: MetadataRecallFunc<ParameterPositivePrompt> = (positivePrompt) => {
|
const recallPositivePrompt: MetadataRecallFunc<ParameterPositivePrompt> = (positivePrompt) => {
|
||||||
getStore().dispatch(setPositivePrompt(positivePrompt));
|
getStore().dispatch(setPositivePrompt(positivePrompt));
|
||||||
@ -97,10 +96,7 @@ const recallScheduler: MetadataRecallFunc<ParameterScheduler> = (scheduler) => {
|
|||||||
getStore().dispatch(setScheduler(scheduler));
|
getStore().dispatch(setScheduler(scheduler));
|
||||||
};
|
};
|
||||||
|
|
||||||
const recallInitialImage: MetadataRecallFunc<ParameterInitialImage> = async (initialImage) => {
|
const recallInitialImage: MetadataRecallFunc<ImageDTO> = async (imageDTO) => {
|
||||||
const imageDTORequest = getStore().dispatch(imagesApi.endpoints.getImageDTO.initiate(initialImage));
|
|
||||||
const imageDTO = await imageDTORequest.unwrap();
|
|
||||||
imageDTORequest.unsubscribe();
|
|
||||||
getStore().dispatch(initialImageChanged(imageDTO));
|
getStore().dispatch(initialImageChanged(imageDTO));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user