Skip to content

Commit cab2cdd

Browse files
authored
Merge branch 'main' into JPPhoto-fix-gguf-loading
2 parents 37083a9 + f8c7add commit cab2cdd

File tree

10 files changed

+213
-125
lines changed

10 files changed

+213
-125
lines changed

invokeai/frontend/web/public/locales/en.json

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1039,24 +1039,7 @@
10391039
"canvasIsSelectingObject": "Canvas is busy (selecting object)",
10401040
"noPrompts": "No prompts generated",
10411041
"noNodesInGraph": "No nodes in graph",
1042-
"systemDisconnected": "System disconnected",
1043-
"layer": {
1044-
"unsupportedModel": "layer not supported for selected base model",
1045-
"controlAdapterNoModelSelected": "no Control Adapter model selected",
1046-
"controlAdapterIncompatibleBaseModel": "incompatible Control Adapter base model",
1047-
"t2iAdapterIncompatibleBboxWidth": "$t(parameters.invoke.layer.t2iAdapterRequiresDimensionsToBeMultipleOf) {{multiple}}, bbox width is {{width}}",
1048-
"t2iAdapterIncompatibleBboxHeight": "$t(parameters.invoke.layer.t2iAdapterRequiresDimensionsToBeMultipleOf) {{multiple}}, bbox height is {{height}}",
1049-
"t2iAdapterIncompatibleScaledBboxWidth": "$t(parameters.invoke.layer.t2iAdapterRequiresDimensionsToBeMultipleOf) {{multiple}}, scaled bbox width is {{width}}",
1050-
"t2iAdapterIncompatibleScaledBboxHeight": "$t(parameters.invoke.layer.t2iAdapterRequiresDimensionsToBeMultipleOf) {{multiple}}, scaled bbox height is {{height}}",
1051-
"ipAdapterNoModelSelected": "no IP adapter selected",
1052-
"ipAdapterIncompatibleBaseModel": "incompatible IP Adapter base model",
1053-
"ipAdapterNoImageSelected": "no IP Adapter image selected",
1054-
"rgNoPromptsOrIPAdapters": "no text prompts or IP Adapters",
1055-
"rgNegativePromptNotSupported": "negative prompt not supported for selected base model",
1056-
"rgReferenceImagesNotSupported": "regional reference images not supported for selected base model",
1057-
"rgAutoNegativeNotSupported": "auto-negative not supported for selected base model",
1058-
"emptyLayer": "empty layer"
1059-
}
1042+
"systemDisconnected": "System disconnected"
10601043
},
10611044
"maskBlur": "Mask Blur",
10621045
"negativePromptPlaceholder": "Negative Prompt",
@@ -1718,6 +1701,8 @@
17181701
"controlLayer": "Control Layer",
17191702
"inpaintMask": "Inpaint Mask",
17201703
"regionalGuidance": "Regional Guidance",
1704+
"referenceImageRegional": "Reference Image (Regional)",
1705+
"referenceImageGlobal": "Reference Image (Global)",
17211706
"asRasterLayer": "As $t(controlLayers.rasterLayer)",
17221707
"asRasterLayerResize": "As $t(controlLayers.rasterLayer) (Resize)",
17231708
"asControlLayer": "As $t(controlLayers.controlLayer)",
@@ -1803,6 +1788,21 @@
18031788
"replaceCurrent": "Replace Current",
18041789
"controlLayerEmptyState": "<UploadButton>Upload an image</UploadButton>, drag an image from the <GalleryButton>gallery</GalleryButton> onto this layer, or draw on the canvas to get started.",
18051790
"referenceImageEmptyState": "<UploadButton>Upload an image</UploadButton> or drag an image from the <GalleryButton>gallery</GalleryButton> onto this layer to get started.",
1791+
"warnings": {
1792+
"problemsFound": "Problems found",
1793+
"unsupportedModel": "layer not supported for selected base model",
1794+
"controlAdapterNoModelSelected": "no Control Layer model selected",
1795+
"controlAdapterIncompatibleBaseModel": "incompatible Control Layer base model",
1796+
"controlAdapterNoControl": "no control selected/drawn",
1797+
"ipAdapterNoModelSelected": "no Reference Image model selected",
1798+
"ipAdapterIncompatibleBaseModel": "incompatible Reference Image base model",
1799+
"ipAdapterNoImageSelected": "no Reference Image image selected",
1800+
"rgNoPromptsOrIPAdapters": "no text prompts or Reference Images",
1801+
"rgNegativePromptNotSupported": "Negative Prompt not supported for selected base model",
1802+
"rgReferenceImagesNotSupported": "regional Reference Images not supported for selected base model",
1803+
"rgAutoNegativeNotSupported": "Auto-Negative not supported for selected base model",
1804+
"rgNoRegion": "no region drawn"
1805+
},
18061806
"controlMode": {
18071807
"controlMode": "Control Mode",
18081808
"balanced": "Balanced (recommended)",

invokeai/frontend/web/src/features/controlLayers/components/RegionalGuidance/RegionalGuidanceIPAdapterSettingsEmptyState.tsx

Lines changed: 39 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
import { Button, Flex, Text } from '@invoke-ai/ui-library';
1+
import { Button, Flex, IconButton, Spacer, Text } from '@invoke-ai/ui-library';
22
import { useAppDispatch } from 'app/store/storeHooks';
33
import { useImageUploadButton } from 'common/hooks/useImageUploadButton';
4-
import { RegionalGuidanceDeletePromptButton } from 'features/controlLayers/components/RegionalGuidance/RegionalGuidanceDeletePromptButton';
54
import { useEntityIdentifierContext } from 'features/controlLayers/contexts/EntityIdentifierContext';
65
import { useCanvasIsBusy } from 'features/controlLayers/hooks/useCanvasIsBusy';
76
import { rgIPAdapterDeleted } from 'features/controlLayers/store/canvasSlice';
@@ -12,6 +11,7 @@ import { setRegionalGuidanceReferenceImage } from 'features/imageActions/actions
1211
import { activeTabCanvasRightPanelChanged } from 'features/ui/store/uiSlice';
1312
import { memo, useCallback, useMemo } from 'react';
1413
import { Trans, useTranslation } from 'react-i18next';
14+
import { PiXBold } from 'react-icons/pi';
1515
import type { ImageDTO } from 'services/api/types';
1616

1717
type Props = {
@@ -47,27 +47,44 @@ export const RegionalGuidanceIPAdapterSettingsEmptyState = memo(({ referenceImag
4747
);
4848

4949
return (
50-
<Flex flexDir="column" gap={3} position="relative" w="full" p={4}>
51-
<RegionalGuidanceDeletePromptButton onDelete={onDeleteIPAdapter} position="absolute" top={0} insetInlineEnd={0} />
52-
<Text textAlign="center" color="base.300">
53-
<Trans
54-
i18nKey="controlLayers.referenceImageEmptyState"
55-
components={{
56-
UploadButton: (
57-
<Button
58-
isDisabled={isBusy}
59-
size="sm"
60-
variant="link"
61-
color="base.300"
62-
{...uploadApi.getUploadButtonProps()}
63-
/>
64-
),
65-
GalleryButton: (
66-
<Button onClick={onClickGalleryButton} isDisabled={isBusy} size="sm" variant="link" color="base.300" />
67-
),
68-
}}
50+
<Flex flexDir="column" gap={2} position="relative" w="full">
51+
<Flex alignItems="center" gap={2}>
52+
<Text fontWeight="semibold" color="base.400">
53+
{t('controlLayers.referenceImage')}
54+
</Text>
55+
<Spacer />
56+
<IconButton
57+
size="sm"
58+
variant="link"
59+
alignSelf="stretch"
60+
icon={<PiXBold />}
61+
tooltip={t('controlLayers.deleteReferenceImage')}
62+
aria-label={t('controlLayers.deleteReferenceImage')}
63+
onClick={onDeleteIPAdapter}
64+
colorScheme="error"
6965
/>
70-
</Text>
66+
</Flex>
67+
<Flex alignItems="center" gap={2} p={4}>
68+
<Text textAlign="center" color="base.300">
69+
<Trans
70+
i18nKey="controlLayers.referenceImageEmptyState"
71+
components={{
72+
UploadButton: (
73+
<Button
74+
isDisabled={isBusy}
75+
size="sm"
76+
variant="link"
77+
color="base.300"
78+
{...uploadApi.getUploadButtonProps()}
79+
/>
80+
),
81+
GalleryButton: (
82+
<Button onClick={onClickGalleryButton} isDisabled={isBusy} size="sm" variant="link" color="base.300" />
83+
),
84+
}}
85+
/>
86+
</Text>
87+
</Flex>
7188
<input {...uploadApi.getUploadInputProps()} />
7289
<DndDropTarget
7390
dndTarget={setRegionalGuidanceReferenceImageDndTarget}

invokeai/frontend/web/src/features/controlLayers/components/common/CanvasEntityHeaderWarnings.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ const TooltipContent = memo((props: { warnings: string[] }) => {
8989
const { t } = useTranslation();
9090
return (
9191
<Flex flexDir="column">
92-
<Text>{t('common.warnings')}:</Text>
92+
<Text>{t('controlLayers.warnings.problemsFound')}:</Text>
9393
<UnorderedList>
9494
{props.warnings.map((warning, index) => (
9595
<ListItem key={index}>{warning}</ListItem>

invokeai/frontend/web/src/features/controlLayers/hooks/addLayerHooks.ts

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,13 @@ import { modelConfigsAdapterSelectors, selectModelConfigsQuery } from 'services/
2929
import type { ControlNetModelConfig, IPAdapterModelConfig, T2IAdapterModelConfig } from 'services/api/types';
3030
import { isControlNetOrT2IAdapterModelConfig, isIPAdapterModelConfig } from 'services/api/types';
3131

32-
/** @knipignore */
32+
/**
33+
* Selects the default control adapter configuration based on the model configurations and the base.
34+
*
35+
* Be sure to clone the output of this selector before modifying it!
36+
*
37+
* @knipignore
38+
*/
3339
export const selectDefaultControlAdapter = createSelector(
3440
selectModelConfigsQuery,
3541
selectBase,
@@ -52,6 +58,11 @@ export const selectDefaultControlAdapter = createSelector(
5258
}
5359
);
5460

61+
/**
62+
* Selects the default IP adapter configuration based on the model configurations and the base.
63+
*
64+
* Be sure to clone the output of this selector before modifying it!
65+
*/
5566
export const selectDefaultIPAdapter = createSelector(
5667
selectModelConfigsQuery,
5768
selectBase,
@@ -117,7 +128,9 @@ export const useAddRegionalReferenceImage = () => {
117128

118129
const func = useCallback(() => {
119130
const overrides: Partial<CanvasRegionalGuidanceState> = {
120-
referenceImages: [{ id: getPrefixedId('regional_guidance_reference_image'), ipAdapter: defaultIPAdapter }],
131+
referenceImages: [
132+
{ id: getPrefixedId('regional_guidance_reference_image'), ipAdapter: deepClone(defaultIPAdapter) },
133+
],
121134
};
122135
dispatch(rgAdded({ isSelected: true, overrides }));
123136
}, [defaultIPAdapter, dispatch]);
@@ -129,7 +142,7 @@ export const useAddGlobalReferenceImage = () => {
129142
const dispatch = useAppDispatch();
130143
const defaultIPAdapter = useAppSelector(selectDefaultIPAdapter);
131144
const func = useCallback(() => {
132-
const overrides = { ipAdapter: defaultIPAdapter };
145+
const overrides = { ipAdapter: deepClone(defaultIPAdapter) };
133146
dispatch(referenceImageAdded({ isSelected: true, overrides }));
134147
}, [defaultIPAdapter, dispatch]);
135148

@@ -140,7 +153,7 @@ export const useAddRegionalGuidanceIPAdapter = (entityIdentifier: CanvasEntityId
140153
const dispatch = useAppDispatch();
141154
const defaultIPAdapter = useAppSelector(selectDefaultIPAdapter);
142155
const func = useCallback(() => {
143-
dispatch(rgIPAdapterAdded({ entityIdentifier, overrides: { ipAdapter: defaultIPAdapter } }));
156+
dispatch(rgIPAdapterAdded({ entityIdentifier, overrides: { ipAdapter: deepClone(defaultIPAdapter) } }));
144157
}, [defaultIPAdapter, dispatch, entityIdentifier]);
145158

146159
return func;

0 commit comments

Comments
 (0)