diff --git a/invokeai/frontend/web/src/features/controlLayers/store/paramsSlice.ts b/invokeai/frontend/web/src/features/controlLayers/store/paramsSlice.ts index ac5e4c1529..d05d40849c 100644 --- a/invokeai/frontend/web/src/features/controlLayers/store/paramsSlice.ts +++ b/invokeai/frontend/web/src/features/controlLayers/store/paramsSlice.ts @@ -94,7 +94,12 @@ const slice = createSlice({ state, action: PayloadAction<{ model: ParameterModel | null; previousModel?: ParameterModel | null }> ) => { - const { model, previousModel } = action.payload; + const { previousModel } = action.payload; + const result = zParamsState.shape.model.safeParse(action.payload.model); + if (!result.success) { + return; + } + const model = result.data; state.model = model; // If the model base changes (e.g. SD1.5 -> SDXL), we need to change a few things @@ -113,25 +118,53 @@ const slice = createSlice({ }, vaeSelected: (state, action: PayloadAction) => { // null is a valid VAE! - state.vae = action.payload; + const result = zParamsState.shape.vae.safeParse(action.payload); + if (!result.success) { + return; + } + state.vae = result.data; }, fluxVAESelected: (state, action: PayloadAction) => { - state.fluxVAE = action.payload; + const result = zParamsState.shape.fluxVAE.safeParse(action.payload); + if (!result.success) { + return; + } + state.fluxVAE = result.data; }, t5EncoderModelSelected: (state, action: PayloadAction) => { - state.t5EncoderModel = action.payload; + const result = zParamsState.shape.t5EncoderModel.safeParse(action.payload); + if (!result.success) { + return; + } + state.t5EncoderModel = result.data; }, controlLoRAModelSelected: (state, action: PayloadAction) => { - state.controlLora = action.payload; + const result = zParamsState.shape.controlLora.safeParse(action.payload); + if (!result.success) { + return; + } + state.controlLora = result.data; }, clipEmbedModelSelected: (state, action: PayloadAction) => { - state.clipEmbedModel = action.payload; + const result = zParamsState.shape.clipEmbedModel.safeParse(action.payload); + if (!result.success) { + return; + } + state.clipEmbedModel = result.data; }, clipLEmbedModelSelected: (state, action: PayloadAction) => { - state.clipLEmbedModel = action.payload; + const result = zParamsState.shape.clipLEmbedModel.safeParse(action.payload); + if (!result.success) { + return; + } + state.clipLEmbedModel = result.data; }, clipGEmbedModelSelected: (state, action: PayloadAction) => { - state.clipGEmbedModel = action.payload; + const result = zParamsState.shape.clipGEmbedModel.safeParse(action.payload); + if (!result.success) { + return; + } + state.clipGEmbedModel = result.data; }, vaePrecisionChanged: (state, action: PayloadAction) => { state.vaePrecision = action.payload; @@ -158,7 +191,11 @@ const slice = createSlice({ state.shouldConcatPrompts = action.payload; }, refinerModelChanged: (state, action: PayloadAction) => { - state.refinerModel = action.payload; + const result = zParamsState.shape.refinerModel.safeParse(action.payload); + if (!result.success) { + return; + } + state.refinerModel = result.data; }, setRefinerSteps: (state, action: PayloadAction) => { state.refinerSteps = action.payload; diff --git a/invokeai/frontend/web/src/features/parameters/store/upscaleSlice.ts b/invokeai/frontend/web/src/features/parameters/store/upscaleSlice.ts index 0bb47b6f2e..9604e961b0 100644 --- a/invokeai/frontend/web/src/features/parameters/store/upscaleSlice.ts +++ b/invokeai/frontend/web/src/features/parameters/store/upscaleSlice.ts @@ -44,7 +44,10 @@ const slice = createSlice({ initialState: getInitialState(), reducers: { upscaleModelChanged: (state, action: PayloadAction) => { - state.upscaleModel = action.payload; + const result = zUpscaleState.shape.upscaleModel.safeParse(action.payload); + if (result.success) { + state.upscaleModel = result.data; + } }, upscaleInitialImageChanged: (state, action: PayloadAction) => { state.upscaleInitialImage = action.payload; @@ -56,13 +59,19 @@ const slice = createSlice({ state.creativity = action.payload; }, tileControlnetModelChanged: (state, action: PayloadAction) => { - state.tileControlnetModel = action.payload; + const result = zUpscaleState.shape.tileControlnetModel.safeParse(action.payload); + if (result.success) { + state.tileControlnetModel = result.data; + } }, scaleChanged: (state, action: PayloadAction) => { state.scale = action.payload; }, postProcessingModelChanged: (state, action: PayloadAction) => { - state.postProcessingModel = action.payload; + const result = zUpscaleState.shape.postProcessingModel.safeParse(action.payload); + if (result.success) { + state.postProcessingModel = result.data; + } }, tileSizeChanged: (state, action: PayloadAction) => { state.tileSize = action.payload;