diff --git a/index.html b/index.html
index 8a07b175..807facf6 100644
--- a/index.html
+++ b/index.html
@@ -30,10 +30,10 @@
width: 95%;
}
}
- #init_image_preview_container {
+ .image_preview_container {
display: none;
}
- #init_image_clear {
+ .image_clear_btn {
position: absolute;
transform: translateX(-50%);
background: black;
@@ -87,9 +87,17 @@
-
+
![]()
-
+
+
+
+
+
+
+
![]()
+
+
@@ -133,6 +141,8 @@ let widthField = document.querySelector('#width')
let heightField = document.querySelector('#height')
let initImageSelector = document.querySelector("#init_image")
let initImagePreview = document.querySelector("#init_image_preview")
+let maskImageSelector = document.querySelector("#mask")
+let maskImagePreview = document.querySelector("#mask_preview")
let promptStrengthField = document.querySelector('#prompt_strength')
let promptStrengthValueLabel = document.querySelector('#prompt_strength_value')
@@ -143,6 +153,10 @@ let initImagePreviewContainer = document.querySelector('#init_image_preview_cont
let initImageClearBtn = document.querySelector('#init_image_clear')
let promptStrengthContainer = document.querySelector('#prompt_strength_container')
+let maskSetting = document.querySelector('#mask_setting')
+let maskImagePreviewContainer = document.querySelector('#mask_preview_container')
+let maskImageClearBtn = document.querySelector('#mask_clear')
+
let showConfigToggle = document.querySelector('#configToggleBtn')
let configBox = document.querySelector('#config')
let outputMsg = document.querySelector('#outputMsg')
@@ -229,6 +243,10 @@ async function makeImage() {
if (initImagePreview.src.indexOf('data:image/png;base64') !== -1) {
reqBody['init_image'] = initImagePreview.src
reqBody['prompt_strength'] = promptStrengthField.value / 10
+
+ if (maskImagePreview.src.indexOf('data:image/png;base64') !== -1) {
+ reqBody['mask'] = maskImagePreview.src
+ }
}
let res = ''
@@ -321,6 +339,8 @@ async function makeImage() {
initImagePreviewContainer.style.display = 'block'
promptStrengthContainer.style.display = 'block'
+ maskSetting.style.display = 'block'
+
randomSeedField.checked = false
seedField.value = seed
seedField.disabled = false
@@ -380,6 +400,7 @@ function showInitImagePreview() {
if (initImageSelector.files.length === 0) {
initImagePreviewContainer.style.display = 'none'
promptStrengthContainer.style.display = 'none'
+ maskSetting.style.display = 'none'
return
}
@@ -391,6 +412,8 @@ function showInitImagePreview() {
initImagePreview.src = reader.result
initImagePreviewContainer.style.display = 'block'
promptStrengthContainer.style.display = 'block'
+
+ maskSetting.style.display = 'block'
})
if (file) {
@@ -402,11 +425,46 @@ showInitImagePreview()
initImageClearBtn.addEventListener('click', function() {
initImageSelector.value = null
+ maskImageSelector.value = null
+
initImagePreview.src = ''
+ maskImagePreview.src = ''
+
initImagePreviewContainer.style.display = 'none'
+ maskImagePreviewContainer.style.display = 'none'
+
+ maskSetting.style.display = 'none'
+
promptStrengthContainer.style.display = 'none'
})
+function showMaskImagePreview() {
+ if (maskImageSelector.files.length === 0) {
+ maskImagePreviewContainer.style.display = 'none'
+ return
+ }
+
+ let reader = new FileReader()
+ let file = maskImageSelector.files[0]
+
+ reader.addEventListener('load', function() {
+ maskImagePreview.src = reader.result
+ maskImagePreviewContainer.style.display = 'block'
+ })
+
+ if (file) {
+ reader.readAsDataURL(file)
+ }
+}
+maskImageSelector.addEventListener('change', showMaskImagePreview)
+showMaskImagePreview()
+
+maskImageClearBtn.addEventListener('click', function() {
+ maskImageSelector.value = null
+ maskImagePreview.src = ''
+ maskImagePreviewContainer.style.display = 'none'
+})
+
setInterval(healthCheck, HEALTH_PING_INTERVAL * 1000)
diff --git a/main.py b/main.py
index 41c96db5..7b29ce1c 100644
--- a/main.py
+++ b/main.py
@@ -13,6 +13,7 @@ app = FastAPI()
class ImageRequest(BaseModel):
prompt: str
init_image: str = None # base64
+ mask: str = None # base64
num_outputs: str = "1"
num_inference_steps: str = "50"
guidance_scale: str = "7.5"
@@ -51,6 +52,9 @@ async def image(req : ImageRequest):
data['input']['init_image'] = req.init_image
data['input']['prompt_strength'] = req.prompt_strength
+ if req.mask is not None:
+ data['input']['mask'] = req.mask
+
if req.seed == "-1":
del data['input']['seed']