From f0d4c7196082de4bf65fa5ef486e176171e700f9 Mon Sep 17 00:00:00 2001 From: Jennifer Player Date: Mon, 19 Feb 2024 12:50:11 -0500 Subject: [PATCH 1/2] updated tooltip popovers --- .../InformationalPopover/constants.ts | 105 +++++++++++++++++- .../ParamControlAdapterBeginEnd.tsx | 11 +- .../ParamControlAdapterProcessorSelect.tsx | 5 +- .../hrf/components/ParamHrfMethod.tsx | 5 +- .../hrf/components/ParamHrfStrength.tsx | 5 +- .../hrf/components/ParamHrfToggle.tsx | 5 +- .../src/features/lora/components/LoRACard.tsx | 49 ++++---- .../features/lora/components/LoRASelect.tsx | 5 +- .../ParamInfillPatchmatchDownscaleSize.tsx | 5 +- .../components/Core/ParamHeight.tsx | 5 +- .../parameters/components/Core/ParamWidth.tsx | 5 +- .../ImageSize/AspectRatioSelect.tsx | 5 +- .../ImageToImage/ImageToImageFit.tsx | 5 +- .../MainModel/ParamMainModelSelect.tsx | 29 +++-- .../Seamless/ParamSeamlessXAxis.tsx | 5 +- .../Seamless/ParamSeamlessYAxis.tsx | 5 +- .../SDXLRefiner/ParamSDXLRefinerCFGScale.tsx | 5 +- .../ParamSDXLRefinerModelSelect.tsx | 5 +- ...ParamSDXLRefinerNegativeAestheticScore.tsx | 5 +- ...ParamSDXLRefinerPositiveAestheticScore.tsx | 5 +- .../SDXLRefiner/ParamSDXLRefinerScheduler.tsx | 5 +- .../SDXLRefiner/ParamSDXLRefinerStart.tsx | 5 +- .../SDXLRefiner/ParamSDXLRefinerSteps.tsx | 5 +- 23 files changed, 224 insertions(+), 65 deletions(-) diff --git a/invokeai/frontend/web/src/common/components/InformationalPopover/constants.ts b/invokeai/frontend/web/src/common/components/InformationalPopover/constants.ts index bdcd1ca9a4..2e88c28df6 100644 --- a/invokeai/frontend/web/src/common/components/InformationalPopover/constants.ts +++ b/invokeai/frontend/web/src/common/components/InformationalPopover/constants.ts @@ -13,28 +13,46 @@ export type Feature = | 'compositingCoherenceSteps' | 'compositingStrength' | 'compositingMaskAdjustments' + | 'controlNet' | 'controlNetBeginEnd' | 'controlNetControlMode' + | 'controlNetProcessor' | 'controlNetResizeMode' - | 'controlNet' | 'controlNetWeight' | 'dynamicPrompts' | 'dynamicPromptsMaxPrompts' | 'dynamicPromptsSeedBehaviour' + | 'imageFit' | 'infillMethod' | 'lora' + | 'loraWeight' | 'noiseUseCPU' + | 'paramAspect' | 'paramCFGScale' | 'paramCFGRescaleMultiplier' | 'paramDenoisingStrength' + | 'paramHeight' + | 'paramHrf' | 'paramIterations' | 'paramModel' | 'paramRatio' | 'paramSeed' | 'paramSteps' + | 'paramUpscaleMethod' | 'paramVAE' | 'paramVAEPrecision' - | 'scaleBeforeProcessing'; + | 'paramWidth' + | 'patchmatchDownScaleSize' + | 'refinerModel' + | 'refinerNegativeAestheticScore' + | 'refinerPositiveAestheticScore' + | 'refinerScheduler' + | 'refinerStart' + | 'refinerSteps' + | 'refinerCfgScale' + | 'scaleBeforeProcessing' + | 'seamlessTilingXAxis' + | 'seamlessTilingYAxis'; export type PopoverData = PopoverProps & { image?: string; @@ -46,21 +64,57 @@ export const POPOVER_DATA: { [key in Feature]?: PopoverData } = { paramNegativeConditioning: { placement: 'right', }, + clipSkip: { + href: 'https://support.invoke.ai/support/solutions/articles/151000178161-advanced-settings', + }, controlNet: { href: 'https://support.invoke.ai/support/solutions/articles/151000105880', }, + controlNetBeginEnd: { + href: 'https://support.invoke.ai/support/solutions/articles/151000178148', + }, + controlNetWeight: { + href: 'https://support.invoke.ai/support/solutions/articles/151000178148', + }, lora: { href: 'https://support.invoke.ai/support/solutions/articles/151000159072', }, + loraWeight: { + href: 'https://support.invoke.ai/support/solutions/articles/151000159072-concepts-low-rank-adaptations-loras-', + }, + compositingBlur: { + href: 'https://support.invoke.ai/support/solutions/articles/151000158838-compositing-settings', + }, + compositingBlurMethod: { + href: 'https://support.invoke.ai/support/solutions/articles/151000158838-compositing-settings', + }, compositingCoherenceMode: { - href: 'https://support.invoke.ai/support/solutions/articles/151000158838', + href: 'https://support.invoke.ai/support/solutions/articles/151000158838-compositing-settings', + }, + compositingCoherenceSteps: { + href: 'https://support.invoke.ai/support/solutions/articles/151000158838-compositing-settings', + }, + compositingStrength: { + href: 'https://support.invoke.ai/support/solutions/articles/151000158838-compositing-settings', }, infillMethod: { - href: 'https://support.invoke.ai/support/solutions/articles/151000158841', + href: 'https://support.invoke.ai/support/solutions/articles/151000158841-infill-and-scaling', }, scaleBeforeProcessing: { href: 'https://support.invoke.ai/support/solutions/articles/151000158841', }, + paramCFGScale: { + href: 'https://www.youtube.com/watch?v=1OeHEJrsTpI', + }, + paramCFGRescaleMultiplier: { + href: 'https://support.invoke.ai/support/solutions/articles/151000178161-advanced-settings', + }, + paramDenoisingStrength: { + href: 'https://support.invoke.ai/support/solutions/articles/151000094998-image-to-image', + }, + paramHrf: { + href: 'https://support.invoke.ai/support/solutions/articles/151000096700-how-can-i-get-larger-images-what-does-upscaling-do-', + }, paramIterations: { href: 'https://support.invoke.ai/support/solutions/articles/151000159073', }, @@ -70,7 +124,10 @@ export const POPOVER_DATA: { [key in Feature]?: PopoverData } = { }, paramScheduler: { placement: 'right', - href: 'https://support.invoke.ai/support/solutions/articles/151000159073', + href: 'https://www.youtube.com/watch?v=1OeHEJrsTpI', + }, + paramSeed: { + href: 'https://support.invoke.ai/support/solutions/articles/151000096684-what-is-a-seed-how-do-i-use-it-to-recreate-the-same-image-', }, paramModel: { placement: 'right', @@ -81,15 +138,53 @@ export const POPOVER_DATA: { [key in Feature]?: PopoverData } = { }, controlNetControlMode: { placement: 'right', + href: 'https://support.invoke.ai/support/solutions/articles/151000178148', + }, + controlNetProcessor: { + placement: 'right', + href: 'https://support.invoke.ai/support/solutions/articles/151000105880-using-controlnet', }, controlNetResizeMode: { placement: 'right', + href: 'https://support.invoke.ai/support/solutions/articles/151000178148', }, paramVAE: { placement: 'right', + href: 'https://support.invoke.ai/support/solutions/articles/151000178161-advanced-settings', }, paramVAEPrecision: { placement: 'right', + href: 'https://support.invoke.ai/support/solutions/articles/151000178161-advanced-settings', + }, + paramUpscaleMethod: { + href: 'https://support.invoke.ai/support/solutions/articles/151000096700-how-can-i-get-larger-images-what-does-upscaling-do-', + }, + refinerModel: { + href: 'https://support.invoke.ai/support/solutions/articles/151000178333-using-the-refiner', + }, + refinerNegativeAestheticScore: { + href: 'https://support.invoke.ai/support/solutions/articles/151000178333-using-the-refiner', + }, + refinerPositiveAestheticScore: { + href: 'https://support.invoke.ai/support/solutions/articles/151000178333-using-the-refiner', + }, + refinerScheduler: { + href: 'https://support.invoke.ai/support/solutions/articles/151000178333-using-the-refiner', + }, + refinerStart: { + href: 'https://support.invoke.ai/support/solutions/articles/151000178333-using-the-refiner', + }, + refinerSteps: { + href: 'https://support.invoke.ai/support/solutions/articles/151000178333-using-the-refiner', + }, + refinerCfgScale: { + href: 'https://support.invoke.ai/support/solutions/articles/151000178333-using-the-refiner', + }, + seamlessTilingXAxis: { + href: 'https://support.invoke.ai/support/solutions/articles/151000178161-advanced-settings', + }, + seamlessTilingYAxis: { + href: 'https://support.invoke.ai/support/solutions/articles/151000178161-advanced-settings', }, } as const; diff --git a/invokeai/frontend/web/src/features/controlAdapters/components/parameters/ParamControlAdapterBeginEnd.tsx b/invokeai/frontend/web/src/features/controlAdapters/components/parameters/ParamControlAdapterBeginEnd.tsx index a62f7e7d8a..245c182b9f 100644 --- a/invokeai/frontend/web/src/features/controlAdapters/components/parameters/ParamControlAdapterBeginEnd.tsx +++ b/invokeai/frontend/web/src/features/controlAdapters/components/parameters/ParamControlAdapterBeginEnd.tsx @@ -1,5 +1,6 @@ import { CompositeRangeSlider, FormControl, FormLabel } from '@invoke-ai/ui-library'; import { useAppDispatch } from 'app/store/storeHooks'; +import { InformationalPopover } from 'common/components/InformationalPopover/InformationalPopover'; import { useControlAdapterBeginEndStepPct } from 'features/controlAdapters/hooks/useControlAdapterBeginEndStepPct'; import { useControlAdapterIsEnabled } from 'features/controlAdapters/hooks/useControlAdapterIsEnabled'; import { @@ -61,12 +62,10 @@ export const ParamControlAdapterBeginEnd = memo(({ id }: Props) => { } return ( - - {t('controlnet.beginEndStepPercent')} + + + {t('controlnet.beginEndStepPercent')} + { } return ( - {t('controlnet.processor')} + + {t('controlnet.processor')} + ); diff --git a/invokeai/frontend/web/src/features/hrf/components/ParamHrfMethod.tsx b/invokeai/frontend/web/src/features/hrf/components/ParamHrfMethod.tsx index 8a94544233..65f65240fc 100644 --- a/invokeai/frontend/web/src/features/hrf/components/ParamHrfMethod.tsx +++ b/invokeai/frontend/web/src/features/hrf/components/ParamHrfMethod.tsx @@ -1,6 +1,7 @@ import type { ComboboxOnChange, ComboboxOption } from '@invoke-ai/ui-library'; import { Combobox, FormControl, FormLabel } from '@invoke-ai/ui-library'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; +import { InformationalPopover } from 'common/components/InformationalPopover/InformationalPopover'; import { setHrfMethod } from 'features/hrf/store/hrfSlice'; import { isParameterHRFMethod } from 'features/parameters/types/parameterSchemas'; import { memo, useCallback, useMemo } from 'react'; @@ -30,7 +31,9 @@ const ParamHrfMethodSelect = () => { return ( - {t('hrf.upscaleMethod')} + + {t('hrf.upscaleMethod')} + ); diff --git a/invokeai/frontend/web/src/features/hrf/components/ParamHrfStrength.tsx b/invokeai/frontend/web/src/features/hrf/components/ParamHrfStrength.tsx index c663989b08..3cb9f7e528 100644 --- a/invokeai/frontend/web/src/features/hrf/components/ParamHrfStrength.tsx +++ b/invokeai/frontend/web/src/features/hrf/components/ParamHrfStrength.tsx @@ -1,5 +1,6 @@ import { CompositeNumberInput, CompositeSlider, FormControl, FormLabel } from '@invoke-ai/ui-library'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; +import { InformationalPopover } from 'common/components/InformationalPopover/InformationalPopover'; import { setHrfStrength } from 'features/hrf/store/hrfSlice'; import { memo, useCallback } from 'react'; import { useTranslation } from 'react-i18next'; @@ -25,7 +26,9 @@ const ParamHrfStrength = () => { return ( - {t('parameters.denoisingStrength')} + + {`${t('parameters.denoisingStrength')}`} + { return ( - {t('hrf.enableHrf')} + + {t('hrf.enableHrf')} + ); diff --git a/invokeai/frontend/web/src/features/lora/components/LoRACard.tsx b/invokeai/frontend/web/src/features/lora/components/LoRACard.tsx index caedde875a..28bd8afe95 100644 --- a/invokeai/frontend/web/src/features/lora/components/LoRACard.tsx +++ b/invokeai/frontend/web/src/features/lora/components/LoRACard.tsx @@ -10,6 +10,7 @@ import { Text, } from '@invoke-ai/ui-library'; import { useAppDispatch } from 'app/store/storeHooks'; +import { InformationalPopover } from 'common/components/InformationalPopover/InformationalPopover'; import type { LoRA } from 'features/lora/store/loraSlice'; import { loraIsEnabledChanged, loraRemoved, loraWeightChanged } from 'features/lora/store/loraSlice'; import { memo, useCallback } from 'react'; @@ -57,29 +58,31 @@ export const LoRACard = memo((props: LoRACardProps) => { - - - - + + + + + + ); }); diff --git a/invokeai/frontend/web/src/features/lora/components/LoRASelect.tsx b/invokeai/frontend/web/src/features/lora/components/LoRASelect.tsx index 30ef99d2f7..ed70a4d44a 100644 --- a/invokeai/frontend/web/src/features/lora/components/LoRASelect.tsx +++ b/invokeai/frontend/web/src/features/lora/components/LoRASelect.tsx @@ -2,6 +2,7 @@ import type { ChakraProps } from '@invoke-ai/ui-library'; import { Combobox, FormControl, FormLabel } from '@invoke-ai/ui-library'; import { createMemoizedSelector } from 'app/store/createMemoizedSelector'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; +import { InformationalPopover } from 'common/components/InformationalPopover/InformationalPopover'; import { useGroupedModelCombobox } from 'common/hooks/useGroupedModelCombobox'; import { loraAdded, selectLoraSlice } from 'features/lora/store/loraSlice'; import { memo, useCallback, useMemo } from 'react'; @@ -57,7 +58,9 @@ const LoRASelect = () => { return ( - {t('models.lora')} + + {t('models.lora')} + { return ( - {t('parameters.patchmatchDownScaleSize')} + + {t('parameters.patchmatchDownScaleSize')} + { return ( - {t('parameters.height')} + + {t('parameters.height')} + { return ( - {t('parameters.width')} + + {t('parameters.width')} + { return ( - {t('parameters.aspect')} + + {t('parameters.aspect')} + ); diff --git a/invokeai/frontend/web/src/features/parameters/components/ImageToImage/ImageToImageFit.tsx b/invokeai/frontend/web/src/features/parameters/components/ImageToImage/ImageToImageFit.tsx index 9c41b2d56c..a772daa177 100644 --- a/invokeai/frontend/web/src/features/parameters/components/ImageToImage/ImageToImageFit.tsx +++ b/invokeai/frontend/web/src/features/parameters/components/ImageToImage/ImageToImageFit.tsx @@ -1,6 +1,7 @@ import { FormControl, FormLabel, Switch } from '@invoke-ai/ui-library'; import type { RootState } from 'app/store/store'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; +import { InformationalPopover } from 'common/components/InformationalPopover/InformationalPopover'; import { setShouldFitToWidthHeight } from 'features/parameters/store/generationSlice'; import type { ChangeEvent } from 'react'; import { memo, useCallback } from 'react'; @@ -22,7 +23,9 @@ const ImageToImageFit = () => { return ( - {t('parameters.imageFit')} + + {t('parameters.imageFit')} + ); diff --git a/invokeai/frontend/web/src/features/parameters/components/MainModel/ParamMainModelSelect.tsx b/invokeai/frontend/web/src/features/parameters/components/MainModel/ParamMainModelSelect.tsx index 13e03962b4..c6c77b5fe9 100644 --- a/invokeai/frontend/web/src/features/parameters/components/MainModel/ParamMainModelSelect.tsx +++ b/invokeai/frontend/web/src/features/parameters/components/MainModel/ParamMainModelSelect.tsx @@ -1,6 +1,7 @@ -import { Combobox, FormControl, FormLabel, Tooltip } from '@invoke-ai/ui-library'; +import { Box, Combobox, FormControl, FormLabel, Tooltip } from '@invoke-ai/ui-library'; import { createMemoizedSelector } from 'app/store/createMemoizedSelector'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; +import { InformationalPopover } from 'common/components/InformationalPopover/InformationalPopover'; import { useGroupedModelCombobox } from 'common/hooks/useGroupedModelCombobox'; import { modelSelected } from 'features/parameters/store/actions'; import { selectGenerationSlice } from 'features/parameters/store/generationSlice'; @@ -41,18 +42,22 @@ const ParamMainModelSelect = () => { }); return ( - - + + {t('modelManager.model')} - - - + + + + + + + ); }; diff --git a/invokeai/frontend/web/src/features/parameters/components/Seamless/ParamSeamlessXAxis.tsx b/invokeai/frontend/web/src/features/parameters/components/Seamless/ParamSeamlessXAxis.tsx index b66293580a..739cf7d83f 100644 --- a/invokeai/frontend/web/src/features/parameters/components/Seamless/ParamSeamlessXAxis.tsx +++ b/invokeai/frontend/web/src/features/parameters/components/Seamless/ParamSeamlessXAxis.tsx @@ -1,5 +1,6 @@ import { FormControl, FormLabel, Switch } from '@invoke-ai/ui-library'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; +import { InformationalPopover } from 'common/components/InformationalPopover/InformationalPopover'; import { setSeamlessXAxis } from 'features/parameters/store/generationSlice'; import type { ChangeEvent } from 'react'; import { memo, useCallback } from 'react'; @@ -20,7 +21,9 @@ const ParamSeamlessXAxis = () => { return ( - {t('parameters.seamlessXAxis')} + + {t('parameters.seamlessXAxis')} + ); diff --git a/invokeai/frontend/web/src/features/parameters/components/Seamless/ParamSeamlessYAxis.tsx b/invokeai/frontend/web/src/features/parameters/components/Seamless/ParamSeamlessYAxis.tsx index e983565476..455e50b90f 100644 --- a/invokeai/frontend/web/src/features/parameters/components/Seamless/ParamSeamlessYAxis.tsx +++ b/invokeai/frontend/web/src/features/parameters/components/Seamless/ParamSeamlessYAxis.tsx @@ -1,5 +1,6 @@ import { FormControl, FormLabel, Switch } from '@invoke-ai/ui-library'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; +import { InformationalPopover } from 'common/components/InformationalPopover/InformationalPopover'; import { setSeamlessYAxis } from 'features/parameters/store/generationSlice'; import type { ChangeEvent } from 'react'; import { memo, useCallback } from 'react'; @@ -18,7 +19,9 @@ const ParamSeamlessYAxis = () => { return ( - {t('parameters.seamlessYAxis')} + + {t('parameters.seamlessYAxis')} + ); diff --git a/invokeai/frontend/web/src/features/sdxl/components/SDXLRefiner/ParamSDXLRefinerCFGScale.tsx b/invokeai/frontend/web/src/features/sdxl/components/SDXLRefiner/ParamSDXLRefinerCFGScale.tsx index 9f3bf33848..a4409955cc 100644 --- a/invokeai/frontend/web/src/features/sdxl/components/SDXLRefiner/ParamSDXLRefinerCFGScale.tsx +++ b/invokeai/frontend/web/src/features/sdxl/components/SDXLRefiner/ParamSDXLRefinerCFGScale.tsx @@ -1,5 +1,6 @@ import { CompositeNumberInput, CompositeSlider, FormControl, FormLabel } from '@invoke-ai/ui-library'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; +import { InformationalPopover } from 'common/components/InformationalPopover/InformationalPopover'; import { setRefinerCFGScale } from 'features/sdxl/store/sdxlSlice'; import { memo, useCallback, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; @@ -21,7 +22,9 @@ const ParamSDXLRefinerCFGScale = () => { return ( - {t('sdxl.cfgScale')} + + {t('sdxl.cfgScale')} + { }); return ( - {t('sdxl.refinermodel')} + + {t('sdxl.refinermodel')} + { return ( - {t('sdxl.negAestheticScore')} + + {t('sdxl.negAestheticScore')} + { return ( - {t('sdxl.posAestheticScore')} + + {t('sdxl.posAestheticScore')} + { return ( - {t('sdxl.scheduler')} + + {t('sdxl.scheduler')} + ); diff --git a/invokeai/frontend/web/src/features/sdxl/components/SDXLRefiner/ParamSDXLRefinerStart.tsx b/invokeai/frontend/web/src/features/sdxl/components/SDXLRefiner/ParamSDXLRefinerStart.tsx index c2eea5d925..fd7b1f89cf 100644 --- a/invokeai/frontend/web/src/features/sdxl/components/SDXLRefiner/ParamSDXLRefinerStart.tsx +++ b/invokeai/frontend/web/src/features/sdxl/components/SDXLRefiner/ParamSDXLRefinerStart.tsx @@ -1,5 +1,6 @@ import { CompositeNumberInput, CompositeSlider, FormControl, FormLabel } from '@invoke-ai/ui-library'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; +import { InformationalPopover } from 'common/components/InformationalPopover/InformationalPopover'; import { setRefinerStart } from 'features/sdxl/store/sdxlSlice'; import { memo, useCallback } from 'react'; import { useTranslation } from 'react-i18next'; @@ -12,7 +13,9 @@ const ParamSDXLRefinerStart = () => { return ( - {t('sdxl.refinerStart')} + + {t('sdxl.refinerStart')} + { return ( - {t('sdxl.steps')} + + {t('sdxl.steps')} + Date: Mon, 19 Feb 2024 12:50:35 -0500 Subject: [PATCH 2/2] updated copy --- invokeai/frontend/web/public/locales/en.json | 179 +++++++++++++++---- 1 file changed, 143 insertions(+), 36 deletions(-) diff --git a/invokeai/frontend/web/public/locales/en.json b/invokeai/frontend/web/public/locales/en.json index d4f00a5970..32c707f908 100644 --- a/invokeai/frontend/web/public/locales/en.json +++ b/invokeai/frontend/web/public/locales/en.json @@ -1424,9 +1424,8 @@ "clipSkip": { "heading": "CLIP Skip", "paragraphs": [ - "Choose how many layers of the CLIP model to skip.", - "Some models work better with certain CLIP Skip settings.", - "A higher value typically results in a less detailed image." + "How many layers of the CLIP model to skip.", + "Certain models are better suited to be used with CLIP Skip." ] }, "paramNegativeConditioning": { @@ -1446,7 +1445,8 @@ "paramScheduler": { "heading": "Scheduler", "paragraphs": [ - "Scheduler defines how to iteratively add noise to an image or how to update a sample based on a model's output." + "Scheduler used during the generation process.", + "Each scheduler defines how to iteratively add noise to an image or how to update a sample based on a model's output." ] }, "compositingBlur": { @@ -1463,47 +1463,52 @@ }, "compositingCoherenceMode": { "heading": "Mode", - "paragraphs": ["The mode of the Coherence Pass."] + "paragraphs": ["Method used to create a coherent image with the newly generated masked area."] }, "compositingCoherenceSteps": { "heading": "Steps", - "paragraphs": ["Number of denoising steps used in the Coherence Pass.", "Same as the main Steps parameter."] + "paragraphs": ["Number of steps in the Coherence Pass.", "Similar to Generation Steps."] }, "compositingStrength": { "heading": "Strength", - "paragraphs": [ - "Denoising strength for the Coherence Pass.", - "Same as the Image to Image Denoising Strength parameter." - ] + "paragraphs": ["Amount of noise added for the Coherence Pass.", "Similar to Denoising Strength."] }, "compositingMaskAdjustments": { "heading": "Mask Adjustments", "paragraphs": ["Adjust the mask."] }, - "controlNetBeginEnd": { - "heading": "Begin / End Step Percentage", - "paragraphs": [ - "Which steps of the denoising process will have the ControlNet applied.", - "ControlNets applied at the beginning of the process guide composition, and ControlNets applied at the end guide details." - ] - }, - "controlNetControlMode": { - "heading": "Control Mode", - "paragraphs": ["Lends more weight to either the prompt or ControlNet."] - }, - "controlNetResizeMode": { - "heading": "Resize Mode", - "paragraphs": ["How the ControlNet image will be fit to the image output size."] - }, "controlNet": { "heading": "ControlNet", "paragraphs": [ "ControlNets provide guidance to the generation process, helping create images with controlled composition, structure, or style, depending on the model selected." ] }, + "controlNetBeginEnd": { + "heading": "Begin / End Step Percentage", + "paragraphs": [ + "The part of the of the denoising process that will have the Control Adapter applied.", + "Generally, Control Adapters applied at the start of the process guide composition, and Control Adapters applied at the end guide details." + ] + }, + "controlNetControlMode": { + "heading": "Control Mode", + "paragraphs": ["Lend more weight to either the prompt or ControlNet."] + }, + "controlNetProcessor": { + "heading": "Processor", + "paragraphs": [ + "Method of processing the input image to guide the generation process. Different processors will providedifferent effects or styles in your generated images." + ] + }, + "controlNetResizeMode": { + "heading": "Resize Mode", + "paragraphs": ["Method to fit Control Adapter's input image size to the output generation size."] + }, "controlNetWeight": { "heading": "Weight", - "paragraphs": ["How strongly the ControlNet will impact the generated image."] + "paragraphs": [ + "Weight of the Control Adapter. Higher weight will lead to larger impacts on the final image." + ] }, "dynamicPrompts": { "heading": "Dynamic Prompts", @@ -1526,13 +1531,23 @@ "Per Image will use a unique seed for each image. This provides more variation." ] }, + "imageFit": { + "heading": "Fit Initial Image to Output Size", + "paragraphs": [ + "Resizes the initial image to the width and height of the output image. Recommended to enable." + ] + }, "infillMethod": { "heading": "Infill Method", - "paragraphs": ["Method to infill the selected area."] + "paragraphs": ["Method of infilling during the Outpainting or Inpainting process."] }, "lora": { - "heading": "LoRA Weight", - "paragraphs": ["Higher LoRA weight will lead to larger impacts on the final image."] + "heading": "LoRA", + "paragraphs": ["Lightweight models that are used in conjunction with base models."] + }, + "loraWeight": { + "heading": "Weight", + "paragraphs": ["Weight of the LoRA. Higher weight will lead to larger impacts on the final image."] }, "noiseUseCPU": { "heading": "Use CPU Noise", @@ -1542,14 +1557,25 @@ "There is no performance impact to enabling CPU Noise." ] }, + "paramAspect": { + "heading": "Aspect", + "paragraphs": [ + "Aspect ratio of the generated image. Changing the ratio will update the Width and Height accordingly.", + "“Optimize” will set the Width and Height to optimal dimensions for the chosen model." + ] + }, "paramCFGScale": { "heading": "CFG Scale", - "paragraphs": ["Controls how much your prompt influences the generation process."] + "paragraphs": [ + "Controls how much the prompt influences the generation process.", + "High CFG Scale values can result in over-saturation and distorted generation results. " + ] }, "paramCFGRescaleMultiplier": { "heading": "CFG Rescale Multiplier", "paragraphs": [ - "Rescale multiplier for CFG guidance, used for models trained using zero-terminal SNR (ztsnr). Suggested value 0.7." + "Rescale multiplier for CFG guidance, used for models trained using zero-terminal SNR (ztsnr).", + "Suggested value of 0.7 for these models." ] }, "paramDenoisingStrength": { @@ -1559,6 +1585,16 @@ "0 will result in an identical image, while 1 will result in a completely new image." ] }, + "paramHeight": { + "heading": "Height", + "paragraphs": ["Height of the generated image. Must be a multiple of 8."] + }, + "paramHrf": { + "heading": "Enable High Resolution Fix", + "paragraphs": [ + "Generate high quality images at a larger resolution than optimal for the model. Generally used to prevent duplication in the generated image." + ] + }, "paramIterations": { "heading": "Iterations", "paragraphs": [ @@ -1569,8 +1605,7 @@ "paramModel": { "heading": "Model", "paragraphs": [ - "Model used for the denoising steps.", - "Different models are typically trained to specialize in producing particular aesthetic results and content." + "Model used for generation. Different models are trained to specialize in producing different aesthetic results and content." ] }, "paramRatio": { @@ -1584,7 +1619,7 @@ "heading": "Seed", "paragraphs": [ "Controls the starting noise used for generation.", - "Disable “Random Seed” to produce identical results with the same generation settings." + "Disable the “Random” option to produce identical results with the same generation settings." ] }, "paramSteps": { @@ -1594,6 +1629,10 @@ "Higher step counts will typically create better images but will require more generation time." ] }, + "paramUpscaleMethod": { + "heading": "Upscale Method", + "paragraphs": ["Method used to upscale the image for High Resolution Fix."] + }, "paramVAE": { "heading": "VAE", "paragraphs": ["Model used for translating AI output into the final image."] @@ -1601,14 +1640,82 @@ "paramVAEPrecision": { "heading": "VAE Precision", "paragraphs": [ - "The precision used during VAE encoding and decoding. FP16/half precision is more efficient, at the expense of minor image variations." + "The precision used during VAE encoding and decoding.", + "Fp16/Half precision is more efficient, at the expense of minor image variations." + ] + }, + "paramWidth": { + "heading": "Width", + "paragraphs": ["Width of the generated image. Must be a multiple of 8."] + }, + "patchmatchDownScaleSize": { + "heading": "Downscale", + "paragraphs": [ + "How much downscaling occurs before infilling.", + "Higher downscaling will improve performance and reduce quality." + ] + }, + "refinerModel": { + "heading": "Refiner Model", + "paragraphs": [ + "Model used during the refiner portion of the generation process.", + "Similar to the Generation Model." + ] + }, + "refinerPositiveAestheticScore": { + "heading": "Positive Aesthetic Score", + "paragraphs": [ + "Weight generations to be more similar to images with a high aesthetic score, based on the training data." + ] + }, + "refinerNegativeAestheticScore": { + "heading": "Negative Aesthetic Score", + "paragraphs": [ + "Weight generations to be more similar to images with a low aesthetic score, based on the training data." + ] + }, + "refinerScheduler": { + "heading": "Scheduler", + "paragraphs": [ + "Scheduler used during the refiner portion of the generation process.", + "Similar to the Generation Scheduler." + ] + }, + "refinerStart": { + "heading": "Refiner Start", + "paragraphs": [ + "Where in the generation process the refiner will start to be used.", + "0 means the refiner will be used for the entire generation process, 0.8 means the refiner will be used for the last 20% of the generation process." + ] + }, + "refinerSteps": { + "heading": "Steps", + "paragraphs": [ + "Number of steps that will be performed during the refiner portion of the generation process.", + "Similar to the Generation Steps." + ] + }, + "refinerCfgScale": { + "heading": "CFG Scale", + "paragraphs": [ + "Controls how much the prompt influences the generation process.", + "Similar to the Generation CFG Scale." ] }, "scaleBeforeProcessing": { "heading": "Scale Before Processing", "paragraphs": [ - "Scales the selected area to the size best suited for the model before the image generation process." + "“Auto” scales the selected area to the size best suited for the model before the image generation process.", + "“Manual” allows you to choose the width and height the selected area will be scaled to before the image generation process." ] + }, + "seamlessTilingXAxis": { + "heading": "Seamless Tiling X Axis", + "paragraphs": ["Seamlessly tile an image along the horizontal axis."] + }, + "seamlessTilingYAxis": { + "heading": "Seamless Tiling Y Axis", + "paragraphs": ["Seamlessly tile an image along the vertical axis."] } }, "ui": {