diff --git a/invokeai/backend/invoke_ai_web_server.py b/invokeai/backend/invoke_ai_web_server.py index d7e0a4d11a..dda6ee2df2 100644 --- a/invokeai/backend/invoke_ai_web_server.py +++ b/invokeai/backend/invoke_ai_web_server.py @@ -422,14 +422,21 @@ class InvokeAIWebServer: original_config_file = Path( Globals.root, original_config_file) - if model_to_convert['is_inpainting']: + if model_to_convert['model_type'] == 'inpainting': original_config_file = Path( 'configs', 'stable-diffusion', - 'v1-inpainting-inference.yaml' if model_to_convert['is_inpainting'] else 'v1-inference.yaml' + 'v1-inpainting-inference.yaml' ) - if model_to_convert['custom_config'] is not None: + if model_to_convert['model_type'] == '2': + original_config_file = Path( + 'configs', + 'stable-diffusion', + 'v2-inference-v.yaml' + ) + + if model_to_convert['model_type'] == 'custom' and model_to_convert['custom_config'] is not None: original_config_file = Path( model_to_convert['custom_config']) diff --git a/invokeai/frontend/public/locales/modelmanager/en.json b/invokeai/frontend/public/locales/modelmanager/en.json index 399acb0b48..967e11f061 100644 --- a/invokeai/frontend/public/locales/modelmanager/en.json +++ b/invokeai/frontend/public/locales/modelmanager/en.json @@ -72,8 +72,10 @@ "convertToDiffusersHelpText4": "This is a one time process only. It might take around 30s-60s depending on the specifications of your computer.", "convertToDiffusersHelpText5": "This process will create a Diffusers version of this model in the same directory as your checkpoint. Please make sure you have enough disk space.", "convertToDiffusersHelpText6": "Do you wish to convert this model?", - "inpaintingModel": "Inpainting Model", - "customConfig": "Custom Config", + "v1": "v1", + "v2": "v2", + "inpainting": "v1 Inpainting", + "custom": "Custom", "pathToCustomConfig": "Path To Custom Config", "statusConverting": "Converting" } diff --git a/invokeai/frontend/src/app/invokeai.d.ts b/invokeai/frontend/src/app/invokeai.d.ts index aedb3c6b0f..e67a3e4951 100644 --- a/invokeai/frontend/src/app/invokeai.d.ts +++ b/invokeai/frontend/src/app/invokeai.d.ts @@ -221,7 +221,7 @@ export declare type InvokeDiffusersModelConfigProps = { export declare type InvokeModelConversionProps = { name: string; - is_inpainting: boolean; + model_type: string; custom_config: string | null; }; diff --git a/invokeai/frontend/src/features/system/components/ModelManager/ModelConvert.tsx b/invokeai/frontend/src/features/system/components/ModelManager/ModelConvert.tsx index 060abc1379..89061e7bd8 100644 --- a/invokeai/frontend/src/features/system/components/ModelManager/ModelConvert.tsx +++ b/invokeai/frontend/src/features/system/components/ModelManager/ModelConvert.tsx @@ -1,10 +1,16 @@ -import { Flex, ListItem, Text, UnorderedList } from '@chakra-ui/react'; +import { + Flex, + ListItem, + Radio, + RadioGroup, + Text, + UnorderedList, +} from '@chakra-ui/react'; import { convertToDiffusers } from 'app/socketio/actions'; import { RootState } from 'app/store'; import { useAppDispatch, useAppSelector } from 'app/storeHooks'; import IAIAlertDialog from 'common/components/IAIAlertDialog'; import IAIButton from 'common/components/IAIButton'; -import IAICheckbox from 'common/components/IAICheckbox'; import IAIInput from 'common/components/IAIInput'; import { setIsProcessing } from 'features/system/store/systemSlice'; import { useState, useEffect } from 'react'; @@ -23,9 +29,8 @@ export default function ModelConvert(props: ModelConvertProps) { const retrievedModel = model_list[model]; - const [isInpainting, setIsInpainting] = useState(false); - const [customConfig, setIsCustomConfig] = useState(false); const [pathToConfig, setPathToConfig] = useState(''); + const [modelType, setModelType] = useState('1'); const dispatch = useAppDispatch(); const { t } = useTranslation(); @@ -40,8 +45,7 @@ export default function ModelConvert(props: ModelConvertProps) { // Need to manually handle local state reset because the component does not re-render. const stateReset = () => { - setIsInpainting(false); - setIsCustomConfig(false); + setModelType('1'); setPathToConfig(''); }; @@ -58,8 +62,9 @@ export default function ModelConvert(props: ModelConvertProps) { const modelConvertHandler = () => { const modelConvertData = { name: model, - is_inpainting: isInpainting, - custom_config: customConfig && pathToConfig !== '' ? pathToConfig : null, + model_type: modelType, + custom_config: + modelType === 'custom' && pathToConfig !== '' ? pathToConfig : null, }; dispatch(setIsProcessing(true)); @@ -86,6 +91,7 @@ export default function ModelConvert(props: ModelConvertProps) { 🧨 {t('modelmanager:convertToDiffusers')} } + motionPreset="slideInBottom" > {t('modelmanager:convertToDiffusersHelpText1')} @@ -96,46 +102,37 @@ export default function ModelConvert(props: ModelConvertProps) { {t('modelmanager:convertToDiffusersHelpText5')} {t('modelmanager:convertToDiffusersHelpText6')} - + setModelType(v)} + defaultValue="1" + name="model_type" + > - { - setIsInpainting(!isInpainting); - setIsCustomConfig(false); + {t('modelmanager:v1')} + {t('modelmanager:v2')} + {t('modelmanager:inpainting')} + {t('modelmanager:custom')} + + + {modelType === 'custom' && ( + + + {t('modelmanager:pathToCustomConfig')} + + { + if (e.target.value !== '') setPathToConfig(e.target.value); }} - label={t('modelmanager:inpaintingModel')} - isDisabled={customConfig} - /> - { - setIsCustomConfig(!customConfig); - setIsInpainting(false); - }} - label={t('modelmanager:customConfig')} - isDisabled={isInpainting} + width="25rem" /> - {customConfig && ( - - - {t('modelmanager:pathToCustomConfig')} - - { - if (e.target.value !== '') setPathToConfig(e.target.value); - }} - width="25rem" - /> - - )} - + )} );