Skip to content

Commit 930de51

Browse files
feat(ui): add badges for advanced settings
1 parent b1b5c0d commit 930de51

File tree

4 files changed

+43
-7
lines changed

4 files changed

+43
-7
lines changed

invokeai/frontend/web/src/common/components/InvAccordion/InvAccordionButton.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,19 @@ import {
33
Spacer,
44
} from '@chakra-ui/react';
55
import { InvBadge } from 'common/components/InvBadge/wrapper';
6+
import { truncate } from 'lodash-es';
7+
import { useMemo } from 'react';
68

79
import type { InvAccordionButtonProps } from './types';
810
import { InvAccordionIcon } from './wrapper';
911

1012
export const InvAccordionButton = (props: InvAccordionButtonProps) => {
11-
const { children, badges, ...rest } = props;
13+
const { children, badges: _badges, ...rest } = props;
14+
const badges = useMemo<string[] | undefined>(
15+
() =>
16+
_badges?.map((b) => truncate(String(b), { length: 24, omission: '...' })),
17+
[_badges]
18+
);
1219
return (
1320
<ChakraAccordionButton {...rest}>
1421
{children}

invokeai/frontend/web/src/common/components/InvBadge/theme.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { defineStyle, defineStyleConfig } from '@chakra-ui/react';
22

33
const baseStyle = defineStyle((props) => ({
4-
fontSize: '10px',
4+
fontSize: '9px',
55
px: 2,
66
py: 1,
77
minW: 4,
@@ -11,6 +11,10 @@ const baseStyle = defineStyle((props) => ({
1111
color: 'base.900',
1212
fontWeight: 'bold',
1313
letterSpacing: 0.5,
14+
wordBreak: 'break-all',
15+
whiteSpace: 'nowrap',
16+
textOverflow: 'ellipsis',
17+
overflow: 'hidden'
1418
}));
1519

1620
export const badgeTheme = defineStyleConfig({

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

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
import { Flex } from '@chakra-ui/layout';
2+
import { createMemoizedSelector } from 'app/store/createMemoizedSelector';
3+
import { stateSelector } from 'app/store/store';
4+
import { useAppSelector } from 'app/store/storeHooks';
25
import { InvControlGroup } from 'common/components/InvControl/InvControlGroup';
36
import type { InvLabelProps } from 'common/components/InvControl/types';
47
import { InvSingleAccordion } from 'common/components/InvSingleAccordion/InvSingleAccordion';
@@ -19,11 +22,35 @@ const labelProps2: InvLabelProps = {
1922
flexGrow: 1,
2023
};
2124

25+
const selectBadges = createMemoizedSelector(stateSelector, (state) => {
26+
const badges: (string | number)[] = [];
27+
if (state.generation.vae) {
28+
let vaeBadge = state.generation.vae.model_name;
29+
if (state.generation.vaePrecision === 'fp16') {
30+
vaeBadge += ` ${state.generation.vaePrecision}`;
31+
}
32+
badges.push(vaeBadge);
33+
} else if (state.generation.vaePrecision === 'fp16') {
34+
badges.push(`VAE ${state.generation.vaePrecision}`);
35+
}
36+
if (state.generation.clipSkip) {
37+
badges.push(`Skip ${state.generation.clipSkip}`);
38+
}
39+
if (state.generation.cfgRescaleMultiplier) {
40+
badges.push(`Rescale ${state.generation.cfgRescaleMultiplier}`);
41+
}
42+
if (state.generation.seamlessXAxis || state.generation.seamlessYAxis) {
43+
badges.push('seamless');
44+
}
45+
return badges;
46+
});
47+
2248
export const AdvancedSettingsAccordion = memo(() => {
49+
const badges = useAppSelector(selectBadges);
2350
const { t } = useTranslation();
2451

2552
return (
26-
<InvSingleAccordion label={t('accordions.advanced.title')}>
53+
<InvSingleAccordion label={t('accordions.advanced.title')} badges={badges}>
2754
<Flex gap={4} alignItems="center" p={4} flexDir="column">
2855
<Flex gap={4} w="full">
2956
<ParamVAEModelSelect />

invokeai/frontend/web/src/features/settingsAccordions/GenerationSettingsAccordion/GenerationSettingsAccordion.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import ParamCFGScale from 'features/parameters/components/Core/ParamCFGScale';
2020
import ParamScheduler from 'features/parameters/components/Core/ParamScheduler';
2121
import ParamSteps from 'features/parameters/components/Core/ParamSteps';
2222
import ParamMainModelSelect from 'features/parameters/components/MainModel/ParamMainModelSelect';
23-
import { size, truncate } from 'lodash-es';
23+
import { size } from 'lodash-es';
2424
import { memo } from 'react';
2525
import { useTranslation } from 'react-i18next';
2626

@@ -34,9 +34,7 @@ const badgesSelector = createMemoizedSelector(
3434
const loraTabBadges = size(lora.loras) ? [size(lora.loras)] : [];
3535
const accordionBadges: (string | number)[] = [];
3636
if (generation.model) {
37-
accordionBadges.push(
38-
truncate(generation.model.model_name, { length: 24, omission: '...' })
39-
);
37+
accordionBadges.push(generation.model.model_name);
4038
accordionBadges.push(generation.model.base_model);
4139
}
4240

0 commit comments

Comments
 (0)