(negativePromptRef, () => {
if (negativePromptRef?.current) {
const input = negativePromptRef.current as HTMLInputElement
input.blur()
}
})
const onKeyUp = (e: React.KeyboardEvent) => {
// negativePrompt 回车触发 inpainting
if (e.key === "Enter" && e.ctrlKey && settings.prompt.length !== 0) {
runInpainting()
}
}
const renderCropper = () => {
return (
{
updateSettings({ showCropper: value })
if (value) {
updateSettings({ showExtender: false })
}
}}
/>
)
}
const renderBrushNetSetting = () => {
if (!settings.model.support_brushnet) {
return null
}
let toolTip =
"BrushNet is a plug-and-play image inpainting model works on any SD1.5 base models."
return (
{
updateEnableBrushNet(value)
}}
/>
{/*
updateSettings({ brushnetConditioningScale: vals[0] / 100 })
}
/>
{
updateSettings({ brushnetConditioningScale: val })
}}
/>
*/}
{
updateSettings({ brushnetMethod: value })
}}
disabled={!settings.enableBrushNet}
>
{Object.values(settings.model.brushnets).map((method) => (
{method.split("/")[1]}
))}
)
}
const renderConterNetSetting = () => {
if (!settings.model.support_controlnet) {
return null
}
let toolTip =
"Using an additional conditioning image to control how an image is generated"
return (
{
updateEnableControlnet(value)
}}
/>
updateSettings({ controlnetConditioningScale: vals[0] / 100 })
}
/>
{
updateSettings({ controlnetConditioningScale: val })
}}
/>
{
updateSettings({ controlnetMethod: value })
}}
disabled={!settings.enableControlnet}
>
{Object.values(settings.model.controlnets).map((method) => (
{method.split("/")[1]}
))}
)
}
const renderLCMLora = () => {
if (!settings.model.support_lcm_lora) {
return null
}
let toolTip =
"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 (
<>
{
updateLCMLora(value)
}}
/>
>
)
}
const renderNegativePrompt = () => {
if (!settings.model.need_prompt) {
return null
}
return (
)
}
const renderPaintByExample = () => {
if (settings.model.name !== PAINT_BY_EXAMPLE) {
return null
}
return (
{
updateAppState({ paintByExampleFile: file })
}}
>
{isExampleImageLoaded ? (
) : (
<>>
)}
{
runInpainting()
}}
>
Paint
)
}
const renderP2PImageGuidanceScale = () => {
if (settings.model.name !== INSTRUCT_PIX2PIX) {
return null
}
return (
updateSettings({ p2pImageGuidanceScale: vals[0] / 100 })
}
/>
{
updateSettings({ p2pImageGuidanceScale: val })
}}
/>
)
}
const renderStrength = () => {
if (!settings.model.support_strength) {
return null
}
let toolTip =
"Strength is a measure of how much noise is added to the base image, which influences how similar the output is to the base image. Higher value means more noise and more different from the base image"
// if (disable) {
// toolTip = "BrushNet is enabled, Strength is disabled."
// }
return (
updateSettings({ sdStrength: vals[0] / 100 })
}
// disabled={disable}
/>
{
updateSettings({ sdStrength: val })
}}
// disabled={disable}
/>
)
}
const renderExtender = () => {
if (!settings.model.support_outpainting) {
return null
}
return (
<>
{
updateSettings({ showExtender: value })
if (value) {
updateSettings({ showCropper: false })
}
}}
/>
{
updateExtenderDirection(value as ExtenderDirection)
}}
>
{Object.values(ExtenderDirection).map((v) => (
{v}
))}
updateExtenderByBuiltIn(settings.extenderDirection, 1.25)
}
/>
updateExtenderByBuiltIn(settings.extenderDirection, 1.5)
}
/>
updateExtenderByBuiltIn(settings.extenderDirection, 1.75)
}
/>
updateExtenderByBuiltIn(settings.extenderDirection, 2.0)
}
/>
>
)
}
const renderPowerPaintTaskType = () => {
return (
{
updateSettings({ powerpaintTask: value })
}}
disabled={settings.showExtender}
>
{[
PowerPaintTask.text_guided,
PowerPaintTask.object_remove,
PowerPaintTask.context_aware,
PowerPaintTask.shape_guided,
].map((task) => (
{task}
))}
)
}
const renderPowerPaintV1 = () => {
if (settings.model.name !== POWERPAINT) {
return null
}
return (
<>
{renderPowerPaintTaskType()}
>
)
}
const renderPowerPaintV2 = () => {
if (settings.model.support_powerpaint_v2 === false) {
return null
}
return (
<>
{
updateEnablePowerPaintV2(value)
}}
/>
{renderPowerPaintTaskType()}
>
)
}
const renderSteps = () => {
return (
updateSettings({ sdSteps: vals[0] })}
/>
{
updateSettings({ sdSteps: val })
}}
/>
)
}
const renderGuidanceScale = () => {
return (
updateSettings({ sdGuidanceScale: vals[0] / 100 })
}
/>
{
updateSettings({ sdGuidanceScale: val })
}}
/>
)
}
const renderSampler = () => {
if (settings.model.name === ANYTEXT) {
return null
}
return (
{
updateSettings({ sdSampler: value })
}}
>
{samplers.map((sampler) => (
{sampler}
))}
)
}
const renderSeed = () => {
return (
{/* 每次会从服务器返回更新该值 */}
{/* */}
{
updateSettings({ seedFixed: value })
}}
/>
{
updateSettings({ seed: val })
}}
/>
)
}
const renderMaskBlur = () => {
return (
<>
updateSettings({ sdMaskBlur: vals[0] })}
/>
{
updateSettings({ sdMaskBlur: value })
}}
/>
>
)
}
const renderMatchHistograms = () => {
return (
<>
{
updateSettings({ sdMatchHistograms: value })
}}
/>
>
)
}
const renderMaskAdjuster = () => {
return (
<>
updateSettings({ adjustMaskKernelSize: vals[0] })
}
/>
{
updateSettings({ adjustMaskKernelSize: val })
}}
/>
adjustMask("expand")}
disabled={isProcessing}
>
adjustMask("shrink")}
disabled={isProcessing}
>
{/* */}
Shrink
adjustMask("reverse")}
disabled={isProcessing}
>
Reverse
Clear
>
)
}
return (
{renderCropper()}
{renderExtender()}
{renderMaskBlur()}
{renderMaskAdjuster()}
{renderMatchHistograms()}
{renderPowerPaintV1()}
{renderSteps()}
{renderGuidanceScale()}
{renderP2PImageGuidanceScale()}
{renderStrength()}
{renderSampler()}
{renderSeed()}
{renderNegativePrompt()}
{renderBrushNetSetting()}
{renderPowerPaintV2()}
{renderConterNetSetting()}
{renderLCMLora()}
{renderPaintByExample()}
)
}
export default DiffusionOptions