67 lines
1.6 KiB
TypeScript
67 lines
1.6 KiB
TypeScript
import { Settings } from '../store/Atoms'
|
|
import { dataURItoBlob } from '../utils'
|
|
|
|
export const API_ENDPOINT = `${process.env.REACT_APP_INPAINTING_URL}`
|
|
|
|
export default async function inpaint(
|
|
imageFile: File,
|
|
maskBase64: string,
|
|
settings: Settings,
|
|
sizeLimit?: string
|
|
) {
|
|
// 1080, 2000, Original
|
|
const fd = new FormData()
|
|
fd.append('image', imageFile)
|
|
const mask = dataURItoBlob(maskBase64)
|
|
fd.append('mask', mask)
|
|
|
|
fd.append('ldmSteps', settings.ldmSteps.toString())
|
|
fd.append('hdStrategy', settings.hdStrategy)
|
|
fd.append('hdStrategyCropMargin', settings.hdStrategyCropMargin.toString())
|
|
fd.append(
|
|
'hdStrategyCropTrigerSize',
|
|
settings.hdStrategyCropTrigerSize.toString()
|
|
)
|
|
fd.append('hdStrategyResizeLimit', settings.hdStrategyResizeLimit.toString())
|
|
|
|
if (sizeLimit === undefined) {
|
|
fd.append('sizeLimit', '1080')
|
|
} else {
|
|
fd.append('sizeLimit', sizeLimit)
|
|
}
|
|
|
|
const res = await fetch(`${API_ENDPOINT}/inpaint`, {
|
|
method: 'POST',
|
|
body: fd,
|
|
}).then(async r => {
|
|
console.log(r)
|
|
if (r.ok) {
|
|
return r.blob()
|
|
}
|
|
throw new Error('Something went wrong on server side.')
|
|
})
|
|
|
|
return URL.createObjectURL(res)
|
|
}
|
|
|
|
export function switchModel(name: string) {
|
|
const fd = new FormData()
|
|
fd.append('name', name)
|
|
return fetch(`${API_ENDPOINT}/model`, {
|
|
method: 'POST',
|
|
body: fd,
|
|
})
|
|
}
|
|
|
|
export function currentModel() {
|
|
return fetch(`${API_ENDPOINT}/model`, {
|
|
method: 'GET',
|
|
})
|
|
}
|
|
|
|
export function modelDownloaded(name: string) {
|
|
return fetch(`${API_ENDPOINT}/model_downloaded/${name}`, {
|
|
method: 'GET',
|
|
})
|
|
}
|