update
This commit is contained in:
@@ -59,6 +59,9 @@ const DiffusionOptions = () => {
|
||||
updateExtenderDirection,
|
||||
adjustMask,
|
||||
clearMask,
|
||||
updateEnablePowerPaintV2,
|
||||
updateEnableBrushNet,
|
||||
updateEnableControlnet,
|
||||
] = useStore((state) => [
|
||||
state.serverConfig.samplers,
|
||||
state.settings,
|
||||
@@ -71,6 +74,9 @@ const DiffusionOptions = () => {
|
||||
state.updateExtenderDirection,
|
||||
state.adjustMask,
|
||||
state.clearMask,
|
||||
state.updateEnablePowerPaintV2,
|
||||
state.updateEnableBrushNet,
|
||||
state.updateEnableControlnet,
|
||||
])
|
||||
const [exampleImage, isExampleImageLoaded] = useImage(paintByExampleFile)
|
||||
const negativePromptRef = useRef(null)
|
||||
@@ -114,12 +120,8 @@ const DiffusionOptions = () => {
|
||||
return null
|
||||
}
|
||||
|
||||
let disable = settings.enableControlnet
|
||||
let toolTip =
|
||||
"BrushNet is a plug-and-play image inpainting model with decomposed dual-branch diffusion. It can be used to inpaint images by conditioning on a mask."
|
||||
if (disable) {
|
||||
toolTip = "ControlNet is enabled, BrushNet is disabled."
|
||||
}
|
||||
"BrushNet is a plug-and-play image inpainting model works on any SD1.5 base models."
|
||||
|
||||
return (
|
||||
<div className="flex flex-col gap-4">
|
||||
@@ -129,20 +131,19 @@ const DiffusionOptions = () => {
|
||||
text="BrushNet"
|
||||
url="https://github.com/TencentARC/BrushNet"
|
||||
toolTip={toolTip}
|
||||
disabled={disable}
|
||||
/>
|
||||
<Switch
|
||||
id="brushnet"
|
||||
checked={settings.enableBrushNet}
|
||||
onCheckedChange={(value) => {
|
||||
updateSettings({ enableBrushNet: value })
|
||||
updateEnableBrushNet(value)
|
||||
}}
|
||||
disabled={disable}
|
||||
/>
|
||||
</RowContainer>
|
||||
<RowContainer>
|
||||
{/* <RowContainer>
|
||||
<Slider
|
||||
defaultValue={[100]}
|
||||
className="w-[180px]"
|
||||
min={1}
|
||||
max={100}
|
||||
step={1}
|
||||
@@ -155,14 +156,13 @@ const DiffusionOptions = () => {
|
||||
<NumberInput
|
||||
id="brushnet-weight"
|
||||
className="w-[60px] rounded-full"
|
||||
disabled={!settings.enableBrushNet || disable}
|
||||
numberValue={settings.brushnetConditioningScale}
|
||||
allowFloat={false}
|
||||
onNumberValueChange={(val) => {
|
||||
updateSettings({ brushnetConditioningScale: val })
|
||||
}}
|
||||
/>
|
||||
</RowContainer>
|
||||
</RowContainer> */}
|
||||
|
||||
<RowContainer>
|
||||
<Select
|
||||
@@ -198,12 +198,8 @@ const DiffusionOptions = () => {
|
||||
return null
|
||||
}
|
||||
|
||||
let disable = settings.enableBrushNet
|
||||
let toolTip =
|
||||
"Using an additional conditioning image to control how an image is generated"
|
||||
if (disable) {
|
||||
toolTip = "BrushNet is enabled, ControlNet is disabled."
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="flex flex-col gap-4">
|
||||
@@ -213,15 +209,13 @@ const DiffusionOptions = () => {
|
||||
text="ControlNet"
|
||||
url="https://huggingface.co/docs/diffusers/main/en/using-diffusers/inpaint#controlnet"
|
||||
toolTip={toolTip}
|
||||
disabled={disable}
|
||||
/>
|
||||
<Switch
|
||||
id="controlnet"
|
||||
checked={settings.enableControlnet}
|
||||
onCheckedChange={(value) => {
|
||||
updateSettings({ enableControlnet: value })
|
||||
updateEnableControlnet(value)
|
||||
}}
|
||||
disabled={disable}
|
||||
/>
|
||||
</RowContainer>
|
||||
|
||||
@@ -233,7 +227,7 @@ const DiffusionOptions = () => {
|
||||
min={1}
|
||||
max={100}
|
||||
step={1}
|
||||
disabled={!settings.enableControlnet || disable}
|
||||
disabled={!settings.enableControlnet}
|
||||
value={[Math.floor(settings.controlnetConditioningScale * 100)]}
|
||||
onValueChange={(vals) =>
|
||||
updateSettings({ controlnetConditioningScale: vals[0] / 100 })
|
||||
@@ -242,7 +236,7 @@ const DiffusionOptions = () => {
|
||||
<NumberInput
|
||||
id="controlnet-weight"
|
||||
className="w-[60px] rounded-full"
|
||||
disabled={!settings.enableControlnet || disable}
|
||||
disabled={!settings.enableControlnet}
|
||||
numberValue={settings.controlnetConditioningScale}
|
||||
allowFloat={false}
|
||||
onNumberValueChange={(val) => {
|
||||
@@ -286,12 +280,8 @@ const DiffusionOptions = () => {
|
||||
return null
|
||||
}
|
||||
|
||||
let disable = settings.enableBrushNet
|
||||
let toolTip =
|
||||
"Enable quality image generation in typically 2-4 steps. Suggest disabling guidance_scale by setting it to 0. You can also try values between 1.0 and 2.0. When LCM Lora is enabled, LCMSampler will be used automatically."
|
||||
if (disable) {
|
||||
toolTip = "BrushNet is enabled, LCM Lora is disabled."
|
||||
}
|
||||
"Enable quality image generation in typically 2-8 steps. Suggest disabling guidance_scale by setting it to 0. You can also try values between 1.0 and 2.0. When LCM Lora is enabled, LCMSampler will be used automatically."
|
||||
|
||||
return (
|
||||
<>
|
||||
@@ -300,7 +290,6 @@ const DiffusionOptions = () => {
|
||||
text="LCM LoRA"
|
||||
url="https://huggingface.co/docs/diffusers/main/en/using-diffusers/inference_with_lcm_lora"
|
||||
toolTip={toolTip}
|
||||
disabled={disable}
|
||||
/>
|
||||
<Switch
|
||||
id="lcm-lora"
|
||||
@@ -308,7 +297,6 @@ const DiffusionOptions = () => {
|
||||
onCheckedChange={(value) => {
|
||||
updateSettings({ enableLCMLora: value })
|
||||
}}
|
||||
disabled={disable}
|
||||
/>
|
||||
</RowContainer>
|
||||
<Separator />
|
||||
@@ -561,10 +549,6 @@ const DiffusionOptions = () => {
|
||||
}
|
||||
|
||||
const renderPowerPaintTaskType = () => {
|
||||
if (settings.model.name !== POWERPAINT) {
|
||||
return null
|
||||
}
|
||||
|
||||
return (
|
||||
<RowContainer>
|
||||
<LabelTitle
|
||||
@@ -579,7 +563,7 @@ const DiffusionOptions = () => {
|
||||
}}
|
||||
disabled={settings.showExtender}
|
||||
>
|
||||
<SelectTrigger className="w-[140px]">
|
||||
<SelectTrigger className="w-[130px]">
|
||||
<SelectValue placeholder="Select task" />
|
||||
</SelectTrigger>
|
||||
<SelectContent align="end">
|
||||
@@ -587,6 +571,7 @@ const DiffusionOptions = () => {
|
||||
{[
|
||||
PowerPaintTask.text_guided,
|
||||
PowerPaintTask.object_remove,
|
||||
PowerPaintTask.context_aware,
|
||||
PowerPaintTask.shape_guided,
|
||||
].map((task) => (
|
||||
<SelectItem key={task} value={task}>
|
||||
@@ -600,6 +585,44 @@ const DiffusionOptions = () => {
|
||||
)
|
||||
}
|
||||
|
||||
const renderPowerPaintV1 = () => {
|
||||
if (settings.model.name !== POWERPAINT) {
|
||||
return null
|
||||
}
|
||||
return (
|
||||
<>
|
||||
{renderPowerPaintTaskType()}
|
||||
<Separator />
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
const renderPowerPaintV2 = () => {
|
||||
if (settings.model.support_powerpaint_v2 === false) {
|
||||
return null
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<RowContainer>
|
||||
<LabelTitle
|
||||
text="PowerPaint V2"
|
||||
toolTip="PowerPaint is a plug-and-play image inpainting model works on any SD1.5 base models."
|
||||
/>
|
||||
<Switch
|
||||
id="powerpaint-v2"
|
||||
checked={settings.enablePowerPaintV2}
|
||||
onCheckedChange={(value) => {
|
||||
updateEnablePowerPaintV2(value)
|
||||
}}
|
||||
/>
|
||||
</RowContainer>
|
||||
{renderPowerPaintTaskType()}
|
||||
<Separator />
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
const renderSteps = () => {
|
||||
return (
|
||||
<RowContainer>
|
||||
@@ -868,7 +891,7 @@ const DiffusionOptions = () => {
|
||||
{renderMaskBlur()}
|
||||
{renderMaskAdjuster()}
|
||||
{renderMatchHistograms()}
|
||||
{renderPowerPaintTaskType()}
|
||||
{renderPowerPaintV1()}
|
||||
{renderSteps()}
|
||||
{renderGuidanceScale()}
|
||||
{renderP2PImageGuidanceScale()}
|
||||
@@ -878,6 +901,7 @@ const DiffusionOptions = () => {
|
||||
{renderNegativePrompt()}
|
||||
<Separator />
|
||||
{renderBrushNetSetting()}
|
||||
{renderPowerPaintV2()}
|
||||
{renderConterNetSetting()}
|
||||
{renderLCMLora()}
|
||||
{renderPaintByExample()}
|
||||
|
||||
@@ -22,7 +22,7 @@ const SelectTrigger = React.forwardRef<
|
||||
<SelectPrimitive.Trigger
|
||||
ref={ref}
|
||||
className={cn(
|
||||
"flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
|
||||
"flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent pl-2 pr-1 py-2 text-sm shadow-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
|
||||
className
|
||||
)}
|
||||
tabIndex={-1}
|
||||
|
||||
@@ -79,6 +79,7 @@ export default async function inpaint(
|
||||
enable_brushnet: settings.enableBrushNet,
|
||||
brushnet_method: settings.brushnetMethod ? settings.brushnetMethod : "",
|
||||
brushnet_conditioning_scale: settings.brushnetConditioningScale,
|
||||
enable_powerpaint_v2: settings.enablePowerPaintV2,
|
||||
powerpaint_task: settings.showExtender
|
||||
? PowerPaintTask.outpainting
|
||||
: settings.powerpaintTask,
|
||||
|
||||
@@ -106,6 +106,7 @@ export type Settings = {
|
||||
enableLCMLora: boolean
|
||||
|
||||
// PowerPaint
|
||||
enablePowerPaintV2: boolean
|
||||
powerpaintTask: PowerPaintTask
|
||||
|
||||
// AdjustMask
|
||||
@@ -194,6 +195,12 @@ type AppAction = {
|
||||
setServerConfig: (newValue: ServerConfig) => void
|
||||
setSeed: (newValue: number) => void
|
||||
updateSettings: (newSettings: Partial<Settings>) => void
|
||||
|
||||
// 互斥
|
||||
updateEnablePowerPaintV2: (newValue: boolean) => void
|
||||
updateEnableBrushNet: (newValue: boolean) => void
|
||||
updateEnableControlnet: (newValue: boolean) => void
|
||||
|
||||
setModel: (newModel: ModelInfo) => void
|
||||
updateFileManagerState: (newState: Partial<FileManagerState>) => void
|
||||
updateInteractiveSegState: (newState: Partial<InteractiveSegState>) => void
|
||||
@@ -311,6 +318,7 @@ const defaultValues: AppState = {
|
||||
support_brushnet: false,
|
||||
support_strength: false,
|
||||
support_outpainting: false,
|
||||
support_powerpaint_v2: false,
|
||||
controlnets: [],
|
||||
brushnets: [],
|
||||
support_lcm_lora: false,
|
||||
@@ -425,6 +433,8 @@ export const useStore = createWithEqualityFn<AppState & AppAction>()(
|
||||
if (
|
||||
get().settings.model.support_outpainting &&
|
||||
settings.showExtender &&
|
||||
extenderState.x === 0 &&
|
||||
extenderState.y === 0 &&
|
||||
extenderState.height === imageHeight &&
|
||||
extenderState.width === imageWidth
|
||||
) {
|
||||
@@ -798,6 +808,38 @@ export const useStore = createWithEqualityFn<AppState & AppAction>()(
|
||||
})
|
||||
},
|
||||
|
||||
updateEnablePowerPaintV2: (newValue: boolean) => {
|
||||
get().updateSettings({ enablePowerPaintV2: newValue })
|
||||
if (newValue) {
|
||||
get().updateSettings({
|
||||
enableBrushNet: false,
|
||||
enableControlnet: false,
|
||||
enableLCMLora: false,
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
updateEnableBrushNet: (newValue: boolean) => {
|
||||
get().updateSettings({ enableBrushNet: newValue })
|
||||
if (newValue) {
|
||||
get().updateSettings({
|
||||
enablePowerPaintV2: false,
|
||||
enableControlnet: false,
|
||||
enableLCMLora: false,
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
updateEnableControlnet(newValue) {
|
||||
get().updateSettings({ enableControlnet: newValue })
|
||||
if (newValue) {
|
||||
get().updateSettings({
|
||||
enablePowerPaintV2: false,
|
||||
enableBrushNet: false,
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
setModel: (newModel: ModelInfo) => {
|
||||
set((state) => {
|
||||
state.settings.model = newModel
|
||||
|
||||
@@ -49,6 +49,7 @@ export interface ModelInfo {
|
||||
support_outpainting: boolean
|
||||
support_controlnet: boolean
|
||||
support_brushnet: boolean
|
||||
support_powerpaint_v2: boolean
|
||||
controlnets: string[]
|
||||
brushnets: string[]
|
||||
support_lcm_lora: boolean
|
||||
@@ -123,6 +124,7 @@ export enum ExtenderDirection {
|
||||
export enum PowerPaintTask {
|
||||
text_guided = "text-guided",
|
||||
shape_guided = "shape-guided",
|
||||
context_aware = "context-aware",
|
||||
object_remove = "object-remove",
|
||||
outpainting = "outpainting",
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user