diff --git a/WebUI/src/assets/js/store/comfyUi.ts b/WebUI/src/assets/js/store/comfyUi.ts index 2fafb188..3f96bd02 100644 --- a/WebUI/src/assets/js/store/comfyUi.ts +++ b/WebUI/src/assets/js/store/comfyUi.ts @@ -114,7 +114,8 @@ export const useComfyUi = defineStore( modifiableSettings: [], comfyInputs: [], } - const generateIdx = ref(0) + let hashIds: string[] = [] + let generateIdx: number = 0 const backendServices = useBackendServices() const comfyUiState = computed(() => { @@ -249,7 +250,7 @@ export const useComfyUi = defineStore( console.log('image url', imageUrl) if (imageBlob) { const updatedImage: GeneratedImage = { - id: generateIdx.value, + id: hashIds[generateIdx], imageUrl: imageUrl, isLoading: true, infoParams: undefined, @@ -287,17 +288,17 @@ export const useComfyUi = defineStore( ...imageInfoParams, defaultInputs: { ...imageInfoParams.defaultInputs, - seed: Number(imageInfoParams.defaultInputs.seed) + generateIdx.value, + seed: Number(imageInfoParams.defaultInputs.seed) + generateIdx, }, }) const newImage: GeneratedImage = { - id: generateIdx.value, + id: hashIds[generateIdx], imageUrl: `${comfyBaseUrl.value}/view?filename=${imageFromOutput.filename}&type=${imageFromOutput.type}&subfolder=${imageFromOutput.subfolder ?? ''}`, isLoading: false, infoParams: infoParams, } imageGeneration.updateImage(newImage) - generateIdx.value++ + generateIdx++ console.log('executed', { detail: msg.data }) break case 'execution_start': @@ -443,7 +444,10 @@ export const useComfyUi = defineStore( current: i.current.value, })), } - generateIdx.value = 0 + hashIds = Array.from({ length: imageGeneration.batchSize }, () => + window.crypto.randomUUID(), + ) + generateIdx = 0 for (let i = 0; i < imageGeneration.batchSize; i++) { modifySettingInWorkflow(mutableWorkflow, 'seed', `${(seed + i).toFixed(0)}`) const result = await fetch(`${comfyBaseUrl.value}/prompt`, { diff --git a/WebUI/src/assets/js/store/imageGeneration.ts b/WebUI/src/assets/js/store/imageGeneration.ts index 9d9883d1..17fdcf72 100644 --- a/WebUI/src/assets/js/store/imageGeneration.ts +++ b/WebUI/src/assets/js/store/imageGeneration.ts @@ -35,7 +35,7 @@ export type ImageInfoParameter = { } export type GeneratedImage = { - id: number | string + id: string imageUrl: string isLoading: boolean infoParams: ImageInfoParameter | undefined @@ -745,7 +745,13 @@ export const useImageGeneration = defineStore( } async function generate() { + generatedImages.value = generatedImages.value.filter((item) => item.isLoading === false) + currentState.value = 'no_start' stepText.value = i18nState.COM_GENERATING + const inferenceBackendService: BackendServiceName = + backend.value === 'comfyui' ? 'comfyui-backend' : 'ai-backend' + await globalSetup.resetLastUsedInferenceBackend(inferenceBackendService) + globalSetup.updateLastUsedBackend(inferenceBackendService) if (activeWorkflow.value.backend === 'default') { await stableDiffusion.generate() } else { @@ -758,25 +764,12 @@ export const useImageGeneration = defineStore( comfyUi.stop() } - function deleteImage(id: number | string) { + function deleteImage(id: string) { generatedImages.value = generatedImages.value.filter((image) => image.id !== id) } - // ToDo: Refactor - function reset(deleteAllImages: boolean) { - storeGeneratedImages(deleteAllImages) - currentState.value = 'no_start' - stepText.value = '' - } - - function storeGeneratedImages(deleteAllImages: boolean): void { - if (deleteAllImages) { - generatedImages.value.length = 0 - } - generatedImages.value = generatedImages.value.filter((item) => item.isLoading === false) - generatedImages.value.forEach((item) => { - item.id = window.crypto.randomUUID() - }) + function deleteAllImages() { + generatedImages.value.length = 0 } loadWorkflowsFromJson() @@ -818,7 +811,7 @@ export const useImageGeneration = defineStore( generate, stopGeneration, deleteImage, - reset, + deleteAllImages, } }, { diff --git a/WebUI/src/assets/js/store/stableDiffusion.ts b/WebUI/src/assets/js/store/stableDiffusion.ts index ce23ad91..9d2c0843 100644 --- a/WebUI/src/assets/js/store/stableDiffusion.ts +++ b/WebUI/src/assets/js/store/stableDiffusion.ts @@ -25,6 +25,7 @@ export const useStableDiffusion = defineStore( let abortController: AbortController | null const generationParameters = ref() + let hashIds: string[] = [] async function generate() { if (imageGeneration.processing) { @@ -50,6 +51,9 @@ export const useStableDiffusion = defineStore( image_preview: imageGeneration.imagePreview, safe_check: imageGeneration.safeCheck, } + hashIds = Array.from({ length: imageGeneration.batchSize }, () => + window.crypto.randomUUID(), + ) await sendGenerate() } catch (_error: unknown) { } finally { @@ -120,7 +124,7 @@ export const useStableDiffusion = defineStore( output_seed: Number(data.params.seed), }) const newImage: GeneratedImage = { - id: data.index, + id: hashIds[data.index], imageUrl: data.image, isLoading: false, infoParams: infoParams, @@ -132,7 +136,7 @@ export const useStableDiffusion = defineStore( imageGeneration.currentState = 'generating' imageGeneration.stepText = `${i18nState.COM_GENERATING} ${data.step}/${data.total_step}` const updatedImage: GeneratedImage = { - id: data.index, + id: hashIds[data.index], imageUrl: data.image ?? '', isLoading: true, infoParams: undefined, diff --git a/WebUI/src/views/Create.vue b/WebUI/src/views/Create.vue index b86d5179..80ae3ac6 100644 --- a/WebUI/src/views/Create.vue +++ b/WebUI/src/views/Create.vue @@ -22,7 +22,7 @@