Skip to content

Commit f4b7c63

Browse files
feat(ui): omit non-render-impacting keys when hashing entities
Had missed several of these, which means we were invalidating caches far too often. For example, when you changed a RG prompt, we were invalidating the cached canvas for that entity, even though changing the prompt doesn't affect the canvas at all.
1 parent a462928 commit f4b7c63

File tree

5 files changed

+17
-5
lines changed

5 files changed

+17
-5
lines changed

invokeai/frontend/web/src/features/controlLayers/konva/CanvasEntity/CanvasEntityAdapterBase.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,10 @@ export abstract class CanvasEntityAdapterBase<
9797
abstract getCanvas: (rect?: Rect) => HTMLCanvasElement;
9898

9999
/**
100-
* Gets a hashable representation of the entity's state.
100+
* Gets a hashable representation of the entity's _renderable_ state. This should exclude any properties that are not
101+
* relevant to rendering the entity.
102+
*
103+
* This is used for caching.
101104
*/
102105
abstract getHashableState: () => SerializableObject;
103106

invokeai/frontend/web/src/features/controlLayers/konva/CanvasEntity/CanvasEntityAdapterControlLayer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ export class CanvasEntityAdapterControlLayer extends CanvasEntityAdapterBase<
7878
};
7979

8080
getHashableState = (): SerializableObject => {
81-
const keysToOmit: (keyof CanvasControlLayerState)[] = ['name', 'controlAdapter', 'withTransparencyEffect'];
81+
const keysToOmit: (keyof CanvasControlLayerState)[] = ['name', 'controlAdapter', 'withTransparencyEffect', 'isLocked'];
8282
return omit(this.state, keysToOmit);
8383
};
8484
}

invokeai/frontend/web/src/features/controlLayers/konva/CanvasEntity/CanvasEntityAdapterInpaintMask.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ export class CanvasEntityAdapterInpaintMask extends CanvasEntityAdapterBase<
7070
};
7171

7272
getHashableState = (): SerializableObject => {
73-
const keysToOmit: (keyof CanvasInpaintMaskState)[] = ['fill', 'name', 'opacity'];
73+
const keysToOmit: (keyof CanvasInpaintMaskState)[] = ['fill', 'name', 'opacity', 'isLocked'];
7474
return omit(this.state, keysToOmit);
7575
};
7676

invokeai/frontend/web/src/features/controlLayers/konva/CanvasEntity/CanvasEntityAdapterRasterLayer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ export class CanvasEntityAdapterRasterLayer extends CanvasEntityAdapterBase<
7171
};
7272

7373
getHashableState = (): SerializableObject => {
74-
const keysToOmit: (keyof CanvasRasterLayerState)[] = ['name'];
74+
const keysToOmit: (keyof CanvasRasterLayerState)[] = ['name', 'isLocked'];
7575
return omit(this.state, keysToOmit);
7676
};
7777
}

invokeai/frontend/web/src/features/controlLayers/konva/CanvasEntity/CanvasEntityAdapterRegionalGuidance.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,16 @@ export class CanvasEntityAdapterRegionalGuidance extends CanvasEntityAdapterBase
7070
};
7171

7272
getHashableState = (): SerializableObject => {
73-
const keysToOmit: (keyof CanvasRegionalGuidanceState)[] = ['fill', 'name', 'opacity'];
73+
const keysToOmit: (keyof CanvasRegionalGuidanceState)[] = [
74+
'fill',
75+
'name',
76+
'opacity',
77+
'isLocked',
78+
'autoNegative',
79+
'positivePrompt',
80+
'negativePrompt',
81+
'referenceImages',
82+
];
7483
return omit(this.state, keysToOmit);
7584
};
7685

0 commit comments

Comments
 (0)