diff --git a/invokeai/frontend/web/public/locales/en.json b/invokeai/frontend/web/public/locales/en.json index 70b44a301f..9ba7428e7b 100644 --- a/invokeai/frontend/web/public/locales/en.json +++ b/invokeai/frontend/web/public/locales/en.json @@ -1646,6 +1646,7 @@ "structure": "Structure", "upscaleModel": "Upscale Model", "scale": "Scale", + "simpleUpscaleMissingModelWarning": "Visit the Model Manager to install an upscale (image to image) model.", "missingModelsWarning": "Visit the Model Manager to install the required models:", "mainModelDesc": "Main model (SD1.5 or SDXL architecture)", "tileControlNetModelDesc": "Tile ControlNet model for the chosen main model architecture", diff --git a/invokeai/frontend/web/src/features/parameters/components/Upscale/ParamSpandrelModel.tsx b/invokeai/frontend/web/src/features/parameters/components/Upscale/ParamSpandrelModel.tsx index ae76e7d607..28c7b89c90 100644 --- a/invokeai/frontend/web/src/features/parameters/components/Upscale/ParamSpandrelModel.tsx +++ b/invokeai/frontend/web/src/features/parameters/components/Upscale/ParamSpandrelModel.tsx @@ -54,6 +54,7 @@ const ParamSpandrelModel = ({ isMultidiffusion }: Props) => { options={options} onChange={onChange} noOptionsMessage={noOptionsMessage} + isDisabled={options.length === 0} /> diff --git a/invokeai/frontend/web/src/features/parameters/components/Upscale/ParamUpscaleSettings.tsx b/invokeai/frontend/web/src/features/parameters/components/Upscale/ParamUpscaleSettings.tsx index 15393481a5..535ad35d5b 100644 --- a/invokeai/frontend/web/src/features/parameters/components/Upscale/ParamUpscaleSettings.tsx +++ b/invokeai/frontend/web/src/features/parameters/components/Upscale/ParamUpscaleSettings.tsx @@ -6,14 +6,16 @@ import { PopoverBody, PopoverContent, PopoverTrigger, + Text, useDisclosure, } from '@invoke-ai/ui-library'; import { upscaleRequested } from 'app/store/middleware/listenerMiddleware/listeners/upscaleRequested'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; +import { $installModelsTab } from 'features/modelManagerV2/subpanels/InstallModels'; import { useIsQueueMutationInProgress } from 'features/queue/hooks/useIsQueueMutationInProgress'; -import { UpscaleWarning } from 'features/settingsAccordions/components/UpscaleSettingsAccordion/UpscaleWarning'; +import { setActiveTab } from 'features/ui/store/uiSlice'; import { memo, useCallback } from 'react'; -import { useTranslation } from 'react-i18next'; +import { Trans, useTranslation } from 'react-i18next'; import { PiFrameCornersBold } from 'react-icons/pi'; import type { ImageDTO } from 'services/api/types'; @@ -51,7 +53,7 @@ const ParamUpscalePopover = (props: Props) => { - + {!simpleUpscaleModel && } @@ -63,3 +65,27 @@ const ParamUpscalePopover = (props: Props) => { }; export default memo(ParamUpscalePopover); + +const MissingModelWarning = () => { + const dispatch = useAppDispatch(); + + const handleGoToModelManager = useCallback(() => { + dispatch(setActiveTab('models')); + $installModelsTab.set(3); + }, [dispatch]); + + return ( + + + + ), + }} + /> + + + ); +}; diff --git a/invokeai/frontend/web/src/features/settingsAccordions/components/UpscaleSettingsAccordion/UpscaleSettingsAccordion.tsx b/invokeai/frontend/web/src/features/settingsAccordions/components/UpscaleSettingsAccordion/UpscaleSettingsAccordion.tsx index ddd5435205..b810b67d7b 100644 --- a/invokeai/frontend/web/src/features/settingsAccordions/components/UpscaleSettingsAccordion/UpscaleSettingsAccordion.tsx +++ b/invokeai/frontend/web/src/features/settingsAccordions/components/UpscaleSettingsAccordion/UpscaleSettingsAccordion.tsx @@ -58,7 +58,7 @@ export const UpscaleSettingsAccordion = memo(() => { - + diff --git a/invokeai/frontend/web/src/features/settingsAccordions/components/UpscaleSettingsAccordion/UpscaleWarning.tsx b/invokeai/frontend/web/src/features/settingsAccordions/components/UpscaleSettingsAccordion/UpscaleWarning.tsx index d1873c15ae..0c2c16d302 100644 --- a/invokeai/frontend/web/src/features/settingsAccordions/components/UpscaleSettingsAccordion/UpscaleWarning.tsx +++ b/invokeai/frontend/web/src/features/settingsAccordions/components/UpscaleSettingsAccordion/UpscaleWarning.tsx @@ -7,14 +7,11 @@ import { useCallback, useEffect, useMemo } from 'react'; import { Trans, useTranslation } from 'react-i18next'; import { useControlNetModels } from 'services/api/hooks/modelsByType'; -interface Props { - usesTile: boolean; -} - -export const UpscaleWarning = ({ usesTile }: Props) => { +export const UpscaleWarning = () => { const { t } = useTranslation(); const model = useAppSelector((s) => s.generation.model); - const { tileControlnetModel, upscaleModel, simpleUpscaleModel } = useAppSelector((s) => s.upscale); + const upscaleModel = useAppSelector((s) => s.upscale.upscaleModel); + const tileControlnetModel = useAppSelector((s) => s.upscale.tileControlnetModel); const dispatch = useAppDispatch(); const [modelConfigs, { isLoading }] = useControlNetModels(); const disabledTabs = useAppSelector((s) => s.config.disabledTabs); @@ -29,23 +26,18 @@ export const UpscaleWarning = ({ usesTile }: Props) => { const warnings = useMemo(() => { const _warnings: string[] = []; - if (!usesTile) { - if (!simpleUpscaleModel) { - _warnings.push(t('upscaling.upscaleModelDesc')); - } - return _warnings; - } if (!model) { _warnings.push(t('upscaling.mainModelDesc')); } - if (!tileControlnetModel && usesTile) { + if (!tileControlnetModel) { _warnings.push(t('upscaling.tileControlNetModelDesc')); } if (!upscaleModel) { _warnings.push(t('upscaling.upscaleModelDesc')); } + return _warnings; - }, [model, upscaleModel, tileControlnetModel, usesTile, simpleUpscaleModel, t]); + }, [model, tileControlnetModel, upscaleModel, t]); const handleGoToModelManager = useCallback(() => { dispatch(setActiveTab('models'));