Skip to content

Commit 6d067e5

Browse files
fix(ui): on page load, if CA processed image no longer exists, re-process it
1 parent 2871676 commit 6d067e5

File tree

4 files changed

+53
-6
lines changed

4 files changed

+53
-6
lines changed

invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/controlAdapterPreprocessor.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,13 @@ import type { BatchConfig } from 'services/api/types';
2222
import { socketInvocationComplete } from 'services/events/actions';
2323
import { assert } from 'tsafe';
2424

25-
const matcher = isAnyOf(caLayerImageChanged, caLayerProcessorConfigChanged, caLayerModelChanged, caLayerRecalled);
25+
const matcher = isAnyOf(
26+
caLayerImageChanged,
27+
caLayerProcessedImageChanged,
28+
caLayerProcessorConfigChanged,
29+
caLayerModelChanged,
30+
caLayerRecalled
31+
);
2632

2733
const DEBOUNCE_MS = 300;
2834
const log = logger('session');
@@ -73,9 +79,10 @@ export const addControlAdapterPreprocessor = (startAppListening: AppStartListeni
7379
const originalConfig = originalLayer?.controlAdapter.processorConfig;
7480

7581
const image = layer.controlAdapter.image;
82+
const processedImage = layer.controlAdapter.processedImage;
7683
const config = layer.controlAdapter.processorConfig;
7784

78-
if (isEqual(config, originalConfig) && isEqual(image, originalImage)) {
85+
if (isEqual(config, originalConfig) && isEqual(image, originalImage) && processedImage) {
7986
// Neither config nor image have changed, we can bail
8087
return;
8188
}

invokeai/frontend/web/src/features/controlLayers/components/CALayer/CALayerControlAdapterWrapper.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
caLayerControlModeChanged,
55
caLayerImageChanged,
66
caLayerModelChanged,
7+
caLayerProcessedImageChanged,
78
caLayerProcessorConfigChanged,
89
caOrIPALayerBeginEndStepPctChanged,
910
caOrIPALayerWeightChanged,
@@ -84,6 +85,14 @@ export const CALayerControlAdapterWrapper = memo(({ layerId }: Props) => {
8485
[dispatch, layerId]
8586
);
8687

88+
const onErrorLoadingImage = useCallback(() => {
89+
dispatch(caLayerImageChanged({ layerId, imageDTO: null }));
90+
}, [dispatch, layerId]);
91+
92+
const onErrorLoadingProcessedImage = useCallback(() => {
93+
dispatch(caLayerProcessedImageChanged({ layerId, imageDTO: null }));
94+
}, [dispatch, layerId]);
95+
8796
const droppableData = useMemo<CALayerImageDropData>(
8897
() => ({
8998
actionType: 'SET_CA_LAYER_IMAGE',
@@ -114,6 +123,8 @@ export const CALayerControlAdapterWrapper = memo(({ layerId }: Props) => {
114123
onChangeImage={onChangeImage}
115124
droppableData={droppableData}
116125
postUploadAction={postUploadAction}
126+
onErrorLoadingImage={onErrorLoadingImage}
127+
onErrorLoadingProcessedImage={onErrorLoadingProcessedImage}
117128
/>
118129
);
119130
});

invokeai/frontend/web/src/features/controlLayers/components/ControlAndIPAdapter/ControlAdapter.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ type Props = {
2828
onChangeProcessorConfig: (processorConfig: ProcessorConfig | null) => void;
2929
onChangeModel: (modelConfig: ControlNetModelConfig | T2IAdapterModelConfig) => void;
3030
onChangeImage: (imageDTO: ImageDTO | null) => void;
31+
onErrorLoadingImage: () => void;
32+
onErrorLoadingProcessedImage: () => void;
3133
droppableData: TypesafeDroppableData;
3234
postUploadAction: PostUploadAction;
3335
};
@@ -41,6 +43,8 @@ export const ControlAdapter = memo(
4143
onChangeProcessorConfig,
4244
onChangeModel,
4345
onChangeImage,
46+
onErrorLoadingImage,
47+
onErrorLoadingProcessedImage,
4448
droppableData,
4549
postUploadAction,
4650
}: Props) => {
@@ -91,6 +95,8 @@ export const ControlAdapter = memo(
9195
onChangeImage={onChangeImage}
9296
droppableData={droppableData}
9397
postUploadAction={postUploadAction}
98+
onErrorLoadingImage={onErrorLoadingImage}
99+
onErrorLoadingProcessedImage={onErrorLoadingProcessedImage}
94100
/>
95101
</Flex>
96102
</Flex>

invokeai/frontend/web/src/features/controlLayers/components/ControlAndIPAdapter/ControlAdapterImagePreview.tsx

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,19 @@ type Props = {
2727
onChangeImage: (imageDTO: ImageDTO | null) => void;
2828
droppableData: TypesafeDroppableData;
2929
postUploadAction: PostUploadAction;
30+
onErrorLoadingImage: () => void;
31+
onErrorLoadingProcessedImage: () => void;
3032
};
3133

3234
export const ControlAdapterImagePreview = memo(
33-
({ controlAdapter, onChangeImage, droppableData, postUploadAction }: Props) => {
35+
({
36+
controlAdapter,
37+
onChangeImage,
38+
droppableData,
39+
postUploadAction,
40+
onErrorLoadingImage,
41+
onErrorLoadingProcessedImage,
42+
}: Props) => {
3443
const { t } = useTranslation();
3544
const dispatch = useAppDispatch();
3645
const autoAddBoardId = useAppSelector((s) => s.gallery.autoAddBoardId);
@@ -128,10 +137,23 @@ export const ControlAdapterImagePreview = memo(
128137
controlAdapter.processorConfig !== null;
129138

130139
useEffect(() => {
131-
if (isConnected && (isErrorControlImage || isErrorProcessedControlImage)) {
132-
handleResetControlImage();
140+
if (!isConnected) {
141+
return;
142+
}
143+
if (isErrorControlImage) {
144+
onErrorLoadingImage();
145+
}
146+
if (isErrorProcessedControlImage) {
147+
onErrorLoadingProcessedImage();
133148
}
134-
}, [handleResetControlImage, isConnected, isErrorControlImage, isErrorProcessedControlImage]);
149+
}, [
150+
handleResetControlImage,
151+
isConnected,
152+
isErrorControlImage,
153+
isErrorProcessedControlImage,
154+
onErrorLoadingImage,
155+
onErrorLoadingProcessedImage,
156+
]);
135157

136158
return (
137159
<Flex
@@ -167,6 +189,7 @@ export const ControlAdapterImagePreview = memo(
167189
droppableData={droppableData}
168190
imageDTO={processedControlImage}
169191
isUploadDisabled={true}
192+
onError={handleResetControlImage}
170193
/>
171194
</Box>
172195

0 commit comments

Comments
 (0)