Spaces:
Configuration error
Configuration error
import React, { ReactNode } from 'react' | |
import { useRecoilState } from 'recoil' | |
import { hdSettingsState, settingState } from '../../store/Atoms' | |
import Selector from '../shared/Selector' | |
import NumberInputSetting from './NumberInputSetting' | |
import SettingBlock from './SettingBlock' | |
export enum HDStrategy { | |
ORIGINAL = 'Original', | |
RESIZE = 'Resize', | |
CROP = 'Crop', | |
} | |
export enum LDMSampler { | |
ddim = 'ddim', | |
plms = 'plms', | |
} | |
function HDSettingBlock() { | |
const [hdSettings, setHDSettings] = useRecoilState(hdSettingsState) | |
if (!hdSettings?.enabled) { | |
return <></> | |
} | |
const onStrategyChange = (value: HDStrategy) => { | |
setHDSettings({ hdStrategy: value }) | |
} | |
const onResizeLimitChange = (value: string) => { | |
const val = value.length === 0 ? 0 : parseInt(value, 10) | |
setHDSettings({ hdStrategyResizeLimit: val }) | |
} | |
const onCropTriggerSizeChange = (value: string) => { | |
const val = value.length === 0 ? 0 : parseInt(value, 10) | |
setHDSettings({ hdStrategyCropTrigerSize: val }) | |
} | |
const onCropMarginChange = (value: string) => { | |
const val = value.length === 0 ? 0 : parseInt(value, 10) | |
setHDSettings({ hdStrategyCropMargin: val }) | |
} | |
const renderOriginalOptionDesc = () => { | |
return ( | |
<div> | |
Use original picture, suitable for picture size below 2K. Try{' '} | |
<div | |
tabIndex={0} | |
role="button" | |
className="inline-tip" | |
onClick={() => onStrategyChange(HDStrategy.RESIZE)} | |
> | |
Resize | |
</div> | |
{' or '} | |
<div | |
tabIndex={0} | |
role="button" | |
className="inline-tip" | |
onClick={() => onStrategyChange(HDStrategy.CROP)} | |
> | |
Crop | |
</div>{' '} | |
if you didn't get good results or have GPU memory issue. | |
</div> | |
) | |
} | |
const renderResizeOptionDesc = () => { | |
return ( | |
<> | |
<div> | |
Resize the longer side of the image to a specific size, then do | |
inpainting on the resized image. | |
</div> | |
<NumberInputSetting | |
title="Size limit" | |
value={`${hdSettings.hdStrategyResizeLimit}`} | |
suffix="pixel" | |
onValue={onResizeLimitChange} | |
/> | |
</> | |
) | |
} | |
const renderCropOptionDesc = () => { | |
return ( | |
<> | |
<div>Crop masking area from the original image to do inpainting.</div> | |
<NumberInputSetting | |
title="Trigger size" | |
value={`${hdSettings.hdStrategyCropTrigerSize}`} | |
suffix="pixel" | |
onValue={onCropTriggerSizeChange} | |
/> | |
<NumberInputSetting | |
title="Crop margin" | |
value={`${hdSettings.hdStrategyCropMargin}`} | |
suffix="pixel" | |
onValue={onCropMarginChange} | |
/> | |
</> | |
) | |
} | |
const renderHDStrategyOptionDesc = (): ReactNode => { | |
switch (hdSettings.hdStrategy) { | |
case HDStrategy.ORIGINAL: | |
return renderOriginalOptionDesc() | |
case HDStrategy.CROP: | |
return renderCropOptionDesc() | |
case HDStrategy.RESIZE: | |
return renderResizeOptionDesc() | |
default: | |
return renderOriginalOptionDesc() | |
} | |
} | |
return ( | |
<SettingBlock | |
className="hd-setting-block" | |
title="Strategy" | |
input={ | |
<Selector | |
width={80} | |
value={hdSettings.hdStrategy as string} | |
options={Object.values(HDStrategy)} | |
onChange={val => onStrategyChange(val as HDStrategy)} | |
/> | |
} | |
optionDesc={renderHDStrategyOptionDesc()} | |
/> | |
) | |
} | |
export default HDSettingBlock | |