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 @@

-
+
- + +

+ +
+
+
+ + +
Advanced settings: [show]
@@ -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']