Skip to content

Commit e56d41a

Browse files
psychedeliciousmaryhipp
authored andcommitted
feat: rip out enhance prompt as toggleable option, imagen always randomizes seed
1 parent 273dfd8 commit e56d41a

File tree

10 files changed

+28
-81
lines changed

10 files changed

+28
-81
lines changed

invokeai/frontend/web/src/features/controlLayers/store/paramsSlice.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ export type ParamsState = {
7979
clipLEmbedModel: ParameterCLIPLEmbedModel | null;
8080
clipGEmbedModel: ParameterCLIPGEmbedModel | null;
8181
controlLora: ParameterControlLoRAModel | null;
82-
imagen3EnhancePrompt: boolean;
8382
};
8483

8584
const initialState: ParamsState = {
@@ -129,7 +128,6 @@ const initialState: ParamsState = {
129128
clipLEmbedModel: null,
130129
clipGEmbedModel: null,
131130
controlLora: null,
132-
imagen3EnhancePrompt: true,
133131
};
134132

135133
export const paramsSlice = createSlice({
@@ -292,9 +290,6 @@ export const paramsSlice = createSlice({
292290
setCanvasCoherenceMinDenoise: (state, action: PayloadAction<number>) => {
293291
state.canvasCoherenceMinDenoise = action.payload;
294292
},
295-
imagen3EnhancePromptChanged: (state, action: PayloadAction<boolean>) => {
296-
state.imagen3EnhancePrompt = action.payload;
297-
},
298293
paramsReset: (state) => resetState(state),
299294
},
300295
extraReducers(builder) {
@@ -362,7 +357,6 @@ export const {
362357
setRefinerStart,
363358
modelChanged,
364359
paramsReset,
365-
imagen3EnhancePromptChanged,
366360
} = paramsSlice.actions;
367361

368362
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
@@ -421,7 +415,6 @@ export const selectNegativePrompt = createParamsSelector((params) => params.nega
421415
export const selectPositivePrompt2 = createParamsSelector((params) => params.positivePrompt2);
422416
export const selectNegativePrompt2 = createParamsSelector((params) => params.negativePrompt2);
423417
export const selectShouldConcatPrompts = createParamsSelector((params) => params.shouldConcatPrompts);
424-
export const selectImagen3EnhancePrompt = createParamsSelector((params) => params.imagen3EnhancePrompt);
425418
export const selectScheduler = createParamsSelector((params) => params.scheduler);
426419
export const selectSeamlessXAxis = createParamsSelector((params) => params.seamlessXAxis);
427420
export const selectSeamlessYAxis = createParamsSelector((params) => params.seamlessYAxis);

invokeai/frontend/web/src/features/nodes/util/graph/buildLinearBatchConfig.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
import { NUMPY_RAND_MAX, NUMPY_RAND_MIN } from 'app/constants';
12
import type { RootState } from 'app/store/store';
23
import { generateSeeds } from 'common/util/generateSeeds';
4+
import randomInt from 'common/util/randomInt';
35
import type { FieldIdentifier } from 'features/nodes/types/field';
46
import type { Graph } from 'features/nodes/util/graph/generation/Graph';
57
import { range } from 'lodash-es';
@@ -26,7 +28,9 @@ export const prepareLinearUIBatch = (
2628
if (seedBehaviour === 'PER_PROMPT') {
2729
const seeds = generateSeeds({
2830
count: prompts.length * iterations,
29-
start: shouldRandomizeSeed ? undefined : seed,
31+
// Imagen3's support for seeded generation is iffy, we are just not going too use in in linear UI generations.
32+
start:
33+
model?.base === 'imagen3' ? randomInt(NUMPY_RAND_MIN, NUMPY_RAND_MAX) : shouldRandomizeSeed ? undefined : seed,
3034
});
3135

3236
firstBatchDatumList.push({

invokeai/frontend/web/src/features/nodes/util/graph/generation/buildImagen3Graph.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import type { RootState } from 'app/store/store';
33
import type { CanvasManager } from 'features/controlLayers/konva/CanvasManager';
44
import { getPrefixedId } from 'features/controlLayers/konva/util';
55
import { selectCanvasSettingsSlice } from 'features/controlLayers/store/canvasSettingsSlice';
6-
import { selectParamsSlice } from 'features/controlLayers/store/paramsSlice';
76
import { selectCanvasSlice } from 'features/controlLayers/store/selectors';
87
import { isImagen3AspectRatioID } from 'features/controlLayers/store/types';
98
import type { FieldIdentifier } from 'features/nodes/types/field';
@@ -32,12 +31,10 @@ export const buildImagen3Graph = async (
3231

3332
log.debug({ generationMode }, 'Building Imagen3 graph');
3433

35-
const params = selectParamsSlice(state);
3634
const canvas = selectCanvasSlice(state);
3735
const canvasSettings = selectCanvasSettingsSlice(state);
3836

3937
const { bbox } = canvas;
40-
const { seed, imagen3EnhancePrompt: enhance_prompt } = params;
4138
const { positivePrompt, negativePrompt } = selectPresetModifiedPrompts(state);
4239

4340
assert(isImagen3AspectRatioID(bbox.aspectRatio.id), 'Imagen3 does not support this aspect ratio');
@@ -54,10 +51,9 @@ export const buildImagen3Graph = async (
5451
positive_prompt: positivePrompt,
5552
negative_prompt: negativePrompt,
5653
aspect_ratio: bbox.aspectRatio.id,
57-
seed,
58-
enhance_prompt,
54+
enhance_prompt: true,
5955
// When enhance_prompt is true, Imagen3 will return a new image every time, ignoring the seed.
60-
use_cache: !enhance_prompt,
56+
use_cache: false,
6157
is_intermediate,
6258
board,
6359
});
@@ -81,7 +77,6 @@ export const buildImagen3Graph = async (
8177
id: getPrefixedId(CANVAS_OUTPUT_PREFIX),
8278
positive_prompt: positivePrompt,
8379
negative_prompt: negativePrompt,
84-
seed,
8580
base_image: { image_name },
8681
is_intermediate,
8782
board,

invokeai/frontend/web/src/features/parameters/components/Core/Imagen3EnhancePromptButton.tsx

Lines changed: 0 additions & 37 deletions
This file was deleted.

invokeai/frontend/web/src/features/parameters/components/Core/ParamPositivePrompt.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { Box, Textarea } from '@invoke-ai/ui-library';
22
import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
33
import { positivePromptChanged, selectBase, selectPositivePrompt } from 'features/controlLayers/store/paramsSlice';
44
import { ShowDynamicPromptsPreviewButton } from 'features/dynamicPrompts/components/ShowDynamicPromptsPreviewButton';
5-
import { Imagen3EnhancePromptButton } from 'features/parameters/components/Core/Imagen3EnhancePromptButton';
65
import { PromptLabel } from 'features/parameters/components/Prompts/PromptLabel';
76
import { PromptOverlayButtonWrapper } from 'features/parameters/components/Prompts/PromptOverlayButtonWrapper';
87
import { ViewModePrompt } from 'features/parameters/components/Prompts/ViewModePrompt';
@@ -88,7 +87,6 @@ export const ParamPositivePrompt = memo(() => {
8887
<PromptOverlayButtonWrapper>
8988
<AddPromptTriggerButton isOpen={isOpen} onOpen={onOpen} />
9089
{baseModel === 'sdxl' && <SDXLConcatButton />}
91-
{baseModel === 'imagen3' && <Imagen3EnhancePromptButton />}
9290
<ShowDynamicPromptsPreviewButton />
9391
</PromptOverlayButtonWrapper>
9492
<PromptLabel label={t('parameters.positivePromptPlaceholder')} />

invokeai/frontend/web/src/features/parameters/components/Seed/ParamSeedNumberInput.tsx

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,13 @@ import { CompositeNumberInput, FormControl, FormLabel } from '@invoke-ai/ui-libr
22
import { NUMPY_RAND_MAX, NUMPY_RAND_MIN } from 'app/constants';
33
import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
44
import { InformationalPopover } from 'common/components/InformationalPopover/InformationalPopover';
5-
import {
6-
selectImagen3EnhancePrompt,
7-
selectIsImagen3,
8-
selectSeed,
9-
selectShouldRandomizeSeed,
10-
setSeed,
11-
} from 'features/controlLayers/store/paramsSlice';
5+
import { selectSeed, selectShouldRandomizeSeed, setSeed } from 'features/controlLayers/store/paramsSlice';
126
import { memo, useCallback } from 'react';
137
import { useTranslation } from 'react-i18next';
148

159
export const ParamSeedNumberInput = memo(() => {
1610
const seed = useAppSelector(selectSeed);
1711
const shouldRandomizeSeed = useAppSelector(selectShouldRandomizeSeed);
18-
const isImagen3 = useAppSelector(selectIsImagen3);
19-
const imagen3EnhancePrompt = useAppSelector(selectImagen3EnhancePrompt);
2012

2113
const { t } = useTranslation();
2214

@@ -25,7 +17,7 @@ export const ParamSeedNumberInput = memo(() => {
2517
const handleChangeSeed = useCallback((v: number) => dispatch(setSeed(v)), [dispatch]);
2618

2719
return (
28-
<FormControl flexGrow={1} isDisabled={shouldRandomizeSeed || (isImagen3 && imagen3EnhancePrompt)}>
20+
<FormControl flexGrow={1} isDisabled={shouldRandomizeSeed}>
2921
<InformationalPopover feature="paramSeed">
3022
<FormLabel>{t('parameters.seed')}</FormLabel>
3123
</InformationalPopover>

invokeai/frontend/web/src/features/parameters/components/Seed/ParamSeedRandomize.tsx

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,13 @@
11
import { FormControl, FormLabel, Switch } from '@invoke-ai/ui-library';
22
import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
3-
import {
4-
selectImagen3EnhancePrompt,
5-
selectIsImagen3,
6-
selectShouldRandomizeSeed,
7-
setShouldRandomizeSeed,
8-
} from 'features/controlLayers/store/paramsSlice';
3+
import { selectShouldRandomizeSeed, setShouldRandomizeSeed } from 'features/controlLayers/store/paramsSlice';
94
import type { ChangeEvent } from 'react';
105
import { memo, useCallback } from 'react';
116
import { useTranslation } from 'react-i18next';
127

138
export const ParamSeedRandomize = memo(() => {
149
const dispatch = useAppDispatch();
1510
const { t } = useTranslation();
16-
const isImagen3 = useAppSelector(selectIsImagen3);
17-
const imagen3EnhancePrompt = useAppSelector(selectImagen3EnhancePrompt);
1811

1912
const shouldRandomizeSeed = useAppSelector(selectShouldRandomizeSeed);
2013

@@ -24,7 +17,7 @@ export const ParamSeedRandomize = memo(() => {
2417
);
2518

2619
return (
27-
<FormControl w="min-content" isDisabled={isImagen3 && imagen3EnhancePrompt}>
20+
<FormControl w="min-content">
2821
<FormLabel m={0}>{t('common.random')}</FormLabel>
2922
<Switch isChecked={shouldRandomizeSeed} onChange={handleChangeShouldRandomizeSeed} />
3023
</FormControl>

invokeai/frontend/web/src/features/parameters/components/Seed/ParamSeedShuffle.tsx

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ import { NUMPY_RAND_MAX, NUMPY_RAND_MIN } from 'app/constants';
33
import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
44
import randomInt from 'common/util/randomInt';
55
import {
6-
selectImagen3EnhancePrompt,
7-
selectIsImagen3,
86
selectShouldRandomizeSeed,
97
setSeed,
108
} from 'features/controlLayers/store/paramsSlice';
@@ -15,8 +13,6 @@ import { PiShuffleBold } from 'react-icons/pi';
1513
export const ParamSeedShuffle = memo(() => {
1614
const dispatch = useAppDispatch();
1715
const shouldRandomizeSeed = useAppSelector(selectShouldRandomizeSeed);
18-
const isImagen3 = useAppSelector(selectIsImagen3);
19-
const imagen3EnhancePrompt = useAppSelector(selectImagen3EnhancePrompt);
2016

2117
const { t } = useTranslation();
2218

@@ -28,7 +24,7 @@ export const ParamSeedShuffle = memo(() => {
2824
return (
2925
<Button
3026
size="sm"
31-
isDisabled={shouldRandomizeSeed || (isImagen3 && imagen3EnhancePrompt)}
27+
isDisabled={shouldRandomizeSeed}
3228
onClick={handleClickRandomizeSeed}
3329
leftIcon={<PiShuffleBold />}
3430
flexShrink={0}

invokeai/frontend/web/src/features/settingsAccordions/components/AdvancedSettingsAccordion/AdvancedSettingsAccordion.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,12 @@ import { Flex, FormControlGroup, StandaloneAccordion } from '@invoke-ai/ui-libra
33
import { skipToken } from '@reduxjs/toolkit/query';
44
import { createMemoizedSelector } from 'app/store/createMemoizedSelector';
55
import { useAppSelector } from 'app/store/storeHooks';
6-
import { selectIsFLUX, selectIsSD3, selectParamsSlice, selectVAEKey } from 'features/controlLayers/store/paramsSlice';
6+
import {
7+
selectIsFLUX,
8+
selectIsSD3,
9+
selectParamsSlice,
10+
selectVAEKey,
11+
} from 'features/controlLayers/store/paramsSlice';
712
import ParamCFGRescaleMultiplier from 'features/parameters/components/Advanced/ParamCFGRescaleMultiplier';
813
import ParamCLIPEmbedModelSelect from 'features/parameters/components/Advanced/ParamCLIPEmbedModelSelect';
914
import ParamCLIPGEmbedModelSelect from 'features/parameters/components/Advanced/ParamCLIPGEmbedModelSelect';

invokeai/frontend/web/src/features/settingsAccordions/components/ImageSettingsAccordion/ImageSettingsAccordion.tsx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,17 @@ export const ImageSettingsAccordion = memo(() => {
7373
isOpen={isOpenAccordion}
7474
onToggle={onToggleAccordion}
7575
>
76-
<Flex px={4} pt={4} w="full" h="full" flexDir="column" data-testid="image-settings-accordion">
76+
<Flex
77+
px={4}
78+
pt={4}
79+
pb={isImagen3 ? 4 : 0}
80+
w="full"
81+
h="full"
82+
flexDir="column"
83+
data-testid="image-settings-accordion"
84+
>
7785
<BboxSettings />
78-
<ParamSeed py={3} />
86+
{!isImagen3 && <ParamSeed py={3} />}
7987
{!isImagen3 && (
8088
<Expander label={t('accordions.advanced.options')} isOpen={isOpenExpander} onToggle={onToggleExpander}>
8189
<Flex gap={4} pb={4} flexDir="column">

0 commit comments

Comments
 (0)