import { FormEvent, useRef } from "react" import { useStore } from "@/lib/states" import { Switch } from "../ui/switch" import { NumberInput } from "../ui/input" import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue, } from "../ui/select" import { Textarea } from "../ui/textarea" import { ExtenderDirection, PowerPaintTask } from "@/lib/types" import { Separator } from "../ui/separator" import { Button, ImageUploadButton } from "../ui/button" import { Slider } from "../ui/slider" import { useImage } from "@/hooks/useImage" import { INSTRUCT_PIX2PIX, PAINT_BY_EXAMPLE, POWERPAINT } from "@/lib/const" import { RowContainer, LabelTitle } from "./LabelTitle" import { Minus, Plus, Upload } from "lucide-react" import { useClickAway } from "react-use" const ExtenderButton = ({ text, onClick, }: { text: string onClick: () => void }) => { const [showExtender] = useStore((state) => [state.settings.showExtender]) return ( ) } const DiffusionOptions = () => { const [ samplers, settings, paintByExampleFile, isProcessing, updateSettings, runInpainting, updateAppState, updateExtenderByBuiltIn, updateExtenderDirection, adjustMask, clearMask, ] = useStore((state) => [ state.serverConfig.samplers, state.settings, state.paintByExampleFile, state.getIsProcessing(), state.updateSettings, state.runInpainting, state.updateAppState, state.updateExtenderByBuiltIn, state.updateExtenderDirection, state.adjustMask, state.clearMask, ]) const [exampleImage, isExampleImageLoaded] = useImage(paintByExampleFile) const negativePromptRef = useRef(null) useClickAway(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 renderConterNetSetting = () => { if (!settings.model.support_controlnet) { return null } return (
{ updateSettings({ enableControlnet: value }) }} />
updateSettings({ controlnetConditioningScale: vals[0] / 100 }) } /> { updateSettings({ controlnetConditioningScale: val }) }} />
) } const renderLCMLora = () => { if (!settings.model.support_lcm_lora) { return null } return ( <> { updateSettings({ enableLCMLora: value }) }} /> ) } const renderFreeu = () => { if (!settings.model.support_freeu) { return null } return (
{ updateSettings({ enableFreeu: value }) }} />
{ updateSettings({ freeuConfig: { ...settings.freeuConfig, s1: value }, }) }} />
{ updateSettings({ freeuConfig: { ...settings.freeuConfig, s2: value }, }) }} />
{ updateSettings({ freeuConfig: { ...settings.freeuConfig, b1: value }, }) }} />
{ updateSettings({ freeuConfig: { ...settings.freeuConfig, b2: value }, }) }} />
) } const renderNegativePrompt = () => { if (!settings.model.need_prompt) { return null } return (