= imgs[0].size[0] dim = get_grid_dimension(len(imgs)) if landscape: @@ -154,15 +236,19 @@ def image_grid(imgs: List[Image.Image]): def convert_images_to_base64_grid( - images: List[Image.Image], + images: List[Union[BytesIO, Image.Image]], quality: int = 95, image_format: ImageFormats = "png", ) -> str: "Convert a list of images to a list of base64 strings" - return convert_image_to_base64( - image_grid(images), quality=quality, image_format=image_format - ) + if isinstance(images[0], BytesIO): + quality = max(quality - 20, 20) + return convert_image_to_base64(images[0], quality=quality, image_format="gif") + else: + return convert_image_to_base64( + image_grid(images), quality=quality, image_format=image_format # type: ignore + ) def resize(image: Image.Image, w: int, h: int): @@ -206,7 +292,14 @@ def download_file(url: str, file: Path, add_filename: bool = False): if add_filename: file = file / file_name - total = int(r.headers["Content-Length"]) + + try: + total = int(r.headers["Content-Length"]) + except KeyError: + total = None + logger.warning( + "Content-Length header not found, progress bar will not work" + ) if file.exists(): logger.debug(f"File {file.as_posix()} already exists, skipping") @@ -224,20 +317,5 @@ def download_file(url: str, file: Path, add_filename: bool = False): return file -def preprocess_job( - job: Union[ - Txt2ImgQueueEntry, Img2ImgQueueEntry, InpaintQueueEntry, ControlNetQueueEntry - ] -): - if not isinstance(job, ControlNetQueueEntry): - # SAG does not work with KDiffusion schedulers - try: - int(unwrap_enum(job.data.scheduler)) - except ValueError: - if job.data.self_attention_scale > 0: - logger.warning( - f"Scheduler {job.data.scheduler} does not support SAG, setting to 0" - ) - job.data.self_attention_scale = 0 - +def preprocess_job(job: InferenceJob): return job diff --git a/data/motion-models/.gitkeep b/data/motion-models/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/data/pia/.gitkeep b/data/pia/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/data/scalecrafter/assets/dilate_settings/all_valid_convs.txt b/data/scalecrafter/assets/dilate_settings/all_valid_convs.txt new file mode 100644 index 000000000..d8030476b --- /dev/null +++ b/data/scalecrafter/assets/dilate_settings/all_valid_convs.txt @@ -0,0 +1,50 @@ +down_blocks.0.resnets.0.conv1 +down_blocks.0.resnets.0.conv2 +down_blocks.0.resnets.1.conv1 +down_blocks.0.resnets.1.conv2 +down_blocks.0.downsamplers.0.conv +down_blocks.1.resnets.0.conv1 +down_blocks.1.resnets.0.conv2 +down_blocks.1.resnets.1.conv1 +down_blocks.1.resnets.1.conv2 +down_blocks.1.downsamplers.0.conv +down_blocks.2.resnets.0.conv1 +down_blocks.2.resnets.0.conv2 +down_blocks.2.resnets.1.conv1 +down_blocks.2.resnets.1.conv2 +down_blocks.2.downsamplers.0.conv +down_blocks.3.resnets.0.conv1 +down_blocks.3.resnets.0.conv2 +down_blocks.3.resnets.1.conv1 +down_blocks.3.resnets.1.conv2 +up_blocks.0.resnets.0.conv1 +up_blocks.0.resnets.0.conv2 +up_blocks.0.resnets.1.conv1 +up_blocks.0.resnets.1.conv2 +up_blocks.0.resnets.2.conv1 +up_blocks.0.resnets.2.conv2 +up_blocks.0.upsamplers.0.conv +up_blocks.1.resnets.0.conv1 +up_blocks.1.resnets.0.conv2 +up_blocks.1.resnets.1.conv1 +up_blocks.1.resnets.1.conv2 +up_blocks.1.resnets.2.conv1 +up_blocks.1.resnets.2.conv2 +up_blocks.1.upsamplers.0.conv +up_blocks.2.resnets.0.conv1 +up_blocks.2.resnets.0.conv2 +up_blocks.2.resnets.1.conv1 +up_blocks.2.resnets.1.conv2 +up_blocks.2.resnets.2.conv1 +up_blocks.2.resnets.2.conv2 +up_blocks.2.upsamplers.0.conv +up_blocks.3.resnets.0.conv1 +up_blocks.3.resnets.0.conv2 +up_blocks.3.resnets.1.conv1 +up_blocks.3.resnets.1.conv2 +up_blocks.3.resnets.2.conv1 +up_blocks.3.resnets.2.conv2 +mid_block.resnets.0.conv1 +mid_block.resnets.0.conv2 +mid_block.resnets.1.conv1 +mid_block.resnets.1.conv2 diff --git a/data/scalecrafter/assets/dilate_settings/sd1.5_1024x1024.txt b/data/scalecrafter/assets/dilate_settings/sd1.5_1024x1024.txt new file mode 100644 index 000000000..e3c699030 --- /dev/null +++ b/data/scalecrafter/assets/dilate_settings/sd1.5_1024x1024.txt @@ -0,0 +1,39 @@ +down_blocks.1.resnets.0.conv1:2 +down_blocks.1.resnets.0.conv2:2 +down_blocks.1.resnets.1.conv1:2 +down_blocks.1.resnets.1.conv2:2 +down_blocks.1.downsamplers.0.conv:2 +down_blocks.2.resnets.0.conv1:2 +down_blocks.2.resnets.0.conv2:2 +down_blocks.2.resnets.1.conv1:2 +down_blocks.2.resnets.1.conv2:2 +down_blocks.2.downsamplers.0.conv:2 +down_blocks.3.resnets.0.conv1:2 +down_blocks.3.resnets.0.conv2:2 +down_blocks.3.resnets.1.conv1:2 +down_blocks.3.resnets.1.conv2:2 +up_blocks.0.resnets.0.conv1:2 +up_blocks.0.resnets.0.conv2:2 +up_blocks.0.resnets.1.conv1:2 +up_blocks.0.resnets.1.conv2:2 +up_blocks.0.resnets.2.conv1:2 +up_blocks.0.resnets.2.conv2:2 +up_blocks.0.upsamplers.0.conv:2 +up_blocks.1.resnets.0.conv1:2 +up_blocks.1.resnets.0.conv2:2 +up_blocks.1.resnets.1.conv1:2 +up_blocks.1.resnets.1.conv2:2 +up_blocks.1.resnets.2.conv1:2 +up_blocks.1.resnets.2.conv2:2 +up_blocks.1.upsamplers.0.conv:2 +up_blocks.2.resnets.0.conv1:2 +up_blocks.2.resnets.0.conv2:2 +up_blocks.2.resnets.1.conv1:2 +up_blocks.2.resnets.1.conv2:2 +up_blocks.2.resnets.2.conv1:2 +up_blocks.2.resnets.2.conv2:2 +up_blocks.2.upsamplers.0.conv:2 +mid_block.resnets.0.conv1:2 +mid_block.resnets.0.conv2:2 +mid_block.resnets.1.conv1:2 +mid_block.resnets.1.conv2:2 diff --git a/data/scalecrafter/assets/dilate_settings/sd1.5_1280x1280.txt b/data/scalecrafter/assets/dilate_settings/sd1.5_1280x1280.txt new file mode 100644 index 000000000..22769476e --- /dev/null +++ b/data/scalecrafter/assets/dilate_settings/sd1.5_1280x1280.txt @@ -0,0 +1,39 @@ +down_blocks.1.resnets.0.conv1:2.5 +down_blocks.1.resnets.0.conv2:2.5 +down_blocks.1.resnets.1.conv1:2.5 +down_blocks.1.resnets.1.conv2:2.5 +down_blocks.1.downsamplers.0.conv:2.5 +down_blocks.2.resnets.0.conv1:2.5 +down_blocks.2.resnets.0.conv2:2.5 +down_blocks.2.resnets.1.conv1:2.5 +down_blocks.2.resnets.1.conv2:2.5 +down_blocks.2.downsamplers.0.conv:2.5 +down_blocks.3.resnets.0.conv1:2.5 +down_blocks.3.resnets.0.conv2:2.5 +down_blocks.3.resnets.1.conv1:2.5 +down_blocks.3.resnets.1.conv2:2.5 +up_blocks.0.resnets.0.conv1:2.5 +up_blocks.0.resnets.0.conv2:2.5 +up_blocks.0.resnets.1.conv1:2.5 +up_blocks.0.resnets.1.conv2:2.5 +up_blocks.0.resnets.2.conv1:2.5 +up_blocks.0.resnets.2.conv2:2.5 +up_blocks.0.upsamplers.0.conv:2.5 +up_blocks.1.resnets.0.conv1:2.5 +up_blocks.1.resnets.0.conv2:2.5 +up_blocks.1.resnets.1.conv1:2.5 +up_blocks.1.resnets.1.conv2:2.5 +up_blocks.1.resnets.2.conv1:2.5 +up_blocks.1.resnets.2.conv2:2.5 +up_blocks.1.upsamplers.0.conv:2.5 +up_blocks.2.resnets.0.conv1:2.5 +up_blocks.2.resnets.0.conv2:2.5 +up_blocks.2.resnets.1.conv1:2.5 +up_blocks.2.resnets.1.conv2:2.5 +up_blocks.2.resnets.2.conv1:2.5 +up_blocks.2.resnets.2.conv2:2.5 +up_blocks.2.upsamplers.0.conv:2.5 +mid_block.resnets.0.conv1:2.5 +mid_block.resnets.0.conv2:2.5 +mid_block.resnets.1.conv1:2.5 +mid_block.resnets.1.conv2:2.5 diff --git a/data/scalecrafter/assets/dilate_settings/sd1.5_2048x1024.txt b/data/scalecrafter/assets/dilate_settings/sd1.5_2048x1024.txt new file mode 100644 index 000000000..dd2089694 --- /dev/null +++ b/data/scalecrafter/assets/dilate_settings/sd1.5_2048x1024.txt @@ -0,0 +1,39 @@ +down_blocks.1.resnets.0.conv1:2 +down_blocks.1.resnets.0.conv2:2 +down_blocks.1.resnets.1.conv1:2 +down_blocks.1.resnets.1.conv2:2 +down_blocks.1.downsamplers.0.conv:2 +down_blocks.2.resnets.0.conv1:3 +down_blocks.2.resnets.0.conv2:3 +down_blocks.2.resnets.1.conv1:3 +down_blocks.2.resnets.1.conv2:3 +down_blocks.2.downsamplers.0.conv:3 +down_blocks.3.resnets.0.conv1:4 +down_blocks.3.resnets.0.conv2:4 +down_blocks.3.resnets.1.conv1:4 +down_blocks.3.resnets.1.conv2:4 +up_blocks.0.resnets.0.conv1:4 +up_blocks.0.resnets.0.conv2:4 +up_blocks.0.resnets.1.conv1:4 +up_blocks.0.resnets.1.conv2:4 +up_blocks.0.resnets.2.conv1:4 +up_blocks.0.resnets.2.conv2:4 +up_blocks.0.upsamplers.0.conv:4 +up_blocks.1.resnets.0.conv1:3 +up_blocks.1.resnets.0.conv2:3 +up_blocks.1.resnets.1.conv1:3 +up_blocks.1.resnets.1.conv2:3 +up_blocks.1.resnets.2.conv1:3 +up_blocks.1.resnets.2.conv2:3 +up_blocks.1.upsamplers.0.conv:3 +up_blocks.2.resnets.0.conv1:2 +up_blocks.2.resnets.0.conv2:2 +up_blocks.2.resnets.1.conv1:2 +up_blocks.2.resnets.1.conv2:2 +up_blocks.2.resnets.2.conv1:2 +up_blocks.2.resnets.2.conv2:2 +up_blocks.2.upsamplers.0.conv:2 +mid_block.resnets.0.conv1:4 +mid_block.resnets.0.conv2:4 +mid_block.resnets.1.conv1:4 +mid_block.resnets.1.conv2:4 diff --git a/data/scalecrafter/assets/dilate_settings/sd1.5_2048x2048.txt b/data/scalecrafter/assets/dilate_settings/sd1.5_2048x2048.txt new file mode 100644 index 000000000..dd2089694 --- /dev/null +++ b/data/scalecrafter/assets/dilate_settings/sd1.5_2048x2048.txt @@ -0,0 +1,39 @@ +down_blocks.1.resnets.0.conv1:2 +down_blocks.1.resnets.0.conv2:2 +down_blocks.1.resnets.1.conv1:2 +down_blocks.1.resnets.1.conv2:2 +down_blocks.1.downsamplers.0.conv:2 +down_blocks.2.resnets.0.conv1:3 +down_blocks.2.resnets.0.conv2:3 +down_blocks.2.resnets.1.conv1:3 +down_blocks.2.resnets.1.conv2:3 +down_blocks.2.downsamplers.0.conv:3 +down_blocks.3.resnets.0.conv1:4 +down_blocks.3.resnets.0.conv2:4 +down_blocks.3.resnets.1.conv1:4 +down_blocks.3.resnets.1.conv2:4 +up_blocks.0.resnets.0.conv1:4 +up_blocks.0.resnets.0.conv2:4 +up_blocks.0.resnets.1.conv1:4 +up_blocks.0.resnets.1.conv2:4 +up_blocks.0.resnets.2.conv1:4 +up_blocks.0.resnets.2.conv2:4 +up_blocks.0.upsamplers.0.conv:4 +up_blocks.1.resnets.0.conv1:3 +up_blocks.1.resnets.0.conv2:3 +up_blocks.1.resnets.1.conv1:3 +up_blocks.1.resnets.1.conv2:3 +up_blocks.1.resnets.2.conv1:3 +up_blocks.1.resnets.2.conv2:3 +up_blocks.1.upsamplers.0.conv:3 +up_blocks.2.resnets.0.conv1:2 +up_blocks.2.resnets.0.conv2:2 +up_blocks.2.resnets.1.conv1:2 +up_blocks.2.resnets.1.conv2:2 +up_blocks.2.resnets.2.conv1:2 +up_blocks.2.resnets.2.conv2:2 +up_blocks.2.upsamplers.0.conv:2 +mid_block.resnets.0.conv1:4 +mid_block.resnets.0.conv2:4 +mid_block.resnets.1.conv1:4 +mid_block.resnets.1.conv2:4 diff --git a/data/scalecrafter/assets/dilate_settings/sd2.1_1024x1024.txt b/data/scalecrafter/assets/dilate_settings/sd2.1_1024x1024.txt new file mode 100644 index 000000000..e3c699030 --- /dev/null +++ b/data/scalecrafter/assets/dilate_settings/sd2.1_1024x1024.txt @@ -0,0 +1,39 @@ +down_blocks.1.resnets.0.conv1:2 +down_blocks.1.resnets.0.conv2:2 +down_blocks.1.resnets.1.conv1:2 +down_blocks.1.resnets.1.conv2:2 +down_blocks.1.downsamplers.0.conv:2 +down_blocks.2.resnets.0.conv1:2 +down_blocks.2.resnets.0.conv2:2 +down_blocks.2.resnets.1.conv1:2 +down_blocks.2.resnets.1.conv2:2 +down_blocks.2.downsamplers.0.conv:2 +down_blocks.3.resnets.0.conv1:2 +down_blocks.3.resnets.0.conv2:2 +down_blocks.3.resnets.1.conv1:2 +down_blocks.3.resnets.1.conv2:2 +up_blocks.0.resnets.0.conv1:2 +up_blocks.0.resnets.0.conv2:2 +up_blocks.0.resnets.1.conv1:2 +up_blocks.0.resnets.1.conv2:2 +up_blocks.0.resnets.2.conv1:2 +up_blocks.0.resnets.2.conv2:2 +up_blocks.0.upsamplers.0.conv:2 +up_blocks.1.resnets.0.conv1:2 +up_blocks.1.resnets.0.conv2:2 +up_blocks.1.resnets.1.conv1:2 +up_blocks.1.resnets.1.conv2:2 +up_blocks.1.resnets.2.conv1:2 +up_blocks.1.resnets.2.conv2:2 +up_blocks.1.upsamplers.0.conv:2 +up_blocks.2.resnets.0.conv1:2 +up_blocks.2.resnets.0.conv2:2 +up_blocks.2.resnets.1.conv1:2 +up_blocks.2.resnets.1.conv2:2 +up_blocks.2.resnets.2.conv1:2 +up_blocks.2.resnets.2.conv2:2 +up_blocks.2.upsamplers.0.conv:2 +mid_block.resnets.0.conv1:2 +mid_block.resnets.0.conv2:2 +mid_block.resnets.1.conv1:2 +mid_block.resnets.1.conv2:2 diff --git a/data/scalecrafter/assets/dilate_settings/sd2.1_1280x1280.txt b/data/scalecrafter/assets/dilate_settings/sd2.1_1280x1280.txt new file mode 100644 index 000000000..22769476e --- /dev/null +++ b/data/scalecrafter/assets/dilate_settings/sd2.1_1280x1280.txt @@ -0,0 +1,39 @@ +down_blocks.1.resnets.0.conv1:2.5 +down_blocks.1.resnets.0.conv2:2.5 +down_blocks.1.resnets.1.conv1:2.5 +down_blocks.1.resnets.1.conv2:2.5 +down_blocks.1.downsamplers.0.conv:2.5 +down_blocks.2.resnets.0.conv1:2.5 +down_blocks.2.resnets.0.conv2:2.5 +down_blocks.2.resnets.1.conv1:2.5 +down_blocks.2.resnets.1.conv2:2.5 +down_blocks.2.downsamplers.0.conv:2.5 +down_blocks.3.resnets.0.conv1:2.5 +down_blocks.3.resnets.0.conv2:2.5 +down_blocks.3.resnets.1.conv1:2.5 +down_blocks.3.resnets.1.conv2:2.5 +up_blocks.0.resnets.0.conv1:2.5 +up_blocks.0.resnets.0.conv2:2.5 +up_blocks.0.resnets.1.conv1:2.5 +up_blocks.0.resnets.1.conv2:2.5 +up_blocks.0.resnets.2.conv1:2.5 +up_blocks.0.resnets.2.conv2:2.5 +up_blocks.0.upsamplers.0.conv:2.5 +up_blocks.1.resnets.0.conv1:2.5 +up_blocks.1.resnets.0.conv2:2.5 +up_blocks.1.resnets.1.conv1:2.5 +up_blocks.1.resnets.1.conv2:2.5 +up_blocks.1.resnets.2.conv1:2.5 +up_blocks.1.resnets.2.conv2:2.5 +up_blocks.1.upsamplers.0.conv:2.5 +up_blocks.2.resnets.0.conv1:2.5 +up_blocks.2.resnets.0.conv2:2.5 +up_blocks.2.resnets.1.conv1:2.5 +up_blocks.2.resnets.1.conv2:2.5 +up_blocks.2.resnets.2.conv1:2.5 +up_blocks.2.resnets.2.conv2:2.5 +up_blocks.2.upsamplers.0.conv:2.5 +mid_block.resnets.0.conv1:2.5 +mid_block.resnets.0.conv2:2.5 +mid_block.resnets.1.conv1:2.5 +mid_block.resnets.1.conv2:2.5 diff --git a/data/scalecrafter/assets/dilate_settings/sd2.1_2048x1024.txt b/data/scalecrafter/assets/dilate_settings/sd2.1_2048x1024.txt new file mode 100644 index 000000000..dd2089694 --- /dev/null +++ b/data/scalecrafter/assets/dilate_settings/sd2.1_2048x1024.txt @@ -0,0 +1,39 @@ +down_blocks.1.resnets.0.conv1:2 +down_blocks.1.resnets.0.conv2:2 +down_blocks.1.resnets.1.conv1:2 +down_blocks.1.resnets.1.conv2:2 +down_blocks.1.downsamplers.0.conv:2 +down_blocks.2.resnets.0.conv1:3 +down_blocks.2.resnets.0.conv2:3 +down_blocks.2.resnets.1.conv1:3 +down_blocks.2.resnets.1.conv2:3 +down_blocks.2.downsamplers.0.conv:3 +down_blocks.3.resnets.0.conv1:4 +down_blocks.3.resnets.0.conv2:4 +down_blocks.3.resnets.1.conv1:4 +down_blocks.3.resnets.1.conv2:4 +up_blocks.0.resnets.0.conv1:4 +up_blocks.0.resnets.0.conv2:4 +up_blocks.0.resnets.1.conv1:4 +up_blocks.0.resnets.1.conv2:4 +up_blocks.0.resnets.2.conv1:4 +up_blocks.0.resnets.2.conv2:4 +up_blocks.0.upsamplers.0.conv:4 +up_blocks.1.resnets.0.conv1:3 +up_blocks.1.resnets.0.conv2:3 +up_blocks.1.resnets.1.conv1:3 +up_blocks.1.resnets.1.conv2:3 +up_blocks.1.resnets.2.conv1:3 +up_blocks.1.resnets.2.conv2:3 +up_blocks.1.upsamplers.0.conv:3 +up_blocks.2.resnets.0.conv1:2 +up_blocks.2.resnets.0.conv2:2 +up_blocks.2.resnets.1.conv1:2 +up_blocks.2.resnets.1.conv2:2 +up_blocks.2.resnets.2.conv1:2 +up_blocks.2.resnets.2.conv2:2 +up_blocks.2.upsamplers.0.conv:2 +mid_block.resnets.0.conv1:4 +mid_block.resnets.0.conv2:4 +mid_block.resnets.1.conv1:4 +mid_block.resnets.1.conv2:4 diff --git a/data/scalecrafter/assets/dilate_settings/sd2.1_2048x2048.txt b/data/scalecrafter/assets/dilate_settings/sd2.1_2048x2048.txt new file mode 100644 index 000000000..e3423b1f0 --- /dev/null +++ b/data/scalecrafter/assets/dilate_settings/sd2.1_2048x2048.txt @@ -0,0 +1,40 @@ +down_blocks.2.resnets.0.conv1:3 +down_blocks.2.resnets.0.conv2:3 +down_blocks.2.resnets.1.conv1:3 +down_blocks.2.resnets.1.conv2:3 +down_blocks.2.downsamplers.0.conv:4 +down_blocks.3.resnets.0.conv1:4 +down_blocks.3.resnets.0.conv2:4 +down_blocks.3.resnets.1.conv1:4 +down_blocks.3.resnets.1.conv2:4 +up_blocks.0.resnets.0.conv1:4 +up_blocks.0.resnets.0.conv2:4 +up_blocks.0.resnets.1.conv1:4 +up_blocks.0.resnets.1.conv2:4 +up_blocks.0.resnets.2.conv1:4 +up_blocks.0.resnets.2.conv2:4 +up_blocks.0.upsamplers.0.conv:4 +up_blocks.1.resnets.0.conv1:4 +up_blocks.1.resnets.0.conv2:4 +up_blocks.1.resnets.1.conv1:4 +up_blocks.1.resnets.1.conv2:4 +up_blocks.1.resnets.2.conv1:4 +up_blocks.1.resnets.2.conv2:4 +up_blocks.1.upsamplers.0.conv:4 +up_blocks.2.resnets.0.conv1:3 +up_blocks.2.resnets.0.conv2:3 +up_blocks.2.resnets.1.conv1:3 +up_blocks.2.resnets.1.conv2:3 +up_blocks.2.resnets.2.conv1:3 +up_blocks.2.resnets.2.conv2:3 +up_blocks.2.upsamplers.0.conv:3 +up_blocks.3.resnets.0.conv1:2 +up_blocks.3.resnets.0.conv2:2 +up_blocks.3.resnets.1.conv1:2 +up_blocks.3.resnets.1.conv2:2 +up_blocks.3.resnets.2.conv1:2 +up_blocks.3.resnets.2.conv2:2 +mid_block.resnets.0.conv1:4 +mid_block.resnets.0.conv2:4 +mid_block.resnets.1.conv1:4 +mid_block.resnets.1.conv2:4 diff --git a/data/scalecrafter/assets/dilate_settings/sdxl_2048x2048.txt b/data/scalecrafter/assets/dilate_settings/sdxl_2048x2048.txt new file mode 100644 index 000000000..e2a9e8576 --- /dev/null +++ b/data/scalecrafter/assets/dilate_settings/sdxl_2048x2048.txt @@ -0,0 +1,15 @@ +down_blocks.3.resnets.0.conv1:2 +down_blocks.3.resnets.0.conv2:2 +down_blocks.3.resnets.1.conv1:2 +down_blocks.3.resnets.1.conv2:2 +up_blocks.0.resnets.0.conv1:2 +up_blocks.0.resnets.0.conv2:2 +up_blocks.0.resnets.1.conv1:2 +up_blocks.0.resnets.1.conv2:2 +up_blocks.0.resnets.2.conv1:2 +up_blocks.0.resnets.2.conv2:2 +up_blocks.0.upsamplers.0.conv:2 +mid_block.resnets.0.conv1:2 +mid_block.resnets.0.conv2:2 +mid_block.resnets.1.conv1:2 +mid_block.resnets.1.conv2:2 diff --git a/data/scalecrafter/assets/dilate_settings/sdxl_2560x2560.txt b/data/scalecrafter/assets/dilate_settings/sdxl_2560x2560.txt new file mode 100644 index 000000000..72af3b53e --- /dev/null +++ b/data/scalecrafter/assets/dilate_settings/sdxl_2560x2560.txt @@ -0,0 +1,15 @@ +down_blocks.3.resnets.0.conv1:2.5 +down_blocks.3.resnets.0.conv2:2.5 +down_blocks.3.resnets.1.conv1:2.5 +down_blocks.3.resnets.1.conv2:2.5 +up_blocks.0.resnets.0.conv1:2.5 +up_blocks.0.resnets.0.conv2:2.5 +up_blocks.0.resnets.1.conv1:2.5 +up_blocks.0.resnets.1.conv2:2.5 +up_blocks.0.resnets.2.conv1:2.5 +up_blocks.0.resnets.2.conv2:2.5 +up_blocks.0.upsamplers.0.conv:2.5 +mid_block.resnets.0.conv1:2.5 +mid_block.resnets.0.conv2:2.5 +mid_block.resnets.1.conv1:2.5 +mid_block.resnets.1.conv2:2.5 diff --git a/data/scalecrafter/assets/dilate_settings/sdxl_4096x2048.txt b/data/scalecrafter/assets/dilate_settings/sdxl_4096x2048.txt new file mode 100644 index 000000000..43da89cf5 --- /dev/null +++ b/data/scalecrafter/assets/dilate_settings/sdxl_4096x2048.txt @@ -0,0 +1,34 @@ +down_blocks.2.resnets.0.conv1:3 +down_blocks.2.resnets.0.conv2:3 +down_blocks.2.resnets.1.conv1:3 +down_blocks.2.resnets.1.conv2:3 +down_blocks.2.downsamplers.0.conv:3 +down_blocks.3.resnets.0.conv1:4 +down_blocks.3.resnets.0.conv2:4 +down_blocks.3.resnets.1.conv1:4 +down_blocks.3.resnets.1.conv2:4 +up_blocks.0.resnets.0.conv1:4 +up_blocks.0.resnets.0.conv2:4 +up_blocks.0.resnets.1.conv1:4 +up_blocks.0.resnets.1.conv2:4 +up_blocks.0.resnets.2.conv1:4 +up_blocks.0.resnets.2.conv2:4 +up_blocks.0.upsamplers.0.conv:4 +up_blocks.1.resnets.0.conv1:3 +up_blocks.1.resnets.0.conv2:3 +up_blocks.1.resnets.1.conv1:3 +up_blocks.1.resnets.1.conv2:3 +up_blocks.1.resnets.2.conv1:3 +up_blocks.1.resnets.2.conv2:3 +up_blocks.1.upsamplers.0.conv:3 +up_blocks.2.resnets.0.conv1:2 +up_blocks.2.resnets.0.conv2:2 +up_blocks.2.resnets.1.conv1:2 +up_blocks.2.resnets.1.conv2:2 +up_blocks.2.resnets.2.conv1:2 +up_blocks.2.resnets.2.conv2:2 +up_blocks.2.upsamplers.0.conv:2 +mid_block.resnets.0.conv1:4 +mid_block.resnets.0.conv2:4 +mid_block.resnets.1.conv1:4 +mid_block.resnets.1.conv2:4 diff --git a/data/scalecrafter/assets/dilate_settings/sdxl_4096x4096.txt b/data/scalecrafter/assets/dilate_settings/sdxl_4096x4096.txt new file mode 100644 index 000000000..047cb71e9 --- /dev/null +++ b/data/scalecrafter/assets/dilate_settings/sdxl_4096x4096.txt @@ -0,0 +1,34 @@ +down_blocks.2.resnets.0.conv1:4 +down_blocks.2.resnets.0.conv2:4 +down_blocks.2.resnets.1.conv1:4 +down_blocks.2.resnets.1.conv2:4 +down_blocks.2.downsamplers.0.conv:4 +down_blocks.3.resnets.0.conv1:4 +down_blocks.3.resnets.0.conv2:4 +down_blocks.3.resnets.1.conv1:4 +down_blocks.3.resnets.1.conv2:4 +up_blocks.0.resnets.0.conv1:4 +up_blocks.0.resnets.0.conv2:4 +up_blocks.0.resnets.1.conv1:4 +up_blocks.0.resnets.1.conv2:4 +up_blocks.0.resnets.2.conv1:4 +up_blocks.0.resnets.2.conv2:4 +up_blocks.0.upsamplers.0.conv:4 +up_blocks.1.resnets.0.conv1:3 +up_blocks.1.resnets.0.conv2:3 +up_blocks.1.resnets.1.conv1:3 +up_blocks.1.resnets.1.conv2:3 +up_blocks.1.resnets.2.conv1:3 +up_blocks.1.resnets.2.conv2:3 +up_blocks.1.upsamplers.0.conv:3 +up_blocks.2.resnets.0.conv1:2 +up_blocks.2.resnets.0.conv2:2 +up_blocks.2.resnets.1.conv1:2 +up_blocks.2.resnets.1.conv2:2 +up_blocks.2.resnets.2.conv1:2 +up_blocks.2.resnets.2.conv2:2 +up_blocks.2.upsamplers.0.conv:2 +mid_block.resnets.0.conv1:4 +mid_block.resnets.0.conv2:4 +mid_block.resnets.1.conv1:4 +mid_block.resnets.1.conv2:4 diff --git a/data/scalecrafter/assets/disperse_settings/sd1.5_2048x2048.txt b/data/scalecrafter/assets/disperse_settings/sd1.5_2048x2048.txt new file mode 100644 index 000000000..81296cf48 --- /dev/null +++ b/data/scalecrafter/assets/disperse_settings/sd1.5_2048x2048.txt @@ -0,0 +1,23 @@ +down_blocks.2.downsamplers.0.conv +down_blocks.3.resnets.0.conv1 +down_blocks.3.resnets.0.conv2 +down_blocks.3.resnets.1.conv1 +down_blocks.3.resnets.1.conv2 +up_blocks.0.resnets.0.conv1 +up_blocks.0.resnets.0.conv2 +up_blocks.0.resnets.1.conv1 +up_blocks.0.resnets.1.conv2 +up_blocks.0.resnets.2.conv1 +up_blocks.0.resnets.2.conv2 +up_blocks.0.upsamplers.0.conv +up_blocks.1.resnets.0.conv1 +up_blocks.1.resnets.0.conv2 +up_blocks.1.resnets.1.conv1 +up_blocks.1.resnets.1.conv2 +up_blocks.1.resnets.2.conv1 +up_blocks.1.resnets.2.conv2 +up_blocks.1.upsamplers.0.conv +mid_block.resnets.0.conv1 +mid_block.resnets.0.conv2 +mid_block.resnets.1.conv1 +mid_block.resnets.1.conv2 diff --git a/data/scalecrafter/assets/disperse_settings/sd2.1_2048x2048.txt b/data/scalecrafter/assets/disperse_settings/sd2.1_2048x2048.txt new file mode 100644 index 000000000..81296cf48 --- /dev/null +++ b/data/scalecrafter/assets/disperse_settings/sd2.1_2048x2048.txt @@ -0,0 +1,23 @@ +down_blocks.2.downsamplers.0.conv +down_blocks.3.resnets.0.conv1 +down_blocks.3.resnets.0.conv2 +down_blocks.3.resnets.1.conv1 +down_blocks.3.resnets.1.conv2 +up_blocks.0.resnets.0.conv1 +up_blocks.0.resnets.0.conv2 +up_blocks.0.resnets.1.conv1 +up_blocks.0.resnets.1.conv2 +up_blocks.0.resnets.2.conv1 +up_blocks.0.resnets.2.conv2 +up_blocks.0.upsamplers.0.conv +up_blocks.1.resnets.0.conv1 +up_blocks.1.resnets.0.conv2 +up_blocks.1.resnets.1.conv1 +up_blocks.1.resnets.1.conv2 +up_blocks.1.resnets.2.conv1 +up_blocks.1.resnets.2.conv2 +up_blocks.1.upsamplers.0.conv +mid_block.resnets.0.conv1 +mid_block.resnets.0.conv2 +mid_block.resnets.1.conv1 +mid_block.resnets.1.conv2 diff --git a/data/scalecrafter/assets/disperse_settings/sdxl_4096x4096.txt b/data/scalecrafter/assets/disperse_settings/sdxl_4096x4096.txt new file mode 100644 index 000000000..5d27a4f67 --- /dev/null +++ b/data/scalecrafter/assets/disperse_settings/sdxl_4096x4096.txt @@ -0,0 +1,16 @@ +down_blocks.2.resnets.0.conv1 +down_blocks.2.resnets.0.conv2 +down_blocks.2.resnets.1.conv1 +down_blocks.2.resnets.1.conv2 +down_blocks.2.downsamplers.0.conv +up_blocks.0.resnets.0.conv1 +up_blocks.0.resnets.0.conv2 +up_blocks.0.resnets.1.conv1 +up_blocks.0.resnets.1.conv2 +up_blocks.0.resnets.2.conv1 +up_blocks.0.resnets.2.conv2 +up_blocks.0.upsamplers.0.conv +mid_block.resnets.0.conv1 +mid_block.resnets.0.conv2 +mid_block.resnets.1.conv1 +mid_block.resnets.1.conv2 \ No newline at end of file diff --git a/data/scalecrafter/assets/inflate_settings/sd1.5_2048x2048.txt b/data/scalecrafter/assets/inflate_settings/sd1.5_2048x2048.txt new file mode 100644 index 000000000..113001f3e --- /dev/null +++ b/data/scalecrafter/assets/inflate_settings/sd1.5_2048x2048.txt @@ -0,0 +1,39 @@ +down_blocks.1.resnets.0.conv1 +down_blocks.1.resnets.0.conv2 +down_blocks.1.resnets.1.conv1 +down_blocks.1.resnets.1.conv2 +down_blocks.1.downsamplers.0.conv +down_blocks.2.resnets.0.conv1 +down_blocks.2.resnets.0.conv2 +down_blocks.2.resnets.1.conv1 +down_blocks.2.resnets.1.conv2 +down_blocks.2.downsamplers.0.conv +down_blocks.3.resnets.0.conv1 +down_blocks.3.resnets.0.conv2 +down_blocks.3.resnets.1.conv1 +down_blocks.3.resnets.1.conv2 +up_blocks.0.resnets.0.conv1 +up_blocks.0.resnets.0.conv2 +up_blocks.0.resnets.1.conv1 +up_blocks.0.resnets.1.conv2 +up_blocks.0.resnets.2.conv1 +up_blocks.0.resnets.2.conv2 +up_blocks.0.upsamplers.0.conv +up_blocks.1.resnets.0.conv1 +up_blocks.1.resnets.0.conv2 +up_blocks.1.resnets.1.conv1 +up_blocks.1.resnets.1.conv2 +up_blocks.1.resnets.2.conv1 +up_blocks.1.resnets.2.conv2 +up_blocks.1.upsamplers.0.conv +up_blocks.2.resnets.0.conv1 +up_blocks.2.resnets.0.conv2 +up_blocks.2.resnets.1.conv1 +up_blocks.2.resnets.1.conv2 +up_blocks.2.resnets.2.conv1 +up_blocks.2.resnets.2.conv2 +up_blocks.2.upsamplers.0.conv +mid_block.resnets.0.conv1 +mid_block.resnets.0.conv2 +mid_block.resnets.1.conv1 +mid_block.resnets.1.conv2 diff --git a/data/scalecrafter/assets/inflate_settings/sdxl_4096x4096.txt b/data/scalecrafter/assets/inflate_settings/sdxl_4096x4096.txt new file mode 100644 index 000000000..e69de29bb diff --git a/data/scalecrafter/assets/ndcfg_dilate_settings/sd1.5_2048x1024.txt b/data/scalecrafter/assets/ndcfg_dilate_settings/sd1.5_2048x1024.txt new file mode 100644 index 000000000..199b42b44 --- /dev/null +++ b/data/scalecrafter/assets/ndcfg_dilate_settings/sd1.5_2048x1024.txt @@ -0,0 +1,27 @@ +down_blocks.2.resnets.0.conv1:3 +down_blocks.2.resnets.0.conv2:3 +down_blocks.2.resnets.1.conv1:3 +down_blocks.2.resnets.1.conv2:3 +down_blocks.2.downsamplers.0.conv:3 +down_blocks.3.resnets.0.conv1:4 +down_blocks.3.resnets.0.conv2:4 +down_blocks.3.resnets.1.conv1:4 +down_blocks.3.resnets.1.conv2:4 +up_blocks.0.resnets.0.conv1:4 +up_blocks.0.resnets.0.conv2:4 +up_blocks.0.resnets.1.conv1:4 +up_blocks.0.resnets.1.conv2:4 +up_blocks.0.resnets.2.conv1:4 +up_blocks.0.resnets.2.conv2:4 +up_blocks.0.upsamplers.0.conv:4 +up_blocks.1.resnets.0.conv1:3 +up_blocks.1.resnets.0.conv2:3 +up_blocks.1.resnets.1.conv1:3 +up_blocks.1.resnets.1.conv2:3 +up_blocks.1.resnets.2.conv1:3 +up_blocks.1.resnets.2.conv2:3 +up_blocks.1.upsamplers.0.conv:3 +mid_block.resnets.0.conv1:4 +mid_block.resnets.0.conv2:4 +mid_block.resnets.1.conv1:4 +mid_block.resnets.1.conv2:4 diff --git a/data/scalecrafter/assets/ndcfg_dilate_settings/sd1.5_2048x2048.txt b/data/scalecrafter/assets/ndcfg_dilate_settings/sd1.5_2048x2048.txt new file mode 100644 index 000000000..199b42b44 --- /dev/null +++ b/data/scalecrafter/assets/ndcfg_dilate_settings/sd1.5_2048x2048.txt @@ -0,0 +1,27 @@ +down_blocks.2.resnets.0.conv1:3 +down_blocks.2.resnets.0.conv2:3 +down_blocks.2.resnets.1.conv1:3 +down_blocks.2.resnets.1.conv2:3 +down_blocks.2.downsamplers.0.conv:3 +down_blocks.3.resnets.0.conv1:4 +down_blocks.3.resnets.0.conv2:4 +down_blocks.3.resnets.1.conv1:4 +down_blocks.3.resnets.1.conv2:4 +up_blocks.0.resnets.0.conv1:4 +up_blocks.0.resnets.0.conv2:4 +up_blocks.0.resnets.1.conv1:4 +up_blocks.0.resnets.1.conv2:4 +up_blocks.0.resnets.2.conv1:4 +up_blocks.0.resnets.2.conv2:4 +up_blocks.0.upsamplers.0.conv:4 +up_blocks.1.resnets.0.conv1:3 +up_blocks.1.resnets.0.conv2:3 +up_blocks.1.resnets.1.conv1:3 +up_blocks.1.resnets.1.conv2:3 +up_blocks.1.resnets.2.conv1:3 +up_blocks.1.resnets.2.conv2:3 +up_blocks.1.upsamplers.0.conv:3 +mid_block.resnets.0.conv1:4 +mid_block.resnets.0.conv2:4 +mid_block.resnets.1.conv1:4 +mid_block.resnets.1.conv2:4 diff --git a/data/scalecrafter/assets/ndcfg_dilate_settings/sd2.1_2048x1024.txt b/data/scalecrafter/assets/ndcfg_dilate_settings/sd2.1_2048x1024.txt new file mode 100644 index 000000000..0b48eb4d0 --- /dev/null +++ b/data/scalecrafter/assets/ndcfg_dilate_settings/sd2.1_2048x1024.txt @@ -0,0 +1,34 @@ +down_blocks.2.resnets.0.conv1:3 +down_blocks.2.resnets.0.conv2:3 +down_blocks.2.resnets.1.conv1:3 +down_blocks.2.resnets.1.conv2:3 +down_blocks.2.downsamplers.0.conv:4 +down_blocks.3.resnets.0.conv1:4 +down_blocks.3.resnets.0.conv2:4 +down_blocks.3.resnets.1.conv1:4 +down_blocks.3.resnets.1.conv2:4 +up_blocks.0.resnets.0.conv1:4 +up_blocks.0.resnets.0.conv2:4 +up_blocks.0.resnets.1.conv1:4 +up_blocks.0.resnets.1.conv2:4 +up_blocks.0.resnets.2.conv1:4 +up_blocks.0.resnets.2.conv2:4 +up_blocks.0.upsamplers.0.conv:4 +up_blocks.1.resnets.0.conv1:4 +up_blocks.1.resnets.0.conv2:4 +up_blocks.1.resnets.1.conv1:4 +up_blocks.1.resnets.1.conv2:4 +up_blocks.1.resnets.2.conv1:4 +up_blocks.1.resnets.2.conv2:4 +up_blocks.1.upsamplers.0.conv:4 +up_blocks.2.resnets.0.conv1:3 +up_blocks.2.resnets.0.conv2:3 +up_blocks.2.resnets.1.conv1:3 +up_blocks.2.resnets.1.conv2:3 +up_blocks.2.resnets.2.conv1:3 +up_blocks.2.resnets.2.conv2:3 +up_blocks.2.upsamplers.0.conv:3 +mid_block.resnets.0.conv1:4 +mid_block.resnets.0.conv2:4 +mid_block.resnets.1.conv1:4 +mid_block.resnets.1.conv2:4 diff --git a/data/scalecrafter/assets/ndcfg_dilate_settings/sd2.1_2048x2048.txt b/data/scalecrafter/assets/ndcfg_dilate_settings/sd2.1_2048x2048.txt new file mode 100644 index 000000000..0b48eb4d0 --- /dev/null +++ b/data/scalecrafter/assets/ndcfg_dilate_settings/sd2.1_2048x2048.txt @@ -0,0 +1,34 @@ +down_blocks.2.resnets.0.conv1:3 +down_blocks.2.resnets.0.conv2:3 +down_blocks.2.resnets.1.conv1:3 +down_blocks.2.resnets.1.conv2:3 +down_blocks.2.downsamplers.0.conv:4 +down_blocks.3.resnets.0.conv1:4 +down_blocks.3.resnets.0.conv2:4 +down_blocks.3.resnets.1.conv1:4 +down_blocks.3.resnets.1.conv2:4 +up_blocks.0.resnets.0.conv1:4 +up_blocks.0.resnets.0.conv2:4 +up_blocks.0.resnets.1.conv1:4 +up_blocks.0.resnets.1.conv2:4 +up_blocks.0.resnets.2.conv1:4 +up_blocks.0.resnets.2.conv2:4 +up_blocks.0.upsamplers.0.conv:4 +up_blocks.1.resnets.0.conv1:4 +up_blocks.1.resnets.0.conv2:4 +up_blocks.1.resnets.1.conv1:4 +up_blocks.1.resnets.1.conv2:4 +up_blocks.1.resnets.2.conv1:4 +up_blocks.1.resnets.2.conv2:4 +up_blocks.1.upsamplers.0.conv:4 +up_blocks.2.resnets.0.conv1:3 +up_blocks.2.resnets.0.conv2:3 +up_blocks.2.resnets.1.conv1:3 +up_blocks.2.resnets.1.conv2:3 +up_blocks.2.resnets.2.conv1:3 +up_blocks.2.resnets.2.conv2:3 +up_blocks.2.upsamplers.0.conv:3 +mid_block.resnets.0.conv1:4 +mid_block.resnets.0.conv2:4 +mid_block.resnets.1.conv1:4 +mid_block.resnets.1.conv2:4 diff --git a/data/scalecrafter/assets/ndcfg_dilate_settings/sdxl_4096x2048.txt b/data/scalecrafter/assets/ndcfg_dilate_settings/sdxl_4096x2048.txt new file mode 100644 index 000000000..e2a9e8576 --- /dev/null +++ b/data/scalecrafter/assets/ndcfg_dilate_settings/sdxl_4096x2048.txt @@ -0,0 +1,15 @@ +down_blocks.3.resnets.0.conv1:2 +down_blocks.3.resnets.0.conv2:2 +down_blocks.3.resnets.1.conv1:2 +down_blocks.3.resnets.1.conv2:2 +up_blocks.0.resnets.0.conv1:2 +up_blocks.0.resnets.0.conv2:2 +up_blocks.0.resnets.1.conv1:2 +up_blocks.0.resnets.1.conv2:2 +up_blocks.0.resnets.2.conv1:2 +up_blocks.0.resnets.2.conv2:2 +up_blocks.0.upsamplers.0.conv:2 +mid_block.resnets.0.conv1:2 +mid_block.resnets.0.conv2:2 +mid_block.resnets.1.conv1:2 +mid_block.resnets.1.conv2:2 diff --git a/data/scalecrafter/assets/ndcfg_dilate_settings/sdxl_4096x4096.txt b/data/scalecrafter/assets/ndcfg_dilate_settings/sdxl_4096x4096.txt new file mode 100644 index 000000000..e2a9e8576 --- /dev/null +++ b/data/scalecrafter/assets/ndcfg_dilate_settings/sdxl_4096x4096.txt @@ -0,0 +1,15 @@ +down_blocks.3.resnets.0.conv1:2 +down_blocks.3.resnets.0.conv2:2 +down_blocks.3.resnets.1.conv1:2 +down_blocks.3.resnets.1.conv2:2 +up_blocks.0.resnets.0.conv1:2 +up_blocks.0.resnets.0.conv2:2 +up_blocks.0.resnets.1.conv1:2 +up_blocks.0.resnets.1.conv2:2 +up_blocks.0.resnets.2.conv1:2 +up_blocks.0.resnets.2.conv2:2 +up_blocks.0.upsamplers.0.conv:2 +mid_block.resnets.0.conv1:2 +mid_block.resnets.0.conv2:2 +mid_block.resnets.1.conv1:2 +mid_block.resnets.1.conv2:2 diff --git a/data/scalecrafter/configs/sd1.5_1024x1024.yaml b/data/scalecrafter/configs/sd1.5_1024x1024.yaml new file mode 100644 index 000000000..50ec3f33a --- /dev/null +++ b/data/scalecrafter/configs/sd1.5_1024x1024.yaml @@ -0,0 +1,13 @@ +ndcfg_tau: 0 +dilate_tau: 30 +inflate_tau: 0 +dilate_settings: ./assets/dilate_settings/sd1.5_1024x1024.txt +ndcfg_dilate_settings: ~ +disperse_settings: ~ +disperse_transform: ~ +progressive: false +num_inference_steps: 50 +inference_batch_size: 4 +num_iters_per_prompt: 1 +latent_height: 128 +latent_width: 128 \ No newline at end of file diff --git a/data/scalecrafter/configs/sd1.5_1280x1280.yaml b/data/scalecrafter/configs/sd1.5_1280x1280.yaml new file mode 100644 index 000000000..3baebf614 --- /dev/null +++ b/data/scalecrafter/configs/sd1.5_1280x1280.yaml @@ -0,0 +1,13 @@ +ndcfg_tau: 0 +dilate_tau: 35 +inflate_tau: 0 +dilate_settings: ./assets/dilate_settings/sd1.5_1280x1280.txt +ndcfg_dilate_settings: ~ +disperse_settings: ~ +disperse_transform: ~ +progressive: false +num_inference_steps: 50 +inference_batch_size: 4 +num_iters_per_prompt: 1 +latent_height: 160 +latent_width: 160 \ No newline at end of file diff --git a/data/scalecrafter/configs/sd1.5_2048x1024.yaml b/data/scalecrafter/configs/sd1.5_2048x1024.yaml new file mode 100644 index 000000000..00b2bfa71 --- /dev/null +++ b/data/scalecrafter/configs/sd1.5_2048x1024.yaml @@ -0,0 +1,13 @@ +ndcfg_tau: 35 +dilate_tau: 35 +inflate_tau: 0 +dilate_settings: ./assets/dilate_settings/sd1.5_2048x1024.txt +ndcfg_dilate_settings: ./assets/ndcfg_dilate_settings/sd1.5_2048x1024.txt +disperse_settings: ~ +disperse_transform: ~ +progressive: true +num_inference_steps: 50 +inference_batch_size: 4 +num_iters_per_prompt: 1 +latent_height: 128 +latent_width: 256 \ No newline at end of file diff --git a/data/scalecrafter/configs/sd1.5_2048x2048.yaml b/data/scalecrafter/configs/sd1.5_2048x2048.yaml new file mode 100644 index 000000000..3496cb5df --- /dev/null +++ b/data/scalecrafter/configs/sd1.5_2048x2048.yaml @@ -0,0 +1,13 @@ +ndcfg_tau: 35 +dilate_tau: 35 +inflate_tau: 0 +dilate_settings: ./assets/dilate_settings/sd1.5_2048x2048.txt +ndcfg_dilate_settings: ./assets/ndcfg_dilate_settings/sd1.5_2048x2048.txt +disperse_settings: ~ +disperse_transform: ~ +progressive: true +num_inference_steps: 50 +inference_batch_size: 4 +num_iters_per_prompt: 1 +latent_height: 256 +latent_width: 256 \ No newline at end of file diff --git a/data/scalecrafter/configs/sd1.5_2048x2048_disperse.yaml b/data/scalecrafter/configs/sd1.5_2048x2048_disperse.yaml new file mode 100644 index 000000000..3f3f7107d --- /dev/null +++ b/data/scalecrafter/configs/sd1.5_2048x2048_disperse.yaml @@ -0,0 +1,13 @@ +ndcfg_tau: 35 +dilate_tau: 35 +inflate_tau: 0 +dilate_settings: ./assets/dilate_settings/sd1.5_2048x2048.txt +ndcfg_dilate_settings: ./assets/ndcfg_dilate_settings/sd1.5_2048x2048.txt +disperse_settings: ./assets/disperse_settings/sd1.5_2048x2048.txt +disperse_transform: ./transforms/R20to1_new.mat +progressive: true +num_inference_steps: 50 +inference_batch_size: 4 +num_iters_per_prompt: 1 +latent_height: 256 +latent_width: 256 \ No newline at end of file diff --git a/data/scalecrafter/configs/sd2.1_1024x1024.yaml b/data/scalecrafter/configs/sd2.1_1024x1024.yaml new file mode 100644 index 000000000..75697dd60 --- /dev/null +++ b/data/scalecrafter/configs/sd2.1_1024x1024.yaml @@ -0,0 +1,13 @@ +ndcfg_tau: 0 +dilate_tau: 20 +inflate_tau: 0 +dilate_settings: ./assets/dilate_settings/sd2.1_1024x1024.txt +ndcfg_dilate_settings: ~ +disperse_settings: ~ +disperse_transform: ~ +progressive: false +num_inference_steps: 50 +inference_batch_size: 4 +num_iters_per_prompt: 1 +latent_height: 128 +latent_width: 128 \ No newline at end of file diff --git a/data/scalecrafter/configs/sd2.1_1280x1280.yaml b/data/scalecrafter/configs/sd2.1_1280x1280.yaml new file mode 100644 index 000000000..4628a4f66 --- /dev/null +++ b/data/scalecrafter/configs/sd2.1_1280x1280.yaml @@ -0,0 +1,13 @@ +ndcfg_tau: 0 +dilate_tau: 30 +inflate_tau: 0 +dilate_settings: ./assets/dilate_settings/sd2.1_1280x1280.txt +ndcfg_dilate_settings: ~ +disperse_settings: ~ +disperse_transform: ~ +progressive: false +num_inference_steps: 50 +inference_batch_size: 4 +num_iters_per_prompt: 1 +latent_height: 160 +latent_width: 160 \ No newline at end of file diff --git a/data/scalecrafter/configs/sd2.1_2048x1024.yaml b/data/scalecrafter/configs/sd2.1_2048x1024.yaml new file mode 100644 index 000000000..50109ff0a --- /dev/null +++ b/data/scalecrafter/configs/sd2.1_2048x1024.yaml @@ -0,0 +1,13 @@ +ndcfg_tau: 0 +dilate_tau: 37 +inflate_tau: 0 +dilate_settings: ./assets/dilate_settings/sd2.1_2048x1024.txt +ndcfg_dilate_settings: ./assets/ndcfg_dilate_settings/sd2.1_2048x1024.txt +disperse_settings: ~ +disperse_transform: ~ +progressive: true +num_inference_steps: 50 +inference_batch_size: 4 +num_iters_per_prompt: 1 +latent_height: 128 +latent_width: 256 \ No newline at end of file diff --git a/data/scalecrafter/configs/sd2.1_2048x2048.yaml b/data/scalecrafter/configs/sd2.1_2048x2048.yaml new file mode 100644 index 000000000..fec34a0f3 --- /dev/null +++ b/data/scalecrafter/configs/sd2.1_2048x2048.yaml @@ -0,0 +1,13 @@ +ndcfg_tau: 37 +dilate_tau: 37 +inflate_tau: 0 +dilate_settings: ./assets/dilate_settings/sd2.1_2048x2048.txt +ndcfg_dilate_settings: ./assets/ndcfg_dilate_settings/sd2.1_2048x2048.txt +disperse_settings: ~ +disperse_transform: ~ +progressive: true +num_inference_steps: 50 +inference_batch_size: 1 +num_iters_per_prompt: 1 +latent_height: 256 +latent_width: 256 \ No newline at end of file diff --git a/data/scalecrafter/configs/sd2.1_2048x2048_disperse.yaml b/data/scalecrafter/configs/sd2.1_2048x2048_disperse.yaml new file mode 100644 index 000000000..7eb513176 --- /dev/null +++ b/data/scalecrafter/configs/sd2.1_2048x2048_disperse.yaml @@ -0,0 +1,13 @@ +ndcfg_tau: 37 +dilate_tau: 37 +inflate_tau: 0 +dilate_settings: ./assets/dilate_settings/sd2.1_2048x2048.txt +ndcfg_dilate_settings: ./assets/ndcfg_dilate_settings/sd2.1_2048x2048.txt +disperse_settings: ./assets/disperse_settings/sd2.1_2048x2048.txt +disperse_transform: ./transforms/R20to1_new.mat +progressive: true +num_inference_steps: 50 +inference_batch_size: 1 +num_iters_per_prompt: 1 +latent_height: 256 +latent_width: 256 \ No newline at end of file diff --git a/data/scalecrafter/configs/sdxl_2048x2048.yaml b/data/scalecrafter/configs/sdxl_2048x2048.yaml new file mode 100644 index 000000000..2ffd386f8 --- /dev/null +++ b/data/scalecrafter/configs/sdxl_2048x2048.yaml @@ -0,0 +1,16 @@ +ndcfg_tau: 0 +dilate_tau: 30 +inflate_tau: 0 +sdedit_tau: 0 +dilate_settings: ./assets/dilate_settings/sdxl_2048x2048.txt +ndcfg_dilate_settings: ~ +disperse_settings: ~ +disperse_transform: ~ +progressive: false +num_inference_steps: 50 +inference_batch_size: 4 +num_iters_per_prompt: 1 +latent_height: 256 +latent_width: 256 +pixel_height: 2048 +pixel_width: 2048 diff --git a/data/scalecrafter/configs/sdxl_2560x2560.yaml b/data/scalecrafter/configs/sdxl_2560x2560.yaml new file mode 100644 index 000000000..e2a81b5d4 --- /dev/null +++ b/data/scalecrafter/configs/sdxl_2560x2560.yaml @@ -0,0 +1,16 @@ +ndcfg_tau: 0 +dilate_tau: 30 +inflate_tau: 0 +sdedit_tau: 0 +dilate_settings: ./assets/dilate_settings/sdxl_2560x2560.txt +ndcfg_dilate_settings: ~ +disperse_settings: ~ +disperse_transform: ~ +progressive: false +num_inference_steps: 50 +inference_batch_size: 4 +num_iters_per_prompt: 1 +latent_height: 320 +latent_width: 320 +pixel_height: 2560 +pixel_width: 2560 diff --git a/data/scalecrafter/configs/sdxl_4096x2048.yaml b/data/scalecrafter/configs/sdxl_4096x2048.yaml new file mode 100644 index 000000000..82cfee805 --- /dev/null +++ b/data/scalecrafter/configs/sdxl_4096x2048.yaml @@ -0,0 +1,16 @@ +ndcfg_tau: 35 +dilate_tau: 35 +inflate_tau: 0 +sdedit_tau: 0 +dilate_settings: ./assets/dilate_settings/sdxl_4096x2048.txt +ndcfg_dilate_settings: ./assets/ndcfg_dilate_settings/sdxl_4096x2048.txt +disperse_settings: ~ +disperse_transform: ~ +progressive: true +num_inference_steps: 50 +inference_batch_size: 1 +num_iters_per_prompt: 1 +latent_height: 256 +latent_width: 512 +pixel_height: 2048 +pixel_width: 4096 diff --git a/data/scalecrafter/configs/sdxl_4096x4096.yaml b/data/scalecrafter/configs/sdxl_4096x4096.yaml new file mode 100644 index 000000000..15240ebb2 --- /dev/null +++ b/data/scalecrafter/configs/sdxl_4096x4096.yaml @@ -0,0 +1,16 @@ +ndcfg_tau: 35 +dilate_tau: 35 +inflate_tau: 0 +sdedit_tau: 0 +dilate_settings: ./assets/dilate_settings/sdxl_4096x4096.txt +ndcfg_dilate_settings: ./assets/ndcfg_dilate_settings/sdxl_4096x4096.txt +disperse_settings: ~ +disperse_transform: ~ +progressive: true +num_inference_steps: 50 +inference_batch_size: 1 +num_iters_per_prompt: 1 +latent_height: 512 +latent_width: 512 +pixel_height: 4096 +pixel_width: 4096 diff --git a/data/scalecrafter/configs/sdxl_4096x4096_disperse.yaml b/data/scalecrafter/configs/sdxl_4096x4096_disperse.yaml new file mode 100644 index 000000000..b2764f36c --- /dev/null +++ b/data/scalecrafter/configs/sdxl_4096x4096_disperse.yaml @@ -0,0 +1,16 @@ +ndcfg_tau: 35 +dilate_tau: 35 +inflate_tau: 0 +sdedit_tau: 0 +dilate_settings: ./assets/dilate_settings/sdxl_4096x4096.txt +ndcfg_dilate_settings: ./assets/ndcfg_dilate_settings/sdxl_4096x4096.txt +disperse_settings: ./assets/disperse_settings/sdxl_4096x4096.txt +disperse_transform: ./transforms/R20to1_new.mat +progressive: true +num_inference_steps: 50 +inference_batch_size: 1 +num_iters_per_prompt: 1 +latent_height: 512 +latent_width: 512 +pixel_height: 4096 +pixel_width: 4096 diff --git a/data/scalecrafter/disperse/bilinear_upsample_symbolic.m b/data/scalecrafter/disperse/bilinear_upsample_symbolic.m new file mode 100644 index 000000000..636aedeb9 --- /dev/null +++ b/data/scalecrafter/disperse/bilinear_upsample_symbolic.m @@ -0,0 +1,43 @@ +function output = bilinear_upsample_symbolic(input, upsample_factor) + % Convert input to symbolic variables if they are not already + if ~isa(input, 'sym') + input = sym(input); + end + + % Get the dimensions of the input matrix + [input_rows, input_cols] = size(input); + + % Calculate the dimensions of the output matrix + output_rows = upsample_factor * (input_rows - 1) + 1; + output_cols = upsample_factor * (input_cols - 1) + 1; + + % Initialize the output matrix with zeros + output = sym(zeros(output_rows, output_cols)); + + % Perform the 2D bilinear upsampling + for i = 1:output_rows + for j = 1:output_cols + % Calculate the corresponding input coordinates (1-indexed) + input_row = (i - 1) / upsample_factor + 1; + input_col = (j - 1) / upsample_factor + 1; + + % Find the surrounding input pixel coordinates + row1 = floor(input_row); + row2 = ceil(input_row); + col1 = floor(input_col); + col2 = ceil(input_col); + + % Calculate the interpolation weights + alpha = input_row - row1; + beta = input_col - col1; + + % Perform bilinear interpolation + if row1 > 0 && row2 <= input_rows && col1 > 0 && col2 <= input_cols + output(i, j) = (1 - alpha) * (1 - beta) * input(row1, col1) + ... + (1 - alpha) * beta * input(row1, col2) + ... + alpha * (1 - beta) * input(row2, col1) + ... + alpha * beta * input(row2, col2); + end + end + end +end \ No newline at end of file diff --git a/data/scalecrafter/disperse/conv2d.m b/data/scalecrafter/disperse/conv2d.m new file mode 100644 index 000000000..70394aeda --- /dev/null +++ b/data/scalecrafter/disperse/conv2d.m @@ -0,0 +1,31 @@ +function out = conv2d(input, kernel, padding) + % Get the dimensions of the input and kernel + [input_rows, input_cols] = size(input); + [kernel_rows, kernel_cols] = size(kernel); + + % Calculate the output dimensions with padding + output_rows = input_rows + 2 * padding - kernel_rows + 1; + output_cols = input_cols + 2 * padding - kernel_cols + 1; + + % Initialize the padded input with zeros + padded_input = sym(zeros(input_rows + 2 * padding, input_cols + 2 * padding)); + + % Fill the padded input with the original input values + padded_input(padding + 1 : padding + input_rows, padding + 1 : padding + input_cols) = input; + + % Initialize the output matrix with zeros + out = sym(zeros(output_rows, output_cols)); + + % Perform the 2D convolution + for m = 1 : output_rows + for n = 1 : output_cols + temp_sum = 0; + for k = 1 : kernel_rows + for l = 1 : kernel_cols + temp_sum = temp_sum + kernel(k, l) * padded_input(m + k - 1, n + l - 1); + end + end + out(m, n) = temp_sum; + end + end +end \ No newline at end of file diff --git a/data/scalecrafter/disperse/kernel_disperse.m b/data/scalecrafter/disperse/kernel_disperse.m new file mode 100644 index 000000000..93ba87c70 --- /dev/null +++ b/data/scalecrafter/disperse/kernel_disperse.m @@ -0,0 +1,89 @@ +function R = kernel_disperse(smallSize, largeSize, inputSize, scale, eta, verbose) + % Solve the convolution dispersion transform + % Params: + % smallSize: size of the input kernel (i.e. 3) + % largeSize: size of the output kernel (i.e. 5) + % inputSize: size of the input feature (i.e. 7) + % scale: perception field enlarge scale (i.e. 2) + % eta: the weight combining structue-level and pixel-level + % calibration (i.e. 0.05) + % verbose: whether to deliver a visualization + % Outputs: + % R: dispersion linear transform + if ~exist('verbose', 'var'), verbose = false; end + + % Initialize kernel and inputs + % R = sym_kernel('r', largeSize ^ 2 , smallSize ^ 2); + smallKernel = sym_kernel('a', smallSize, smallSize); + largeKernel = sym_kernel('b', largeSize, largeSize); + inputFeature = sym_kernel('x', inputSize, inputSize); + + % Compute structure-level calibration + interFeature = bilinear_upsample_symbolic(inputFeature, scale); + smallOutput = conv2d(inputFeature, smallKernel, (smallSize - 1) / 2); + largeOutput = conv2d(interFeature, largeKernel, (largeSize - 1) / 2); + smallOutput = bilinear_upsample_symbolic(smallOutput, scale); + + % Compute loss and get the equation set + structError = largeOutput - smallOutput; + structError = reshape(transpose(structError), [], 1); + % structError = structError(13); + equations = []; + for input = reshape(transpose(inputFeature), 1, []) + equations = [equations; diff(structError, input)]; + end + equations = equations(equations ~= 0); + + equationNum = size(equations, 1); + structLHSCoeff = sym(zeros([equationNum, largeSize ^ 2])); + loopIndex = 0; + for element = reshape(transpose(largeKernel), 1, []) + loopIndex = loopIndex + 1; + structLHSCoeff(1:end, loopIndex) = diff(equations, element); + end + termLHS = structLHSCoeff * reshape(transpose(largeKernel), [], 1); + structRHSCoeff = termLHS - equations; + + % Compute pixel-level calibration + smallOutput = conv2d(inputFeature, smallKernel, (smallSize - 1) / 2); + largeOutput = conv2d(inputFeature, largeKernel, (largeSize - 1) / 2); + + pixelError = largeOutput - smallOutput; + pixelError = reshape(transpose(pixelError), [], 1); + % pixelError = pixelError(5); + equations = []; + for input = reshape(transpose(inputFeature), 1, []) + equations = [equations; diff(pixelError, input)]; + end + equations = equations(equations ~= 0); + + equationNum = size(equations, 1); + pixelLHSCoeff = sym(zeros([equationNum, largeSize ^ 2])); + loopIndex = 0; + for element = reshape(transpose(largeKernel), 1, []) + loopIndex = loopIndex + 1; + pixelLHSCoeff(1:end, loopIndex) = diff(equations, element); + end + termLHS = pixelLHSCoeff * reshape(transpose(largeKernel), [], 1); + pixelRHSCoeff = termLHS - equations; + + % Solve the least square problem + A = [structLHSCoeff; eta * pixelLHSCoeff]; + b = [structRHSCoeff; eta * pixelRHSCoeff]; + x = (transpose(A) * A) \ (transpose(A) * b); + x = vpa(x); + R = zeros([largeSize ^ 2, smallSize ^ 2]); + loopIndex = 0; + for element = reshape(transpose(smallKernel), 1, []) + loopIndex = loopIndex + 1; + R(1:end, loopIndex) = diff(x, element); + end + + if verbose + largeKernel = R * ones([smallSize ^ 2, 1]); + largeKernel = transpose(reshape(largeKernel, largeSize, largeSize)); + heatmap(figure, largeKernel); + title("Dispersed conv. kernel provided a small kernel filled with one"); + end +end + diff --git a/data/scalecrafter/disperse/sym_kernel.m b/data/scalecrafter/disperse/sym_kernel.m new file mode 100644 index 000000000..2946816b3 --- /dev/null +++ b/data/scalecrafter/disperse/sym_kernel.m @@ -0,0 +1,10 @@ +function kernel = sym_kernel(symbol, height, width) + kernel = sym(zeros([height, width])); + for i = 1:height + for j = 1:width + index = (i - 1) * width + j; + kernel(i, j) = str2sym(sprintf("%s%d", symbol, index)); + end + end +end + diff --git a/data/scalecrafter/transforms/R20to1.mat b/data/scalecrafter/transforms/R20to1.mat new file mode 100644 index 000000000..136c7ad31 Binary files /dev/null and b/data/scalecrafter/transforms/R20to1.mat differ diff --git a/data/scalecrafter/transforms/R20to1_new.mat b/data/scalecrafter/transforms/R20to1_new.mat new file mode 100644 index 000000000..5ae953680 Binary files /dev/null and b/data/scalecrafter/transforms/R20to1_new.mat differ diff --git a/data/scalecrafter/transforms/R2to1.mat b/data/scalecrafter/transforms/R2to1.mat new file mode 100644 index 000000000..c612b1caf Binary files /dev/null and b/data/scalecrafter/transforms/R2to1.mat differ diff --git a/data/themes/dark.json b/data/themes/dark.json index 219e4c5e2..5cbc18c8e 100644 --- a/data/themes/dark.json +++ b/data/themes/dark.json @@ -18,5 +18,8 @@ }, "Tabs": { "colorSegment": "rgba(24, 24, 28, 0.6)" + }, + "Drawer": { + "color": "rgba(44, 44, 50, 0)" } } \ No newline at end of file diff --git a/docker/ait-no-mount.docker-compose.yml b/docker/ait-no-mount.docker-compose.yml new file mode 100644 index 000000000..022e51513 --- /dev/null +++ b/docker/ait-no-mount.docker-compose.yml @@ -0,0 +1,29 @@ +version: "3.7" + +services: + voltaml: + image: stax124/volta:experimental-ait + environment: + # General + - HUGGINGFACE_TOKEN=${HUGGINGFACE_TOKEN:-} + - LOG_LEVEL=${LOG_LEVEL:-INFO} + - EXTRA_ARGS=${EXTRA_ARGS:-} + + # Extra api keys + - FASTAPI_ANALYTICS_KEY=${FASTAPI_ANALYTICS_KEY:-} + - DISCORD_BOT_TOKEN=${DISCORD_BOT_TOKEN:-} + + # R2 + - R2_ENDPOINT=${R2_ENDPOINT:-} + - R2_BUCKET_NAME=${R2_BUCKET_NAME:-} + - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-} + - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-} + - R2_DEV_ADDRESS=${R2_DEV_ADDRESS:-} + ports: + - "5003:5003" + deploy: + resources: + reservations: + devices: + - driver: nvidia + capabilities: ["gpu"] diff --git a/docker/ait.docker-compose.yml b/docker/ait.docker-compose.yml new file mode 100644 index 000000000..c8ccac7c0 --- /dev/null +++ b/docker/ait.docker-compose.yml @@ -0,0 +1,32 @@ +version: "3.7" + +services: + voltaml: + image: stax124/volta:experimental-ait + environment: + # General + - HUGGINGFACE_TOKEN=${HUGGINGFACE_TOKEN:-} + - LOG_LEVEL=${LOG_LEVEL:-INFO} + - EXTRA_ARGS=${EXTRA_ARGS:-} + + # Extra api keys + - FASTAPI_ANALYTICS_KEY=${FASTAPI_ANALYTICS_KEY:-} + - DISCORD_BOT_TOKEN=${DISCORD_BOT_TOKEN:-} + + # R2 + - R2_ENDPOINT=${R2_ENDPOINT:-} + - R2_BUCKET_NAME=${R2_BUCKET_NAME:-} + - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-} + - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-} + - R2_DEV_ADDRESS=${R2_DEV_ADDRESS:-} + volumes: + - ${HOME}/voltaML/data:/app/data # XXX is the path to the folder where all the outputs will be saved + - ${HOME}/.cache/huggingface:/root/.cache/huggingface # YYY is path to your home folder (you may need to change the YYY/.cache/huggingface to YYY\.cache\huggingface on Windows) + ports: + - "5003:5003" + deploy: + resources: + reservations: + devices: + - driver: nvidia + capabilities: ["gpu"] diff --git a/dockerfile b/docker/ait/dockerfile similarity index 57% rename from dockerfile rename to docker/ait/dockerfile index bd42c1d43..09ff746ca 100644 --- a/dockerfile +++ b/docker/ait/dockerfile @@ -1,28 +1,39 @@ -FROM stax124/aitemplate:latest +FROM stax124/ait:torch2.1.1-cuda11.8-ubuntu22.04-devel ENV DEBIAN_FRONTEND=noninteractive +# Basic dependencies RUN apt update && apt install curl -y -RUN curl -sL https://deb.nodesource.com/setup_18.x | bash +RUN apt install time git -y +RUN apt install python3 python3-pip -y +RUN pip install --upgrade pip +RUN apt install -y ca-certificates curl gnupg +# Set up Node.js and Yarn +RUN mkdir -p /etc/apt/keyrings +RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg +RUN echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list +RUN apt update RUN apt install nodejs -y - RUN npm i -g yarn -RUN apt install time git -y -RUN pip install --upgrade pip +# Set up working directory and copy requirement definitions WORKDIR /app - COPY requirements /app/requirements +# PyTorch goes first to avoid redownloads +RUN --mount=type=cache,mode=0755,target=/root/.cache/pip pip install torch torchvision torchaudio + +# Other Python dependencies +RUN --mount=type=cache,mode=0755,target=/root/.cache/pip pip install python-dotenv requests RUN --mount=type=cache,mode=0755,target=/root/.cache/pip pip install -r requirements/api.txt RUN --mount=type=cache,mode=0755,target=/root/.cache/pip pip install -r requirements/bot.txt RUN --mount=type=cache,mode=0755,target=/root/.cache/pip pip install -r requirements/pytorch.txt RUN --mount=type=cache,mode=0755,target=/root/.cache/pip pip install -r requirements/interrogation.txt -RUN --mount=type=cache,mode=0755,target=/root/.cache/pip pip install python-dotenv COPY . /app +# Install frontend dependencies and build the frontend RUN --mount=type=cache,mode=0755,target=/app/frontend/node_modules cd frontend && yarn install && yarn build RUN rm -rf frontend/node_modules diff --git a/docker/cuda-no-mount.docker-compose.yml b/docker/cuda-no-mount.docker-compose.yml new file mode 100644 index 000000000..fe8aa9753 --- /dev/null +++ b/docker/cuda-no-mount.docker-compose.yml @@ -0,0 +1,29 @@ +version: "3.7" + +services: + voltaml: + image: stax124/volta:experimental-cuda + environment: + # General + - HUGGINGFACE_TOKEN=${HUGGINGFACE_TOKEN:-} + - LOG_LEVEL=${LOG_LEVEL:-INFO} + - EXTRA_ARGS=${EXTRA_ARGS:-} + + # Extra api keys + - FASTAPI_ANALYTICS_KEY=${FASTAPI_ANALYTICS_KEY:-} + - DISCORD_BOT_TOKEN=${DISCORD_BOT_TOKEN:-} + + # R2 + - R2_ENDPOINT=${R2_ENDPOINT:-} + - R2_BUCKET_NAME=${R2_BUCKET_NAME:-} + - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-} + - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-} + - R2_DEV_ADDRESS=${R2_DEV_ADDRESS:-} + ports: + - "5003:5003" + deploy: + resources: + reservations: + devices: + - driver: nvidia + capabilities: ["gpu"] diff --git a/docker/cuda.docker-compose.yml b/docker/cuda.docker-compose.yml new file mode 100644 index 000000000..f71744385 --- /dev/null +++ b/docker/cuda.docker-compose.yml @@ -0,0 +1,32 @@ +version: "3.7" + +services: + voltaml: + image: stax124/volta:experimental-cuda + environment: + # General + - HUGGINGFACE_TOKEN=${HUGGINGFACE_TOKEN:-} + - LOG_LEVEL=${LOG_LEVEL:-INFO} + - EXTRA_ARGS=${EXTRA_ARGS:-} + + # Extra api keys + - FASTAPI_ANALYTICS_KEY=${FASTAPI_ANALYTICS_KEY:-} + - DISCORD_BOT_TOKEN=${DISCORD_BOT_TOKEN:-} + + # R2 + - R2_ENDPOINT=${R2_ENDPOINT:-} + - R2_BUCKET_NAME=${R2_BUCKET_NAME:-} + - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-} + - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-} + - R2_DEV_ADDRESS=${R2_DEV_ADDRESS:-} + volumes: + - ${HOME}/voltaML/data:/app/data # XXX is the path to the folder where all the outputs will be saved + - ${HOME}/.cache/huggingface:/root/.cache/huggingface # YYY is path to your home folder (you may need to change the YYY/.cache/huggingface to YYY\.cache\huggingface on Windows) + ports: + - "5003:5003" + deploy: + resources: + reservations: + devices: + - driver: nvidia + capabilities: ["gpu"] diff --git a/docker/cuda/dockerfile b/docker/cuda/dockerfile new file mode 100644 index 000000000..ba9468359 --- /dev/null +++ b/docker/cuda/dockerfile @@ -0,0 +1,46 @@ +FROM nvidia/cuda:12.1.0-runtime-ubuntu22.04 + +ENV DEBIAN_FRONTEND=noninteractive + +# Basic dependencies +RUN apt update && apt install curl -y +RUN apt install time git -y +RUN apt install python3 python3-pip -y +RUN pip install --upgrade pip +RUN apt install -y ca-certificates curl gnupg + +# Set up Node.js and Yarn +RUN mkdir -p /etc/apt/keyrings +RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg +RUN echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list +RUN apt update +RUN apt install nodejs -y +RUN npm i -g yarn + +# Set up working directory and copy requirement definitions +WORKDIR /app +COPY requirements /app/requirements + +# PyTorch goes first to avoid redownloads +RUN --mount=type=cache,mode=0755,target=/root/.cache/pip pip install torch torchvision torchaudio + +# Other Python dependencies +RUN --mount=type=cache,mode=0755,target=/root/.cache/pip pip install python-dotenv requests +RUN --mount=type=cache,mode=0755,target=/root/.cache/pip pip install -r requirements/api.txt +RUN --mount=type=cache,mode=0755,target=/root/.cache/pip pip install -r requirements/bot.txt +RUN --mount=type=cache,mode=0755,target=/root/.cache/pip pip install -r requirements/pytorch.txt +RUN --mount=type=cache,mode=0755,target=/root/.cache/pip pip install -r requirements/interrogation.txt + +COPY . /app + +# Install frontend dependencies and build the frontend +RUN --mount=type=cache,mode=0755,target=/app/frontend/node_modules cd frontend && yarn install && yarn build +RUN rm -rf frontend/node_modules + +# Remove caches +RUN rm -rf /root/.cache +RUN rm -rf /usr/local/share/.cache + +# Run the server +RUN chmod +x scripts/start.sh +ENTRYPOINT ["bash", "./scripts/start.sh"] diff --git a/docs/settings/reproducibility.md b/docs/settings/reproducibility.md new file mode 100644 index 000000000..1d41a7b83 --- /dev/null +++ b/docs/settings/reproducibility.md @@ -0,0 +1,67 @@ +# Reproducibility & Generation + +Reproducibility settings are settings that change generation output. These changes can vary from small, to large, with small being a few lines look sharper + +## Device + +Changing the device to the correct one -- that being, your fastest available GPU -- can not only improve performance, but also change how the images look like. Something generated using DirectML on an AMD card won't EVER look the same as something generated with CUDA. + +## Data type + +Generally, changing data type to a lower precision (lower number) one, will improve performance, however, when taken to extreme degrees (volta doesn't have this implemented) image quality starts to get hammered. `16-bit float` or `16-bit bfloat` is generally the lowest people should need to go. + +## Deterministic generation + +PyTorch, and as such, Volta, is by design indeterministic, - that is, not 100% reproducible. This can raise a few issues: generations using the exact same parameters **MAY NOT** come out the same. Changing this to on, should fix these issues. + +## SGM Noise Multiplier + +SGM Noise multiplier changes how noise is calculated. This is only useful for reproducing already created images. From a more technical standpoint: this changes noising to mimic SDXL's noise creation. **Only useful on `SD1.x`.** + +### On vs. off + ++ + +## Quantization in KDiff samplers + +Quantization in K-samplers helps the samplers to create more sharp and defined lines. This is another one of those _"small, but useful"_ changes. + +### On vs. off + ++
+
+ + +## Generator + + diff --git a/docs/static/settings/reproducibility/quant_on.webp b/docs/static/settings/reproducibility/quant_on.webp new file mode 100644 index 000000000..bf5a1f3e5 Binary files /dev/null and b/docs/static/settings/reproducibility/quant_on.webp differ diff --git a/docs/static/settings/reproducibility/sgm_off.webp b/docs/static/settings/reproducibility/sgm_off.webp new file mode 100644 index 000000000..6621f57a8 Binary files /dev/null and b/docs/static/settings/reproducibility/sgm_off.webp differ diff --git a/docs/static/settings/reproducibility/sgm_on.webp b/docs/static/settings/reproducibility/sgm_on.webp new file mode 100644 index 000000000..a079f3dc6 Binary files /dev/null and b/docs/static/settings/reproducibility/sgm_on.webp differ diff --git a/frontend/dist/assets/404View.js b/frontend/dist/assets/404View.js index cb2d76290..7615194eb 100644 --- a/frontend/dist/assets/404View.js +++ b/frontend/dist/assets/404View.js @@ -1,4 +1,4 @@ -import { d as defineComponent, o as openBlock, j as createElementBlock, g as createVNode, w as withCtx, h as unref, c3 as NResult, n as NCard } from "./index.js"; +import { d as defineComponent, o as openBlock, a as createElementBlock, e as createVNode, w as withCtx, f as unref, c6 as NResult, m as NCard } from "./index.js"; const _hoisted_1 = { style: { "width": "100vw", "height": "100vh", "display": "flex", "align-items": "center", "justify-content": "center", "backdrop-filter": "blur(4px)" } }; const _sfc_main = /* @__PURE__ */ defineComponent({ __name: "404View", diff --git a/frontend/dist/assets/AboutView.js b/frontend/dist/assets/AboutView.js index fee3296e9..5ce1297f6 100644 --- a/frontend/dist/assets/AboutView.js +++ b/frontend/dist/assets/AboutView.js @@ -1,4 +1,4 @@ -import { _ as _export_sfc, j as createElementBlock, o as openBlock, f as createBaseVNode } from "./index.js"; +import { _ as _export_sfc, a as createElementBlock, o as openBlock, b as createBaseVNode } from "./index.js"; const _sfc_main = {}; const _hoisted_1 = { class: "about" }; const _hoisted_2 = /* @__PURE__ */ createBaseVNode("h1", null, "This is an about page", -1); diff --git a/frontend/dist/assets/AccelerateView.js b/frontend/dist/assets/AccelerateView.js index c10dc0930..81d5ff96c 100644 --- a/frontend/dist/assets/AccelerateView.js +++ b/frontend/dist/assets/AccelerateView.js @@ -1,6 +1,7 @@ -import { Q as cB, ab as cM, aa as c, at as cE, aT as iconSwitchTransition, ac as cNotM, d as defineComponent, S as useConfig, ag as useRtl, T as useTheme, a3 as provide, y as h, aw as flatten, ax as getSlot, P as createInjectionKey, bg as stepsLight, R as inject, a_ as throwError, c as computed, ah as createKey, Y as useThemeClass, a1 as call, av as resolveWrappedSlot, ai as resolveSlot, aI as NIconSwitchTransition, aj as NBaseIcon, bh as FinishedIcon, bi as ErrorIcon, p as useMessage, a as useState, z as ref, o as openBlock, j as createElementBlock, g as createVNode, w as withCtx, h as unref, N as NSpace, n as NCard, f as createBaseVNode, i as NSelect, A as NButton, k as createTextVNode, bd as NModal, t as serverUrl, u as useSettings, e as createBlock, D as NTabPane, E as NTabs } from "./index.js"; -import { a as NSlider, N as NSwitch } from "./Switch.js"; +import { R as cB, ac as cM, ab as c, au as cE, aU as iconSwitchTransition, ad as cNotM, d as defineComponent, T as useConfig, ah as useRtl, U as useTheme, a4 as provide, A as h, ax as flatten, ay as getSlot, Q as createInjectionKey, bk as stepsLight, S as inject, a$ as throwError, c as computed, ai as createKey, Z as useThemeClass, a2 as call, aw as resolveWrappedSlot, aj as resolveSlot, aJ as NIconSwitchTransition, ak as NBaseIcon, bl as FinishedIcon, bm as ErrorIcon, r as useMessage, l as useState, B as ref, o as openBlock, a as createElementBlock, e as createVNode, w as withCtx, f as unref, j as NSpace, m as NCard, b as createBaseVNode, q as NSelect, C as NButton, h as createTextVNode, bh as NModal, x as serverUrl, u as useSettings, g as createBlock, n as NTabPane, p as NTabs } from "./index.js"; +import { N as NSlider } from "./Slider.js"; import { N as NInputNumber } from "./InputNumber.js"; +import { N as NSwitch } from "./Switch.js"; const style = cB("steps", ` width: 100%; display: flex; diff --git a/frontend/dist/assets/CloudUpload.js b/frontend/dist/assets/CloudUpload.js index 78a6dea82..68c86e860 100644 --- a/frontend/dist/assets/CloudUpload.js +++ b/frontend/dist/assets/CloudUpload.js @@ -1,4 +1,4 @@ -import { d as defineComponent, o as openBlock, j as createElementBlock, f as createBaseVNode } from "./index.js"; +import { d as defineComponent, o as openBlock, a as createElementBlock, b as createBaseVNode } from "./index.js"; const _hoisted_1 = { xmlns: "http://www.w3.org/2000/svg", "xmlns:xlink": "http://www.w3.org/1999/xlink", diff --git a/frontend/dist/assets/DescriptionsItem.js b/frontend/dist/assets/DescriptionsItem.js index 27c00366e..1c31a5408 100644 --- a/frontend/dist/assets/DescriptionsItem.js +++ b/frontend/dist/assets/DescriptionsItem.js @@ -1,4 +1,4 @@ -import { aa as c, Q as cB, ac as cNotM, ab as cM, at as cE, aU as insideModal, aV as insidePopover, d as defineComponent, S as useConfig, T as useTheme, c as computed, ah as createKey, Y as useThemeClass, bS as useCompitable, aw as flatten, y as h, aQ as repeat, ax as getSlot, bT as descriptionsLight } from "./index.js"; +import { ab as c, R as cB, ad as cNotM, ac as cM, au as cE, aV as insideModal, aW as insidePopover, d as defineComponent, T as useConfig, U as useTheme, c as computed, ai as createKey, Z as useThemeClass, bX as useCompitable, ax as flatten, A as h, aR as repeat, ay as getSlot, bY as descriptionsLight } from "./index.js"; function getVNodeChildren(vNode, slotName = "default", fallback = []) { const { children } = vNode; if (children !== null && typeof children === "object" && !Array.isArray(children)) { diff --git a/frontend/dist/assets/ExtraView.js b/frontend/dist/assets/ExtraView.js index 51509edbf..55f5c75e5 100644 --- a/frontend/dist/assets/ExtraView.js +++ b/frontend/dist/assets/ExtraView.js @@ -1,4 +1,4 @@ -import { _ as _export_sfc, d as defineComponent, a as useState, o as openBlock, e as createBlock, w as withCtx, h as unref, g as createVNode, D as NTabPane, E as NTabs } from "./index.js"; +import { _ as _export_sfc, d as defineComponent, l as useState, o as openBlock, g as createBlock, w as withCtx, f as unref, e as createVNode, n as NTabPane, p as NTabs } from "./index.js"; const _sfc_main$2 = {}; function _sfc_render$1(_ctx, _cache) { return "Autofill manager"; diff --git a/frontend/dist/assets/GenerateSection.vue_vue_type_script_setup_true_lang.js b/frontend/dist/assets/GenerateSection.vue_vue_type_script_setup_true_lang.js index a3d8d99d5..46752b12a 100644 --- a/frontend/dist/assets/GenerateSection.vue_vue_type_script_setup_true_lang.js +++ b/frontend/dist/assets/GenerateSection.vue_vue_type_script_setup_true_lang.js @@ -1,4 +1,4 @@ -import { d as defineComponent, o as openBlock, j as createElementBlock, f as createBaseVNode, a as useState, u as useSettings, z as ref, b9 as onMounted, q as onUnmounted, t as serverUrl, e as createBlock, w as withCtx, g as createVNode, h as unref, r as NGi, A as NButton, B as NIcon, k as createTextVNode, s as NGrid, bV as NAlert, m as createCommentVNode, n as NCard } from "./index.js"; +import { d as defineComponent, o as openBlock, a as createElementBlock, b as createBaseVNode, l as useState, u as useSettings, B as ref, bb as onMounted, s as onUnmounted, x as serverUrl, g as createBlock, w as withCtx, e as createVNode, f as unref, t as NGi, C as NButton, D as NIcon, h as createTextVNode, v as NGrid, bK as NAlert, k as createCommentVNode, m as NCard } from "./index.js"; const _hoisted_1$1 = { xmlns: "http://www.w3.org/2000/svg", "xmlns:xlink": "http://www.w3.org/1999/xlink", diff --git a/frontend/dist/assets/GridOutline.js b/frontend/dist/assets/GridOutline.js deleted file mode 100644 index aaa851714..000000000 --- a/frontend/dist/assets/GridOutline.js +++ /dev/null @@ -1,92 +0,0 @@ -import { d as defineComponent, o as openBlock, j as createElementBlock, f as createBaseVNode } from "./index.js"; -const _hoisted_1 = { - xmlns: "http://www.w3.org/2000/svg", - "xmlns:xlink": "http://www.w3.org/1999/xlink", - viewBox: "0 0 512 512" -}; -const _hoisted_2 = /* @__PURE__ */ createBaseVNode( - "rect", - { - x: "48", - y: "48", - width: "176", - height: "176", - rx: "20", - ry: "20", - fill: "none", - stroke: "currentColor", - "stroke-linecap": "round", - "stroke-linejoin": "round", - "stroke-width": "32" - }, - null, - -1 - /* HOISTED */ -); -const _hoisted_3 = /* @__PURE__ */ createBaseVNode( - "rect", - { - x: "288", - y: "48", - width: "176", - height: "176", - rx: "20", - ry: "20", - fill: "none", - stroke: "currentColor", - "stroke-linecap": "round", - "stroke-linejoin": "round", - "stroke-width": "32" - }, - null, - -1 - /* HOISTED */ -); -const _hoisted_4 = /* @__PURE__ */ createBaseVNode( - "rect", - { - x: "48", - y: "288", - width: "176", - height: "176", - rx: "20", - ry: "20", - fill: "none", - stroke: "currentColor", - "stroke-linecap": "round", - "stroke-linejoin": "round", - "stroke-width": "32" - }, - null, - -1 - /* HOISTED */ -); -const _hoisted_5 = /* @__PURE__ */ createBaseVNode( - "rect", - { - x: "288", - y: "288", - width: "176", - height: "176", - rx: "20", - ry: "20", - fill: "none", - stroke: "currentColor", - "stroke-linecap": "round", - "stroke-linejoin": "round", - "stroke-width": "32" - }, - null, - -1 - /* HOISTED */ -); -const _hoisted_6 = [_hoisted_2, _hoisted_3, _hoisted_4, _hoisted_5]; -const GridOutline = defineComponent({ - name: "GridOutline", - render: function render(_ctx, _cache) { - return openBlock(), createElementBlock("svg", _hoisted_1, _hoisted_6); - } -}); -export { - GridOutline as G -}; diff --git a/frontend/dist/assets/Image2ImageView.js b/frontend/dist/assets/Image2ImageView.js index 7233bee1c..176efb54b 100644 --- a/frontend/dist/assets/Image2ImageView.js +++ b/frontend/dist/assets/Image2ImageView.js @@ -1,12 +1,13 @@ -import { d as defineComponent, o as openBlock, j as createElementBlock, f as createBaseVNode, a as useState, u as useSettings, p as useMessage, q as onUnmounted, g as createVNode, w as withCtx, h as unref, r as NGi, n as NCard, N as NSpace, l as NTooltip, k as createTextVNode, i as NSelect, s as NGrid, t as serverUrl, v as pushScopeId, x as popScopeId, _ as _export_sfc, m as createCommentVNode, y as h, z as ref, A as NButton, B as NIcon, e as createBlock, C as toDisplayString, D as NTabPane, E as NTabs } from "./index.js"; -import { B as BurnerClock, P as Prompt, _ as _sfc_main$5, a as _sfc_main$6, b as _sfc_main$9 } from "./clock.js"; -import { _ as _sfc_main$7 } from "./GenerateSection.vue_vue_type_script_setup_true_lang.js"; -import { _ as _sfc_main$8 } from "./ImageOutput.vue_vue_type_script_setup_true_lang.js"; +import { d as defineComponent, o as openBlock, a as createElementBlock, b as createBaseVNode, l as useState, u as useSettings, r as useMessage, s as onUnmounted, e as createVNode, w as withCtx, f as unref, t as NGi, m as NCard, j as NSpace, N as NTooltip, h as createTextVNode, q as NSelect, v as NGrid, x as serverUrl, y as pushScopeId, z as popScopeId, _ as _export_sfc, A as h, B as ref, C as NButton, D as NIcon, g as createBlock, E as toDisplayString, n as NTabPane, p as NTabs } from "./index.js"; +import { B as BurnerClock, P as Prompt, b as _sfc_main$5, _ as _sfc_main$6, a as _sfc_main$7, c as _sfc_main$8, d as _sfc_main$d } from "./clock.js"; +import { _ as _sfc_main$b } from "./GenerateSection.vue_vue_type_script_setup_true_lang.js"; +import { _ as _sfc_main$c } from "./ImageOutput.vue_vue_type_script_setup_true_lang.js"; import { I as ImageUpload } from "./ImageUpload.js"; -import { _ as _sfc_main$4 } from "./SamplerPicker.vue_vue_type_script_setup_true_lang.js"; +import { _ as _sfc_main$4, a as _sfc_main$9, b as _sfc_main$a } from "./Upscale.vue_vue_type_script_setup_true_lang.js"; import { v as v4 } from "./v4.js"; -import { a as NSlider, N as NSwitch } from "./Switch.js"; +import { N as NSlider } from "./Slider.js"; import { N as NInputNumber } from "./InputNumber.js"; +import { N as NSwitch } from "./Switch.js"; import "./DescriptionsItem.js"; import "./SendOutputTo.vue_vue_type_script_setup_true_lang.js"; import "./TrashBin.js"; @@ -145,7 +146,7 @@ const TrashBinSharp = defineComponent({ return openBlock(), createElementBlock("svg", _hoisted_1$3, _hoisted_6$3); } }); -const _withScopeId$2 = (n) => (pushScopeId("data-v-efacc8fd"), n = n(), popScopeId(), n); +const _withScopeId$2 = (n) => (pushScopeId("data-v-d4ff54ab"), n = n(), popScopeId(), n); const _hoisted_1$2 = { style: { "margin": "0 12px" } }; const _hoisted_2$2 = { class: "flex-container" }; const _hoisted_3$2 = /* @__PURE__ */ _withScopeId$2(() => /* @__PURE__ */ createBaseVNode("p", { style: { "margin-right": "12px", "width": "150px" } }, "ControlNet", -1)); @@ -154,23 +155,20 @@ const _hoisted_5$2 = { class: "flex-container" }; const _hoisted_6$2 = /* @__PURE__ */ _withScopeId$2(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Steps", -1)); const _hoisted_7$2 = /* @__PURE__ */ _withScopeId$2(() => /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "We recommend using 20-50 steps for most images.", -1)); const _hoisted_8$2 = { class: "flex-container" }; -const _hoisted_9$2 = /* @__PURE__ */ _withScopeId$2(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "CFG Scale", -1)); -const _hoisted_10$2 = /* @__PURE__ */ _withScopeId$2(() => /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "We recommend using 3-15 for most images.", -1)); -const _hoisted_11$2 = { class: "flex-container" }; -const _hoisted_12$2 = /* @__PURE__ */ _withScopeId$2(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Batch Count", -1)); -const _hoisted_13$2 = { class: "flex-container" }; -const _hoisted_14$2 = /* @__PURE__ */ _withScopeId$2(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "ControlNet Conditioning Scale", -1)); -const _hoisted_15$2 = { class: "flex-container" }; -const _hoisted_16$2 = /* @__PURE__ */ _withScopeId$2(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Detection resolution", -1)); -const _hoisted_17$2 = { class: "flex-container" }; -const _hoisted_18$1 = /* @__PURE__ */ _withScopeId$2(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Seed", -1)); -const _hoisted_19$1 = /* @__PURE__ */ _withScopeId$2(() => /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "For random seed use -1.", -1)); -const _hoisted_20$1 = { class: "flex-container" }; -const _hoisted_21$1 = /* @__PURE__ */ _withScopeId$2(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Is Preprocessed", -1)); -const _hoisted_22$1 = { class: "flex-container" }; -const _hoisted_23$1 = /* @__PURE__ */ _withScopeId$2(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Save Preprocessed", -1)); -const _hoisted_24$1 = { class: "flex-container" }; -const _hoisted_25 = /* @__PURE__ */ _withScopeId$2(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Return Preprocessed", -1)); +const _hoisted_9$2 = /* @__PURE__ */ _withScopeId$2(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Batch Count", -1)); +const _hoisted_10$2 = { class: "flex-container" }; +const _hoisted_11$2 = /* @__PURE__ */ _withScopeId$2(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "ControlNet Conditioning Scale", -1)); +const _hoisted_12$1 = { class: "flex-container" }; +const _hoisted_13$1 = /* @__PURE__ */ _withScopeId$2(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Detection resolution", -1)); +const _hoisted_14$1 = { class: "flex-container" }; +const _hoisted_15$1 = /* @__PURE__ */ _withScopeId$2(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Seed", -1)); +const _hoisted_16$1 = /* @__PURE__ */ _withScopeId$2(() => /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "For random seed use -1.", -1)); +const _hoisted_17$1 = { class: "flex-container" }; +const _hoisted_18$1 = /* @__PURE__ */ _withScopeId$2(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Is Preprocessed", -1)); +const _hoisted_19$1 = { class: "flex-container" }; +const _hoisted_20$1 = /* @__PURE__ */ _withScopeId$2(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Save Preprocessed", -1)); +const _hoisted_21 = { class: "flex-container" }; +const _hoisted_22 = /* @__PURE__ */ _withScopeId$2(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Return Preprocessed", -1)); const _sfc_main$3 = /* @__PURE__ */ defineComponent({ __name: "ControlNet", setup(__props) { @@ -231,7 +229,28 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ save_preprocessed: settings.data.settings.controlnet.save_preprocessed, return_preprocessed: settings.data.settings.controlnet.return_preprocessed }, - model: (_a = settings.data.settings.model) == null ? void 0 : _a.path + model: (_a = settings.data.settings.model) == null ? void 0 : _a.path, + flags: { + ...settings.data.settings.controlnet.highres.enabled ? { + highres_fix: { + mode: settings.data.settings.controlnet.highres.mode, + image_upscaler: settings.data.settings.controlnet.highres.image_upscaler, + scale: settings.data.settings.controlnet.highres.scale, + latent_scale_mode: settings.data.settings.controlnet.highres.latent_scale_mode, + strength: settings.data.settings.controlnet.highres.strength, + steps: settings.data.settings.controlnet.highres.steps, + antialiased: settings.data.settings.controlnet.highres.antialiased + } + } : {}, + ...settings.data.settings.controlnet.upscale.enabled ? { + upscale: { + upscale_factor: settings.data.settings.controlnet.upscale.upscale_factor, + tile_size: settings.data.settings.controlnet.upscale.tile_size, + tile_padding: settings.data.settings.controlnet.upscale.tile_padding, + model: settings.data.settings.controlnet.upscale.model + } + } : {} + } }) }).then((res) => { if (!res.ok) { @@ -340,40 +359,13 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ max: 300 }, null, 8, ["value"]) ]), + createVNode(unref(_sfc_main$6), { tab: "controlnet" }), + createVNode(unref(_sfc_main$7), { tab: "controlnet" }), createBaseVNode("div", _hoisted_8$2, [ createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { trigger: withCtx(() => [ _hoisted_9$2 ]), - default: withCtx(() => [ - createTextVNode(' Guidance scale indicates how much should model stay close to the prompt. Higher values might be exactly what you want, but generated images might have some artefacts. Lower values indicates that model can "dream" about this prompt more. '), - _hoisted_10$2 - ]), - _: 1 - }), - createVNode(unref(NSlider), { - value: unref(settings).data.settings.controlnet.cfg_scale, - "onUpdate:value": _cache[4] || (_cache[4] = ($event) => unref(settings).data.settings.controlnet.cfg_scale = $event), - min: 1, - max: 30, - step: 0.5, - style: { "margin-right": "12px" } - }, null, 8, ["value"]), - createVNode(unref(NInputNumber), { - value: unref(settings).data.settings.controlnet.cfg_scale, - "onUpdate:value": _cache[5] || (_cache[5] = ($event) => unref(settings).data.settings.controlnet.cfg_scale = $event), - size: "small", - style: { "min-width": "96px", "width": "96px" }, - min: 1, - max: 30, - step: 0.5 - }, null, 8, ["value"]) - ]), - createBaseVNode("div", _hoisted_11$2, [ - createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { - trigger: withCtx(() => [ - _hoisted_12$2 - ]), default: withCtx(() => [ createTextVNode(" Number of images to generate after each other. ") ]), @@ -381,27 +373,27 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ }), createVNode(unref(NSlider), { value: unref(settings).data.settings.controlnet.batch_count, - "onUpdate:value": _cache[6] || (_cache[6] = ($event) => unref(settings).data.settings.controlnet.batch_count = $event), + "onUpdate:value": _cache[4] || (_cache[4] = ($event) => unref(settings).data.settings.controlnet.batch_count = $event), min: 1, max: 9, style: { "margin-right": "12px" } }, null, 8, ["value"]), createVNode(unref(NInputNumber), { value: unref(settings).data.settings.controlnet.batch_count, - "onUpdate:value": _cache[7] || (_cache[7] = ($event) => unref(settings).data.settings.controlnet.batch_count = $event), + "onUpdate:value": _cache[5] || (_cache[5] = ($event) => unref(settings).data.settings.controlnet.batch_count = $event), size: "small", style: { "min-width": "96px", "width": "96px" }, min: 1, max: 9 }, null, 8, ["value"]) ]), - createVNode(unref(_sfc_main$6), { + createVNode(unref(_sfc_main$8), { "batch-size-object": unref(settings).data.settings.controlnet }, null, 8, ["batch-size-object"]), - createBaseVNode("div", _hoisted_13$2, [ + createBaseVNode("div", _hoisted_10$2, [ createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { trigger: withCtx(() => [ - _hoisted_14$2 + _hoisted_11$2 ]), default: withCtx(() => [ createTextVNode(" How much should the ControlNet affect the image. ") @@ -410,7 +402,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ }), createVNode(unref(NSlider), { value: unref(settings).data.settings.controlnet.controlnet_conditioning_scale, - "onUpdate:value": _cache[8] || (_cache[8] = ($event) => unref(settings).data.settings.controlnet.controlnet_conditioning_scale = $event), + "onUpdate:value": _cache[6] || (_cache[6] = ($event) => unref(settings).data.settings.controlnet.controlnet_conditioning_scale = $event), min: 0.1, max: 2, style: { "margin-right": "12px" }, @@ -418,7 +410,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ }, null, 8, ["value"]), createVNode(unref(NInputNumber), { value: unref(settings).data.settings.controlnet.controlnet_conditioning_scale, - "onUpdate:value": _cache[9] || (_cache[9] = ($event) => unref(settings).data.settings.controlnet.controlnet_conditioning_scale = $event), + "onUpdate:value": _cache[7] || (_cache[7] = ($event) => unref(settings).data.settings.controlnet.controlnet_conditioning_scale = $event), size: "small", style: { "min-width": "96px", "width": "96px" }, min: 0.1, @@ -426,10 +418,10 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ step: 0.025 }, null, 8, ["value"]) ]), - createBaseVNode("div", _hoisted_15$2, [ + createBaseVNode("div", _hoisted_12$1, [ createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { trigger: withCtx(() => [ - _hoisted_16$2 + _hoisted_13$1 ]), default: withCtx(() => [ createTextVNode(" What resolution to use for the image processing. This process does not affect the final result but can affect the quality of the ControlNet processing. ") @@ -438,7 +430,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ }), createVNode(unref(NSlider), { value: unref(settings).data.settings.controlnet.detection_resolution, - "onUpdate:value": _cache[10] || (_cache[10] = ($event) => unref(settings).data.settings.controlnet.detection_resolution = $event), + "onUpdate:value": _cache[8] || (_cache[8] = ($event) => unref(settings).data.settings.controlnet.detection_resolution = $event), min: 128, max: 2048, style: { "margin-right": "12px" }, @@ -446,7 +438,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ }, null, 8, ["value"]), createVNode(unref(NInputNumber), { value: unref(settings).data.settings.controlnet.detection_resolution, - "onUpdate:value": _cache[11] || (_cache[11] = ($event) => unref(settings).data.settings.controlnet.detection_resolution = $event), + "onUpdate:value": _cache[9] || (_cache[9] = ($event) => unref(settings).data.settings.controlnet.detection_resolution = $event), size: "small", style: { "min-width": "96px", "width": "96px" }, min: 128, @@ -454,45 +446,45 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ step: 8 }, null, 8, ["value"]) ]), - createBaseVNode("div", _hoisted_17$2, [ + createBaseVNode("div", _hoisted_14$1, [ createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { trigger: withCtx(() => [ - _hoisted_18$1 + _hoisted_15$1 ]), default: withCtx(() => [ createTextVNode(" Seed is a number that represents the starting canvas of your image. If you want to create the same image as your friend, you can use the same settings and seed to do so. "), - _hoisted_19$1 + _hoisted_16$1 ]), _: 1 }), createVNode(unref(NInputNumber), { value: unref(settings).data.settings.controlnet.seed, - "onUpdate:value": _cache[12] || (_cache[12] = ($event) => unref(settings).data.settings.controlnet.seed = $event), + "onUpdate:value": _cache[10] || (_cache[10] = ($event) => unref(settings).data.settings.controlnet.seed = $event), size: "small", min: -1, max: 999999999999, style: { "flex-grow": "1" } }, null, 8, ["value"]) ]), - createBaseVNode("div", _hoisted_20$1, [ - _hoisted_21$1, + createBaseVNode("div", _hoisted_17$1, [ + _hoisted_18$1, createVNode(unref(NSwitch), { value: unref(settings).data.settings.controlnet.is_preprocessed, - "onUpdate:value": _cache[13] || (_cache[13] = ($event) => unref(settings).data.settings.controlnet.is_preprocessed = $event) + "onUpdate:value": _cache[11] || (_cache[11] = ($event) => unref(settings).data.settings.controlnet.is_preprocessed = $event) }, null, 8, ["value"]) ]), - createBaseVNode("div", _hoisted_22$1, [ - _hoisted_23$1, + createBaseVNode("div", _hoisted_19$1, [ + _hoisted_20$1, createVNode(unref(NSwitch), { value: unref(settings).data.settings.controlnet.save_preprocessed, - "onUpdate:value": _cache[14] || (_cache[14] = ($event) => unref(settings).data.settings.controlnet.save_preprocessed = $event) + "onUpdate:value": _cache[12] || (_cache[12] = ($event) => unref(settings).data.settings.controlnet.save_preprocessed = $event) }, null, 8, ["value"]) ]), - createBaseVNode("div", _hoisted_24$1, [ - _hoisted_25, + createBaseVNode("div", _hoisted_21, [ + _hoisted_22, createVNode(unref(NSwitch), { value: unref(settings).data.settings.controlnet.return_preprocessed, - "onUpdate:value": _cache[15] || (_cache[15] = ($event) => unref(settings).data.settings.controlnet.return_preprocessed = $event) + "onUpdate:value": _cache[13] || (_cache[13] = ($event) => unref(settings).data.settings.controlnet.return_preprocessed = $event) }, null, 8, ["value"]) ]) ]), @@ -500,20 +492,22 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ }) ]), _: 1 - }) + }), + createVNode(unref(_sfc_main$9), { tab: "controlnet" }), + createVNode(unref(_sfc_main$a), { tab: "controlnet" }) ]), _: 1 }), createVNode(unref(NGi), null, { default: withCtx(() => [ - createVNode(unref(_sfc_main$7), { generate }), - createVNode(unref(_sfc_main$8), { + createVNode(unref(_sfc_main$b), { generate }), + createVNode(unref(_sfc_main$c), { "current-image": unref(global).state.controlnet.currentImage, images: unref(global).state.controlnet.images, data: unref(settings).data.settings.controlnet, - onImageClicked: _cache[16] || (_cache[16] = ($event) => unref(global).state.controlnet.currentImage = $event) + onImageClicked: _cache[14] || (_cache[14] = ($event) => unref(global).state.controlnet.currentImage = $event) }, null, 8, ["current-image", "images", "data"]), - createVNode(unref(_sfc_main$9), { + createVNode(unref(_sfc_main$d), { style: { "margin-top": "12px" }, "gen-data": unref(global).state.controlnet.genData }, null, 8, ["gen-data"]) @@ -527,28 +521,19 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ }; } }); -const ControlNet = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-efacc8fd"]]); -const _withScopeId$1 = (n) => (pushScopeId("data-v-9c556ef8"), n = n(), popScopeId(), n); +const ControlNet = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-d4ff54ab"]]); +const _withScopeId$1 = (n) => (pushScopeId("data-v-a4145f6c"), n = n(), popScopeId(), n); const _hoisted_1$1 = { style: { "margin": "0 12px" } }; const _hoisted_2$1 = { class: "flex-container" }; const _hoisted_3$1 = /* @__PURE__ */ _withScopeId$1(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Steps", -1)); const _hoisted_4$1 = /* @__PURE__ */ _withScopeId$1(() => /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "We recommend using 20-50 steps for most images.", -1)); const _hoisted_5$1 = { class: "flex-container" }; -const _hoisted_6$1 = /* @__PURE__ */ _withScopeId$1(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "CFG Scale", -1)); -const _hoisted_7$1 = /* @__PURE__ */ _withScopeId$1(() => /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "We recommend using 3-15 for most images.", -1)); -const _hoisted_8$1 = { - key: 0, - class: "flex-container" -}; -const _hoisted_9$1 = /* @__PURE__ */ _withScopeId$1(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Self Attention Scale", -1)); -const _hoisted_10$1 = /* @__PURE__ */ _withScopeId$1(() => /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "PyTorch ONLY.", -1)); -const _hoisted_11$1 = { class: "flex-container" }; -const _hoisted_12$1 = /* @__PURE__ */ _withScopeId$1(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Batch Count", -1)); -const _hoisted_13$1 = { class: "flex-container" }; -const _hoisted_14$1 = /* @__PURE__ */ _withScopeId$1(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Denoising Strength", -1)); -const _hoisted_15$1 = { class: "flex-container" }; -const _hoisted_16$1 = /* @__PURE__ */ _withScopeId$1(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Seed", -1)); -const _hoisted_17$1 = /* @__PURE__ */ _withScopeId$1(() => /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "For random seed use -1.", -1)); +const _hoisted_6$1 = /* @__PURE__ */ _withScopeId$1(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Batch Count", -1)); +const _hoisted_7$1 = { class: "flex-container" }; +const _hoisted_8$1 = /* @__PURE__ */ _withScopeId$1(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Denoising Strength", -1)); +const _hoisted_9$1 = { class: "flex-container" }; +const _hoisted_10$1 = /* @__PURE__ */ _withScopeId$1(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Seed", -1)); +const _hoisted_11$1 = /* @__PURE__ */ _withScopeId$1(() => /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "For random seed use -1.", -1)); const _sfc_main$2 = /* @__PURE__ */ defineComponent({ __name: "Img2Img", setup(__props) { @@ -601,7 +586,41 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({ prompt_to_prompt: settings.data.settings.api.prompt_to_prompt } }, - model: (_a = settings.data.settings.model) == null ? void 0 : _a.path + ...settings.data.settings.img2img.deepshrink.enabled ? { + flags: { + deepshrink: { + early_out: settings.data.settings.img2img.deepshrink.early_out, + depth_1: settings.data.settings.img2img.deepshrink.depth_1, + stop_at_1: settings.data.settings.img2img.deepshrink.stop_at_1, + depth_2: settings.data.settings.img2img.deepshrink.depth_2, + stop_at_2: settings.data.settings.img2img.deepshrink.stop_at_2, + scaler: settings.data.settings.img2img.deepshrink.scaler, + base_scale: settings.data.settings.img2img.deepshrink.base_scale + } + } + } : {}, + model: (_a = settings.data.settings.model) == null ? void 0 : _a.path, + flags: { + ...settings.data.settings.img2img.highres.enabled ? { + highres_fix: { + mode: settings.data.settings.img2img.highres.mode, + image_upscaler: settings.data.settings.img2img.highres.image_upscaler, + scale: settings.data.settings.img2img.highres.scale, + latent_scale_mode: settings.data.settings.img2img.highres.latent_scale_mode, + strength: settings.data.settings.img2img.highres.strength, + steps: settings.data.settings.img2img.highres.steps, + antialiased: settings.data.settings.img2img.highres.antialiased + } + } : {}, + ...settings.data.settings.img2img.upscale.enabled ? { + upscale: { + upscale_factor: settings.data.settings.img2img.upscale.upscale_factor, + tile_size: settings.data.settings.img2img.upscale.tile_size, + tile_padding: settings.data.settings.img2img.upscale.tile_padding, + model: settings.data.settings.img2img.upscale.model + } + } : {} + } }) }).then((res) => { if (!res.ok) { @@ -657,196 +676,139 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({ vertical: "", class: "left-container" }, { - default: withCtx(() => { - var _a; - return [ - createVNode(unref(Prompt), { tab: "img2img" }), - createVNode(unref(_sfc_main$4), { type: "img2img" }), - createVNode(unref(_sfc_main$5), { - "dimensions-object": unref(settings).data.settings.img2img - }, null, 8, ["dimensions-object"]), - createBaseVNode("div", _hoisted_2$1, [ - createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { - trigger: withCtx(() => [ - _hoisted_3$1 - ]), - default: withCtx(() => [ - createTextVNode(" Number of steps to take in the diffusion process. Higher values will result in more detailed images but will take longer to generate. There is also a point of diminishing returns around 100 steps. "), - _hoisted_4$1 - ]), - _: 1 - }), - createVNode(unref(NSlider), { - value: unref(settings).data.settings.img2img.steps, - "onUpdate:value": _cache[1] || (_cache[1] = ($event) => unref(settings).data.settings.img2img.steps = $event), - min: 5, - max: 300, - style: { "margin-right": "12px" } - }, null, 8, ["value"]), - createVNode(unref(NInputNumber), { - value: unref(settings).data.settings.img2img.steps, - "onUpdate:value": _cache[2] || (_cache[2] = ($event) => unref(settings).data.settings.img2img.steps = $event), - size: "small", - style: { "min-width": "96px", "width": "96px" }, - min: 5, - max: 300 - }, null, 8, ["value"]) - ]), - createBaseVNode("div", _hoisted_5$1, [ - createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { - trigger: withCtx(() => [ - _hoisted_6$1 - ]), - default: withCtx(() => [ - createTextVNode(' Guidance scale indicates how much should model stay close to the prompt. Higher values might be exactly what you want, but generated images might have some artefacts. Lower values indicates that model can "dream" about this prompt more. '), - _hoisted_7$1 - ]), - _: 1 - }), - createVNode(unref(NSlider), { - value: unref(settings).data.settings.img2img.cfg_scale, - "onUpdate:value": _cache[3] || (_cache[3] = ($event) => unref(settings).data.settings.img2img.cfg_scale = $event), - min: 1, - max: 30, - step: 0.5, - style: { "margin-right": "12px" } - }, null, 8, ["value"]), - createVNode(unref(NInputNumber), { - value: unref(settings).data.settings.img2img.cfg_scale, - "onUpdate:value": _cache[4] || (_cache[4] = ($event) => unref(settings).data.settings.img2img.cfg_scale = $event), - size: "small", - style: { "min-width": "96px", "width": "96px" }, - min: 1, - max: 30, - step: 0.5 - }, null, 8, ["value"]) - ]), - Number.isInteger(unref(settings).data.settings.img2img.sampler) && ((_a = unref(settings).data.settings.model) == null ? void 0 : _a.backend) === "PyTorch" ? (openBlock(), createElementBlock("div", _hoisted_8$1, [ - createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { - trigger: withCtx(() => [ - _hoisted_9$1 - ]), - default: withCtx(() => [ - _hoisted_10$1, - createTextVNode(" If self attention is >0, SAG will guide the model and improve the quality of the image at the cost of speed. Higher values will follow the guidance more closely, which can lead to better, more sharp and detailed outputs. ") - ]), - _: 1 - }), - createVNode(unref(NSlider), { - value: unref(settings).data.settings.img2img.self_attention_scale, - "onUpdate:value": _cache[5] || (_cache[5] = ($event) => unref(settings).data.settings.img2img.self_attention_scale = $event), - min: 0, - max: 1, - step: 0.05, - style: { "margin-right": "12px" } - }, null, 8, ["value"]), - createVNode(unref(NInputNumber), { - value: unref(settings).data.settings.img2img.self_attention_scale, - "onUpdate:value": _cache[6] || (_cache[6] = ($event) => unref(settings).data.settings.img2img.self_attention_scale = $event), - size: "small", - style: { "min-width": "96px", "width": "96px" }, - min: 0, - max: 1, - step: 0.05 - }, null, 8, ["value"]) - ])) : createCommentVNode("", true), - createBaseVNode("div", _hoisted_11$1, [ - createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { - trigger: withCtx(() => [ - _hoisted_12$1 - ]), - default: withCtx(() => [ - createTextVNode(" Number of images to generate after each other. ") - ]), - _: 1 - }), - createVNode(unref(NSlider), { - value: unref(settings).data.settings.img2img.batch_count, - "onUpdate:value": _cache[7] || (_cache[7] = ($event) => unref(settings).data.settings.img2img.batch_count = $event), - min: 1, - max: 9, - style: { "margin-right": "12px" } - }, null, 8, ["value"]), - createVNode(unref(NInputNumber), { - value: unref(settings).data.settings.img2img.batch_count, - "onUpdate:value": _cache[8] || (_cache[8] = ($event) => unref(settings).data.settings.img2img.batch_count = $event), - size: "small", - style: { "min-width": "96px", "width": "96px" }, - min: 1, - max: 9 - }, null, 8, ["value"]) - ]), - createVNode(unref(_sfc_main$6), { - "batch-size-object": unref(settings).data.settings.img2img - }, null, 8, ["batch-size-object"]), - createBaseVNode("div", _hoisted_13$1, [ - createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { - trigger: withCtx(() => [ - _hoisted_14$1 - ]), - default: withCtx(() => [ - createTextVNode(" Lower values will stick more to the original image, 0.5-0.75 is ideal ") - ]), - _: 1 - }), - createVNode(unref(NSlider), { - value: unref(settings).data.settings.img2img.denoising_strength, - "onUpdate:value": _cache[9] || (_cache[9] = ($event) => unref(settings).data.settings.img2img.denoising_strength = $event), - min: 0.1, - max: 1, - style: { "margin-right": "12px" }, - step: 0.025 - }, null, 8, ["value"]), - createVNode(unref(NInputNumber), { - value: unref(settings).data.settings.img2img.denoising_strength, - "onUpdate:value": _cache[10] || (_cache[10] = ($event) => unref(settings).data.settings.img2img.denoising_strength = $event), - size: "small", - style: { "min-width": "96px", "width": "96px" }, - min: 0.1, - max: 1, - step: 0.025 - }, null, 8, ["value"]) - ]), - createBaseVNode("div", _hoisted_15$1, [ - createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { - trigger: withCtx(() => [ - _hoisted_16$1 - ]), - default: withCtx(() => [ - createTextVNode(" Seed is a number that represents the starting canvas of your image. If you want to create the same image as your friend, you can use the same settings and seed to do so. "), - _hoisted_17$1 - ]), - _: 1 - }), - createVNode(unref(NInputNumber), { - value: unref(settings).data.settings.img2img.seed, - "onUpdate:value": _cache[11] || (_cache[11] = ($event) => unref(settings).data.settings.img2img.seed = $event), - size: "small", - min: -1, - max: 999999999999, - style: { "flex-grow": "1" } - }, null, 8, ["value"]) - ]) - ]; - }), + default: withCtx(() => [ + createVNode(unref(Prompt), { tab: "img2img" }), + createVNode(unref(_sfc_main$4), { type: "img2img" }), + createVNode(unref(_sfc_main$5), { + "dimensions-object": unref(settings).data.settings.img2img + }, null, 8, ["dimensions-object"]), + createBaseVNode("div", _hoisted_2$1, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_3$1 + ]), + default: withCtx(() => [ + createTextVNode(" Number of steps to take in the diffusion process. Higher values will result in more detailed images but will take longer to generate. There is also a point of diminishing returns around 100 steps. "), + _hoisted_4$1 + ]), + _: 1 + }), + createVNode(unref(NSlider), { + value: unref(settings).data.settings.img2img.steps, + "onUpdate:value": _cache[1] || (_cache[1] = ($event) => unref(settings).data.settings.img2img.steps = $event), + min: 5, + max: 300, + style: { "margin-right": "12px" } + }, null, 8, ["value"]), + createVNode(unref(NInputNumber), { + value: unref(settings).data.settings.img2img.steps, + "onUpdate:value": _cache[2] || (_cache[2] = ($event) => unref(settings).data.settings.img2img.steps = $event), + size: "small", + style: { "min-width": "96px", "width": "96px" }, + min: 5, + max: 300 + }, null, 8, ["value"]) + ]), + createVNode(unref(_sfc_main$6), { tab: "img2img" }), + createVNode(unref(_sfc_main$7), { tab: "img2img" }), + createBaseVNode("div", _hoisted_5$1, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_6$1 + ]), + default: withCtx(() => [ + createTextVNode(" Number of images to generate after each other. ") + ]), + _: 1 + }), + createVNode(unref(NSlider), { + value: unref(settings).data.settings.img2img.batch_count, + "onUpdate:value": _cache[3] || (_cache[3] = ($event) => unref(settings).data.settings.img2img.batch_count = $event), + min: 1, + max: 9, + style: { "margin-right": "12px" } + }, null, 8, ["value"]), + createVNode(unref(NInputNumber), { + value: unref(settings).data.settings.img2img.batch_count, + "onUpdate:value": _cache[4] || (_cache[4] = ($event) => unref(settings).data.settings.img2img.batch_count = $event), + size: "small", + style: { "min-width": "96px", "width": "96px" }, + min: 1, + max: 9 + }, null, 8, ["value"]) + ]), + createVNode(unref(_sfc_main$8), { + "batch-size-object": unref(settings).data.settings.img2img + }, null, 8, ["batch-size-object"]), + createBaseVNode("div", _hoisted_7$1, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_8$1 + ]), + default: withCtx(() => [ + createTextVNode(" Lower values will stick more to the original image, 0.5-0.75 is ideal ") + ]), + _: 1 + }), + createVNode(unref(NSlider), { + value: unref(settings).data.settings.img2img.denoising_strength, + "onUpdate:value": _cache[5] || (_cache[5] = ($event) => unref(settings).data.settings.img2img.denoising_strength = $event), + min: 0.1, + max: 1, + style: { "margin-right": "12px" }, + step: 0.025 + }, null, 8, ["value"]), + createVNode(unref(NInputNumber), { + value: unref(settings).data.settings.img2img.denoising_strength, + "onUpdate:value": _cache[6] || (_cache[6] = ($event) => unref(settings).data.settings.img2img.denoising_strength = $event), + size: "small", + style: { "min-width": "96px", "width": "96px" }, + min: 0.1, + max: 1, + step: 0.025 + }, null, 8, ["value"]) + ]), + createBaseVNode("div", _hoisted_9$1, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_10$1 + ]), + default: withCtx(() => [ + createTextVNode(" Seed is a number that represents the starting canvas of your image. If you want to create the same image as your friend, you can use the same settings and seed to do so. "), + _hoisted_11$1 + ]), + _: 1 + }), + createVNode(unref(NInputNumber), { + value: unref(settings).data.settings.img2img.seed, + "onUpdate:value": _cache[7] || (_cache[7] = ($event) => unref(settings).data.settings.img2img.seed = $event), + size: "small", + min: -1, + max: 999999999999, + style: { "flex-grow": "1" } + }, null, 8, ["value"]) + ]) + ]), _: 1 }) ]), _: 1 - }) + }), + createVNode(unref(_sfc_main$9), { tab: "img2img" }), + createVNode(unref(_sfc_main$a), { tab: "img2img" }) ]), _: 1 }), createVNode(unref(NGi), null, { default: withCtx(() => [ - createVNode(unref(_sfc_main$7), { generate }), - createVNode(unref(_sfc_main$8), { + createVNode(unref(_sfc_main$b), { generate }), + createVNode(unref(_sfc_main$c), { "current-image": unref(global).state.img2img.currentImage, images: unref(global).state.img2img.images, data: unref(settings).data.settings.img2img, - onImageClicked: _cache[12] || (_cache[12] = ($event) => unref(global).state.img2img.currentImage = $event) + onImageClicked: _cache[8] || (_cache[8] = ($event) => unref(global).state.img2img.currentImage = $event) }, null, 8, ["current-image", "images", "data"]), - createVNode(unref(_sfc_main$9), { + createVNode(unref(_sfc_main$d), { style: { "margin-top": "12px" }, "gen-data": unref(global).state.img2img.genData }, null, 8, ["gen-data"]) @@ -860,7 +822,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({ }; } }); -const ImageToImage = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-9c556ef8"]]); +const ImageToImage = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-a4145f6c"]]); var VueDrawingCanvas = /* @__PURE__ */ defineComponent({ name: "VueDrawingCanvas", props: { @@ -1436,7 +1398,7 @@ var VueDrawingCanvas = /* @__PURE__ */ defineComponent({ }); } }); -const _withScopeId = (n) => (pushScopeId("data-v-7963dde9"), n = n(), popScopeId(), n); +const _withScopeId = (n) => (pushScopeId("data-v-23b19530"), n = n(), popScopeId(), n); const _hoisted_1 = { style: { "margin": "0 12px" } }; const _hoisted_2 = { style: { "display": "inline-flex", "align-items": "center" } }; const _hoisted_3 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createBaseVNode("svg", { @@ -1460,21 +1422,14 @@ const _hoisted_9 = { class: "flex-container" }; const _hoisted_10 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Steps", -1)); const _hoisted_11 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "We recommend using 20-50 steps for most images.", -1)); const _hoisted_12 = { class: "flex-container" }; -const _hoisted_13 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "CFG Scale", -1)); -const _hoisted_14 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "We recommend using 3-15 for most images.", -1)); -const _hoisted_15 = { - key: 0, - class: "flex-container" -}; -const _hoisted_16 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Self Attention Scale", -1)); -const _hoisted_17 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "PyTorch ONLY.", -1)); +const _hoisted_13 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Strength", -1)); +const _hoisted_14 = { class: "flex-container" }; +const _hoisted_15 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Batch Count", -1)); +const _hoisted_16 = { class: "flex-container" }; +const _hoisted_17 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Batch Size", -1)); const _hoisted_18 = { class: "flex-container" }; -const _hoisted_19 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Batch Count", -1)); -const _hoisted_20 = { class: "flex-container" }; -const _hoisted_21 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Batch Size", -1)); -const _hoisted_22 = { class: "flex-container" }; -const _hoisted_23 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Seed", -1)); -const _hoisted_24 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "For random seed use -1.", -1)); +const _hoisted_19 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Seed", -1)); +const _hoisted_20 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "For random seed use -1.", -1)); const _sfc_main$1 = /* @__PURE__ */ defineComponent({ __name: "Inpainting", setup(__props) { @@ -1525,7 +1480,41 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({ prompt_to_prompt: settings.data.settings.api.prompt_to_prompt } }, - model: (_a = settings.data.settings.model) == null ? void 0 : _a.path + ...settings.data.settings.inpainting.deepshrink.enabled ? { + flags: { + deepshrink: { + early_out: settings.data.settings.inpainting.deepshrink.early_out, + depth_1: settings.data.settings.inpainting.deepshrink.depth_1, + stop_at_1: settings.data.settings.inpainting.deepshrink.stop_at_1, + depth_2: settings.data.settings.inpainting.deepshrink.depth_2, + stop_at_2: settings.data.settings.inpainting.deepshrink.stop_at_2, + scaler: settings.data.settings.inpainting.deepshrink.scaler, + base_scale: settings.data.settings.inpainting.deepshrink.base_scale + } + } + } : {}, + model: (_a = settings.data.settings.model) == null ? void 0 : _a.path, + flags: { + ...settings.data.settings.inpainting.highres.enabled ? { + highres_fix: { + mode: settings.data.settings.inpainting.highres.mode, + image_upscaler: settings.data.settings.inpainting.highres.image_upscaler, + scale: settings.data.settings.inpainting.highres.scale, + latent_scale_mode: settings.data.settings.inpainting.highres.latent_scale_mode, + strength: settings.data.settings.inpainting.highres.strength, + steps: settings.data.settings.inpainting.highres.steps, + antialiased: settings.data.settings.inpainting.highres.antialiased + } + } : {}, + ...settings.data.settings.inpainting.upscale.enabled ? { + upscale: { + upscale_factor: settings.data.settings.inpainting.upscale.upscale_factor, + tile_size: settings.data.settings.inpainting.upscale.tile_size, + tile_padding: settings.data.settings.inpainting.upscale.tile_padding, + model: settings.data.settings.inpainting.upscale.model + } + } : {} + } }) }).then((res) => { if (!res.ok) { @@ -1782,228 +1771,199 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({ vertical: "", class: "left-container" }, { - default: withCtx(() => { - var _a; - return [ - createVNode(unref(Prompt), { tab: "inpainting" }), - createVNode(unref(_sfc_main$4), { type: "inpainting" }), - createBaseVNode("div", _hoisted_5, [ - _hoisted_6, - createVNode(unref(NSlider), { - value: unref(settings).data.settings.inpainting.width, - "onUpdate:value": _cache[2] || (_cache[2] = ($event) => unref(settings).data.settings.inpainting.width = $event), - min: 128, - max: 2048, - step: 8, - style: { "margin-right": "12px" } - }, null, 8, ["value"]), - createVNode(unref(NInputNumber), { - value: unref(settings).data.settings.inpainting.width, - "onUpdate:value": _cache[3] || (_cache[3] = ($event) => unref(settings).data.settings.inpainting.width = $event), - size: "small", - style: { "min-width": "96px", "width": "96px" }, - step: 8, - min: 128, - max: 2048 - }, null, 8, ["value"]) - ]), - createBaseVNode("div", _hoisted_7, [ - _hoisted_8, - createVNode(unref(NSlider), { - value: unref(settings).data.settings.inpainting.height, - "onUpdate:value": _cache[4] || (_cache[4] = ($event) => unref(settings).data.settings.inpainting.height = $event), - min: 128, - max: 2048, - step: 8, - style: { "margin-right": "12px" } - }, null, 8, ["value"]), - createVNode(unref(NInputNumber), { - value: unref(settings).data.settings.inpainting.height, - "onUpdate:value": _cache[5] || (_cache[5] = ($event) => unref(settings).data.settings.inpainting.height = $event), - size: "small", - style: { "min-width": "96px", "width": "96px" }, - step: 8, - min: 128, - max: 2048 - }, null, 8, ["value"]) - ]), - createBaseVNode("div", _hoisted_9, [ - createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { - trigger: withCtx(() => [ - _hoisted_10 - ]), - default: withCtx(() => [ - createTextVNode(" Number of steps to take in the diffusion process. Higher values will result in more detailed images but will take longer to generate. There is also a point of diminishing returns around 100 steps. "), - _hoisted_11 - ]), - _: 1 - }), - createVNode(unref(NSlider), { - value: unref(settings).data.settings.inpainting.steps, - "onUpdate:value": _cache[6] || (_cache[6] = ($event) => unref(settings).data.settings.inpainting.steps = $event), - min: 5, - max: 300, - style: { "margin-right": "12px" } - }, null, 8, ["value"]), - createVNode(unref(NInputNumber), { - value: unref(settings).data.settings.inpainting.steps, - "onUpdate:value": _cache[7] || (_cache[7] = ($event) => unref(settings).data.settings.inpainting.steps = $event), - size: "small", - style: { "min-width": "96px", "width": "96px" }, - min: 5, - max: 300 - }, null, 8, ["value"]) - ]), - createBaseVNode("div", _hoisted_12, [ - createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { - trigger: withCtx(() => [ - _hoisted_13 - ]), - default: withCtx(() => [ - createTextVNode(' Guidance scale indicates how much should model stay close to the prompt. Higher values might be exactly what you want, but generated images might have some artefacts. Lower values indicates that model can "dream" about this prompt more. '), - _hoisted_14 - ]), - _: 1 - }), - createVNode(unref(NSlider), { - value: unref(settings).data.settings.inpainting.cfg_scale, - "onUpdate:value": _cache[8] || (_cache[8] = ($event) => unref(settings).data.settings.inpainting.cfg_scale = $event), - min: 1, - max: 30, - step: 0.5, - style: { "margin-right": "12px" } - }, null, 8, ["value"]), - createVNode(unref(NInputNumber), { - value: unref(settings).data.settings.inpainting.cfg_scale, - "onUpdate:value": _cache[9] || (_cache[9] = ($event) => unref(settings).data.settings.inpainting.cfg_scale = $event), - size: "small", - style: { "min-width": "96px", "width": "96px" }, - min: 1, - max: 30, - step: 0.5 - }, null, 8, ["value"]) - ]), - Number.isInteger(unref(settings).data.settings.inpainting.sampler) && ((_a = unref(settings).data.settings.model) == null ? void 0 : _a.backend) === "PyTorch" ? (openBlock(), createElementBlock("div", _hoisted_15, [ - createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { - trigger: withCtx(() => [ - _hoisted_16 - ]), - default: withCtx(() => [ - _hoisted_17, - createTextVNode(" If self attention is >0, SAG will guide the model and improve the quality of the image at the cost of speed. Higher values will follow the guidance more closely, which can lead to better, more sharp and detailed outputs. ") - ]), - _: 1 - }), - createVNode(unref(NSlider), { - value: unref(settings).data.settings.inpainting.self_attention_scale, - "onUpdate:value": _cache[10] || (_cache[10] = ($event) => unref(settings).data.settings.inpainting.self_attention_scale = $event), - min: 0, - max: 1, - step: 0.05, - style: { "margin-right": "12px" } - }, null, 8, ["value"]), - createVNode(unref(NInputNumber), { - value: unref(settings).data.settings.inpainting.self_attention_scale, - "onUpdate:value": _cache[11] || (_cache[11] = ($event) => unref(settings).data.settings.inpainting.self_attention_scale = $event), - size: "small", - style: { "min-width": "96px", "width": "96px" }, - min: 0, - max: 1, - step: 0.05 - }, null, 8, ["value"]) - ])) : createCommentVNode("", true), - createBaseVNode("div", _hoisted_18, [ - createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { - trigger: withCtx(() => [ - _hoisted_19 - ]), - default: withCtx(() => [ - createTextVNode(" Number of images to generate after each other. ") - ]), - _: 1 - }), - createVNode(unref(NSlider), { - value: unref(settings).data.settings.inpainting.batch_count, - "onUpdate:value": _cache[12] || (_cache[12] = ($event) => unref(settings).data.settings.inpainting.batch_count = $event), - min: 1, - max: 9, - style: { "margin-right": "12px" } - }, null, 8, ["value"]), - createVNode(unref(NInputNumber), { - value: unref(settings).data.settings.inpainting.batch_count, - "onUpdate:value": _cache[13] || (_cache[13] = ($event) => unref(settings).data.settings.inpainting.batch_count = $event), - size: "small", - style: { "min-width": "96px", "width": "96px" }, - min: 1, - max: 9 - }, null, 8, ["value"]) - ]), - createBaseVNode("div", _hoisted_20, [ - createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { - trigger: withCtx(() => [ - _hoisted_21 - ]), - default: withCtx(() => [ - createTextVNode(" Number of images to generate in paralel. ") - ]), - _: 1 - }), - createVNode(unref(NSlider), { - value: unref(settings).data.settings.inpainting.batch_size, - "onUpdate:value": _cache[14] || (_cache[14] = ($event) => unref(settings).data.settings.inpainting.batch_size = $event), - min: 1, - max: 9, - style: { "margin-right": "12px" } - }, null, 8, ["value"]), - createVNode(unref(NInputNumber), { - value: unref(settings).data.settings.inpainting.batch_size, - "onUpdate:value": _cache[15] || (_cache[15] = ($event) => unref(settings).data.settings.inpainting.batch_size = $event), - size: "small", - style: { "min-width": "96px", "width": "96px" }, - min: 1, - max: 9 - }, null, 8, ["value"]) - ]), - createBaseVNode("div", _hoisted_22, [ - createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { - trigger: withCtx(() => [ - _hoisted_23 - ]), - default: withCtx(() => [ - createTextVNode(" Seed is a number that represents the starting canvas of your image. If you want to create the same image as your friend, you can use the same settings and seed to do so. "), - _hoisted_24 - ]), - _: 1 - }), - createVNode(unref(NInputNumber), { - value: unref(settings).data.settings.inpainting.seed, - "onUpdate:value": _cache[16] || (_cache[16] = ($event) => unref(settings).data.settings.inpainting.seed = $event), - size: "small", - min: -1, - max: 999999999999, - style: { "flex-grow": "1" } - }, null, 8, ["value"]) - ]) - ]; - }), + default: withCtx(() => [ + createVNode(unref(Prompt), { tab: "inpainting" }), + createVNode(unref(_sfc_main$4), { type: "inpainting" }), + createBaseVNode("div", _hoisted_5, [ + _hoisted_6, + createVNode(unref(NSlider), { + value: unref(settings).data.settings.inpainting.width, + "onUpdate:value": _cache[2] || (_cache[2] = ($event) => unref(settings).data.settings.inpainting.width = $event), + min: 128, + max: 2048, + step: 8, + style: { "margin-right": "12px" } + }, null, 8, ["value"]), + createVNode(unref(NInputNumber), { + value: unref(settings).data.settings.inpainting.width, + "onUpdate:value": _cache[3] || (_cache[3] = ($event) => unref(settings).data.settings.inpainting.width = $event), + size: "small", + style: { "min-width": "96px", "width": "96px" }, + step: 8, + min: 128, + max: 2048 + }, null, 8, ["value"]) + ]), + createBaseVNode("div", _hoisted_7, [ + _hoisted_8, + createVNode(unref(NSlider), { + value: unref(settings).data.settings.inpainting.height, + "onUpdate:value": _cache[4] || (_cache[4] = ($event) => unref(settings).data.settings.inpainting.height = $event), + min: 128, + max: 2048, + step: 8, + style: { "margin-right": "12px" } + }, null, 8, ["value"]), + createVNode(unref(NInputNumber), { + value: unref(settings).data.settings.inpainting.height, + "onUpdate:value": _cache[5] || (_cache[5] = ($event) => unref(settings).data.settings.inpainting.height = $event), + size: "small", + style: { "min-width": "96px", "width": "96px" }, + step: 8, + min: 128, + max: 2048 + }, null, 8, ["value"]) + ]), + createBaseVNode("div", _hoisted_9, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_10 + ]), + default: withCtx(() => [ + createTextVNode(" Number of steps to take in the diffusion process. Higher values will result in more detailed images but will take longer to generate. There is also a point of diminishing returns around 100 steps. "), + _hoisted_11 + ]), + _: 1 + }), + createVNode(unref(NSlider), { + value: unref(settings).data.settings.inpainting.steps, + "onUpdate:value": _cache[6] || (_cache[6] = ($event) => unref(settings).data.settings.inpainting.steps = $event), + min: 5, + max: 300, + style: { "margin-right": "12px" } + }, null, 8, ["value"]), + createVNode(unref(NInputNumber), { + value: unref(settings).data.settings.inpainting.steps, + "onUpdate:value": _cache[7] || (_cache[7] = ($event) => unref(settings).data.settings.inpainting.steps = $event), + size: "small", + style: { "min-width": "96px", "width": "96px" }, + min: 5, + max: 300 + }, null, 8, ["value"]) + ]), + createVNode(unref(_sfc_main$6), { tab: "inpainting" }), + createVNode(unref(_sfc_main$7), { tab: "inpainting" }), + createBaseVNode("div", _hoisted_12, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_13 + ]), + default: withCtx(() => [ + createTextVNode(" How much should the masked are be changed from the original ") + ]), + _: 1 + }), + createVNode(unref(NSlider), { + value: unref(settings).data.settings.inpainting.strength, + "onUpdate:value": _cache[8] || (_cache[8] = ($event) => unref(settings).data.settings.inpainting.strength = $event), + min: 0, + max: 1, + step: 0.01, + style: { "margin-right": "12px" } + }, null, 8, ["value"]), + createVNode(unref(NInputNumber), { + value: unref(settings).data.settings.inpainting.strength, + "onUpdate:value": _cache[9] || (_cache[9] = ($event) => unref(settings).data.settings.inpainting.strength = $event), + size: "small", + style: { "min-width": "96px", "width": "96px" }, + min: 0, + max: 1, + step: 0.01 + }, null, 8, ["value"]) + ]), + createBaseVNode("div", _hoisted_14, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_15 + ]), + default: withCtx(() => [ + createTextVNode(" Number of images to generate after each other. ") + ]), + _: 1 + }), + createVNode(unref(NSlider), { + value: unref(settings).data.settings.inpainting.batch_count, + "onUpdate:value": _cache[10] || (_cache[10] = ($event) => unref(settings).data.settings.inpainting.batch_count = $event), + min: 1, + max: 9, + style: { "margin-right": "12px" } + }, null, 8, ["value"]), + createVNode(unref(NInputNumber), { + value: unref(settings).data.settings.inpainting.batch_count, + "onUpdate:value": _cache[11] || (_cache[11] = ($event) => unref(settings).data.settings.inpainting.batch_count = $event), + size: "small", + style: { "min-width": "96px", "width": "96px" }, + min: 1, + max: 9 + }, null, 8, ["value"]) + ]), + createBaseVNode("div", _hoisted_16, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_17 + ]), + default: withCtx(() => [ + createTextVNode(" Number of images to generate in paralel. ") + ]), + _: 1 + }), + createVNode(unref(NSlider), { + value: unref(settings).data.settings.inpainting.batch_size, + "onUpdate:value": _cache[12] || (_cache[12] = ($event) => unref(settings).data.settings.inpainting.batch_size = $event), + min: 1, + max: 9, + style: { "margin-right": "12px" } + }, null, 8, ["value"]), + createVNode(unref(NInputNumber), { + value: unref(settings).data.settings.inpainting.batch_size, + "onUpdate:value": _cache[13] || (_cache[13] = ($event) => unref(settings).data.settings.inpainting.batch_size = $event), + size: "small", + style: { "min-width": "96px", "width": "96px" }, + min: 1, + max: 9 + }, null, 8, ["value"]) + ]), + createBaseVNode("div", _hoisted_18, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_19 + ]), + default: withCtx(() => [ + createTextVNode(" Seed is a number that represents the starting canvas of your image. If you want to create the same image as your friend, you can use the same settings and seed to do so. "), + _hoisted_20 + ]), + _: 1 + }), + createVNode(unref(NInputNumber), { + value: unref(settings).data.settings.inpainting.seed, + "onUpdate:value": _cache[14] || (_cache[14] = ($event) => unref(settings).data.settings.inpainting.seed = $event), + size: "small", + min: -1, + max: 999999999999, + style: { "flex-grow": "1" } + }, null, 8, ["value"]) + ]) + ]), _: 1 }) ]), _: 1 - }) + }), + createVNode(unref(_sfc_main$9), { tab: "inpainting" }), + createVNode(unref(_sfc_main$a), { tab: "inpainting" }) ]), _: 1 }), createVNode(unref(NGi), null, { default: withCtx(() => [ - createVNode(unref(_sfc_main$7), { generate }), - createVNode(unref(_sfc_main$8), { + createVNode(unref(_sfc_main$b), { generate }), + createVNode(unref(_sfc_main$c), { "current-image": unref(global).state.inpainting.currentImage, images: unref(global).state.inpainting.images, data: unref(settings).data.settings.inpainting, - onImageClicked: _cache[17] || (_cache[17] = ($event) => unref(global).state.inpainting.currentImage = $event) + onImageClicked: _cache[15] || (_cache[15] = ($event) => unref(global).state.inpainting.currentImage = $event) }, null, 8, ["current-image", "images", "data"]), - createVNode(unref(_sfc_main$9), { + createVNode(unref(_sfc_main$d), { style: { "margin-top": "12px" }, "gen-data": unref(global).state.inpainting.genData }, null, 8, ["gen-data"]) @@ -2017,7 +1977,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({ }; } }); -const Inpainting = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-7963dde9"]]); +const Inpainting = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-23b19530"]]); const _sfc_main = /* @__PURE__ */ defineComponent({ __name: "Image2ImageView", setup(__props) { diff --git a/frontend/dist/assets/ImageBrowserView.js b/frontend/dist/assets/ImageBrowserView.js index e600d20c5..6214a48df 100644 --- a/frontend/dist/assets/ImageBrowserView.js +++ b/frontend/dist/assets/ImageBrowserView.js @@ -1,9 +1,97 @@ -import { d as defineComponent, b6 as useCssVars, a as useState, u as useSettings, R as inject, z as ref, c as computed, bI as urlFromPath, b8 as reactive, b9 as onMounted, q as onUnmounted, o as openBlock, j as createElementBlock, f as createBaseVNode, g as createVNode, h as unref, w as withCtx, F as Fragment, L as renderList, b7 as themeOverridesKey, t as serverUrl, J as NInput, B as NIcon, bd as NModal, s as NGrid, r as NGi, A as NButton, k as createTextVNode, M as NScrollbar, e as createBlock, by as convertToTextString, C as toDisplayString, m as createCommentVNode, bJ as diffusersSchedulerTuple, _ as _export_sfc } from "./index.js"; +import { d as defineComponent, o as openBlock, a as createElementBlock, b as createBaseVNode, b8 as useCssVars, l as useState, u as useSettings, S as inject, B as ref, c as computed, bN as urlFromPath, ba as reactive, bb as onMounted, s as onUnmounted, e as createVNode, f as unref, w as withCtx, F as Fragment, M as renderList, b9 as themeOverridesKey, x as serverUrl, J as NInput, D as NIcon, bh as NModal, v as NGrid, t as NGi, C as NButton, h as createTextVNode, O as NScrollbar, g as createBlock, bC as convertToTextString, E as toDisplayString, k as createCommentVNode, bO as diffusersSchedulerTuple, _ as _export_sfc } from "./index.js"; import { D as Download, _ as _sfc_main$1 } from "./SendOutputTo.vue_vue_type_script_setup_true_lang.js"; -import { G as GridOutline } from "./GridOutline.js"; import { N as NImage, T as TrashBin } from "./TrashBin.js"; -import { a as NSlider } from "./Switch.js"; +import { N as NSlider } from "./Slider.js"; import { N as NDescriptionsItem, a as NDescriptions } from "./DescriptionsItem.js"; +import "./Switch.js"; +const _hoisted_1$1 = { + xmlns: "http://www.w3.org/2000/svg", + "xmlns:xlink": "http://www.w3.org/1999/xlink", + viewBox: "0 0 512 512" +}; +const _hoisted_2$1 = /* @__PURE__ */ createBaseVNode( + "rect", + { + x: "48", + y: "48", + width: "176", + height: "176", + rx: "20", + ry: "20", + fill: "none", + stroke: "currentColor", + "stroke-linecap": "round", + "stroke-linejoin": "round", + "stroke-width": "32" + }, + null, + -1 + /* HOISTED */ +); +const _hoisted_3$1 = /* @__PURE__ */ createBaseVNode( + "rect", + { + x: "288", + y: "48", + width: "176", + height: "176", + rx: "20", + ry: "20", + fill: "none", + stroke: "currentColor", + "stroke-linecap": "round", + "stroke-linejoin": "round", + "stroke-width": "32" + }, + null, + -1 + /* HOISTED */ +); +const _hoisted_4$1 = /* @__PURE__ */ createBaseVNode( + "rect", + { + x: "48", + y: "288", + width: "176", + height: "176", + rx: "20", + ry: "20", + fill: "none", + stroke: "currentColor", + "stroke-linecap": "round", + "stroke-linejoin": "round", + "stroke-width": "32" + }, + null, + -1 + /* HOISTED */ +); +const _hoisted_5 = /* @__PURE__ */ createBaseVNode( + "rect", + { + x: "288", + y: "288", + width: "176", + height: "176", + rx: "20", + ry: "20", + fill: "none", + stroke: "currentColor", + "stroke-linecap": "round", + "stroke-linejoin": "round", + "stroke-width": "32" + }, + null, + -1 + /* HOISTED */ +); +const _hoisted_6 = [_hoisted_2$1, _hoisted_3$1, _hoisted_4$1, _hoisted_5]; +const GridOutline = defineComponent({ + name: "GridOutline", + render: function render(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$1, _hoisted_6); + } +}); const _hoisted_1 = { style: { "width": "calc(100vw - 98px)", "height": "48px", "border-bottom": "#505050 1px solid", "margin-top": "52px", "display": "flex", "justify-content": "end", "align-items": "center", "padding-right": "24px", "position": "fixed", "top": "0", "z-index": "1" }, class: "top-bar" diff --git a/frontend/dist/assets/ImageOutput.vue_vue_type_script_setup_true_lang.js b/frontend/dist/assets/ImageOutput.vue_vue_type_script_setup_true_lang.js index 57bc1e1e5..d3bb917d7 100644 --- a/frontend/dist/assets/ImageOutput.vue_vue_type_script_setup_true_lang.js +++ b/frontend/dist/assets/ImageOutput.vue_vue_type_script_setup_true_lang.js @@ -1,4 +1,4 @@ -import { d as defineComponent, z as ref, a as useState, o as openBlock, e as createBlock, w as withCtx, h as unref, r as NGi, g as createVNode, B as NIcon, k as createTextVNode, A as NButton, m as createCommentVNode, s as NGrid, c as computed, f as createBaseVNode, j as createElementBlock, F as Fragment, L as renderList, M as NScrollbar, n as NCard } from "./index.js"; +import { d as defineComponent, B as ref, l as useState, o as openBlock, g as createBlock, w as withCtx, f as unref, t as NGi, e as createVNode, D as NIcon, h as createTextVNode, C as NButton, k as createCommentVNode, v as NGrid, c as computed, b as createBaseVNode, a as createElementBlock, F as Fragment, M as renderList, O as NScrollbar, m as NCard } from "./index.js"; import { D as Download, _ as _sfc_main$2 } from "./SendOutputTo.vue_vue_type_script_setup_true_lang.js"; import { T as TrashBin, N as NImage } from "./TrashBin.js"; const _sfc_main$1 = /* @__PURE__ */ defineComponent({ diff --git a/frontend/dist/assets/ImageProcessingView.js b/frontend/dist/assets/ImageProcessingView.js index 413029b4f..416c2946d 100644 --- a/frontend/dist/assets/ImageProcessingView.js +++ b/frontend/dist/assets/ImageProcessingView.js @@ -1,24 +1,24 @@ -import { d as defineComponent, a as useState, u as useSettings, p as useMessage, c as computed, b as upscalerOptions, o as openBlock, j as createElementBlock, g as createVNode, w as withCtx, h as unref, r as NGi, n as NCard, N as NSpace, f as createBaseVNode, i as NSelect, l as NTooltip, k as createTextVNode, s as NGrid, t as serverUrl, v as pushScopeId, x as popScopeId, _ as _export_sfc, e as createBlock, D as NTabPane, E as NTabs } from "./index.js"; +import { d as defineComponent, l as useState, u as useSettings, r as useMessage, c as computed, L as upscalerOptions, o as openBlock, a as createElementBlock, e as createVNode, w as withCtx, f as unref, t as NGi, m as NCard, j as NSpace, b as createBaseVNode, q as NSelect, N as NTooltip, h as createTextVNode, v as NGrid, x as serverUrl, g as createBlock, n as NTabPane, p as NTabs } from "./index.js"; import { _ as _sfc_main$2 } from "./GenerateSection.vue_vue_type_script_setup_true_lang.js"; import { _ as _sfc_main$3 } from "./ImageOutput.vue_vue_type_script_setup_true_lang.js"; import { I as ImageUpload } from "./ImageUpload.js"; -import { a as NSlider } from "./Switch.js"; +import { N as NSlider } from "./Slider.js"; import { N as NInputNumber } from "./InputNumber.js"; import "./SendOutputTo.vue_vue_type_script_setup_true_lang.js"; +import "./Switch.js"; import "./TrashBin.js"; import "./CloudUpload.js"; -const _withScopeId = (n) => (pushScopeId("data-v-5358ed01"), n = n(), popScopeId(), n); const _hoisted_1 = { style: { "margin": "0 12px" } }; const _hoisted_2 = { class: "flex-container" }; -const _hoisted_3 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Model", -1)); +const _hoisted_3 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Model", -1); const _hoisted_4 = { class: "flex-container" }; -const _hoisted_5 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Scale Factor", -1)); +const _hoisted_5 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Scale Factor", -1); const _hoisted_6 = { class: "flex-container" }; -const _hoisted_7 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Tile Size", -1)); +const _hoisted_7 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Tile Size", -1); const _hoisted_8 = { class: "flex-container" }; -const _hoisted_9 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Tile Padding", -1)); +const _hoisted_9 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Tile Padding", -1); const _sfc_main$1 = /* @__PURE__ */ defineComponent({ - __name: "Upscale", + __name: "ESRGAN", setup(__props) { const global = useState(); const settings = useSettings(); @@ -208,7 +208,6 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({ }; } }); -const Upscale = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-5358ed01"]]); const _sfc_main = /* @__PURE__ */ defineComponent({ __name: "ImageProcessingView", setup(__props) { @@ -225,7 +224,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({ name: "upscale" }, { default: withCtx(() => [ - createVNode(unref(Upscale)) + createVNode(unref(_sfc_main$1)) ]), _: 1 }) diff --git a/frontend/dist/assets/ImageUpload.js b/frontend/dist/assets/ImageUpload.js index 892dc106b..5753ae711 100644 --- a/frontend/dist/assets/ImageUpload.js +++ b/frontend/dist/assets/ImageUpload.js @@ -1,4 +1,4 @@ -import { d as defineComponent, z as ref, c as computed, b9 as onMounted, o as openBlock, e as createBlock, w as withCtx, f as createBaseVNode, bU as withModifiers, j as createElementBlock, g as createVNode, h as unref, B as NIcon, C as toDisplayString, n as NCard, v as pushScopeId, x as popScopeId, _ as _export_sfc } from "./index.js"; +import { d as defineComponent, B as ref, c as computed, bb as onMounted, o as openBlock, g as createBlock, w as withCtx, b as createBaseVNode, be as withModifiers, a as createElementBlock, e as createVNode, f as unref, D as NIcon, E as toDisplayString, m as NCard, y as pushScopeId, z as popScopeId, _ as _export_sfc } from "./index.js"; import { C as CloudUpload } from "./CloudUpload.js"; const _withScopeId = (n) => (pushScopeId("data-v-9ed1514f"), n = n(), popScopeId(), n); const _hoisted_1 = { class: "image-container" }; diff --git a/frontend/dist/assets/InputNumber.js b/frontend/dist/assets/InputNumber.js index 65f5be9cc..6d62eb20c 100644 --- a/frontend/dist/assets/InputNumber.js +++ b/frontend/dist/assets/InputNumber.js @@ -1,4 +1,4 @@ -import { d as defineComponent, y as h, aa as c, Q as cB, S as useConfig, T as useTheme, ad as useLocale, ar as useFormItem, z as ref, X as toRef, ae as useMergedState, as as useMemo, K as watch, ag as useRtl, c as computed, bW as rgba, J as NInput, av as resolveWrappedSlot, bX as inputNumberLight, aD as on, ai as resolveSlot, aj as NBaseIcon, bY as XButton, a$ as AddIcon, a1 as call, W as nextTick } from "./index.js"; +import { d as defineComponent, A as h, ab as c, R as cB, T as useConfig, U as useTheme, ae as useLocale, as as useFormItem, B as ref, Y as toRef, af as useMergedState, at as useMemo, K as watch, ah as useRtl, c as computed, bZ as rgba, J as NInput, aw as resolveWrappedSlot, b_ as inputNumberLight, aE as on, aj as resolveSlot, ak as NBaseIcon, b$ as XButton, b0 as AddIcon, a2 as call, X as nextTick } from "./index.js"; const RemoveIcon = defineComponent({ name: "Remove", render() { diff --git a/frontend/dist/assets/ModelPopup.vue_vue_type_script_setup_true_lang.js b/frontend/dist/assets/ModelPopup.vue_vue_type_script_setup_true_lang.js index d63e0de48..86370f87f 100644 --- a/frontend/dist/assets/ModelPopup.vue_vue_type_script_setup_true_lang.js +++ b/frontend/dist/assets/ModelPopup.vue_vue_type_script_setup_true_lang.js @@ -1,4 +1,4 @@ -import { bj as upperFirst, bk as toString, bl as createCompounder, bm as cloneVNode, a3 as provide, P as createInjectionKey, R as inject, a_ as throwError, d as defineComponent, S as useConfig, z as ref, bn as onBeforeUpdate, y as h, bo as indexMap, c as computed, b9 as onMounted, aB as onBeforeUnmount, Q as cB, at as cE, aa as c, ab as cM, a4 as keep, ae as useMergedState, X as toRef, af as watchEffect, bp as onUpdated, K as watch, W as nextTick, T as useTheme, Y as useThemeClass, aw as flatten, aL as VResizeObserver, bq as resolveSlotWithProps, br as withDirectives, bs as vShow, aX as Transition, ba as normalizeStyle, bt as getPreciseEventTarget, aD as on, aC as off, bu as carouselLight, ac as cNotM, ar as useFormItem, ah as createKey, bv as color2Class, L as renderList, aj as NBaseIcon, bw as rateLight, a1 as call, p as useMessage, u as useSettings, b8 as reactive, o as openBlock, e as createBlock, w as withCtx, g as createVNode, j as createElementBlock, h as unref, D as NTabPane, s as NGrid, r as NGi, F as Fragment, f as createBaseVNode, n as NCard, k as createTextVNode, C as toDisplayString, bx as NTag, i as NSelect, A as NButton, E as NTabs, bd as NModal, t as serverUrl } from "./index.js"; +import { bn as upperFirst, bo as toString, bp as createCompounder, bq as cloneVNode, a4 as provide, Q as createInjectionKey, S as inject, a$ as throwError, d as defineComponent, T as useConfig, B as ref, br as onBeforeUpdate, A as h, bs as indexMap, c as computed, bb as onMounted, aC as onBeforeUnmount, R as cB, au as cE, ab as c, ac as cM, a5 as keep, af as useMergedState, Y as toRef, ag as watchEffect, bt as onUpdated, K as watch, X as nextTick, U as useTheme, Z as useThemeClass, ax as flatten, aN as VResizeObserver, bu as resolveSlotWithProps, bv as withDirectives, bw as vShow, aY as Transition, bc as normalizeStyle, bx as getPreciseEventTarget, aE as on, aD as off, by as carouselLight, ad as cNotM, as as useFormItem, ai as createKey, bz as color2Class, M as renderList, ak as NBaseIcon, bA as rateLight, a2 as call, r as useMessage, u as useSettings, ba as reactive, o as openBlock, g as createBlock, w as withCtx, e as createVNode, a as createElementBlock, f as unref, n as NTabPane, v as NGrid, t as NGi, F as Fragment, b as createBaseVNode, m as NCard, h as createTextVNode, E as toDisplayString, bB as NTag, q as NSelect, C as NButton, p as NTabs, bh as NModal, x as serverUrl } from "./index.js"; import { a as NDescriptions, N as NDescriptionsItem } from "./DescriptionsItem.js"; function capitalize(string) { return upperFirst(toString(string).toLowerCase()); @@ -1697,6 +1697,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({ } }); export { + NRate as N, _sfc_main as _, nsfwIndex as n }; diff --git a/frontend/dist/assets/ModelsView.js b/frontend/dist/assets/ModelsView.js index 0356485f0..1d85d47ff 100644 --- a/frontend/dist/assets/ModelsView.js +++ b/frontend/dist/assets/ModelsView.js @@ -1,8 +1,7 @@ -import { d as defineComponent, y as h, O as replaceable, P as createInjectionKey, Q as cB, R as inject, S as useConfig, T as useTheme, U as popselectLight, c as computed, V as createTreeMate, K as watch, W as nextTick, X as toRef, Y as useThemeClass, Z as NInternalSelectMenu, $ as createTmOptions, a0 as happensIn, a1 as call, a2 as keysOf, z as ref, a3 as provide, a4 as keep, a5 as createRefSetter, a6 as mergeEventHandlers, a7 as omit, a8 as NPopover, a9 as popoverBaseProps, aa as c, ab as cM, ac as cNotM, ad as useLocale, ae as useMergedState, af as watchEffect, ag as useRtl, ah as createKey, ai as resolveSlot, J as NInput, i as NSelect, F as Fragment, aj as NBaseIcon, ak as useAdjustedTo, al as paginationLight, am as useMergedClsPrefix, an as ellipsisLight, ao as onDeactivated, l as NTooltip, ap as mergeProps, aq as useStyle, ar as useFormItem, as as useMemo, at as cE, au as radioLight, av as resolveWrappedSlot, aw as flatten$1, ax as getSlot, ay as depx, az as formatLength, A as NButton, aA as NScrollbar, aB as onBeforeUnmount, aC as off, aD as on, aE as ChevronDownIcon, aF as NDropdown, aG as pxfy, aH as get, aI as NIconSwitchTransition, aJ as NBaseLoading, aK as ChevronRightIcon, q as onUnmounted, aL as VResizeObserver, aM as warn, aN as cssrAnchorMetaName, aO as VVirtualList, aP as NEmpty, aQ as repeat, aR as beforeNextFrameOnce, aS as fadeInScaleUpTransition, aT as iconSwitchTransition, aU as insideModal, aV as insidePopover, aW as createId, aX as Transition, aY as dataTableLight, aZ as loadingBarApiInjectionKey, a_ as throwError, a$ as AddIcon, b0 as NProgress, b1 as NFadeInExpandTransition, b2 as EyeIcon, b3 as fadeInHeightExpandTransition, b4 as Teleport, b5 as uploadLight, o as openBlock, j as createElementBlock, f as createBaseVNode, b6 as useCssVars, h as unref, u as useSettings, b7 as themeOverridesKey, b8 as reactive, b9 as onMounted, g as createVNode, w as withCtx, B as NIcon, L as renderList, ba as normalizeStyle, k as createTextVNode, C as toDisplayString, bb as NText, m as createCommentVNode, _ as _export_sfc, a as useState, p as useMessage, bc as huggingfaceModelsFile, n as NCard, t as serverUrl, v as pushScopeId, x as popScopeId, N as NSpace, bd as NModal, e as createBlock, r as NGi, s as NGrid, be as NDivider, bf as Backends, D as NTabPane, E as NTabs } from "./index.js"; -import { _ as _sfc_main$5, n as nsfwIndex } from "./ModelPopup.vue_vue_type_script_setup_true_lang.js"; -import { G as GridOutline } from "./GridOutline.js"; -import { a as NSlider, N as NSwitch } from "./Switch.js"; +import { d as defineComponent, A as h, P as replaceable, Q as createInjectionKey, R as cB, S as inject, T as useConfig, U as useTheme, V as popselectLight, c as computed, W as createTreeMate, K as watch, X as nextTick, Y as toRef, Z as useThemeClass, $ as NInternalSelectMenu, a0 as createTmOptions, a1 as happensIn, a2 as call, a3 as keysOf, B as ref, a4 as provide, a5 as keep, a6 as createRefSetter, a7 as mergeEventHandlers, a8 as omit, a9 as NPopover, aa as popoverBaseProps, ab as c, ac as cM, ad as cNotM, ae as useLocale, af as useMergedState, ag as watchEffect, ah as useRtl, ai as createKey, aj as resolveSlot, J as NInput, q as NSelect, F as Fragment, ak as NBaseIcon, al as useAdjustedTo, am as paginationLight, an as useMergedClsPrefix, ao as ellipsisLight, ap as onDeactivated, N as NTooltip, aq as mergeProps, ar as useStyle, as as useFormItem, at as useMemo, au as cE, av as radioLight, aw as resolveWrappedSlot, ax as flatten$1, ay as getSlot, az as depx, aA as formatLength, C as NButton, aB as NScrollbar, aC as onBeforeUnmount, aD as off, aE as on, aF as ChevronDownIcon, aG as NDropdown, aH as pxfy, aI as get, aJ as NIconSwitchTransition, aK as NBaseLoading, aL as ChevronRightIcon, aM as cssrAnchorMetaName, s as onUnmounted, aN as VResizeObserver, aO as warn, aP as VVirtualList, aQ as NEmpty, aR as repeat, aS as beforeNextFrameOnce, aT as fadeInScaleUpTransition, aU as iconSwitchTransition, aV as insideModal, aW as insidePopover, aX as createId, aY as Transition, aZ as dataTableLight, a_ as loadingBarApiInjectionKey, a$ as throwError, b0 as AddIcon, b1 as NProgress, b2 as NFadeInExpandTransition, b3 as EyeIcon, b4 as fadeInHeightExpandTransition, b5 as Teleport, b6 as uploadLight, o as openBlock, a as createElementBlock, b as createBaseVNode, b7 as createStaticVNode, b8 as useCssVars, f as unref, b9 as themeOverridesKey, ba as reactive, bb as onMounted, e as createVNode, w as withCtx, D as NIcon, M as renderList, _ as _export_sfc, u as useSettings, k as createCommentVNode, bc as normalizeStyle, h as createTextVNode, E as toDisplayString, bd as NText, g as createBlock, be as withModifiers, l as useState, r as useMessage, bf as huggingfaceModelsFile, m as NCard, x as serverUrl, y as pushScopeId, z as popScopeId, bg as Menu, j as NSpace, bh as NModal, t as NGi, v as NGrid, bi as NDivider, bj as Backends, n as NTabPane, p as NTabs } from "./index.js"; +import { _ as _sfc_main$6, n as nsfwIndex, N as NRate } from "./ModelPopup.vue_vue_type_script_setup_true_lang.js"; import { N as NCheckboxGroup, a as NCheckbox, S as Settings } from "./Settings.js"; +import { N as NSwitch } from "./Switch.js"; import { g as getFilesFromEntries, i as isImageFile, N as NImage, d as download, a as NImageGroup, c as createSettledFileInfo, e as environmentSupportFile, m as matchType, b as createImageDataUrl, T as TrashBin } from "./TrashBin.js"; import { C as CloudUpload } from "./CloudUpload.js"; import "./DescriptionsItem.js"; @@ -1398,8 +1397,8 @@ const RenderSorter = defineComponent({ } }, render() { - const { render: render4, order } = this; - return render4({ + const { render: render7, order } = this; + return render7({ order }); } @@ -1575,8 +1574,8 @@ const RenderFilter = defineComponent({ } }, render() { - const { render: render4, active, show } = this; - return render4({ + const { render: render7, active, show } = this; + return render7({ active, show }); @@ -2786,9 +2785,9 @@ const Cell = defineComponent({ render() { const { isSummary, column, row, renderCell } = this; let cell; - const { render: render4, key, ellipsis } = column; - if (render4 && !isSummary) { - cell = render4(row, this.index); + const { render: render7, key, ellipsis } = column; + if (render7 && !isSummary) { + cell = render7(row, this.index); } else { if (isSummary) { cell = row[key].value; @@ -6398,98 +6397,164 @@ const NUpload = defineComponent({ ); } }); -const _hoisted_1$6 = { +const _hoisted_1$a = { xmlns: "http://www.w3.org/2000/svg", "xmlns:xlink": "http://www.w3.org/1999/xlink", viewBox: "0 0 512 512" }; -const _hoisted_2$6 = /* @__PURE__ */ createBaseVNode( +const _hoisted_2$a = /* @__PURE__ */ createBaseVNode( "path", { - d: "M261.56 101.28a8 8 0 0 0-11.06 0L66.4 277.15a8 8 0 0 0-2.47 5.79L63.9 448a32 32 0 0 0 32 32H192a16 16 0 0 0 16-16V328a8 8 0 0 1 8-8h80a8 8 0 0 1 8 8v136a16 16 0 0 0 16 16h96.06a32 32 0 0 0 32-32V282.94a8 8 0 0 0-2.47-5.79z", - fill: "currentColor" + fill: "none", + stroke: "currentColor", + "stroke-linecap": "round", + "stroke-linejoin": "round", + "stroke-width": "48", + d: "M112 268l144 144l144-144" }, null, -1 /* HOISTED */ ); -const _hoisted_3$6 = /* @__PURE__ */ createBaseVNode( +const _hoisted_3$8 = /* @__PURE__ */ createBaseVNode( "path", { - d: "M490.91 244.15l-74.8-71.56V64a16 16 0 0 0-16-16h-48a16 16 0 0 0-16 16v32l-57.92-55.38C272.77 35.14 264.71 32 256 32c-8.68 0-16.72 3.14-22.14 8.63l-212.7 203.5c-6.22 6-7 15.87-1.34 22.37A16 16 0 0 0 43 267.56L250.5 69.28a8 8 0 0 1 11.06 0l207.52 198.28a16 16 0 0 0 22.59-.44c6.14-6.36 5.63-16.86-.76-22.97z", - fill: "currentColor" + fill: "none", + stroke: "currentColor", + "stroke-linecap": "round", + "stroke-linejoin": "round", + "stroke-width": "48", + d: "M256 392V100" }, null, -1 /* HOISTED */ ); -const _hoisted_4$5 = [_hoisted_2$6, _hoisted_3$6]; -const Home = defineComponent({ - name: "Home", +const _hoisted_4$6 = [_hoisted_2$a, _hoisted_3$8]; +const ArrowDownOutline = defineComponent({ + name: "ArrowDownOutline", render: function render(_ctx, _cache) { - return openBlock(), createElementBlock("svg", _hoisted_1$6, _hoisted_4$5); + return openBlock(), createElementBlock("svg", _hoisted_1$a, _hoisted_4$6); } }); -const _hoisted_1$5 = { +const _hoisted_1$9 = { xmlns: "http://www.w3.org/2000/svg", "xmlns:xlink": "http://www.w3.org/1999/xlink", viewBox: "0 0 512 512" }; -const _hoisted_2$5 = /* @__PURE__ */ createBaseVNode( +const _hoisted_2$9 = /* @__PURE__ */ createStaticVNode('+
+
', 5); +const _hoisted_7$1 = [_hoisted_2$9]; +const EyeOffOutline = defineComponent({ + name: "EyeOffOutline", + render: function render2(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$9, _hoisted_7$1); + } +}); +const _hoisted_1$8 = { + xmlns: "http://www.w3.org/2000/svg", + "xmlns:xlink": "http://www.w3.org/1999/xlink", + viewBox: "0 0 512 512" +}; +const _hoisted_2$8 = /* @__PURE__ */ createBaseVNode( "path", { + d: "M255.66 112c-77.94 0-157.89 45.11-220.83 135.33a16 16 0 0 0-.27 17.77C82.92 340.8 161.8 400 255.66 400c92.84 0 173.34-59.38 221.79-135.25a16.14 16.14 0 0 0 0-17.47C428.89 172.28 347.8 112 255.66 112z", fill: "none", stroke: "currentColor", "stroke-linecap": "round", - "stroke-miterlimit": "10", - "stroke-width": "48", - d: "M88 152h336" + "stroke-linejoin": "round", + "stroke-width": "32" }, null, -1 /* HOISTED */ ); -const _hoisted_3$5 = /* @__PURE__ */ createBaseVNode( - "path", +const _hoisted_3$7 = /* @__PURE__ */ createBaseVNode( + "circle", { + cx: "256", + cy: "256", + r: "80", fill: "none", stroke: "currentColor", - "stroke-linecap": "round", "stroke-miterlimit": "10", - "stroke-width": "48", - d: "M88 256h336" + "stroke-width": "32" }, null, -1 /* HOISTED */ ); -const _hoisted_4$4 = /* @__PURE__ */ createBaseVNode( +const _hoisted_4$5 = [_hoisted_2$8, _hoisted_3$7]; +const EyeOutline = defineComponent({ + name: "EyeOutline", + render: function render3(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$8, _hoisted_4$5); + } +}); +const _hoisted_1$7 = { + xmlns: "http://www.w3.org/2000/svg", + "xmlns:xlink": "http://www.w3.org/1999/xlink", + viewBox: "0 0 512 512" +}; +const _hoisted_2$7 = /* @__PURE__ */ createBaseVNode( "path", { + d: "M352.92 80C288 80 256 144 256 144s-32-64-96.92-64c-52.76 0-94.54 44.14-95.08 96.81c-1.1 109.33 86.73 187.08 183 252.42a16 16 0 0 0 18 0c96.26-65.34 184.09-143.09 183-252.42c-.54-52.67-42.32-96.81-95.08-96.81z", fill: "none", stroke: "currentColor", "stroke-linecap": "round", - "stroke-miterlimit": "10", - "stroke-width": "48", - d: "M88 360h336" + "stroke-linejoin": "round", + "stroke-width": "32" }, null, -1 /* HOISTED */ ); -const _hoisted_5$2 = [_hoisted_2$5, _hoisted_3$5, _hoisted_4$4]; -const Menu = defineComponent({ - name: "Menu", - render: function render2(_ctx, _cache) { - return openBlock(), createElementBlock("svg", _hoisted_1$5, _hoisted_5$2); +const _hoisted_3$6 = [_hoisted_2$7]; +const HeartOutline = defineComponent({ + name: "HeartOutline", + render: function render4(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$7, _hoisted_3$6); } }); -const _hoisted_1$4 = { +const _hoisted_1$6 = { + xmlns: "http://www.w3.org/2000/svg", + "xmlns:xlink": "http://www.w3.org/1999/xlink", + viewBox: "0 0 512 512" +}; +const _hoisted_2$6 = /* @__PURE__ */ createBaseVNode( + "path", + { + d: "M261.56 101.28a8 8 0 0 0-11.06 0L66.4 277.15a8 8 0 0 0-2.47 5.79L63.9 448a32 32 0 0 0 32 32H192a16 16 0 0 0 16-16V328a8 8 0 0 1 8-8h80a8 8 0 0 1 8 8v136a16 16 0 0 0 16 16h96.06a32 32 0 0 0 32-32V282.94a8 8 0 0 0-2.47-5.79z", + fill: "currentColor" + }, + null, + -1 + /* HOISTED */ +); +const _hoisted_3$5 = /* @__PURE__ */ createBaseVNode( + "path", + { + d: "M490.91 244.15l-74.8-71.56V64a16 16 0 0 0-16-16h-48a16 16 0 0 0-16 16v32l-57.92-55.38C272.77 35.14 264.71 32 256 32c-8.68 0-16.72 3.14-22.14 8.63l-212.7 203.5c-6.22 6-7 15.87-1.34 22.37A16 16 0 0 0 43 267.56L250.5 69.28a8 8 0 0 1 11.06 0l207.52 198.28a16 16 0 0 0 22.59-.44c6.14-6.36 5.63-16.86-.76-22.97z", + fill: "currentColor" + }, + null, + -1 + /* HOISTED */ +); +const _hoisted_4$4 = [_hoisted_2$6, _hoisted_3$5]; +const Home = defineComponent({ + name: "Home", + render: function render5(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$6, _hoisted_4$4); + } +}); +const _hoisted_1$5 = { xmlns: "http://www.w3.org/2000/svg", "xmlns:xlink": "http://www.w3.org/1999/xlink", viewBox: "0 0 512 512" }; -const _hoisted_2$4 = /* @__PURE__ */ createBaseVNode( +const _hoisted_2$5 = /* @__PURE__ */ createBaseVNode( "path", { d: "M221.09 64a157.09 157.09 0 1 0 157.09 157.09A157.1 157.1 0 0 0 221.09 64z", @@ -6516,36 +6581,30 @@ const _hoisted_3$4 = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_4$3 = [_hoisted_2$4, _hoisted_3$4]; +const _hoisted_4$3 = [_hoisted_2$5, _hoisted_3$4]; const SearchOutline = defineComponent({ name: "SearchOutline", - render: function render3(_ctx, _cache) { - return openBlock(), createElementBlock("svg", _hoisted_1$4, _hoisted_4$3); + render: function render6(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$5, _hoisted_4$3); } }); -const _hoisted_1$3 = { +const _hoisted_1$4 = { style: { "width": "calc(100vw - 98px)", "height": "48px", "border-bottom": "#505050 1px solid", "display": "flex", "justify-content": "end", "align-items": "center", "padding-right": "24px", "position": "sticky", "top": "52px", "z-index": "1" }, class: "top-bar" }; -const _hoisted_2$3 = { +const _hoisted_2$4 = { class: "main-container", style: { "margin": "12px", "margin-top": "8px" } }; -const _hoisted_3$3 = { class: "image-grid" }; -const _hoisted_4$2 = { key: 0 }; -const _hoisted_5$1 = ["src", "onClick"]; -const _hoisted_6$1 = { style: { "position": "absolute", "width": "100%", "bottom": "0", "padding": "0 8px", "min-height": "32px", "overflow": "hidden", "box-sizing": "border-box", "backdrop-filter": "blur(12px)" } }; -const _sfc_main$4 = /* @__PURE__ */ defineComponent({ +const _sfc_main$5 = /* @__PURE__ */ defineComponent({ __name: "CivitAIDownload", setup(__props) { useCssVars((_ctx) => { var _a, _b; return { - "6b1de230": unref(settings).data.settings.frontend.image_browser_columns, - "a55b21d8": (_b = (_a = unref(theme)) == null ? void 0 : _a.Card) == null ? void 0 : _b.color + "66e6d45b": (_b = (_a = unref(theme)) == null ? void 0 : _a.Card) == null ? void 0 : _b.color }; }); - const settings = useSettings(); const theme = inject(themeOverridesKey); const loadingLock = ref(false); const currentPage = ref(1); @@ -6553,32 +6612,18 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({ const types = ref(""); const currentModel = ref(null); const showModal = ref(false); + const gridRef = ref(null); const scrollComponent = ref(null); const itemFilter = ref(""); - const gridColumnRefs = ref([]); - const currentColumn = ref(0); - const currentRowIndex = ref(0); + const currentIndex = ref(0); const loadingBar = useLoadingBar(); - function imgClick(column_index, item_index) { - currentRowIndex.value = item_index; - currentColumn.value = column_index; - const item = columns.value[column_index][item_index]; + function imgClick(item_index) { + const item = modelData[item_index]; + currentIndex.value = item_index; currentModel.value = item; showModal.value = true; } const modelData = reactive([]); - const columns = computed(() => { - const cols = []; - for (let i = 0; i < settings.data.settings.frontend.image_browser_columns; i++) { - cols.push([]); - } - for (let i = 0; i < modelData.length; i++) { - cols[i % settings.data.settings.frontend.image_browser_columns].push( - modelData[i] - ); - } - return cols; - }); async function refreshImages() { currentPage.value = 1; modelData.splice(0, modelData.length); @@ -6604,16 +6649,11 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({ return; } let minBox = 0; - for (const col of gridColumnRefs.value) { - const lastImg = col.childNodes.item( - col.childNodes.length - 2 - ); - const bottombbox = lastImg.getBoundingClientRect().bottom; - if (minBox === 0) { - minBox = bottombbox; - } else if (bottombbox < minBox) { - minBox = bottombbox; - } + const bottombbox = gridRef.value.getBoundingClientRect().bottom; + if (minBox === 0) { + minBox = bottombbox; + } else if (bottombbox < minBox) { + minBox = bottombbox; } if (minBox - 50 < window.innerHeight) { if (loadingLock.value) { @@ -6646,18 +6686,16 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({ } }; function moveImage(direction) { - const numColumns = settings.data.settings.frontend.image_browser_columns; + if (currentModel.value === null) { + return; + } if (direction === -1) { - if (currentColumn.value > 0) { - imgClick(currentColumn.value - 1, currentRowIndex.value); - } else { - imgClick(numColumns - 1, currentRowIndex.value - 1); + if (currentIndex.value > 0) { + imgClick(currentIndex.value - 1); } } else if (direction === 1) { - if (currentColumn.value < numColumns - 1) { - imgClick(currentColumn.value + 1, currentRowIndex.value); - } else { - imgClick(0, currentRowIndex.value + 1); + if (currentIndex.value < modelData.length - 1) { + imgClick(currentIndex.value + 1); } } } @@ -6694,12 +6732,12 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({ refreshImages(); return (_ctx, _cache) => { return openBlock(), createElementBlock(Fragment, null, [ - createVNode(unref(_sfc_main$5), { + createVNode(unref(_sfc_main$6), { model: currentModel.value, "show-modal": showModal.value, "onUpdate:showModal": _cache[0] || (_cache[0] = ($event) => showModal.value = $event) }, null, 8, ["model", "show-modal"]), - createBaseVNode("div", _hoisted_1$3, [ + createBaseVNode("div", _hoisted_1$4, [ createVNode(unref(NInput), { value: itemFilter.value, "onUpdate:value": _cache[1] || (_cache[1] = ($event) => itemFilter.value = $event), @@ -6729,28 +6767,20 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({ value: types.value, "onUpdate:value": _cache[3] || (_cache[3] = ($event) => types.value = $event), options: [ - { - value: "", - label: "All" - }, + { value: "", label: "All" }, { value: "Checkpoint", label: "Checkpoint" }, - { - value: "TextualInversion", - label: "Textual Inversion" - }, - { - value: "LORA", - label: "LORA" - } + { value: "TextualInversion", label: "Textual Inversion" }, + { value: "LORA", label: "LORA" }, + { value: "VAE", label: "VAE" } ], style: { "margin-right": "4px" } }, null, 8, ["value"]), createVNode(unref(NButton), { onClick: refreshImages, - style: { "margin-right": "24px" }, + style: { "margin-right": "24px", "padding": "0px 48px" }, type: "primary" }, { default: withCtx(() => [ @@ -6762,78 +6792,169 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({ }) ]), _: 1 - }), - createVNode(unref(NIcon), { - style: { "margin-right": "12px" }, - size: "22" - }, { - default: withCtx(() => [ - createVNode(unref(GridOutline)) - ]), - _: 1 - }), - createVNode(unref(NSlider), { - style: { "width": "30vw" }, - min: 1, - max: 10, - value: unref(settings).data.settings.frontend.image_browser_columns, - "onUpdate:value": _cache[4] || (_cache[4] = ($event) => unref(settings).data.settings.frontend.image_browser_columns = $event) - }, null, 8, ["value"]) + }) ]), - createBaseVNode("div", _hoisted_2$3, [ + createBaseVNode("div", _hoisted_2$4, [ createBaseVNode("div", { ref_key: "scrollComponent", ref: scrollComponent }, [ - createBaseVNode("div", _hoisted_3$3, [ - (openBlock(true), createElementBlock(Fragment, null, renderList(columns.value, (column, column_index) => { + createBaseVNode("div", { + class: "image-grid", + ref_key: "gridRef", + ref: gridRef + }, [ + (openBlock(true), createElementBlock(Fragment, null, renderList(modelData, (item, item_index) => { return openBlock(), createElementBlock("div", { - key: column_index, - class: "image-column", - ref_for: true, - ref_key: "gridColumnRefs", - ref: gridColumnRefs + key: item_index, + style: { "border-radius": "20px", "position": "relative", "border": "1px solid #505050", "overflow": "hidden", "margin-bottom": "8px" } }, [ - (openBlock(true), createElementBlock(Fragment, null, renderList(column, (item, item_index) => { - var _a; - return openBlock(), createElementBlock("div", { - key: item_index, - style: { "border-radius": "20px", "position": "relative", "border": "1px solid #505050", "overflow": "hidden", "margin-bottom": "8px" } - }, [ - ((_a = item.modelVersions[0].images[0]) == null ? void 0 : _a.url) ? (openBlock(), createElementBlock("div", _hoisted_4$2, [ - createBaseVNode("img", { - src: item.modelVersions[0].images[0].url, - style: normalizeStyle({ - width: "100%", - height: "auto", - minHeight: "200px", - cursor: "pointer", - borderRadius: "8px", - filter: unref(nsfwIndex)(item.modelVersions[0].images[0].nsfw) > unref(settings).data.settings.frontend.nsfw_ok_threshold ? "blur(12px)" : "none" - }), - onClick: ($event) => imgClick(column_index, item_index) - }, null, 12, _hoisted_5$1), - createBaseVNode("div", _hoisted_6$1, [ - createVNode(unref(NText), { depth: 2 }, { - default: withCtx(() => [ - createTextVNode(toDisplayString(item.name), 1) - ]), - _: 2 - }, 1024) - ]) - ])) : createCommentVNode("", true) - ]); - }), 128)) + createVNode(unref(_sfc_main$4), { + item, + item_index, + onImgClick: imgClick + }, null, 8, ["item", "item_index"]) ]); }), 128)) - ]) + ], 512) ], 512) ]) ], 64); }; } }); -const CivitAIDownload = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-e10a07d2"]]); +const CivitAIDownload = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-89afc237"]]); +const _hoisted_1$3 = ["src"]; +const _hoisted_2$3 = { style: { "position": "absolute", "width": "100%", "bottom": "0", "padding": "0 8px 0 12px", "min-height": "32px", "overflow": "hidden", "box-sizing": "border-box", "backdrop-filter": "blur(12px)", "background-color": "rgba(0, 0, 0, 0.3)" } }; +const _hoisted_3$3 = { style: { "display": "flex", "flex-direction": "column" } }; +const _hoisted_4$2 = { style: { "display": "flex", "justify-content": "space-between", "align-items": "center" } }; +const _hoisted_5$1 = { style: { "display": "flex", "align-items": "center" } }; +const _sfc_main$4 = /* @__PURE__ */ defineComponent({ + __name: "CivitAIModelImage", + props: { + item: { + type: Object, + required: true + }, + item_index: { + type: Number, + required: true + } + }, + emits: ["imgClick"], + setup(__props, { emit }) { + const props = __props; + const settings = useSettings(); + const filterOverride = ref(false); + function convertToShortValue(count) { + if (count < 1e3) + return count; + if (count < 1e6) + return `${(count / 1e3).toFixed(1)}k`; + return `${(count / 1e6).toFixed(1)}m`; + } + return (_ctx, _cache) => { + var _a; + return openBlock(), createElementBlock("div", { + style: { "height": "500px", "cursor": "pointer" }, + onClick: _cache[1] || (_cache[1] = ($event) => emit("imgClick", props.item_index)) + }, [ + createBaseVNode("div", { + style: normalizeStyle({ + filter: unref(nsfwIndex)(props.item.modelVersions[0].images[0].nsfw) > unref(settings).data.settings.frontend.nsfw_ok_threshold && !filterOverride.value ? "blur(32px)" : "none", + width: "100%", + height: "100%" + }) + }, [ + ((_a = props.item.modelVersions[0].images[0]) == null ? void 0 : _a.url) ? (openBlock(), createElementBlock("img", { + key: 0, + src: props.item.modelVersions[0].images[0].url, + style: { + width: "100%", + height: "100%", + objectFit: "cover" + } + }, null, 8, _hoisted_1$3)) : createCommentVNode("", true) + ], 4), + createBaseVNode("div", _hoisted_2$3, [ + createBaseVNode("div", _hoisted_3$3, [ + createBaseVNode("div", _hoisted_4$2, [ + createVNode(unref(NRate), { + value: props.item.stats.rating, + "allow-half": "", + size: "small" + }, null, 8, ["value"]), + createBaseVNode("div", _hoisted_5$1, [ + createVNode(unref(NIcon), { + color: "white", + size: "18" + }, { + default: withCtx(() => [ + createVNode(unref(ArrowDownOutline)) + ]), + _: 1 + }), + createVNode(unref(NText), { + size: "small", + style: { "color": "white" } + }, { + default: withCtx(() => [ + createTextVNode(toDisplayString(convertToShortValue(props.item.stats.downloadCount)), 1) + ]), + _: 1 + }), + createVNode(unref(NIcon), { + color: "white", + size: "18", + style: { "margin-left": "4px" } + }, { + default: withCtx(() => [ + createVNode(unref(HeartOutline)) + ]), + _: 1 + }), + createVNode(unref(NText), { + size: "small", + style: { "color": "white" } + }, { + default: withCtx(() => [ + createTextVNode(toDisplayString(convertToShortValue(props.item.stats.favoriteCount)), 1) + ]), + _: 1 + }) + ]) + ]), + createVNode(unref(NText), { depth: 2 }, { + default: withCtx(() => [ + createTextVNode(toDisplayString(__props.item.name), 1) + ]), + _: 1 + }) + ]) + ]), + unref(nsfwIndex)(props.item.modelVersions[0].images[0].nsfw) > unref(settings).data.settings.frontend.nsfw_ok_threshold ? (openBlock(), createBlock(unref(NButton), { + key: 0, + type: "error", + style: { "position": "absolute", "top": "0", "right": "0px", "padding": "0 16px 0 12px", "overflow": "hidden", "box-sizing": "border-box", "border-radius": "0px 0px 0px 8px" }, + onClick: _cache[0] || (_cache[0] = withModifiers(($event) => filterOverride.value = !filterOverride.value, ["stop"])) + }, { + default: withCtx(() => [ + createVNode(unref(NIcon), { + color: "white", + size: "18" + }, { + default: withCtx(() => [ + filterOverride.value ? (openBlock(), createBlock(unref(EyeOffOutline), { key: 0 })) : (openBlock(), createBlock(unref(EyeOutline), { key: 1 })) + ]), + _: 1 + }) + ]), + _: 1 + })) : createCommentVNode("", true) + ]); + }; + } +}); const _withScopeId = (n) => (pushScopeId("data-v-b405f046"), n = n(), popScopeId(), n); const _hoisted_1$2 = { style: { "margin": "18px" } }; const _hoisted_2$2 = { style: { "width": "100%", "display": "inline-flex", "justify-content": "space-between", "align-items": "center" } }; diff --git a/frontend/dist/assets/SendOutputTo.vue_vue_type_script_setup_true_lang.js b/frontend/dist/assets/SendOutputTo.vue_vue_type_script_setup_true_lang.js index beac36b50..4dfd8d921 100644 --- a/frontend/dist/assets/SendOutputTo.vue_vue_type_script_setup_true_lang.js +++ b/frontend/dist/assets/SendOutputTo.vue_vue_type_script_setup_true_lang.js @@ -1,4 +1,4 @@ -import { d as defineComponent, o as openBlock, j as createElementBlock, f as createBaseVNode, bK as useRouter, u as useSettings, a as useState, z as ref, b8 as reactive, K as watch, c as computed, g as createVNode, w as withCtx, h as unref, n as NCard, A as NButton, k as createTextVNode, M as NScrollbar, F as Fragment, L as renderList, C as toDisplayString, be as NDivider, bd as NModal, e as createBlock, r as NGi, s as NGrid, m as createCommentVNode } from "./index.js"; +import { d as defineComponent, o as openBlock, a as createElementBlock, b as createBaseVNode, bP as useRouter, u as useSettings, l as useState, B as ref, ba as reactive, K as watch, c as computed, e as createVNode, w as withCtx, f as unref, m as NCard, C as NButton, h as createTextVNode, O as NScrollbar, F as Fragment, M as renderList, E as toDisplayString, bi as NDivider, bh as NModal, g as createBlock, t as NGi, v as NGrid, k as createCommentVNode } from "./index.js"; import { N as NSwitch } from "./Switch.js"; const _hoisted_1$3 = { xmlns: "http://www.w3.org/2000/svg", diff --git a/frontend/dist/assets/Settings.js b/frontend/dist/assets/Settings.js index a780d5357..28edde7de 100644 --- a/frontend/dist/assets/Settings.js +++ b/frontend/dist/assets/Settings.js @@ -1,4 +1,4 @@ -import { y as h, d as defineComponent, S as useConfig, ar as useFormItem, z as ref, c as computed, ae as useMergedState, a3 as provide, X as toRef, P as createInjectionKey, a1 as call, aa as c, Q as cB, ab as cM, at as cE, aT as iconSwitchTransition, aU as insideModal, aV as insidePopover, R as inject, as as useMemo, T as useTheme, bH as checkboxLight, ag as useRtl, ah as createKey, Y as useThemeClass, aW as createId, av as resolveWrappedSlot, aI as NIconSwitchTransition, aD as on, o as openBlock, j as createElementBlock, f as createBaseVNode } from "./index.js"; +import { A as h, d as defineComponent, T as useConfig, as as useFormItem, B as ref, c as computed, af as useMergedState, a4 as provide, Y as toRef, Q as createInjectionKey, a2 as call, ab as c, R as cB, ac as cM, au as cE, aU as iconSwitchTransition, aV as insideModal, aW as insidePopover, S as inject, at as useMemo, U as useTheme, bM as checkboxLight, ah as useRtl, ai as createKey, Z as useThemeClass, aX as createId, aw as resolveWrappedSlot, aJ as NIconSwitchTransition, aE as on, o as openBlock, a as createElementBlock, b as createBaseVNode } from "./index.js"; const CheckMark = h( "svg", { viewBox: "0 0 64 64", class: "check-icon" }, diff --git a/frontend/dist/assets/SettingsView.js b/frontend/dist/assets/SettingsView.js index da6bca715..cb6a2717a 100644 --- a/frontend/dist/assets/SettingsView.js +++ b/frontend/dist/assets/SettingsView.js @@ -1,9 +1,10 @@ -import { d as defineComponent, u as useSettings, o as openBlock, e as createBlock, w as withCtx, g as createVNode, h as unref, J as NInput, i as NSelect, n as NCard, b8 as reactive, c as computed, by as convertToTextString, z as ref, t as serverUrl, K as watch, a as useState, f as createBaseVNode, j as createElementBlock, L as renderList, bb as NText, k as createTextVNode, C as toDisplayString, F as Fragment, m as createCommentVNode, D as NTabPane, E as NTabs, R as inject, bz as themeKey, A as NButton, l as NTooltip, p as useMessage, bA as useNotification, q as onUnmounted, bB as defaultSettings } from "./index.js"; -import { a as NFormItem, _ as _sfc_main$h, N as NForm } from "./SamplerPicker.vue_vue_type_script_setup_true_lang.js"; -import { N as NSwitch, a as NSlider } from "./Switch.js"; +import { d as defineComponent, u as useSettings, o as openBlock, g as createBlock, w as withCtx, e as createVNode, f as unref, J as NInput, q as NSelect, m as NCard, ba as reactive, c as computed, bC as convertToTextString, B as ref, x as serverUrl, K as watch, l as useState, b as createBaseVNode, a as createElementBlock, M as renderList, bd as NText, h as createTextVNode, E as toDisplayString, F as Fragment, k as createCommentVNode, n as NTabPane, p as NTabs, S as inject, bD as themeKey, C as NButton, N as NTooltip, r as useMessage, bE as useNotification, s as onUnmounted, bF as defaultSettings } from "./index.js"; +import { c as NFormItem, _ as _sfc_main$g, b as _sfc_main$h, a as _sfc_main$i, N as NForm } from "./Upscale.vue_vue_type_script_setup_true_lang.js"; +import { N as NSwitch } from "./Switch.js"; import { N as NInputNumber } from "./InputNumber.js"; +import { N as NSlider } from "./Slider.js"; import "./Settings.js"; -const _sfc_main$g = /* @__PURE__ */ defineComponent({ +const _sfc_main$f = /* @__PURE__ */ defineComponent({ __name: "ControlNetSettings", setup(__props) { const settings = useSettings(); @@ -177,9 +178,17 @@ const _sfc_main$g = /* @__PURE__ */ defineComponent({ ]), _: 1 }), - createVNode(_sfc_main$h, { + createVNode(unref(_sfc_main$g), { type: "controlnet", target: "defaultSettings" + }), + createVNode(unref(_sfc_main$h), { + tab: "controlnet", + target: "defaultSettings" + }), + createVNode(unref(_sfc_main$i), { + tab: "controlnet", + target: "defaultSettings" }) ]), _: 1 @@ -190,7 +199,7 @@ const _sfc_main$g = /* @__PURE__ */ defineComponent({ }; } }); -const _sfc_main$f = /* @__PURE__ */ defineComponent({ +const _sfc_main$e = /* @__PURE__ */ defineComponent({ __name: "ImageBrowserSettings", setup(__props) { const settings = useSettings(); @@ -220,7 +229,7 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({ }; } }); -const _sfc_main$e = /* @__PURE__ */ defineComponent({ +const _sfc_main$d = /* @__PURE__ */ defineComponent({ __name: "ImageToImageSettings", setup(__props) { const settings = useSettings(); @@ -354,9 +363,17 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent({ ]), _: 1 }), - createVNode(_sfc_main$h, { + createVNode(unref(_sfc_main$g), { type: "img2img", target: "defaultSettings" + }), + createVNode(unref(_sfc_main$h), { + tab: "img2img", + target: "defaultSettings" + }), + createVNode(unref(_sfc_main$i), { + tab: "img2img", + target: "defaultSettings" }) ]), _: 1 @@ -367,7 +384,7 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent({ }; } }); -const _sfc_main$d = /* @__PURE__ */ defineComponent({ +const _sfc_main$c = /* @__PURE__ */ defineComponent({ __name: "InpaintingSettings", setup(__props) { const settings = useSettings(); @@ -488,9 +505,17 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({ ]), _: 1 }), - createVNode(_sfc_main$h, { + createVNode(unref(_sfc_main$g), { type: "inpainting", target: "defaultSettings" + }), + createVNode(unref(_sfc_main$h), { + tab: "inpainting", + target: "defaultSettings" + }), + createVNode(unref(_sfc_main$i), { + tab: "inpainting", + target: "defaultSettings" }) ]), _: 1 @@ -501,7 +526,7 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({ }; } }); -const _sfc_main$c = /* @__PURE__ */ defineComponent({ +const _sfc_main$b = /* @__PURE__ */ defineComponent({ __name: "TextToImageSettings", setup(__props) { const settings = useSettings(); @@ -622,9 +647,17 @@ const _sfc_main$c = /* @__PURE__ */ defineComponent({ ]), _: 1 }), - createVNode(_sfc_main$h, { + createVNode(unref(_sfc_main$g), { type: "txt2img", target: "defaultSettings" + }), + createVNode(unref(_sfc_main$h), { + tab: "txt2img", + target: "defaultSettings" + }), + createVNode(unref(_sfc_main$i), { + tab: "txt2img", + target: "defaultSettings" }) ]), _: 1 @@ -635,7 +668,7 @@ const _sfc_main$c = /* @__PURE__ */ defineComponent({ }; } }); -const _sfc_main$b = /* @__PURE__ */ defineComponent({ +const _sfc_main$a = /* @__PURE__ */ defineComponent({ __name: "ThemeSettings", setup(__props) { const settings = useSettings(); @@ -711,7 +744,7 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({ } }); const _hoisted_1$3 = { style: { "width": "100%" } }; -const _sfc_main$a = /* @__PURE__ */ defineComponent({ +const _sfc_main$9 = /* @__PURE__ */ defineComponent({ __name: "AutoloadSettings", setup(__props) { const settings = useSettings(); @@ -836,7 +869,7 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({ }; } }); -const _sfc_main$9 = /* @__PURE__ */ defineComponent({ +const _sfc_main$8 = /* @__PURE__ */ defineComponent({ __name: "BotSettings", setup(__props) { const settings = useSettings(); @@ -891,7 +924,7 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({ }; } }); -const _sfc_main$8 = /* @__PURE__ */ defineComponent({ +const _sfc_main$7 = /* @__PURE__ */ defineComponent({ __name: "FilesSettings", setup(__props) { const settings = useSettings(); @@ -970,114 +1003,6 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({ }; } }); -const _sfc_main$7 = /* @__PURE__ */ defineComponent({ - __name: "FlagsSettings", - setup(__props) { - const settings = useSettings(); - return (_ctx, _cache) => { - return openBlock(), createBlock(unref(NCard), { title: "Hi-res fix" }, { - default: withCtx(() => [ - createVNode(unref(NForm), null, { - default: withCtx(() => [ - createVNode(unref(NFormItem), { - label: "Scale", - "label-placement": "left" - }, { - default: withCtx(() => [ - createVNode(unref(NInputNumber), { - value: unref(settings).defaultSettings.flags.highres.scale, - "onUpdate:value": _cache[0] || (_cache[0] = ($event) => unref(settings).defaultSettings.flags.highres.scale = $event) - }, null, 8, ["value"]) - ]), - _: 1 - }), - createVNode(unref(NFormItem), { - label: "Scaling Mode", - "label-placement": "left" - }, { - default: withCtx(() => [ - createVNode(unref(NSelect), { - options: [ - { - label: "Nearest", - value: "nearest" - }, - { - label: "Linear", - value: "linear" - }, - { - label: "Bilinear", - value: "bilinear" - }, - { - label: "Bicubic", - value: "bicubic" - }, - { - label: "Bislerp (Original, slow)", - value: "bislerp-original" - }, - { - label: "Bislerp (Tortured, fast)", - value: "bislerp-tortured" - }, - { - label: "Nearest Exact", - value: "nearest-exact" - } - ], - value: unref(settings).defaultSettings.flags.highres.latent_scale_mode, - "onUpdate:value": _cache[1] || (_cache[1] = ($event) => unref(settings).defaultSettings.flags.highres.latent_scale_mode = $event) - }, null, 8, ["options", "value"]) - ]), - _: 1 - }), - createVNode(unref(NFormItem), { - label: "Strength", - "label-placement": "left" - }, { - default: withCtx(() => [ - createVNode(unref(NInputNumber), { - value: unref(settings).defaultSettings.flags.highres.strength, - "onUpdate:value": _cache[2] || (_cache[2] = ($event) => unref(settings).defaultSettings.flags.highres.strength = $event) - }, null, 8, ["value"]) - ]), - _: 1 - }), - createVNode(unref(NFormItem), { - label: "Steps", - "label-placement": "left" - }, { - default: withCtx(() => [ - createVNode(unref(NInputNumber), { - value: unref(settings).defaultSettings.flags.highres.steps, - "onUpdate:value": _cache[3] || (_cache[3] = ($event) => unref(settings).defaultSettings.flags.highres.steps = $event) - }, null, 8, ["value"]) - ]), - _: 1 - }), - createVNode(unref(NFormItem), { - label: "Antialiased", - "label-placement": "left" - }, { - default: withCtx(() => [ - createVNode(unref(NSwitch), { - value: unref(settings).defaultSettings.flags.highres.antialiased, - "onUpdate:value": _cache[4] || (_cache[4] = ($event) => unref(settings).defaultSettings.flags.highres.antialiased = $event) - }, null, 8, ["value"]) - ]), - _: 1 - }) - ]), - _: 1 - }) - ]), - _: 1 - }); - }; - } -}); const _sfc_main$6 = /* @__PURE__ */ defineComponent({ __name: "FrontendSettings", setup(__props) { @@ -1086,31 +1011,31 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({ default: withCtx(() => [ createVNode(unref(NTabPane), { name: "Text to Image" }, { default: withCtx(() => [ - createVNode(unref(_sfc_main$c)) + createVNode(unref(_sfc_main$b)) ]), _: 1 }), createVNode(unref(NTabPane), { name: "Image to Image" }, { default: withCtx(() => [ - createVNode(unref(_sfc_main$e)) + createVNode(unref(_sfc_main$d)) ]), _: 1 }), createVNode(unref(NTabPane), { name: "ControlNet" }, { default: withCtx(() => [ - createVNode(unref(_sfc_main$g)) + createVNode(unref(_sfc_main$f)) ]), _: 1 }), createVNode(unref(NTabPane), { name: "Inpainting" }, { default: withCtx(() => [ - createVNode(unref(_sfc_main$d)) + createVNode(unref(_sfc_main$c)) ]), _: 1 }), createVNode(unref(NTabPane), { name: "Image Browser" }, { default: withCtx(() => [ - createVNode(unref(_sfc_main$f)) + createVNode(unref(_sfc_main$e)) ]), _: 1 }) @@ -1237,7 +1162,7 @@ const _hoisted_1$2 = { key: 0, class: "flex-container" }; -const _hoisted_2$1 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Subquadratic chunk size (affects VRAM usage)", -1); +const _hoisted_2$2 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Subquadratic chunk size (affects VRAM usage)", -1); const _hoisted_3$1 = { "flex-direction": "row" }; const _hoisted_4$1 = { key: 1 }; const _hoisted_5$1 = { key: 2 }; @@ -1319,7 +1244,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ _: 1 }), unref(settings).defaultSettings.api.attention_processor == "subquadratic" ? (openBlock(), createElementBlock("div", _hoisted_1$2, [ - _hoisted_2$1, + _hoisted_2$2, createVNode(unref(NSlider), { value: unref(settings).defaultSettings.api.subquadratic_size, "onUpdate:value": _cache[2] || (_cache[2] = ($event) => unref(settings).defaultSettings.api.subquadratic_size = $event), @@ -1638,18 +1563,42 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ } }); const _hoisted_1$1 = { key: 1 }; -const _hoisted_2 = { class: "flex-container" }; +const _hoisted_2$1 = { class: "flex-container" }; const _hoisted_3 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Hypertile UNet chunk size", -1); const _hoisted_4 = /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, 'PyTorch ONLY. Recommended sizes are 1/4th your desired resolution or plain "256."', -1); const _hoisted_5 = /* @__PURE__ */ createBaseVNode("b", null, "LARGE (1024x1024+)", -1); const _hoisted_6 = { key: 2 }; const _hoisted_7 = { key: 3 }; -const _hoisted_8 = { key: 4 }; +const _hoisted_8 = { key: 0 }; +const _hoisted_9 = { style: { "margin-bottom": "12px", "display": "flex", "flex-direction": "row", "flex-wrap": "wrap", "gap": "8px 0" } }; const _sfc_main$2 = /* @__PURE__ */ defineComponent({ __name: "ReproducibilitySettings", setup(__props) { const settings = useSettings(); const global = useState(); + const enabledCfg = computed({ + get() { + return settings.defaultSettings.api.cfg_rescale_threshold != "off"; + }, + set(value) { + if (!value) { + settings.defaultSettings.api.cfg_rescale_threshold = "off"; + } else { + settings.defaultSettings.api.cfg_rescale_threshold = 10; + } + } + }); + const cfgRescaleValue = computed({ + get() { + if (settings.defaultSettings.api.cfg_rescale_threshold == "off") { + return 1; + } + return settings.defaultSettings.api.cfg_rescale_threshold; + }, + set(value) { + settings.defaultSettings.api.cfg_rescale_threshold = value; + } + }); const availableDtypes = computed(() => { if (settings.defaultSettings.api.device.includes("cpu")) { return global.state.capabilities.supported_precisions_cpu.map((value) => { @@ -1661,6 +1610,12 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({ case "float16": description = "16-bit float"; break; + case "float8_e5m2": + description = "8-bit float (5-data)"; + break; + case "float8_e4m3fn": + description = "8-bit float (4-data)"; + break; default: description = "16-bit bfloat"; } @@ -1676,6 +1631,12 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({ case "float16": description = "16-bit float"; break; + case "float8_e5m2": + description = "8-bit float (5-data)"; + break; + case "float8_e4m3fn": + description = "8-bit float (4-data)"; + break; default: description = "16-bit bfloat"; } @@ -1820,7 +1781,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({ _: 1 }), unref(settings).defaultSettings.api.hypertile ? (openBlock(), createElementBlock("div", _hoisted_1$1, [ - createBaseVNode("div", _hoisted_2, [ + createBaseVNode("div", _hoisted_2$1, [ createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { trigger: withCtx(() => [ _hoisted_3 @@ -2004,60 +1965,178 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({ ]), _: 1 }), - unref(settings).defaultSettings.api.free_u ? (openBlock(), createElementBlock("div", _hoisted_8, [ - createVNode(unref(NFormItem), { - label: "Free U S1", - "label-placement": "left" - }, { - default: withCtx(() => [ - createVNode(unref(NInputNumber), { - value: unref(settings).defaultSettings.api.free_u_s1, - "onUpdate:value": _cache[19] || (_cache[19] = ($event) => unref(settings).defaultSettings.api.free_u_s1 = $event), - step: 0.01 - }, null, 8, ["value"]) - ]), - _: 1 - }), - createVNode(unref(NFormItem), { - label: "Free U S2", - "label-placement": "left" - }, { - default: withCtx(() => [ - createVNode(unref(NInputNumber), { - value: unref(settings).defaultSettings.api.free_u_s2, - "onUpdate:value": _cache[20] || (_cache[20] = ($event) => unref(settings).defaultSettings.api.free_u_s2 = $event), - step: 0.01 - }, null, 8, ["value"]) - ]), - _: 1 - }), - createVNode(unref(NFormItem), { - label: "Free U B1", - "label-placement": "left" - }, { - default: withCtx(() => [ - createVNode(unref(NInputNumber), { - value: unref(settings).defaultSettings.api.free_u_b1, - "onUpdate:value": _cache[21] || (_cache[21] = ($event) => unref(settings).defaultSettings.api.free_u_b1 = $event), - step: 0.01 - }, null, 8, ["value"]) - ]), - _: 1 - }), - createVNode(unref(NFormItem), { - label: "Free U B2", - "label-placement": "left" - }, { - default: withCtx(() => [ - createVNode(unref(NInputNumber), { - value: unref(settings).defaultSettings.api.free_u_b2, - "onUpdate:value": _cache[22] || (_cache[22] = ($event) => unref(settings).defaultSettings.api.free_u_b2 = $event), - step: 0.01 - }, null, 8, ["value"]) - ]), - _: 1 - }) - ])) : createCommentVNode("", true) + createVNode(unref(NCard), { + bordered: false, + style: { "margin-bottom": "12px" } + }, { + default: withCtx(() => [ + unref(settings).defaultSettings.api.free_u ? (openBlock(), createElementBlock("div", _hoisted_8, [ + createBaseVNode("div", _hoisted_9, [ + createVNode(unref(NButton), { + style: { "margin-left": "12px" }, + ghost: "", + type: "info", + onClick: _cache[19] || (_cache[19] = () => { + unref(settings).defaultSettings.api.free_u_b1 = 1.3; + unref(settings).defaultSettings.api.free_u_b2 = 1.4; + unref(settings).defaultSettings.api.free_u_s1 = 0.9; + unref(settings).defaultSettings.api.free_u_s2 = 0.2; + }) + }, { + default: withCtx(() => [ + createTextVNode(" Apply SD 1.4 Defaults ") + ]), + _: 1 + }), + createVNode(unref(NButton), { + style: { "margin-left": "12px" }, + ghost: "", + type: "warning", + onClick: _cache[20] || (_cache[20] = () => { + unref(settings).defaultSettings.api.free_u_b1 = 1.5; + unref(settings).defaultSettings.api.free_u_b2 = 1.6; + unref(settings).defaultSettings.api.free_u_s1 = 0.9; + unref(settings).defaultSettings.api.free_u_s2 = 0.2; + }) + }, { + default: withCtx(() => [ + createTextVNode(" Apply SD 1.5 Defaults ") + ]), + _: 1 + }), + createVNode(unref(NButton), { + style: { "margin-left": "12px" }, + ghost: "", + type: "success", + onClick: _cache[21] || (_cache[21] = () => { + unref(settings).defaultSettings.api.free_u_b1 = 1.4; + unref(settings).defaultSettings.api.free_u_b2 = 1.6; + unref(settings).defaultSettings.api.free_u_s1 = 0.9; + unref(settings).defaultSettings.api.free_u_s2 = 0.2; + }) + }, { + default: withCtx(() => [ + createTextVNode(" Apply SD 2.1 Defaults ") + ]), + _: 1 + }), + createVNode(unref(NButton), { + style: { "margin-left": "12px" }, + ghost: "", + type: "error", + onClick: _cache[22] || (_cache[22] = () => { + unref(settings).defaultSettings.api.free_u_b1 = 1.3; + unref(settings).defaultSettings.api.free_u_b2 = 1.4; + unref(settings).defaultSettings.api.free_u_s1 = 0.9; + unref(settings).defaultSettings.api.free_u_s2 = 0.2; + }) + }, { + default: withCtx(() => [ + createTextVNode(" Apply SDXL Defaults ") + ]), + _: 1 + }) + ]), + createVNode(unref(NFormItem), { + label: "Free U B1", + "label-placement": "left" + }, { + default: withCtx(() => [ + createVNode(unref(NInputNumber), { + value: unref(settings).defaultSettings.api.free_u_b1, + "onUpdate:value": _cache[23] || (_cache[23] = ($event) => unref(settings).defaultSettings.api.free_u_b1 = $event), + step: 0.01 + }, null, 8, ["value"]) + ]), + _: 1 + }), + createVNode(unref(NFormItem), { + label: "Free U B2", + "label-placement": "left" + }, { + default: withCtx(() => [ + createVNode(unref(NInputNumber), { + value: unref(settings).defaultSettings.api.free_u_b2, + "onUpdate:value": _cache[24] || (_cache[24] = ($event) => unref(settings).defaultSettings.api.free_u_b2 = $event), + step: 0.01 + }, null, 8, ["value"]) + ]), + _: 1 + }), + createVNode(unref(NFormItem), { + label: "Free U S1", + "label-placement": "left" + }, { + default: withCtx(() => [ + createVNode(unref(NInputNumber), { + value: unref(settings).defaultSettings.api.free_u_s1, + "onUpdate:value": _cache[25] || (_cache[25] = ($event) => unref(settings).defaultSettings.api.free_u_s1 = $event), + step: 0.01 + }, null, 8, ["value"]) + ]), + _: 1 + }), + createVNode(unref(NFormItem), { + label: "Free U S2", + "label-placement": "left" + }, { + default: withCtx(() => [ + createVNode(unref(NInputNumber), { + value: unref(settings).defaultSettings.api.free_u_s2, + "onUpdate:value": _cache[26] || (_cache[26] = ($event) => unref(settings).defaultSettings.api.free_u_s2 = $event), + step: 0.01 + }, null, 8, ["value"]) + ]), + _: 1 + }) + ])) : createCommentVNode("", true) + ]), + _: 1 + }), + createVNode(unref(NFormItem), { + label: "Upcast VAE", + "label-placement": "left" + }, { + default: withCtx(() => [ + createVNode(unref(NSwitch), { + value: unref(settings).defaultSettings.api.upcast_vae, + "onUpdate:value": _cache[27] || (_cache[27] = ($event) => unref(settings).defaultSettings.api.upcast_vae = $event) + }, null, 8, ["value"]) + ]), + _: 1 + }), + createVNode(unref(NFormItem), { + label: "Apply unsharp mask", + "label-placement": "left" + }, { + default: withCtx(() => [ + createVNode(unref(NSwitch), { + value: unref(settings).defaultSettings.api.apply_unsharp_mask, + "onUpdate:value": _cache[28] || (_cache[28] = ($event) => unref(settings).defaultSettings.api.apply_unsharp_mask = $event) + }, null, 8, ["value"]) + ]), + _: 1 + }), + createVNode(unref(NFormItem), { + label: "CFG Rescale Threshold", + "label-placement": "left" + }, { + default: withCtx(() => [ + createVNode(unref(NSlider), { + value: cfgRescaleValue.value, + "onUpdate:value": _cache[29] || (_cache[29] = ($event) => cfgRescaleValue.value = $event), + disabled: !enabledCfg.value, + min: 2, + max: 30, + step: 0.5 + }, null, 8, ["value", "disabled"]), + createVNode(unref(NSwitch), { + value: enabledCfg.value, + "onUpdate:value": _cache[30] || (_cache[30] = ($event) => enabledCfg.value = $event) + }, null, 8, ["value"]) + ]), + _: 1 + }) ]), _: 1 }); @@ -2136,6 +2215,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({ } }); const _hoisted_1 = { class: "main-container" }; +const _hoisted_2 = { style: { "width": "100%", "display": "flex", "justify-content": "end", "margin-bottom": "12px" } }; const _sfc_main = /* @__PURE__ */ defineComponent({ __name: "SettingsView", setup(__props) { @@ -2154,25 +2234,16 @@ const _sfc_main = /* @__PURE__ */ defineComponent({ } function saveSettings() { saving.value = true; - fetch(`${serverUrl}/api/settings/save`, { - method: "POST", - headers: { - "Content-Type": "application/json" - }, - body: JSON.stringify(settings.defaultSettings) - }).then((res) => { - if (res.status === 200) { - message.success("Settings saved successfully"); - } else { - res.json().then((data) => { - message.error("Error while saving settings"); - notification.create({ - title: "Error while saving settings", - content: data.message, - type: "error" - }); - }); - } + settings.saveSettings().then(() => { + message.success("Settings saved"); + }).catch((e) => { + message.error("Failed to save settings"); + notification.create({ + title: "Failed to save settings", + content: e, + type: "error" + }); + }).finally(() => { saving.value = false; }); } @@ -2181,43 +2252,43 @@ const _sfc_main = /* @__PURE__ */ defineComponent({ }); return (_ctx, _cache) => { return openBlock(), createElementBlock("div", _hoisted_1, [ + createBaseVNode("div", _hoisted_2, [ + createVNode(unref(NButton), { + type: "error", + ghost: "", + style: { "margin-right": "12px" }, + onClick: resetSettings + }, { + default: withCtx(() => [ + createTextVNode("Reset Settings") + ]), + _: 1 + }), + createVNode(unref(NButton), { + type: "success", + ghost: "", + onClick: saveSettings, + loading: saving.value + }, { + default: withCtx(() => [ + createTextVNode("Save Settings") + ]), + _: 1 + }, 8, ["loading"]) + ]), createVNode(unref(NCard), null, { default: withCtx(() => [ createVNode(unref(NTabs), null, { - suffix: withCtx(() => [ - createVNode(unref(NButton), { - type: "error", - ghost: "", - style: { "margin-right": "12px" }, - onClick: resetSettings - }, { - default: withCtx(() => [ - createTextVNode("Reset Settings") - ]), - _: 1 - }), - createVNode(unref(NButton), { - type: "success", - ghost: "", - onClick: saveSettings, - loading: saving.value - }, { - default: withCtx(() => [ - createTextVNode("Save Settings") - ]), - _: 1 - }, 8, ["loading"]) - ]), default: withCtx(() => [ createVNode(unref(NTabPane), { name: "Autoload" }, { default: withCtx(() => [ - createVNode(unref(_sfc_main$a)) + createVNode(unref(_sfc_main$9)) ]), _: 1 }), createVNode(unref(NTabPane), { name: "Files & Saving" }, { default: withCtx(() => [ - createVNode(unref(_sfc_main$8)) + createVNode(unref(_sfc_main$7)) ]), _: 1 }), @@ -2247,7 +2318,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({ }), createVNode(unref(NTabPane), { name: "Bot" }, { default: withCtx(() => [ - createVNode(unref(_sfc_main$9)) + createVNode(unref(_sfc_main$8)) ]), _: 1 }), @@ -2257,15 +2328,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({ ]), _: 1 }), - createVNode(unref(NTabPane), { name: "Flags" }, { - default: withCtx(() => [ - createVNode(unref(_sfc_main$7)) - ]), - _: 1 - }), createVNode(unref(NTabPane), { name: "Theme" }, { default: withCtx(() => [ - createVNode(unref(_sfc_main$b)) + createVNode(unref(_sfc_main$a)) ]), _: 1 }), diff --git a/frontend/dist/assets/Slider.js b/frontend/dist/assets/Slider.js new file mode 100644 index 000000000..5d516c602 --- /dev/null +++ b/frontend/dist/assets/Slider.js @@ -0,0 +1,727 @@ +import { B as ref, br as onBeforeUpdate, ab as c, R as cB, ac as cM, au as cE, aT as fadeInScaleUpTransition, aV as insideModal, aW as insidePopover, d as defineComponent, T as useConfig, U as useTheme, as as useFormItem, c as computed, Y as toRef, af as useMergedState, K as watch, X as nextTick, aC as onBeforeUnmount, Z as useThemeClass, bT as isMounted, al as useAdjustedTo, A as h, c0 as VBinder, c1 as VTarget, aj as resolveSlot, c2 as VFollower, aY as Transition, c3 as sliderLight, aE as on, aD as off, a2 as call } from "./index.js"; +function isTouchEvent(e) { + return window.TouchEvent && e instanceof window.TouchEvent; +} +function useRefs() { + const refs = ref(/* @__PURE__ */ new Map()); + const setRefs = (index) => (el) => { + refs.value.set(index, el); + }; + onBeforeUpdate(() => { + refs.value.clear(); + }); + return [refs, setRefs]; +} +const style = c([cB("slider", ` + display: block; + padding: calc((var(--n-handle-size) - var(--n-rail-height)) / 2) 0; + position: relative; + z-index: 0; + width: 100%; + cursor: pointer; + user-select: none; + -webkit-user-select: none; + `, [cM("reverse", [cB("slider-handles", [cB("slider-handle-wrapper", ` + transform: translate(50%, -50%); + `)]), cB("slider-dots", [cB("slider-dot", ` + transform: translateX(50%, -50%); + `)]), cM("vertical", [cB("slider-handles", [cB("slider-handle-wrapper", ` + transform: translate(-50%, -50%); + `)]), cB("slider-marks", [cB("slider-mark", ` + transform: translateY(calc(-50% + var(--n-dot-height) / 2)); + `)]), cB("slider-dots", [cB("slider-dot", ` + transform: translateX(-50%) translateY(0); + `)])])]), cM("vertical", ` + padding: 0 calc((var(--n-handle-size) - var(--n-rail-height)) / 2); + width: var(--n-rail-width-vertical); + height: 100%; + `, [cB("slider-handles", ` + top: calc(var(--n-handle-size) / 2); + right: 0; + bottom: calc(var(--n-handle-size) / 2); + left: 0; + `, [cB("slider-handle-wrapper", ` + top: unset; + left: 50%; + transform: translate(-50%, 50%); + `)]), cB("slider-rail", ` + height: 100%; + `, [cE("fill", ` + top: unset; + right: 0; + bottom: unset; + left: 0; + `)]), cM("with-mark", ` + width: var(--n-rail-width-vertical); + margin: 0 32px 0 8px; + `), cB("slider-marks", ` + top: calc(var(--n-handle-size) / 2); + right: unset; + bottom: calc(var(--n-handle-size) / 2); + left: 22px; + font-size: var(--n-mark-font-size); + `, [cB("slider-mark", ` + transform: translateY(50%); + white-space: nowrap; + `)]), cB("slider-dots", ` + top: calc(var(--n-handle-size) / 2); + right: unset; + bottom: calc(var(--n-handle-size) / 2); + left: 50%; + `, [cB("slider-dot", ` + transform: translateX(-50%) translateY(50%); + `)])]), cM("disabled", ` + cursor: not-allowed; + opacity: var(--n-opacity-disabled); + `, [cB("slider-handle", ` + cursor: not-allowed; + `)]), cM("with-mark", ` + width: 100%; + margin: 8px 0 32px 0; + `), c("&:hover", [cB("slider-rail", { + backgroundColor: "var(--n-rail-color-hover)" +}, [cE("fill", { + backgroundColor: "var(--n-fill-color-hover)" +})]), cB("slider-handle", { + boxShadow: "var(--n-handle-box-shadow-hover)" +})]), cM("active", [cB("slider-rail", { + backgroundColor: "var(--n-rail-color-hover)" +}, [cE("fill", { + backgroundColor: "var(--n-fill-color-hover)" +})]), cB("slider-handle", { + boxShadow: "var(--n-handle-box-shadow-hover)" +})]), cB("slider-marks", ` + position: absolute; + top: 18px; + left: calc(var(--n-handle-size) / 2); + right: calc(var(--n-handle-size) / 2); + `, [cB("slider-mark", ` + position: absolute; + transform: translateX(-50%); + white-space: nowrap; + `)]), cB("slider-rail", ` + width: 100%; + position: relative; + height: var(--n-rail-height); + background-color: var(--n-rail-color); + transition: background-color .3s var(--n-bezier); + border-radius: calc(var(--n-rail-height) / 2); + `, [cE("fill", ` + position: absolute; + top: 0; + bottom: 0; + border-radius: calc(var(--n-rail-height) / 2); + transition: background-color .3s var(--n-bezier); + background-color: var(--n-fill-color); + `)]), cB("slider-handles", ` + position: absolute; + top: 0; + right: calc(var(--n-handle-size) / 2); + bottom: 0; + left: calc(var(--n-handle-size) / 2); + `, [cB("slider-handle-wrapper", ` + outline: none; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); + cursor: pointer; + display: flex; + `, [cB("slider-handle", ` + height: var(--n-handle-size); + width: var(--n-handle-size); + border-radius: 50%; + overflow: hidden; + transition: box-shadow .2s var(--n-bezier), background-color .3s var(--n-bezier); + background-color: var(--n-handle-color); + box-shadow: var(--n-handle-box-shadow); + `, [c("&:hover", ` + box-shadow: var(--n-handle-box-shadow-hover); + `)]), c("&:focus", [cB("slider-handle", ` + box-shadow: var(--n-handle-box-shadow-focus); + `, [c("&:hover", ` + box-shadow: var(--n-handle-box-shadow-active); + `)])])])]), cB("slider-dots", ` + position: absolute; + top: 50%; + left: calc(var(--n-handle-size) / 2); + right: calc(var(--n-handle-size) / 2); + `, [cM("transition-disabled", [cB("slider-dot", "transition: none;")]), cB("slider-dot", ` + transition: + border-color .3s var(--n-bezier), + box-shadow .3s var(--n-bezier), + background-color .3s var(--n-bezier); + position: absolute; + transform: translate(-50%, -50%); + height: var(--n-dot-height); + width: var(--n-dot-width); + border-radius: var(--n-dot-border-radius); + overflow: hidden; + box-sizing: border-box; + border: var(--n-dot-border); + background-color: var(--n-dot-color); + `, [cM("active", "border: var(--n-dot-border-active);")])])]), cB("slider-handle-indicator", ` + font-size: var(--n-font-size); + padding: 6px 10px; + border-radius: var(--n-indicator-border-radius); + color: var(--n-indicator-text-color); + background-color: var(--n-indicator-color); + box-shadow: var(--n-indicator-box-shadow); + `, [fadeInScaleUpTransition()]), cB("slider-handle-indicator", ` + font-size: var(--n-font-size); + padding: 6px 10px; + border-radius: var(--n-indicator-border-radius); + color: var(--n-indicator-text-color); + background-color: var(--n-indicator-color); + box-shadow: var(--n-indicator-box-shadow); + `, [cM("top", ` + margin-bottom: 12px; + `), cM("right", ` + margin-left: 12px; + `), cM("bottom", ` + margin-top: 12px; + `), cM("left", ` + margin-right: 12px; + `), fadeInScaleUpTransition()]), insideModal(cB("slider", [cB("slider-dot", "background-color: var(--n-dot-color-modal);")])), insidePopover(cB("slider", [cB("slider-dot", "background-color: var(--n-dot-color-popover);")]))]); +const eventButtonLeft = 0; +const sliderProps = Object.assign(Object.assign({}, useTheme.props), { to: useAdjustedTo.propTo, defaultValue: { + type: [Number, Array], + default: 0 +}, marks: Object, disabled: { + type: Boolean, + default: void 0 +}, formatTooltip: Function, keyboard: { + type: Boolean, + default: true +}, min: { + type: Number, + default: 0 +}, max: { + type: Number, + default: 100 +}, step: { + type: [Number, String], + default: 1 +}, range: Boolean, value: [Number, Array], placement: String, showTooltip: { + type: Boolean, + default: void 0 +}, tooltip: { + type: Boolean, + default: true +}, vertical: Boolean, reverse: Boolean, "onUpdate:value": [Function, Array], onUpdateValue: [Function, Array] }); +const NSlider = defineComponent({ + name: "Slider", + props: sliderProps, + setup(props) { + const { mergedClsPrefixRef, namespaceRef, inlineThemeDisabled } = useConfig(props); + const themeRef = useTheme("Slider", "-slider", style, sliderLight, props, mergedClsPrefixRef); + const handleRailRef = ref(null); + const [handleRefs, setHandleRefs] = useRefs(); + const [followerRefs, setFollowerRefs] = useRefs(); + const followerEnabledIndexSetRef = ref(/* @__PURE__ */ new Set()); + const formItem = useFormItem(props); + const { mergedDisabledRef } = formItem; + const precisionRef = computed(() => { + const { step } = props; + if (Number(step) <= 0 || step === "mark") + return 0; + const stepString = step.toString(); + let precision = 0; + if (stepString.includes(".")) { + precision = stepString.length - stepString.indexOf(".") - 1; + } + return precision; + }); + const uncontrolledValueRef = ref(props.defaultValue); + const controlledValueRef = toRef(props, "value"); + const mergedValueRef = useMergedState(controlledValueRef, uncontrolledValueRef); + const arrifiedValueRef = computed(() => { + const { value: mergedValue } = mergedValueRef; + return (props.range ? mergedValue : [mergedValue]).map(clampValue); + }); + const handleCountExceeds2Ref = computed(() => arrifiedValueRef.value.length > 2); + const mergedPlacementRef = computed(() => { + return props.placement === void 0 ? props.vertical ? "right" : "top" : props.placement; + }); + const markValuesRef = computed(() => { + const { marks } = props; + return marks ? Object.keys(marks).map(parseFloat) : null; + }); + const activeIndexRef = ref(-1); + const previousIndexRef = ref(-1); + const hoverIndexRef = ref(-1); + const draggingRef = ref(false); + const dotTransitionDisabledRef = ref(false); + const styleDirectionRef = computed(() => { + const { vertical, reverse } = props; + const left = reverse ? "right" : "left"; + const bottom = reverse ? "top" : "bottom"; + return vertical ? bottom : left; + }); + const fillStyleRef = computed(() => { + if (handleCountExceeds2Ref.value) + return; + const values = arrifiedValueRef.value; + const start = valueToPercentage(props.range ? Math.min(...values) : props.min); + const end = valueToPercentage(props.range ? Math.max(...values) : values[0]); + const { value: styleDirection } = styleDirectionRef; + return props.vertical ? { + [styleDirection]: `${start}%`, + height: `${end - start}%` + } : { + [styleDirection]: `${start}%`, + width: `${end - start}%` + }; + }); + const markInfosRef = computed(() => { + const mergedMarks = []; + const { marks } = props; + if (marks) { + const orderValues = arrifiedValueRef.value.slice(); + orderValues.sort((a, b) => a - b); + const { value: styleDirection } = styleDirectionRef; + const { value: handleCountExceeds2 } = handleCountExceeds2Ref; + const { range } = props; + const isActive = handleCountExceeds2 ? () => false : (num) => range ? num >= orderValues[0] && num <= orderValues[orderValues.length - 1] : num <= orderValues[0]; + for (const key of Object.keys(marks)) { + const num = Number(key); + mergedMarks.push({ + active: isActive(num), + label: marks[key], + style: { + [styleDirection]: `${valueToPercentage(num)}%` + } + }); + } + } + return mergedMarks; + }); + function getHandleStyle(value, index) { + const percentage = valueToPercentage(value); + const { value: styleDirection } = styleDirectionRef; + return { + [styleDirection]: `${percentage}%`, + zIndex: index === activeIndexRef.value ? 1 : 0 + }; + } + function isShowTooltip(index) { + return props.showTooltip || hoverIndexRef.value === index || activeIndexRef.value === index && draggingRef.value; + } + function shouldKeepTooltipTransition(index) { + if (!draggingRef.value) + return true; + return !(activeIndexRef.value === index && previousIndexRef.value === index); + } + function focusActiveHandle(index) { + var _a; + if (~index) { + activeIndexRef.value = index; + (_a = handleRefs.value.get(index)) === null || _a === void 0 ? void 0 : _a.focus(); + } + } + function syncPosition() { + followerRefs.value.forEach((inst, index) => { + if (isShowTooltip(index)) + inst.syncPosition(); + }); + } + function doUpdateValue(value) { + const { "onUpdate:value": _onUpdateValue, onUpdateValue } = props; + const { nTriggerFormInput, nTriggerFormChange } = formItem; + if (onUpdateValue) + call(onUpdateValue, value); + if (_onUpdateValue) + call(_onUpdateValue, value); + uncontrolledValueRef.value = value; + nTriggerFormInput(); + nTriggerFormChange(); + } + function dispatchValueUpdate(value) { + const { range } = props; + if (range) { + if (Array.isArray(value)) { + const { value: oldValues } = arrifiedValueRef; + if (value.join() !== oldValues.join()) { + doUpdateValue(value); + } + } + } else if (!Array.isArray(value)) { + const oldValue = arrifiedValueRef.value[0]; + if (oldValue !== value) { + doUpdateValue(value); + } + } + } + function doDispatchValue(value, index) { + if (props.range) { + const values = arrifiedValueRef.value.slice(); + values.splice(index, 1, value); + dispatchValueUpdate(values); + } else { + dispatchValueUpdate(value); + } + } + function sanitizeValue(value, currentValue, stepBuffer) { + const stepping = stepBuffer !== void 0; + if (!stepBuffer) { + stepBuffer = value - currentValue > 0 ? 1 : -1; + } + const markValues = markValuesRef.value || []; + const { step } = props; + if (step === "mark") { + const closestMark2 = getClosestMark(value, markValues.concat(currentValue), stepping ? stepBuffer : void 0); + return closestMark2 ? closestMark2.value : currentValue; + } + if (step <= 0) + return currentValue; + const { value: precision } = precisionRef; + let closestMark; + if (stepping) { + const currentStep = Number((currentValue / step).toFixed(precision)); + const actualStep = Math.floor(currentStep); + const leftStep = currentStep > actualStep ? actualStep : actualStep - 1; + const rightStep = currentStep < actualStep ? actualStep : actualStep + 1; + closestMark = getClosestMark(currentValue, [ + Number((leftStep * step).toFixed(precision)), + Number((rightStep * step).toFixed(precision)), + ...markValues + ], stepBuffer); + } else { + const roundValue = getRoundValue(value); + closestMark = getClosestMark(value, [...markValues, roundValue]); + } + return closestMark ? clampValue(closestMark.value) : currentValue; + } + function clampValue(value) { + return Math.min(props.max, Math.max(props.min, value)); + } + function valueToPercentage(value) { + const { max, min } = props; + return (value - min) / (max - min) * 100; + } + function percentageToValue(percentage) { + const { max, min } = props; + return min + (max - min) * percentage; + } + function getRoundValue(value) { + const { step, min } = props; + if (Number(step) <= 0 || step === "mark") + return value; + const newValue = Math.round((value - min) / step) * step + min; + return Number(newValue.toFixed(precisionRef.value)); + } + function getClosestMark(currentValue, markValues = markValuesRef.value, buffer) { + if (!(markValues === null || markValues === void 0 ? void 0 : markValues.length)) + return null; + let closestMark = null; + let index = -1; + while (++index < markValues.length) { + const diff = markValues[index] - currentValue; + const distance = Math.abs(diff); + if ( + // find marks in the same direction + (buffer === void 0 || diff * buffer > 0) && (closestMark === null || distance < closestMark.distance) + ) { + closestMark = { + index, + distance, + value: markValues[index] + }; + } + } + return closestMark; + } + function getPointValue(event) { + const railEl = handleRailRef.value; + if (!railEl) + return; + const touchEvent = isTouchEvent(event) ? event.touches[0] : event; + const railRect = railEl.getBoundingClientRect(); + let percentage; + if (props.vertical) { + percentage = (railRect.bottom - touchEvent.clientY) / railRect.height; + } else { + percentage = (touchEvent.clientX - railRect.left) / railRect.width; + } + if (props.reverse) { + percentage = 1 - percentage; + } + return percentageToValue(percentage); + } + function handleRailKeyDown(e) { + if (mergedDisabledRef.value || !props.keyboard) + return; + const { vertical, reverse } = props; + switch (e.key) { + case "ArrowUp": + e.preventDefault(); + handleStepValue(vertical && reverse ? -1 : 1); + break; + case "ArrowRight": + e.preventDefault(); + handleStepValue(!vertical && reverse ? -1 : 1); + break; + case "ArrowDown": + e.preventDefault(); + handleStepValue(vertical && reverse ? 1 : -1); + break; + case "ArrowLeft": + e.preventDefault(); + handleStepValue(!vertical && reverse ? 1 : -1); + break; + } + } + function handleStepValue(ratio) { + const activeIndex = activeIndexRef.value; + if (activeIndex === -1) + return; + const { step } = props; + const currentValue = arrifiedValueRef.value[activeIndex]; + const nextValue = Number(step) <= 0 || step === "mark" ? currentValue : currentValue + step * ratio; + doDispatchValue( + // Avoid the number of value does not change when `step` is null + sanitizeValue(nextValue, currentValue, ratio > 0 ? 1 : -1), + activeIndex + ); + } + function handleRailMouseDown(event) { + var _a, _b; + if (mergedDisabledRef.value) + return; + if (!isTouchEvent(event) && event.button !== eventButtonLeft) { + return; + } + const pointValue = getPointValue(event); + if (pointValue === void 0) + return; + const values = arrifiedValueRef.value.slice(); + const activeIndex = props.range ? (_b = (_a = getClosestMark(pointValue, values)) === null || _a === void 0 ? void 0 : _a.index) !== null && _b !== void 0 ? _b : -1 : 0; + if (activeIndex !== -1) { + event.preventDefault(); + focusActiveHandle(activeIndex); + startDragging(); + doDispatchValue(sanitizeValue(pointValue, arrifiedValueRef.value[activeIndex]), activeIndex); + } + } + function startDragging() { + if (!draggingRef.value) { + draggingRef.value = true; + on("touchend", document, handleMouseUp); + on("mouseup", document, handleMouseUp); + on("touchmove", document, handleMouseMove); + on("mousemove", document, handleMouseMove); + } + } + function stopDragging() { + if (draggingRef.value) { + draggingRef.value = false; + off("touchend", document, handleMouseUp); + off("mouseup", document, handleMouseUp); + off("touchmove", document, handleMouseMove); + off("mousemove", document, handleMouseMove); + } + } + function handleMouseMove(event) { + const { value: activeIndex } = activeIndexRef; + if (!draggingRef.value || activeIndex === -1) { + stopDragging(); + return; + } + const pointValue = getPointValue(event); + doDispatchValue(sanitizeValue(pointValue, arrifiedValueRef.value[activeIndex]), activeIndex); + } + function handleMouseUp() { + stopDragging(); + } + function handleHandleFocus(index) { + activeIndexRef.value = index; + if (!mergedDisabledRef.value) { + hoverIndexRef.value = index; + } + } + function handleHandleBlur(index) { + if (activeIndexRef.value === index) { + activeIndexRef.value = -1; + stopDragging(); + } + if (hoverIndexRef.value === index) { + hoverIndexRef.value = -1; + } + } + function handleHandleMouseEnter(index) { + hoverIndexRef.value = index; + } + function handleHandleMouseLeave(index) { + if (hoverIndexRef.value === index) { + hoverIndexRef.value = -1; + } + } + watch(activeIndexRef, (_, previous) => void nextTick(() => previousIndexRef.value = previous)); + watch(mergedValueRef, () => { + if (props.marks) { + if (dotTransitionDisabledRef.value) + return; + dotTransitionDisabledRef.value = true; + void nextTick(() => { + dotTransitionDisabledRef.value = false; + }); + } + void nextTick(syncPosition); + }); + onBeforeUnmount(() => { + stopDragging(); + }); + const cssVarsRef = computed(() => { + const { self: { markFontSize, railColor, railColorHover, fillColor, fillColorHover, handleColor, opacityDisabled, dotColor, dotColorModal, handleBoxShadow, handleBoxShadowHover, handleBoxShadowActive, handleBoxShadowFocus, dotBorder, dotBoxShadow, railHeight, railWidthVertical, handleSize, dotHeight, dotWidth, dotBorderRadius, fontSize, dotBorderActive, dotColorPopover }, common: { cubicBezierEaseInOut } } = themeRef.value; + return { + "--n-bezier": cubicBezierEaseInOut, + "--n-dot-border": dotBorder, + "--n-dot-border-active": dotBorderActive, + "--n-dot-border-radius": dotBorderRadius, + "--n-dot-box-shadow": dotBoxShadow, + "--n-dot-color": dotColor, + "--n-dot-color-modal": dotColorModal, + "--n-dot-color-popover": dotColorPopover, + "--n-dot-height": dotHeight, + "--n-dot-width": dotWidth, + "--n-fill-color": fillColor, + "--n-fill-color-hover": fillColorHover, + "--n-font-size": fontSize, + "--n-handle-box-shadow": handleBoxShadow, + "--n-handle-box-shadow-active": handleBoxShadowActive, + "--n-handle-box-shadow-focus": handleBoxShadowFocus, + "--n-handle-box-shadow-hover": handleBoxShadowHover, + "--n-handle-color": handleColor, + "--n-handle-size": handleSize, + "--n-opacity-disabled": opacityDisabled, + "--n-rail-color": railColor, + "--n-rail-color-hover": railColorHover, + "--n-rail-height": railHeight, + "--n-rail-width-vertical": railWidthVertical, + "--n-mark-font-size": markFontSize + }; + }); + const themeClassHandle = inlineThemeDisabled ? useThemeClass("slider", void 0, cssVarsRef, props) : void 0; + const indicatorCssVarsRef = computed(() => { + const { self: { fontSize, indicatorColor, indicatorBoxShadow, indicatorTextColor, indicatorBorderRadius } } = themeRef.value; + return { + "--n-font-size": fontSize, + "--n-indicator-border-radius": indicatorBorderRadius, + "--n-indicator-box-shadow": indicatorBoxShadow, + "--n-indicator-color": indicatorColor, + "--n-indicator-text-color": indicatorTextColor + }; + }); + const indicatorThemeClassHandle = inlineThemeDisabled ? useThemeClass("slider-indicator", void 0, indicatorCssVarsRef, props) : void 0; + return { + mergedClsPrefix: mergedClsPrefixRef, + namespace: namespaceRef, + uncontrolledValue: uncontrolledValueRef, + mergedValue: mergedValueRef, + mergedDisabled: mergedDisabledRef, + mergedPlacement: mergedPlacementRef, + isMounted: isMounted(), + adjustedTo: useAdjustedTo(props), + dotTransitionDisabled: dotTransitionDisabledRef, + markInfos: markInfosRef, + isShowTooltip, + shouldKeepTooltipTransition, + handleRailRef, + setHandleRefs, + setFollowerRefs, + fillStyle: fillStyleRef, + getHandleStyle, + activeIndex: activeIndexRef, + arrifiedValues: arrifiedValueRef, + followerEnabledIndexSet: followerEnabledIndexSetRef, + handleRailMouseDown, + handleHandleFocus, + handleHandleBlur, + handleHandleMouseEnter, + handleHandleMouseLeave, + handleRailKeyDown, + indicatorCssVars: inlineThemeDisabled ? void 0 : indicatorCssVarsRef, + indicatorThemeClass: indicatorThemeClassHandle === null || indicatorThemeClassHandle === void 0 ? void 0 : indicatorThemeClassHandle.themeClass, + indicatorOnRender: indicatorThemeClassHandle === null || indicatorThemeClassHandle === void 0 ? void 0 : indicatorThemeClassHandle.onRender, + cssVars: inlineThemeDisabled ? void 0 : cssVarsRef, + themeClass: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.themeClass, + onRender: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.onRender + }; + }, + render() { + var _a; + const { mergedClsPrefix, themeClass, formatTooltip } = this; + (_a = this.onRender) === null || _a === void 0 ? void 0 : _a.call(this); + return h( + "div", + { class: [ + `${mergedClsPrefix}-slider`, + themeClass, + { + [`${mergedClsPrefix}-slider--disabled`]: this.mergedDisabled, + [`${mergedClsPrefix}-slider--active`]: this.activeIndex !== -1, + [`${mergedClsPrefix}-slider--with-mark`]: this.marks, + [`${mergedClsPrefix}-slider--vertical`]: this.vertical, + [`${mergedClsPrefix}-slider--reverse`]: this.reverse + } + ], style: this.cssVars, onKeydown: this.handleRailKeyDown, onMousedown: this.handleRailMouseDown, onTouchstart: this.handleRailMouseDown }, + h( + "div", + { class: `${mergedClsPrefix}-slider-rail` }, + h("div", { class: `${mergedClsPrefix}-slider-rail__fill`, style: this.fillStyle }), + this.marks ? h("div", { class: [ + `${mergedClsPrefix}-slider-dots`, + this.dotTransitionDisabled && `${mergedClsPrefix}-slider-dots--transition-disabled` + ] }, this.markInfos.map((mark) => h("div", { key: mark.label, class: [ + `${mergedClsPrefix}-slider-dot`, + { + [`${mergedClsPrefix}-slider-dot--active`]: mark.active + } + ], style: mark.style }))) : null, + h("div", { ref: "handleRailRef", class: `${mergedClsPrefix}-slider-handles` }, this.arrifiedValues.map((value, index) => { + const showTooltip = this.isShowTooltip(index); + return h(VBinder, null, { + default: () => [ + h(VTarget, null, { + default: () => h("div", { ref: this.setHandleRefs(index), class: `${mergedClsPrefix}-slider-handle-wrapper`, tabindex: this.mergedDisabled ? -1 : 0, style: this.getHandleStyle(value, index), onFocus: () => { + this.handleHandleFocus(index); + }, onBlur: () => { + this.handleHandleBlur(index); + }, onMouseenter: () => { + this.handleHandleMouseEnter(index); + }, onMouseleave: () => { + this.handleHandleMouseLeave(index); + } }, resolveSlot(this.$slots.thumb, () => [ + h("div", { class: `${mergedClsPrefix}-slider-handle` }) + ])) + }), + this.tooltip && h(VFollower, { ref: this.setFollowerRefs(index), show: showTooltip, to: this.adjustedTo, enabled: this.showTooltip && !this.range || this.followerEnabledIndexSet.has(index), teleportDisabled: this.adjustedTo === useAdjustedTo.tdkey, placement: this.mergedPlacement, containerClass: this.namespace }, { + default: () => h(Transition, { name: "fade-in-scale-up-transition", appear: this.isMounted, css: this.shouldKeepTooltipTransition(index), onEnter: () => { + this.followerEnabledIndexSet.add(index); + }, onAfterLeave: () => { + this.followerEnabledIndexSet.delete(index); + } }, { + default: () => { + var _a2; + if (showTooltip) { + (_a2 = this.indicatorOnRender) === null || _a2 === void 0 ? void 0 : _a2.call(this); + return h("div", { class: [ + `${mergedClsPrefix}-slider-handle-indicator`, + this.indicatorThemeClass, + `${mergedClsPrefix}-slider-handle-indicator--${this.mergedPlacement}` + ], style: this.indicatorCssVars }, typeof formatTooltip === "function" ? formatTooltip(value) : value); + } + return null; + } + }) + }) + ] + }); + })), + this.marks ? h("div", { class: `${mergedClsPrefix}-slider-marks` }, this.markInfos.map((mark) => h("div", { key: mark.label, class: `${mergedClsPrefix}-slider-mark`, style: mark.style }, mark.label))) : null + ) + ); + } +}); +export { + NSlider as N +}; diff --git a/frontend/dist/assets/Switch.js b/frontend/dist/assets/Switch.js index 27efe4dec..391f8d5cd 100644 --- a/frontend/dist/assets/Switch.js +++ b/frontend/dist/assets/Switch.js @@ -1,727 +1,4 @@ -import { z as ref, bn as onBeforeUpdate, aa as c, Q as cB, ab as cM, at as cE, aS as fadeInScaleUpTransition, aU as insideModal, aV as insidePopover, d as defineComponent, S as useConfig, T as useTheme, ar as useFormItem, c as computed, X as toRef, ae as useMergedState, K as watch, W as nextTick, aB as onBeforeUnmount, Y as useThemeClass, bO as isMounted, ak as useAdjustedTo, y as h, bZ as VBinder, b_ as VTarget, ai as resolveSlot, b$ as VFollower, aX as Transition, c0 as sliderLight, aD as on, aC as off, a1 as call, aT as iconSwitchTransition, ac as cNotM, ah as createKey, aG as pxfy, ay as depx, c1 as isSlotEmpty, av as resolveWrappedSlot, c2 as switchLight, aI as NIconSwitchTransition, aJ as NBaseLoading } from "./index.js"; -function isTouchEvent(e) { - return window.TouchEvent && e instanceof window.TouchEvent; -} -function useRefs() { - const refs = ref(/* @__PURE__ */ new Map()); - const setRefs = (index) => (el) => { - refs.value.set(index, el); - }; - onBeforeUpdate(() => { - refs.value.clear(); - }); - return [refs, setRefs]; -} -const style$1 = c([cB("slider", ` - display: block; - padding: calc((var(--n-handle-size) - var(--n-rail-height)) / 2) 0; - position: relative; - z-index: 0; - width: 100%; - cursor: pointer; - user-select: none; - -webkit-user-select: none; - `, [cM("reverse", [cB("slider-handles", [cB("slider-handle-wrapper", ` - transform: translate(50%, -50%); - `)]), cB("slider-dots", [cB("slider-dot", ` - transform: translateX(50%, -50%); - `)]), cM("vertical", [cB("slider-handles", [cB("slider-handle-wrapper", ` - transform: translate(-50%, -50%); - `)]), cB("slider-marks", [cB("slider-mark", ` - transform: translateY(calc(-50% + var(--n-dot-height) / 2)); - `)]), cB("slider-dots", [cB("slider-dot", ` - transform: translateX(-50%) translateY(0); - `)])])]), cM("vertical", ` - padding: 0 calc((var(--n-handle-size) - var(--n-rail-height)) / 2); - width: var(--n-rail-width-vertical); - height: 100%; - `, [cB("slider-handles", ` - top: calc(var(--n-handle-size) / 2); - right: 0; - bottom: calc(var(--n-handle-size) / 2); - left: 0; - `, [cB("slider-handle-wrapper", ` - top: unset; - left: 50%; - transform: translate(-50%, 50%); - `)]), cB("slider-rail", ` - height: 100%; - `, [cE("fill", ` - top: unset; - right: 0; - bottom: unset; - left: 0; - `)]), cM("with-mark", ` - width: var(--n-rail-width-vertical); - margin: 0 32px 0 8px; - `), cB("slider-marks", ` - top: calc(var(--n-handle-size) / 2); - right: unset; - bottom: calc(var(--n-handle-size) / 2); - left: 22px; - font-size: var(--n-mark-font-size); - `, [cB("slider-mark", ` - transform: translateY(50%); - white-space: nowrap; - `)]), cB("slider-dots", ` - top: calc(var(--n-handle-size) / 2); - right: unset; - bottom: calc(var(--n-handle-size) / 2); - left: 50%; - `, [cB("slider-dot", ` - transform: translateX(-50%) translateY(50%); - `)])]), cM("disabled", ` - cursor: not-allowed; - opacity: var(--n-opacity-disabled); - `, [cB("slider-handle", ` - cursor: not-allowed; - `)]), cM("with-mark", ` - width: 100%; - margin: 8px 0 32px 0; - `), c("&:hover", [cB("slider-rail", { - backgroundColor: "var(--n-rail-color-hover)" -}, [cE("fill", { - backgroundColor: "var(--n-fill-color-hover)" -})]), cB("slider-handle", { - boxShadow: "var(--n-handle-box-shadow-hover)" -})]), cM("active", [cB("slider-rail", { - backgroundColor: "var(--n-rail-color-hover)" -}, [cE("fill", { - backgroundColor: "var(--n-fill-color-hover)" -})]), cB("slider-handle", { - boxShadow: "var(--n-handle-box-shadow-hover)" -})]), cB("slider-marks", ` - position: absolute; - top: 18px; - left: calc(var(--n-handle-size) / 2); - right: calc(var(--n-handle-size) / 2); - `, [cB("slider-mark", ` - position: absolute; - transform: translateX(-50%); - white-space: nowrap; - `)]), cB("slider-rail", ` - width: 100%; - position: relative; - height: var(--n-rail-height); - background-color: var(--n-rail-color); - transition: background-color .3s var(--n-bezier); - border-radius: calc(var(--n-rail-height) / 2); - `, [cE("fill", ` - position: absolute; - top: 0; - bottom: 0; - border-radius: calc(var(--n-rail-height) / 2); - transition: background-color .3s var(--n-bezier); - background-color: var(--n-fill-color); - `)]), cB("slider-handles", ` - position: absolute; - top: 0; - right: calc(var(--n-handle-size) / 2); - bottom: 0; - left: calc(var(--n-handle-size) / 2); - `, [cB("slider-handle-wrapper", ` - outline: none; - position: absolute; - top: 50%; - transform: translate(-50%, -50%); - cursor: pointer; - display: flex; - `, [cB("slider-handle", ` - height: var(--n-handle-size); - width: var(--n-handle-size); - border-radius: 50%; - overflow: hidden; - transition: box-shadow .2s var(--n-bezier), background-color .3s var(--n-bezier); - background-color: var(--n-handle-color); - box-shadow: var(--n-handle-box-shadow); - `, [c("&:hover", ` - box-shadow: var(--n-handle-box-shadow-hover); - `)]), c("&:focus", [cB("slider-handle", ` - box-shadow: var(--n-handle-box-shadow-focus); - `, [c("&:hover", ` - box-shadow: var(--n-handle-box-shadow-active); - `)])])])]), cB("slider-dots", ` - position: absolute; - top: 50%; - left: calc(var(--n-handle-size) / 2); - right: calc(var(--n-handle-size) / 2); - `, [cM("transition-disabled", [cB("slider-dot", "transition: none;")]), cB("slider-dot", ` - transition: - border-color .3s var(--n-bezier), - box-shadow .3s var(--n-bezier), - background-color .3s var(--n-bezier); - position: absolute; - transform: translate(-50%, -50%); - height: var(--n-dot-height); - width: var(--n-dot-width); - border-radius: var(--n-dot-border-radius); - overflow: hidden; - box-sizing: border-box; - border: var(--n-dot-border); - background-color: var(--n-dot-color); - `, [cM("active", "border: var(--n-dot-border-active);")])])]), cB("slider-handle-indicator", ` - font-size: var(--n-font-size); - padding: 6px 10px; - border-radius: var(--n-indicator-border-radius); - color: var(--n-indicator-text-color); - background-color: var(--n-indicator-color); - box-shadow: var(--n-indicator-box-shadow); - `, [fadeInScaleUpTransition()]), cB("slider-handle-indicator", ` - font-size: var(--n-font-size); - padding: 6px 10px; - border-radius: var(--n-indicator-border-radius); - color: var(--n-indicator-text-color); - background-color: var(--n-indicator-color); - box-shadow: var(--n-indicator-box-shadow); - `, [cM("top", ` - margin-bottom: 12px; - `), cM("right", ` - margin-left: 12px; - `), cM("bottom", ` - margin-top: 12px; - `), cM("left", ` - margin-right: 12px; - `), fadeInScaleUpTransition()]), insideModal(cB("slider", [cB("slider-dot", "background-color: var(--n-dot-color-modal);")])), insidePopover(cB("slider", [cB("slider-dot", "background-color: var(--n-dot-color-popover);")]))]); -const eventButtonLeft = 0; -const sliderProps = Object.assign(Object.assign({}, useTheme.props), { to: useAdjustedTo.propTo, defaultValue: { - type: [Number, Array], - default: 0 -}, marks: Object, disabled: { - type: Boolean, - default: void 0 -}, formatTooltip: Function, keyboard: { - type: Boolean, - default: true -}, min: { - type: Number, - default: 0 -}, max: { - type: Number, - default: 100 -}, step: { - type: [Number, String], - default: 1 -}, range: Boolean, value: [Number, Array], placement: String, showTooltip: { - type: Boolean, - default: void 0 -}, tooltip: { - type: Boolean, - default: true -}, vertical: Boolean, reverse: Boolean, "onUpdate:value": [Function, Array], onUpdateValue: [Function, Array] }); -const NSlider = defineComponent({ - name: "Slider", - props: sliderProps, - setup(props) { - const { mergedClsPrefixRef, namespaceRef, inlineThemeDisabled } = useConfig(props); - const themeRef = useTheme("Slider", "-slider", style$1, sliderLight, props, mergedClsPrefixRef); - const handleRailRef = ref(null); - const [handleRefs, setHandleRefs] = useRefs(); - const [followerRefs, setFollowerRefs] = useRefs(); - const followerEnabledIndexSetRef = ref(/* @__PURE__ */ new Set()); - const formItem = useFormItem(props); - const { mergedDisabledRef } = formItem; - const precisionRef = computed(() => { - const { step } = props; - if (Number(step) <= 0 || step === "mark") - return 0; - const stepString = step.toString(); - let precision = 0; - if (stepString.includes(".")) { - precision = stepString.length - stepString.indexOf(".") - 1; - } - return precision; - }); - const uncontrolledValueRef = ref(props.defaultValue); - const controlledValueRef = toRef(props, "value"); - const mergedValueRef = useMergedState(controlledValueRef, uncontrolledValueRef); - const arrifiedValueRef = computed(() => { - const { value: mergedValue } = mergedValueRef; - return (props.range ? mergedValue : [mergedValue]).map(clampValue); - }); - const handleCountExceeds2Ref = computed(() => arrifiedValueRef.value.length > 2); - const mergedPlacementRef = computed(() => { - return props.placement === void 0 ? props.vertical ? "right" : "top" : props.placement; - }); - const markValuesRef = computed(() => { - const { marks } = props; - return marks ? Object.keys(marks).map(parseFloat) : null; - }); - const activeIndexRef = ref(-1); - const previousIndexRef = ref(-1); - const hoverIndexRef = ref(-1); - const draggingRef = ref(false); - const dotTransitionDisabledRef = ref(false); - const styleDirectionRef = computed(() => { - const { vertical, reverse } = props; - const left = reverse ? "right" : "left"; - const bottom = reverse ? "top" : "bottom"; - return vertical ? bottom : left; - }); - const fillStyleRef = computed(() => { - if (handleCountExceeds2Ref.value) - return; - const values = arrifiedValueRef.value; - const start = valueToPercentage(props.range ? Math.min(...values) : props.min); - const end = valueToPercentage(props.range ? Math.max(...values) : values[0]); - const { value: styleDirection } = styleDirectionRef; - return props.vertical ? { - [styleDirection]: `${start}%`, - height: `${end - start}%` - } : { - [styleDirection]: `${start}%`, - width: `${end - start}%` - }; - }); - const markInfosRef = computed(() => { - const mergedMarks = []; - const { marks } = props; - if (marks) { - const orderValues = arrifiedValueRef.value.slice(); - orderValues.sort((a, b) => a - b); - const { value: styleDirection } = styleDirectionRef; - const { value: handleCountExceeds2 } = handleCountExceeds2Ref; - const { range } = props; - const isActive = handleCountExceeds2 ? () => false : (num) => range ? num >= orderValues[0] && num <= orderValues[orderValues.length - 1] : num <= orderValues[0]; - for (const key of Object.keys(marks)) { - const num = Number(key); - mergedMarks.push({ - active: isActive(num), - label: marks[key], - style: { - [styleDirection]: `${valueToPercentage(num)}%` - } - }); - } - } - return mergedMarks; - }); - function getHandleStyle(value, index) { - const percentage = valueToPercentage(value); - const { value: styleDirection } = styleDirectionRef; - return { - [styleDirection]: `${percentage}%`, - zIndex: index === activeIndexRef.value ? 1 : 0 - }; - } - function isShowTooltip(index) { - return props.showTooltip || hoverIndexRef.value === index || activeIndexRef.value === index && draggingRef.value; - } - function shouldKeepTooltipTransition(index) { - if (!draggingRef.value) - return true; - return !(activeIndexRef.value === index && previousIndexRef.value === index); - } - function focusActiveHandle(index) { - var _a; - if (~index) { - activeIndexRef.value = index; - (_a = handleRefs.value.get(index)) === null || _a === void 0 ? void 0 : _a.focus(); - } - } - function syncPosition() { - followerRefs.value.forEach((inst, index) => { - if (isShowTooltip(index)) - inst.syncPosition(); - }); - } - function doUpdateValue(value) { - const { "onUpdate:value": _onUpdateValue, onUpdateValue } = props; - const { nTriggerFormInput, nTriggerFormChange } = formItem; - if (onUpdateValue) - call(onUpdateValue, value); - if (_onUpdateValue) - call(_onUpdateValue, value); - uncontrolledValueRef.value = value; - nTriggerFormInput(); - nTriggerFormChange(); - } - function dispatchValueUpdate(value) { - const { range } = props; - if (range) { - if (Array.isArray(value)) { - const { value: oldValues } = arrifiedValueRef; - if (value.join() !== oldValues.join()) { - doUpdateValue(value); - } - } - } else if (!Array.isArray(value)) { - const oldValue = arrifiedValueRef.value[0]; - if (oldValue !== value) { - doUpdateValue(value); - } - } - } - function doDispatchValue(value, index) { - if (props.range) { - const values = arrifiedValueRef.value.slice(); - values.splice(index, 1, value); - dispatchValueUpdate(values); - } else { - dispatchValueUpdate(value); - } - } - function sanitizeValue(value, currentValue, stepBuffer) { - const stepping = stepBuffer !== void 0; - if (!stepBuffer) { - stepBuffer = value - currentValue > 0 ? 1 : -1; - } - const markValues = markValuesRef.value || []; - const { step } = props; - if (step === "mark") { - const closestMark2 = getClosestMark(value, markValues.concat(currentValue), stepping ? stepBuffer : void 0); - return closestMark2 ? closestMark2.value : currentValue; - } - if (step <= 0) - return currentValue; - const { value: precision } = precisionRef; - let closestMark; - if (stepping) { - const currentStep = Number((currentValue / step).toFixed(precision)); - const actualStep = Math.floor(currentStep); - const leftStep = currentStep > actualStep ? actualStep : actualStep - 1; - const rightStep = currentStep < actualStep ? actualStep : actualStep + 1; - closestMark = getClosestMark(currentValue, [ - Number((leftStep * step).toFixed(precision)), - Number((rightStep * step).toFixed(precision)), - ...markValues - ], stepBuffer); - } else { - const roundValue = getRoundValue(value); - closestMark = getClosestMark(value, [...markValues, roundValue]); - } - return closestMark ? clampValue(closestMark.value) : currentValue; - } - function clampValue(value) { - return Math.min(props.max, Math.max(props.min, value)); - } - function valueToPercentage(value) { - const { max, min } = props; - return (value - min) / (max - min) * 100; - } - function percentageToValue(percentage) { - const { max, min } = props; - return min + (max - min) * percentage; - } - function getRoundValue(value) { - const { step, min } = props; - if (Number(step) <= 0 || step === "mark") - return value; - const newValue = Math.round((value - min) / step) * step + min; - return Number(newValue.toFixed(precisionRef.value)); - } - function getClosestMark(currentValue, markValues = markValuesRef.value, buffer) { - if (!(markValues === null || markValues === void 0 ? void 0 : markValues.length)) - return null; - let closestMark = null; - let index = -1; - while (++index < markValues.length) { - const diff = markValues[index] - currentValue; - const distance = Math.abs(diff); - if ( - // find marks in the same direction - (buffer === void 0 || diff * buffer > 0) && (closestMark === null || distance < closestMark.distance) - ) { - closestMark = { - index, - distance, - value: markValues[index] - }; - } - } - return closestMark; - } - function getPointValue(event) { - const railEl = handleRailRef.value; - if (!railEl) - return; - const touchEvent = isTouchEvent(event) ? event.touches[0] : event; - const railRect = railEl.getBoundingClientRect(); - let percentage; - if (props.vertical) { - percentage = (railRect.bottom - touchEvent.clientY) / railRect.height; - } else { - percentage = (touchEvent.clientX - railRect.left) / railRect.width; - } - if (props.reverse) { - percentage = 1 - percentage; - } - return percentageToValue(percentage); - } - function handleRailKeyDown(e) { - if (mergedDisabledRef.value || !props.keyboard) - return; - const { vertical, reverse } = props; - switch (e.key) { - case "ArrowUp": - e.preventDefault(); - handleStepValue(vertical && reverse ? -1 : 1); - break; - case "ArrowRight": - e.preventDefault(); - handleStepValue(!vertical && reverse ? -1 : 1); - break; - case "ArrowDown": - e.preventDefault(); - handleStepValue(vertical && reverse ? 1 : -1); - break; - case "ArrowLeft": - e.preventDefault(); - handleStepValue(!vertical && reverse ? 1 : -1); - break; - } - } - function handleStepValue(ratio) { - const activeIndex = activeIndexRef.value; - if (activeIndex === -1) - return; - const { step } = props; - const currentValue = arrifiedValueRef.value[activeIndex]; - const nextValue = Number(step) <= 0 || step === "mark" ? currentValue : currentValue + step * ratio; - doDispatchValue( - // Avoid the number of value does not change when `step` is null - sanitizeValue(nextValue, currentValue, ratio > 0 ? 1 : -1), - activeIndex - ); - } - function handleRailMouseDown(event) { - var _a, _b; - if (mergedDisabledRef.value) - return; - if (!isTouchEvent(event) && event.button !== eventButtonLeft) { - return; - } - const pointValue = getPointValue(event); - if (pointValue === void 0) - return; - const values = arrifiedValueRef.value.slice(); - const activeIndex = props.range ? (_b = (_a = getClosestMark(pointValue, values)) === null || _a === void 0 ? void 0 : _a.index) !== null && _b !== void 0 ? _b : -1 : 0; - if (activeIndex !== -1) { - event.preventDefault(); - focusActiveHandle(activeIndex); - startDragging(); - doDispatchValue(sanitizeValue(pointValue, arrifiedValueRef.value[activeIndex]), activeIndex); - } - } - function startDragging() { - if (!draggingRef.value) { - draggingRef.value = true; - on("touchend", document, handleMouseUp); - on("mouseup", document, handleMouseUp); - on("touchmove", document, handleMouseMove); - on("mousemove", document, handleMouseMove); - } - } - function stopDragging() { - if (draggingRef.value) { - draggingRef.value = false; - off("touchend", document, handleMouseUp); - off("mouseup", document, handleMouseUp); - off("touchmove", document, handleMouseMove); - off("mousemove", document, handleMouseMove); - } - } - function handleMouseMove(event) { - const { value: activeIndex } = activeIndexRef; - if (!draggingRef.value || activeIndex === -1) { - stopDragging(); - return; - } - const pointValue = getPointValue(event); - doDispatchValue(sanitizeValue(pointValue, arrifiedValueRef.value[activeIndex]), activeIndex); - } - function handleMouseUp() { - stopDragging(); - } - function handleHandleFocus(index) { - activeIndexRef.value = index; - if (!mergedDisabledRef.value) { - hoverIndexRef.value = index; - } - } - function handleHandleBlur(index) { - if (activeIndexRef.value === index) { - activeIndexRef.value = -1; - stopDragging(); - } - if (hoverIndexRef.value === index) { - hoverIndexRef.value = -1; - } - } - function handleHandleMouseEnter(index) { - hoverIndexRef.value = index; - } - function handleHandleMouseLeave(index) { - if (hoverIndexRef.value === index) { - hoverIndexRef.value = -1; - } - } - watch(activeIndexRef, (_, previous) => void nextTick(() => previousIndexRef.value = previous)); - watch(mergedValueRef, () => { - if (props.marks) { - if (dotTransitionDisabledRef.value) - return; - dotTransitionDisabledRef.value = true; - void nextTick(() => { - dotTransitionDisabledRef.value = false; - }); - } - void nextTick(syncPosition); - }); - onBeforeUnmount(() => { - stopDragging(); - }); - const cssVarsRef = computed(() => { - const { self: { markFontSize, railColor, railColorHover, fillColor, fillColorHover, handleColor, opacityDisabled, dotColor, dotColorModal, handleBoxShadow, handleBoxShadowHover, handleBoxShadowActive, handleBoxShadowFocus, dotBorder, dotBoxShadow, railHeight, railWidthVertical, handleSize, dotHeight, dotWidth, dotBorderRadius, fontSize, dotBorderActive, dotColorPopover }, common: { cubicBezierEaseInOut } } = themeRef.value; - return { - "--n-bezier": cubicBezierEaseInOut, - "--n-dot-border": dotBorder, - "--n-dot-border-active": dotBorderActive, - "--n-dot-border-radius": dotBorderRadius, - "--n-dot-box-shadow": dotBoxShadow, - "--n-dot-color": dotColor, - "--n-dot-color-modal": dotColorModal, - "--n-dot-color-popover": dotColorPopover, - "--n-dot-height": dotHeight, - "--n-dot-width": dotWidth, - "--n-fill-color": fillColor, - "--n-fill-color-hover": fillColorHover, - "--n-font-size": fontSize, - "--n-handle-box-shadow": handleBoxShadow, - "--n-handle-box-shadow-active": handleBoxShadowActive, - "--n-handle-box-shadow-focus": handleBoxShadowFocus, - "--n-handle-box-shadow-hover": handleBoxShadowHover, - "--n-handle-color": handleColor, - "--n-handle-size": handleSize, - "--n-opacity-disabled": opacityDisabled, - "--n-rail-color": railColor, - "--n-rail-color-hover": railColorHover, - "--n-rail-height": railHeight, - "--n-rail-width-vertical": railWidthVertical, - "--n-mark-font-size": markFontSize - }; - }); - const themeClassHandle = inlineThemeDisabled ? useThemeClass("slider", void 0, cssVarsRef, props) : void 0; - const indicatorCssVarsRef = computed(() => { - const { self: { fontSize, indicatorColor, indicatorBoxShadow, indicatorTextColor, indicatorBorderRadius } } = themeRef.value; - return { - "--n-font-size": fontSize, - "--n-indicator-border-radius": indicatorBorderRadius, - "--n-indicator-box-shadow": indicatorBoxShadow, - "--n-indicator-color": indicatorColor, - "--n-indicator-text-color": indicatorTextColor - }; - }); - const indicatorThemeClassHandle = inlineThemeDisabled ? useThemeClass("slider-indicator", void 0, indicatorCssVarsRef, props) : void 0; - return { - mergedClsPrefix: mergedClsPrefixRef, - namespace: namespaceRef, - uncontrolledValue: uncontrolledValueRef, - mergedValue: mergedValueRef, - mergedDisabled: mergedDisabledRef, - mergedPlacement: mergedPlacementRef, - isMounted: isMounted(), - adjustedTo: useAdjustedTo(props), - dotTransitionDisabled: dotTransitionDisabledRef, - markInfos: markInfosRef, - isShowTooltip, - shouldKeepTooltipTransition, - handleRailRef, - setHandleRefs, - setFollowerRefs, - fillStyle: fillStyleRef, - getHandleStyle, - activeIndex: activeIndexRef, - arrifiedValues: arrifiedValueRef, - followerEnabledIndexSet: followerEnabledIndexSetRef, - handleRailMouseDown, - handleHandleFocus, - handleHandleBlur, - handleHandleMouseEnter, - handleHandleMouseLeave, - handleRailKeyDown, - indicatorCssVars: inlineThemeDisabled ? void 0 : indicatorCssVarsRef, - indicatorThemeClass: indicatorThemeClassHandle === null || indicatorThemeClassHandle === void 0 ? void 0 : indicatorThemeClassHandle.themeClass, - indicatorOnRender: indicatorThemeClassHandle === null || indicatorThemeClassHandle === void 0 ? void 0 : indicatorThemeClassHandle.onRender, - cssVars: inlineThemeDisabled ? void 0 : cssVarsRef, - themeClass: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.themeClass, - onRender: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.onRender - }; - }, - render() { - var _a; - const { mergedClsPrefix, themeClass, formatTooltip } = this; - (_a = this.onRender) === null || _a === void 0 ? void 0 : _a.call(this); - return h( - "div", - { class: [ - `${mergedClsPrefix}-slider`, - themeClass, - { - [`${mergedClsPrefix}-slider--disabled`]: this.mergedDisabled, - [`${mergedClsPrefix}-slider--active`]: this.activeIndex !== -1, - [`${mergedClsPrefix}-slider--with-mark`]: this.marks, - [`${mergedClsPrefix}-slider--vertical`]: this.vertical, - [`${mergedClsPrefix}-slider--reverse`]: this.reverse - } - ], style: this.cssVars, onKeydown: this.handleRailKeyDown, onMousedown: this.handleRailMouseDown, onTouchstart: this.handleRailMouseDown }, - h( - "div", - { class: `${mergedClsPrefix}-slider-rail` }, - h("div", { class: `${mergedClsPrefix}-slider-rail__fill`, style: this.fillStyle }), - this.marks ? h("div", { class: [ - `${mergedClsPrefix}-slider-dots`, - this.dotTransitionDisabled && `${mergedClsPrefix}-slider-dots--transition-disabled` - ] }, this.markInfos.map((mark) => h("div", { key: mark.label, class: [ - `${mergedClsPrefix}-slider-dot`, - { - [`${mergedClsPrefix}-slider-dot--active`]: mark.active - } - ], style: mark.style }))) : null, - h("div", { ref: "handleRailRef", class: `${mergedClsPrefix}-slider-handles` }, this.arrifiedValues.map((value, index) => { - const showTooltip = this.isShowTooltip(index); - return h(VBinder, null, { - default: () => [ - h(VTarget, null, { - default: () => h("div", { ref: this.setHandleRefs(index), class: `${mergedClsPrefix}-slider-handle-wrapper`, tabindex: this.mergedDisabled ? -1 : 0, style: this.getHandleStyle(value, index), onFocus: () => { - this.handleHandleFocus(index); - }, onBlur: () => { - this.handleHandleBlur(index); - }, onMouseenter: () => { - this.handleHandleMouseEnter(index); - }, onMouseleave: () => { - this.handleHandleMouseLeave(index); - } }, resolveSlot(this.$slots.thumb, () => [ - h("div", { class: `${mergedClsPrefix}-slider-handle` }) - ])) - }), - this.tooltip && h(VFollower, { ref: this.setFollowerRefs(index), show: showTooltip, to: this.adjustedTo, enabled: this.showTooltip && !this.range || this.followerEnabledIndexSet.has(index), teleportDisabled: this.adjustedTo === useAdjustedTo.tdkey, placement: this.mergedPlacement, containerClass: this.namespace }, { - default: () => h(Transition, { name: "fade-in-scale-up-transition", appear: this.isMounted, css: this.shouldKeepTooltipTransition(index), onEnter: () => { - this.followerEnabledIndexSet.add(index); - }, onAfterLeave: () => { - this.followerEnabledIndexSet.delete(index); - } }, { - default: () => { - var _a2; - if (showTooltip) { - (_a2 = this.indicatorOnRender) === null || _a2 === void 0 ? void 0 : _a2.call(this); - return h("div", { class: [ - `${mergedClsPrefix}-slider-handle-indicator`, - this.indicatorThemeClass, - `${mergedClsPrefix}-slider-handle-indicator--${this.mergedPlacement}` - ], style: this.indicatorCssVars }, typeof formatTooltip === "function" ? formatTooltip(value) : value); - } - return null; - } - }) - }) - ] - }); - })), - this.marks ? h("div", { class: `${mergedClsPrefix}-slider-marks` }, this.markInfos.map((mark) => h("div", { key: mark.label, class: `${mergedClsPrefix}-slider-mark`, style: mark.style }, mark.label))) : null - ) - ); - } -}); +import { R as cB, au as cE, aU as iconSwitchTransition, ab as c, ac as cM, ad as cNotM, d as defineComponent, T as useConfig, U as useTheme, as as useFormItem, B as ref, Y as toRef, af as useMergedState, c as computed, ai as createKey, aH as pxfy, az as depx, Z as useThemeClass, c4 as isSlotEmpty, A as h, aw as resolveWrappedSlot, c5 as switchLight, aJ as NIconSwitchTransition, aK as NBaseLoading, a2 as call } from "./index.js"; const style = cB("switch", ` height: var(--n-height); min-width: var(--n-width); @@ -1077,6 +354,5 @@ const NSwitch = defineComponent({ } }); export { - NSwitch as N, - NSlider as a + NSwitch as N }; diff --git a/frontend/dist/assets/TaggerView.js b/frontend/dist/assets/TaggerView.js index 154f4dc90..d78f5fc00 100644 --- a/frontend/dist/assets/TaggerView.js +++ b/frontend/dist/assets/TaggerView.js @@ -1,9 +1,10 @@ -import { d as defineComponent, a as useState, u as useSettings, p as useMessage, z as ref, c as computed, G as spaceRegex, o as openBlock, j as createElementBlock, g as createVNode, w as withCtx, h as unref, r as NGi, n as NCard, N as NSpace, f as createBaseVNode, i as NSelect, l as NTooltip, k as createTextVNode, J as NInput, C as toDisplayString, s as NGrid, t as serverUrl, v as pushScopeId, x as popScopeId, _ as _export_sfc } from "./index.js"; +import { d as defineComponent, l as useState, u as useSettings, r as useMessage, B as ref, c as computed, G as spaceRegex, o as openBlock, a as createElementBlock, e as createVNode, w as withCtx, f as unref, t as NGi, m as NCard, j as NSpace, b as createBaseVNode, q as NSelect, N as NTooltip, h as createTextVNode, J as NInput, E as toDisplayString, v as NGrid, x as serverUrl, y as pushScopeId, z as popScopeId, _ as _export_sfc } from "./index.js"; import { _ as _sfc_main$1 } from "./GenerateSection.vue_vue_type_script_setup_true_lang.js"; import { I as ImageUpload } from "./ImageUpload.js"; import { v as v4 } from "./v4.js"; -import { a as NSlider, N as NSwitch } from "./Switch.js"; +import { N as NSlider } from "./Slider.js"; import { N as NInputNumber } from "./InputNumber.js"; +import { N as NSwitch } from "./Switch.js"; import "./CloudUpload.js"; const _withScopeId = (n) => (pushScopeId("data-v-94d16b9f"), n = n(), popScopeId(), n); const _hoisted_1 = { class: "main-container" }; diff --git a/frontend/dist/assets/TestView.js b/frontend/dist/assets/TestView.js index ff8c3ffbd..a1078c6fb 100644 --- a/frontend/dist/assets/TestView.js +++ b/frontend/dist/assets/TestView.js @@ -1,4 +1,4 @@ -import { d as defineComponent, z as ref, o as openBlock, e as createBlock, h as unref } from "./index.js"; +import { d as defineComponent, B as ref, o as openBlock, g as createBlock, f as unref } from "./index.js"; import { _ as _sfc_main$1 } from "./ModelPopup.vue_vue_type_script_setup_true_lang.js"; import "./DescriptionsItem.js"; const _sfc_main = /* @__PURE__ */ defineComponent({ diff --git a/frontend/dist/assets/TextToImageView.js b/frontend/dist/assets/TextToImageView.js index 9501b1c55..2076fbf38 100644 --- a/frontend/dist/assets/TextToImageView.js +++ b/frontend/dist/assets/TextToImageView.js @@ -1,182 +1,551 @@ -import { d as defineComponent, u as useSettings, a as useState, c as computed, b as upscalerOptions, o as openBlock, e as createBlock, w as withCtx, f as createBaseVNode, g as createVNode, h as unref, N as NSpace, i as NSelect, j as createElementBlock, k as createTextVNode, l as NTooltip, m as createCommentVNode, n as NCard, p as useMessage, q as onUnmounted, r as NGi, s as NGrid, t as serverUrl } from "./index.js"; -import { _ as _sfc_main$6 } from "./GenerateSection.vue_vue_type_script_setup_true_lang.js"; -import { _ as _sfc_main$7 } from "./ImageOutput.vue_vue_type_script_setup_true_lang.js"; -import { B as BurnerClock, P as Prompt, _ as _sfc_main$4, a as _sfc_main$5, b as _sfc_main$8 } from "./clock.js"; -import { N as NSwitch, a as NSlider } from "./Switch.js"; +import { d as defineComponent, u as useSettings, c as computed, o as openBlock, a as createElementBlock, b as createBaseVNode, e as createVNode, f as unref, g as createBlock, w as withCtx, h as createTextVNode, N as NTooltip, i as isDev, j as NSpace, k as createCommentVNode, F as Fragment, l as useState, m as NCard, n as NTabPane, p as NTabs, q as NSelect, r as useMessage, s as onUnmounted, t as NGi, v as NGrid, x as serverUrl } from "./index.js"; +import { _ as _sfc_main$d } from "./GenerateSection.vue_vue_type_script_setup_true_lang.js"; +import { _ as _sfc_main$e } from "./ImageOutput.vue_vue_type_script_setup_true_lang.js"; +import { _ as _sfc_main$7, a as _sfc_main$8, B as BurnerClock, P as Prompt, b as _sfc_main$9, c as _sfc_main$a, d as _sfc_main$f } from "./clock.js"; +import { _ as _sfc_main$6, a as _sfc_main$b, b as _sfc_main$c } from "./Upscale.vue_vue_type_script_setup_true_lang.js"; +import { N as NSwitch } from "./Switch.js"; +import { N as NSlider } from "./Slider.js"; import { N as NInputNumber } from "./InputNumber.js"; -import { _ as _sfc_main$3 } from "./SamplerPicker.vue_vue_type_script_setup_true_lang.js"; import { v as v4 } from "./v4.js"; import "./SendOutputTo.vue_vue_type_script_setup_true_lang.js"; import "./TrashBin.js"; import "./DescriptionsItem.js"; import "./Settings.js"; +const _hoisted_1$3 = { class: "flex-container" }; +const _hoisted_2$3 = /* @__PURE__ */ createBaseVNode("div", { class: "slider-label" }, [ + /* @__PURE__ */ createBaseVNode("p", null, "Enabled") +], -1); +const _hoisted_3$3 = { class: "flex-container" }; +const _hoisted_4$3 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Steps", -1); +const _hoisted_5$3 = /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "We recommend using 20-50 steps for most images.", -1); +const _hoisted_6$3 = { class: "flex-container" }; +const _hoisted_7$3 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Seed", -1); +const _hoisted_8$2 = /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "For random seed use -1.", -1); +const _hoisted_9$2 = { class: "flex-container" }; +const _hoisted_10$1 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Strength", -1); +const _hoisted_11$1 = { class: "flex-container" }; +const _hoisted_12$1 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Mask Dilation", -1); +const _hoisted_13$1 = { class: "flex-container" }; +const _hoisted_14$1 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Mask Blur", -1); +const _hoisted_15$1 = { class: "flex-container" }; +const _hoisted_16$1 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Mask Padding", -1); +const _hoisted_17 = { class: "flex-container" }; +const _hoisted_18 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Iterations", -1); +const _hoisted_19 = { class: "flex-container" }; +const _hoisted_20 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Upscale", -1); +const _sfc_main$5 = /* @__PURE__ */ defineComponent({ + __name: "ADetailer", + props: { + tab: { + type: String, + required: true + }, + target: { + type: String, + required: false, + default: "settings" + } + }, + setup(__props) { + const props = __props; + const settings = useSettings(); + const target = computed(() => { + if (props.target === "settings") { + return settings.data.settings; + } + return settings.defaultSettings; + }); + return (_ctx, _cache) => { + return openBlock(), createElementBlock(Fragment, null, [ + createBaseVNode("div", _hoisted_1$3, [ + _hoisted_2$3, + createVNode(unref(NSwitch), { + value: target.value[props.tab].adetailer.enabled, + "onUpdate:value": _cache[0] || (_cache[0] = ($event) => target.value[props.tab].adetailer.enabled = $event) + }, null, 8, ["value"]) + ]), + target.value[props.tab].adetailer.enabled ? (openBlock(), createBlock(unref(NSpace), { + key: 0, + vertical: "", + class: "left-container", + "builtin-theme-overrides": { + gapMedium: "0 12px" + } + }, { + default: withCtx(() => [ + createVNode(unref(_sfc_main$6), { type: "inpainting" }), + createBaseVNode("div", _hoisted_3$3, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_4$3 + ]), + default: withCtx(() => [ + createTextVNode(" Number of steps to take in the diffusion process. Higher values will result in more detailed images but will take longer to generate. There is also a point of diminishing returns around 100 steps. "), + _hoisted_5$3 + ]), + _: 1 + }), + createVNode(unref(NSlider), { + value: target.value[props.tab].adetailer.steps, + "onUpdate:value": _cache[1] || (_cache[1] = ($event) => target.value[props.tab].adetailer.steps = $event), + min: 5, + max: 300, + style: { "margin-right": "12px" } + }, null, 8, ["value"]), + createVNode(unref(NInputNumber), { + value: target.value[props.tab].adetailer.steps, + "onUpdate:value": _cache[2] || (_cache[2] = ($event) => target.value[props.tab].adetailer.steps = $event), + size: "small", + style: { "min-width": "96px", "width": "96px" } + }, null, 8, ["value"]) + ]), + createVNode(unref(_sfc_main$7), { + tab: "inpainting", + target: "adetailer" + }), + createVNode(unref(_sfc_main$8), { + tab: "inpainting", + target: "adetailer" + }), + createBaseVNode("div", _hoisted_6$3, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_7$3 + ]), + default: withCtx(() => [ + createTextVNode(" Seed is a number that represents the starting canvas of your image. If you want to create the same image as your friend, you can use the same settings and seed to do so. "), + _hoisted_8$2 + ]), + _: 1 + }), + createVNode(unref(NInputNumber), { + value: target.value[props.tab].adetailer.seed, + "onUpdate:value": _cache[3] || (_cache[3] = ($event) => target.value[props.tab].adetailer.seed = $event), + size: "small", + min: -1, + max: 999999999999, + style: { "flex-grow": "1" } + }, null, 8, ["value"]) + ]), + createBaseVNode("div", _hoisted_9$2, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_10$1 + ]), + default: withCtx(() => [ + createTextVNode(" How much should the masked are be changed from the original ") + ]), + _: 1 + }), + createVNode(unref(NSlider), { + value: target.value[props.tab].adetailer.strength, + "onUpdate:value": _cache[4] || (_cache[4] = ($event) => target.value[props.tab].adetailer.strength = $event), + min: 0, + max: 1, + step: 0.01, + style: { "margin-right": "12px" } + }, null, 8, ["value"]), + createVNode(unref(NInputNumber), { + value: target.value[props.tab].adetailer.strength, + "onUpdate:value": _cache[5] || (_cache[5] = ($event) => target.value[props.tab].adetailer.strength = $event), + size: "small", + style: { "min-width": "96px", "width": "96px" }, + min: 0, + max: 1, + step: 0.01 + }, null, 8, ["value"]) + ]), + createBaseVNode("div", _hoisted_11$1, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_12$1 + ]), + default: withCtx(() => [ + createTextVNode(" Expands bright pixels in the mask to cover more of the image. ") + ]), + _: 1 + }), + createVNode(unref(NInputNumber), { + value: target.value[props.tab].adetailer.mask_dilation, + "onUpdate:value": _cache[6] || (_cache[6] = ($event) => target.value[props.tab].adetailer.mask_dilation = $event), + size: "small", + min: 0, + style: { "flex-grow": "1" } + }, null, 8, ["value"]) + ]), + createBaseVNode("div", _hoisted_13$1, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_14$1 + ]), + default: withCtx(() => [ + createTextVNode(" Makes for a smooth transition between masked and unmasked areas. ") + ]), + _: 1 + }), + createVNode(unref(NInputNumber), { + value: target.value[props.tab].adetailer.mask_blur, + "onUpdate:value": _cache[7] || (_cache[7] = ($event) => target.value[props.tab].adetailer.mask_blur = $event), + size: "small", + min: 0, + style: { "flex-grow": "1" } + }, null, 8, ["value"]) + ]), + createBaseVNode("div", _hoisted_15$1, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_16$1 + ]), + default: withCtx(() => [ + createTextVNode(" Image will be cropped to the mask size plus padding. More padding might mean smoother transitions but slower generation. ") + ]), + _: 1 + }), + createVNode(unref(NInputNumber), { + value: target.value[props.tab].adetailer.mask_padding, + "onUpdate:value": _cache[8] || (_cache[8] = ($event) => target.value[props.tab].adetailer.mask_padding = $event), + size: "small", + min: 0, + style: { "flex-grow": "1" } + }, null, 8, ["value"]) + ]), + createBaseVNode("div", _hoisted_17, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_18 + ]), + default: withCtx(() => [ + createTextVNode(" Iterations should increase the quality of the image at the cost of time. ") + ]), + _: 1 + }), + createVNode(unref(NInputNumber), { + value: target.value[props.tab].adetailer.iterations, + "onUpdate:value": _cache[9] || (_cache[9] = ($event) => target.value[props.tab].adetailer.iterations = $event), + disabled: !unref(isDev), + size: "small", + min: 1, + style: { "flex-grow": "1" } + }, null, 8, ["value", "disabled"]) + ]), + createBaseVNode("div", _hoisted_19, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_20 + ]), + default: withCtx(() => [ + createTextVNode(" Hom much should the image be upscaled before processing. This increases the quality of the image at the cost of time as bigger canvas can usually hold more detail. ") + ]), + _: 1 + }), + createVNode(unref(NSlider), { + value: target.value[props.tab].adetailer.upscale, + "onUpdate:value": _cache[10] || (_cache[10] = ($event) => target.value[props.tab].adetailer.upscale = $event), + min: 1, + max: 4, + step: 0.1, + style: { "margin-right": "12px" } + }, null, 8, ["value"]), + createVNode(unref(NInputNumber), { + value: target.value[props.tab].adetailer.upscale, + "onUpdate:value": _cache[11] || (_cache[11] = ($event) => target.value[props.tab].adetailer.upscale = $event), + size: "small", + style: { "min-width": "96px", "width": "96px" }, + min: 1, + max: 4, + step: 0.1 + }, null, 8, ["value"]) + ]) + ]), + _: 1 + })) : createCommentVNode("", true) + ], 64); + }; + } +}); +const _hoisted_1$2 = { class: "flex-container" }; +const _hoisted_2$2 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Enabled", -1); +const _hoisted_3$2 = { key: 0 }; +const _hoisted_4$2 = { class: "flex-container" }; +const _hoisted_5$2 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Width", -1); +const _hoisted_6$2 = { class: "flex-container" }; +const _hoisted_7$2 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Height", -1); +const _sfc_main$4 = /* @__PURE__ */ defineComponent({ + __name: "ResizeFromDimensionsInput", + setup(__props) { + const settings = useSettings(); + const global = useState(); + return (_ctx, _cache) => { + return openBlock(), createBlock(unref(NCard), { + title: "Resize from", + class: "generate-extra-card" + }, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_1$2, [ + _hoisted_2$2, + createVNode(unref(NSwitch), { + value: unref(global).state.txt2img.sdxl_resize, + "onUpdate:value": _cache[0] || (_cache[0] = ($event) => unref(global).state.txt2img.sdxl_resize = $event) + }, null, 8, ["value"]) + ]), + unref(global).state.txt2img.sdxl_resize ? (openBlock(), createElementBlock("div", _hoisted_3$2, [ + createBaseVNode("div", _hoisted_4$2, [ + _hoisted_5$2, + createVNode(unref(NSlider), { + value: unref(settings).data.settings.flags.sdxl.original_size.width, + "onUpdate:value": _cache[1] || (_cache[1] = ($event) => unref(settings).data.settings.flags.sdxl.original_size.width = $event), + min: 128, + max: 2048, + step: 1, + style: { "margin-right": "12px" } + }, null, 8, ["value"]), + createVNode(unref(NInputNumber), { + value: unref(settings).data.settings.flags.sdxl.original_size.width, + "onUpdate:value": _cache[2] || (_cache[2] = ($event) => unref(settings).data.settings.flags.sdxl.original_size.width = $event), + size: "small", + style: { "min-width": "96px", "width": "96px" }, + step: 1 + }, null, 8, ["value"]) + ]), + createBaseVNode("div", _hoisted_6$2, [ + _hoisted_7$2, + createVNode(unref(NSlider), { + value: unref(settings).data.settings.flags.sdxl.original_size.height, + "onUpdate:value": _cache[3] || (_cache[3] = ($event) => unref(settings).data.settings.flags.sdxl.original_size.height = $event), + min: 128, + max: 2048, + step: 1, + style: { "margin-right": "12px" } + }, null, 8, ["value"]), + createVNode(unref(NInputNumber), { + value: unref(settings).data.settings.flags.sdxl.original_size.height, + "onUpdate:value": _cache[4] || (_cache[4] = ($event) => unref(settings).data.settings.flags.sdxl.original_size.height = $event), + size: "small", + style: { "min-width": "96px", "width": "96px" }, + step: 1 + }, null, 8, ["value"]) + ]) + ])) : createCommentVNode("", true) + ]), + _: 1 + }); + }; + } +}); +const _sfc_main$3 = /* @__PURE__ */ defineComponent({ + __name: "Restoration", + props: { + tab: { + type: String, + required: true + }, + target: { + type: String, + required: false, + default: "settings" + } + }, + setup(__props) { + const props = __props; + return (_ctx, _cache) => { + return openBlock(), createBlock(unref(NCard), { + title: "Restoration", + class: "generate-extra-card" + }, { + default: withCtx(() => [ + createVNode(unref(NTabs), { + animated: "", + type: "segment" + }, { + default: withCtx(() => [ + createVNode(unref(NTabPane), { + tab: "ADetailer", + name: "adetailer" + }, { + default: withCtx(() => [ + createVNode(unref(_sfc_main$5), { + tab: props.tab, + target: props.target + }, null, 8, ["tab", "target"]) + ]), + _: 1 + }) + ]), + _: 1 + }) + ]), + _: 1 + }); + }; + } +}); const _hoisted_1$1 = { class: "flex-container" }; const _hoisted_2$1 = /* @__PURE__ */ createBaseVNode("div", { class: "slider-label" }, [ /* @__PURE__ */ createBaseVNode("p", null, "Enabled") ], -1); const _hoisted_3$1 = { class: "flex-container" }; -const _hoisted_4$1 = /* @__PURE__ */ createBaseVNode("div", { class: "slider-label" }, [ - /* @__PURE__ */ createBaseVNode("p", null, "Mode") -], -1); -const _hoisted_5$1 = { key: 0 }; +const _hoisted_4$1 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Refiner model", -1); +const _hoisted_5$1 = /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, " Generally, the refiner that came with your model is bound to generate the best results. ", -1); const _hoisted_6$1 = { class: "flex-container" }; -const _hoisted_7$1 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Upscaler", -1); -const _hoisted_8$1 = { key: 1 }; +const _hoisted_7$1 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Steps", -1); +const _hoisted_8$1 = /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "We recommend using 20-50 steps for most images.", -1); const _hoisted_9$1 = { class: "flex-container" }; -const _hoisted_10$1 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Antialiased", -1); -const _hoisted_11$1 = { class: "flex-container" }; -const _hoisted_12$1 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Latent Mode", -1); -const _hoisted_13$1 = { class: "flex-container" }; -const _hoisted_14$1 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Steps", -1); -const _hoisted_15 = /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "We recommend using 20-50 steps for most images.", -1); -const _hoisted_16 = { class: "flex-container" }; -const _hoisted_17 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Scale", -1); -const _hoisted_18 = { class: "flex-container" }; -const _hoisted_19 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Strength", -1); +const _hoisted_10 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Aesthetic Score", -1); +const _hoisted_11 = /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "Generally best to keep it around 6.", -1); +const _hoisted_12 = { class: "flex-container" }; +const _hoisted_13 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Negative Aesthetic Score", -1); +const _hoisted_14 = /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "Generally best to keep it around 3.", -1); +const _hoisted_15 = { class: "flex-container" }; +const _hoisted_16 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Strength", -1); const _sfc_main$2 = /* @__PURE__ */ defineComponent({ - __name: "HighResFix", + __name: "XLRefiner", setup(__props) { const settings = useSettings(); const global = useState(); - const imageUpscalerOptions = computed(() => { - const localModels = global.state.models.filter( - (model) => model.backend === "Upscaler" && !(upscalerOptions.map((option) => option.label).indexOf(model.name) !== -1) - ).map((model) => ({ - label: model.name, - value: model.path - })); - return [...upscalerOptions, ...localModels]; + const refinerModels = computed(() => { + return global.state.models.filter((model) => model.type === "SDXL").map((model) => { + return { + label: model.name, + value: model.name + }; + }); }); - const latentUpscalerOptions = [ - { label: "Nearest", value: "nearest" }, - { label: "Nearest exact", value: "nearest-exact" }, - { label: "Area", value: "area" }, - { label: "Bilinear", value: "bilinear" }, - { label: "Bicubic", value: "bicubic" }, - { - label: "Bislerp (Original, slow)", - value: "bislerp-original" - }, - { - label: "Bislerp (Tortured, fast)", - value: "bislerp-tortured" - } - ]; + async function onRefinerChange(modelStr) { + settings.data.settings.flags.refiner.model = modelStr; + } return (_ctx, _cache) => { - return openBlock(), createBlock(unref(NCard), { title: "Highres fix" }, { + return openBlock(), createBlock(unref(NCard), { + title: "SDXL Refiner", + class: "generate-extra-card" + }, { default: withCtx(() => [ createBaseVNode("div", _hoisted_1$1, [ _hoisted_2$1, createVNode(unref(NSwitch), { - value: unref(global).state.txt2img.highres, - "onUpdate:value": _cache[0] || (_cache[0] = ($event) => unref(global).state.txt2img.highres = $event) + value: unref(global).state.txt2img.refiner, + "onUpdate:value": _cache[0] || (_cache[0] = ($event) => unref(global).state.txt2img.refiner = $event) }, null, 8, ["value"]) ]), - unref(global).state.txt2img.highres ? (openBlock(), createBlock(unref(NSpace), { + unref(global).state.txt2img.refiner ? (openBlock(), createBlock(unref(NSpace), { key: 0, vertical: "", class: "left-container" }, { default: withCtx(() => [ createBaseVNode("div", _hoisted_3$1, [ - _hoisted_4$1, + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_4$1 + ]), + default: withCtx(() => [ + createTextVNode(" The SDXL-Refiner model to use for this step of diffusion. "), + _hoisted_5$1 + ]), + _: 1 + }), createVNode(unref(NSelect), { - value: unref(settings).data.settings.flags.highres.mode, - "onUpdate:value": _cache[1] || (_cache[1] = ($event) => unref(settings).data.settings.flags.highres.mode = $event), - options: [ - { label: "Latent", value: "latent" }, - { label: "Image", value: "image" } - ] - }, null, 8, ["value"]) + options: refinerModels.value, + placeholder: "None", + "onUpdate:value": onRefinerChange, + value: unref(settings).data.settings.flags.refiner.model !== null ? unref(settings).data.settings.flags.refiner.model : "" + }, null, 8, ["options", "value"]) ]), - unref(settings).data.settings.flags.highres.mode === "image" ? (openBlock(), createElementBlock("div", _hoisted_5$1, [ - createBaseVNode("div", _hoisted_6$1, [ - _hoisted_7$1, - createVNode(unref(NSelect), { - value: unref(settings).data.settings.flags.highres.image_upscaler, - "onUpdate:value": _cache[2] || (_cache[2] = ($event) => unref(settings).data.settings.flags.highres.image_upscaler = $event), - size: "small", - style: { "flex-grow": "1" }, - filterable: "", - options: imageUpscalerOptions.value - }, null, 8, ["value", "options"]) - ]) - ])) : (openBlock(), createElementBlock("div", _hoisted_8$1, [ - createBaseVNode("div", _hoisted_9$1, [ - _hoisted_10$1, - createVNode(unref(NSwitch), { - value: unref(settings).data.settings.flags.highres.antialiased, - "onUpdate:value": _cache[3] || (_cache[3] = ($event) => unref(settings).data.settings.flags.highres.antialiased = $event) - }, null, 8, ["value"]) - ]), - createBaseVNode("div", _hoisted_11$1, [ - _hoisted_12$1, - createVNode(unref(NSelect), { - value: unref(settings).data.settings.flags.highres.latent_scale_mode, - "onUpdate:value": _cache[4] || (_cache[4] = ($event) => unref(settings).data.settings.flags.highres.latent_scale_mode = $event), - size: "small", - style: { "flex-grow": "1" }, - filterable: "", - options: latentUpscalerOptions - }, null, 8, ["value"]) - ]) - ])), - createBaseVNode("div", _hoisted_13$1, [ + createBaseVNode("div", _hoisted_6$1, [ createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { trigger: withCtx(() => [ - _hoisted_14$1 + _hoisted_7$1 ]), default: withCtx(() => [ createTextVNode(" Number of steps to take in the diffusion process. Higher values will result in more detailed images but will take longer to generate. There is also a point of diminishing returns around 100 steps. "), - _hoisted_15 + _hoisted_8$1 ]), _: 1 }), createVNode(unref(NSlider), { - value: unref(settings).data.settings.flags.highres.steps, - "onUpdate:value": _cache[5] || (_cache[5] = ($event) => unref(settings).data.settings.flags.highres.steps = $event), + value: unref(settings).data.settings.flags.refiner.steps, + "onUpdate:value": _cache[1] || (_cache[1] = ($event) => unref(settings).data.settings.flags.refiner.steps = $event), min: 5, max: 300, style: { "margin-right": "12px" } }, null, 8, ["value"]), createVNode(unref(NInputNumber), { - value: unref(settings).data.settings.flags.highres.steps, - "onUpdate:value": _cache[6] || (_cache[6] = ($event) => unref(settings).data.settings.flags.highres.steps = $event), + value: unref(settings).data.settings.flags.refiner.steps, + "onUpdate:value": _cache[2] || (_cache[2] = ($event) => unref(settings).data.settings.flags.refiner.steps = $event), + size: "small", + style: { "min-width": "96px", "width": "96px" } + }, null, 8, ["value"]) + ]), + createBaseVNode("div", _hoisted_9$1, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_10 + ]), + default: withCtx(() => [ + createTextVNode(' Generally higher numbers will produce "more professional" images. '), + _hoisted_11 + ]), + _: 1 + }), + createVNode(unref(NSlider), { + value: unref(settings).data.settings.flags.refiner.aesthetic_score, + "onUpdate:value": _cache[3] || (_cache[3] = ($event) => unref(settings).data.settings.flags.refiner.aesthetic_score = $event), + min: 0, + max: 10, + step: 0.5, + style: { "margin-right": "12px" } + }, null, 8, ["value"]), + createVNode(unref(NInputNumber), { + value: unref(settings).data.settings.flags.refiner.aesthetic_score, + "onUpdate:value": _cache[4] || (_cache[4] = ($event) => unref(settings).data.settings.flags.refiner.aesthetic_score = $event), + min: 0, + max: 10, + step: 0.25, size: "small", style: { "min-width": "96px", "width": "96px" } }, null, 8, ["value"]) ]), - createBaseVNode("div", _hoisted_16, [ - _hoisted_17, + createBaseVNode("div", _hoisted_12, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_13 + ]), + default: withCtx(() => [ + createTextVNode(" Makes sense to keep this lower than aesthetic score. "), + _hoisted_14 + ]), + _: 1 + }), createVNode(unref(NSlider), { - value: unref(settings).data.settings.flags.highres.scale, - "onUpdate:value": _cache[7] || (_cache[7] = ($event) => unref(settings).data.settings.flags.highres.scale = $event), - min: 1, - max: 8, - step: 0.1, + value: unref(settings).data.settings.flags.refiner.negative_aesthetic_score, + "onUpdate:value": _cache[5] || (_cache[5] = ($event) => unref(settings).data.settings.flags.refiner.negative_aesthetic_score = $event), + min: 0, + max: 10, + step: 0.5, style: { "margin-right": "12px" } }, null, 8, ["value"]), createVNode(unref(NInputNumber), { - value: unref(settings).data.settings.flags.highres.scale, - "onUpdate:value": _cache[8] || (_cache[8] = ($event) => unref(settings).data.settings.flags.highres.scale = $event), + value: unref(settings).data.settings.flags.refiner.negative_aesthetic_score, + "onUpdate:value": _cache[6] || (_cache[6] = ($event) => unref(settings).data.settings.flags.refiner.negative_aesthetic_score = $event), + min: 0, + max: 10, + step: 0.25, size: "small", - style: { "min-width": "96px", "width": "96px" }, - step: 0.1 + style: { "min-width": "96px", "width": "96px" } }, null, 8, ["value"]) ]), - createBaseVNode("div", _hoisted_18, [ - _hoisted_19, + createBaseVNode("div", _hoisted_15, [ + _hoisted_16, createVNode(unref(NSlider), { - value: unref(settings).data.settings.flags.highres.strength, - "onUpdate:value": _cache[9] || (_cache[9] = ($event) => unref(settings).data.settings.flags.highres.strength = $event), + value: unref(settings).data.settings.flags.refiner.strength, + "onUpdate:value": _cache[7] || (_cache[7] = ($event) => unref(settings).data.settings.flags.refiner.strength = $event), min: 0.1, max: 0.9, step: 0.05, style: { "margin-right": "12px" } }, null, 8, ["value"]), createVNode(unref(NInputNumber), { - value: unref(settings).data.settings.flags.highres.strength, - "onUpdate:value": _cache[10] || (_cache[10] = ($event) => unref(settings).data.settings.flags.highres.strength = $event), + value: unref(settings).data.settings.flags.refiner.strength, + "onUpdate:value": _cache[8] || (_cache[8] = ($event) => unref(settings).data.settings.flags.refiner.strength = $event), size: "small", style: { "min-width": "96px", "width": "96px" }, min: 0.1, @@ -198,24 +567,20 @@ const _hoisted_2 = { class: "flex-container" }; const _hoisted_3 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Steps", -1); const _hoisted_4 = /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "We recommend using 20-50 steps for most images.", -1); const _hoisted_5 = { class: "flex-container" }; -const _hoisted_6 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "CFG Scale", -1); -const _hoisted_7 = /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "We recommend using 3-15 for most images.", -1); -const _hoisted_8 = { - key: 0, - class: "flex-container" -}; -const _hoisted_9 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Self Attention Scale", -1); -const _hoisted_10 = { class: "flex-container" }; -const _hoisted_11 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Batch Count", -1); -const _hoisted_12 = { class: "flex-container" }; -const _hoisted_13 = /* @__PURE__ */ createBaseVNode("p", { style: { "margin-right": "12px", "width": "75px" } }, "Seed", -1); -const _hoisted_14 = /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "For random seed use -1.", -1); +const _hoisted_6 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Batch Count", -1); +const _hoisted_7 = { class: "flex-container" }; +const _hoisted_8 = /* @__PURE__ */ createBaseVNode("p", { style: { "margin-right": "12px", "width": "75px" } }, "Seed", -1); +const _hoisted_9 = /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "For random seed use -1.", -1); const _sfc_main$1 = /* @__PURE__ */ defineComponent({ __name: "Txt2Img", setup(__props) { const global = useState(); const settings = useSettings(); const messageHandler = useMessage(); + const isSelectedModelSDXL = computed(() => { + var _a; + return ((_a = settings.data.settings.model) == null ? void 0 : _a.type) === "SDXL"; + }); const checkSeed = (seed) => { if (seed === -1) { seed = Math.floor(Math.random() * 999999999999); @@ -223,7 +588,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({ return seed; }; const generate = () => { - var _a; + var _a, _b; if (settings.data.settings.txt2img.seed === null) { messageHandler.error("Please set a seed"); return; @@ -260,17 +625,77 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({ model: (_a = settings.data.settings.model) == null ? void 0 : _a.path, backend: "PyTorch", autoload: false, - flags: global.state.txt2img.highres ? { - highres_fix: { - mode: settings.data.settings.flags.highres.mode, - image_upscaler: settings.data.settings.flags.highres.image_upscaler, - scale: settings.data.settings.flags.highres.scale, - latent_scale_mode: settings.data.settings.flags.highres.latent_scale_mode, - strength: settings.data.settings.flags.highres.strength, - steps: settings.data.settings.flags.highres.steps, - antialiased: settings.data.settings.flags.highres.antialiased - } - } : {} + flags: { + ...isSelectedModelSDXL.value && global.state.txt2img.sdxl_resize ? { + sdxl: { + original_size: { + width: settings.data.settings.flags.sdxl.original_size.width, + height: settings.data.settings.flags.sdxl.original_size.height + } + } + } : {}, + ...settings.data.settings.txt2img.highres.enabled ? { + highres_fix: { + mode: settings.data.settings.txt2img.highres.mode, + image_upscaler: settings.data.settings.txt2img.highres.image_upscaler, + scale: settings.data.settings.txt2img.highres.scale, + latent_scale_mode: settings.data.settings.txt2img.highres.latent_scale_mode, + strength: settings.data.settings.txt2img.highres.strength, + steps: settings.data.settings.txt2img.highres.steps, + antialiased: settings.data.settings.txt2img.highres.antialiased + } + } : global.state.txt2img.refiner ? { + refiner: { + model: settings.data.settings.flags.refiner.model, + aesthetic_score: settings.data.settings.flags.refiner.aesthetic_score, + negative_aesthetic_score: settings.data.settings.flags.refiner.negative_aesthetic_score, + steps: settings.data.settings.flags.refiner.steps, + strength: settings.data.settings.flags.refiner.strength + } + } : {}, + ...settings.data.settings.txt2img.deepshrink.enabled ? { + deepshrink: { + early_out: settings.data.settings.txt2img.deepshrink.early_out, + depth_1: settings.data.settings.txt2img.deepshrink.depth_1, + stop_at_1: settings.data.settings.txt2img.deepshrink.stop_at_1, + depth_2: settings.data.settings.txt2img.deepshrink.depth_2, + stop_at_2: settings.data.settings.txt2img.deepshrink.stop_at_2, + scaler: settings.data.settings.txt2img.deepshrink.scaler, + base_scale: settings.data.settings.txt2img.deepshrink.base_scale + } + } : {}, + ...settings.data.settings.txt2img.scalecrafter.enabled ? { + scalecrafter: { + unsafe_resolutions: settings.data.settings.txt2img.scalecrafter.unsafe_resolutions, + base: (_b = settings.data.settings.model) == null ? void 0 : _b.type, + disperse: settings.data.settings.txt2img.scalecrafter.disperse + } + } : {}, + ...settings.data.settings.txt2img.upscale.enabled ? { + upscale: { + upscale_factor: settings.data.settings.txt2img.upscale.upscale_factor, + tile_size: settings.data.settings.txt2img.upscale.tile_size, + tile_padding: settings.data.settings.txt2img.upscale.tile_padding, + model: settings.data.settings.txt2img.upscale.model + } + } : {}, + ...settings.data.settings.txt2img.adetailer.enabled ? { + adetailer: { + cfg_scale: settings.data.settings.txt2img.adetailer.cfg_scale, + mask_blur: settings.data.settings.txt2img.adetailer.mask_blur, + mask_dilation: settings.data.settings.txt2img.adetailer.mask_dilation, + mask_padding: settings.data.settings.txt2img.adetailer.mask_padding, + iterations: settings.data.settings.txt2img.adetailer.iterations, + upscale: settings.data.settings.txt2img.adetailer.upscale, + scheduler: settings.data.settings.txt2img.adetailer.sampler, + strength: settings.data.settings.txt2img.adetailer.strength, + seed: settings.data.settings.txt2img.adetailer.seed, + self_attention_scale: settings.data.settings.txt2img.adetailer.self_attention_scale, + sigmas: settings.data.settings.txt2img.adetailer.sigmas, + steps: settings.data.settings.txt2img.adetailer.steps + } + } : {} + } }) }).then((res) => { if (!res.ok) { @@ -317,158 +742,111 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({ vertical: "", class: "left-container" }, { - default: withCtx(() => { - var _a; - return [ - createVNode(unref(Prompt), { tab: "txt2img" }), - createVNode(unref(_sfc_main$3), { type: "txt2img" }), - createVNode(unref(_sfc_main$4), { - "dimensions-object": unref(settings).data.settings.txt2img - }, null, 8, ["dimensions-object"]), - createBaseVNode("div", _hoisted_2, [ - createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { - trigger: withCtx(() => [ - _hoisted_3 - ]), - default: withCtx(() => [ - createTextVNode(" Number of steps to take in the diffusion process. Higher values will result in more detailed images but will take longer to generate. There is also a point of diminishing returns around 100 steps. "), - _hoisted_4 - ]), - _: 1 - }), - createVNode(unref(NSlider), { - value: unref(settings).data.settings.txt2img.steps, - "onUpdate:value": _cache[0] || (_cache[0] = ($event) => unref(settings).data.settings.txt2img.steps = $event), - min: 5, - max: 300, - style: { "margin-right": "12px" } - }, null, 8, ["value"]), - createVNode(unref(NInputNumber), { - value: unref(settings).data.settings.txt2img.steps, - "onUpdate:value": _cache[1] || (_cache[1] = ($event) => unref(settings).data.settings.txt2img.steps = $event), - size: "small", - style: { "min-width": "96px", "width": "96px" } - }, null, 8, ["value"]) - ]), - createBaseVNode("div", _hoisted_5, [ - createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { - trigger: withCtx(() => [ - _hoisted_6 - ]), - default: withCtx(() => [ - createTextVNode(' Guidance scale indicates how much should model stay close to the prompt. Higher values might be exactly what you want, but generated images might have some artefacts. Lower values indicates that model can "dream" about this prompt more. '), - _hoisted_7 - ]), - _: 1 - }), - createVNode(unref(NSlider), { - value: unref(settings).data.settings.txt2img.cfg_scale, - "onUpdate:value": _cache[2] || (_cache[2] = ($event) => unref(settings).data.settings.txt2img.cfg_scale = $event), - min: 1, - max: 30, - step: 0.5, - style: { "margin-right": "12px" } - }, null, 8, ["value"]), - createVNode(unref(NInputNumber), { - value: unref(settings).data.settings.txt2img.cfg_scale, - "onUpdate:value": _cache[3] || (_cache[3] = ($event) => unref(settings).data.settings.txt2img.cfg_scale = $event), - size: "small", - style: { "min-width": "96px", "width": "96px" }, - step: 0.5 - }, null, 8, ["value"]) - ]), - Number.isInteger(unref(settings).data.settings.txt2img.sampler) && ((_a = unref(settings).data.settings.model) == null ? void 0 : _a.backend) === "PyTorch" ? (openBlock(), createElementBlock("div", _hoisted_8, [ - createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { - trigger: withCtx(() => [ - _hoisted_9 - ]), - default: withCtx(() => [ - createTextVNode(" If self attention is >0, SAG will guide the model and improve the quality of the image at the cost of speed. Higher values will follow the guidance more closely, which can lead to better, more sharp and detailed outputs. ") - ]), - _: 1 - }), - createVNode(unref(NSlider), { - value: unref(settings).data.settings.txt2img.self_attention_scale, - "onUpdate:value": _cache[4] || (_cache[4] = ($event) => unref(settings).data.settings.txt2img.self_attention_scale = $event), - min: 0, - max: 1, - step: 0.05, - style: { "margin-right": "12px" } - }, null, 8, ["value"]), - createVNode(unref(NInputNumber), { - value: unref(settings).data.settings.txt2img.self_attention_scale, - "onUpdate:value": _cache[5] || (_cache[5] = ($event) => unref(settings).data.settings.txt2img.self_attention_scale = $event), - size: "small", - style: { "min-width": "96px", "width": "96px" }, - step: 0.05 - }, null, 8, ["value"]) - ])) : createCommentVNode("", true), - createBaseVNode("div", _hoisted_10, [ - createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { - trigger: withCtx(() => [ - _hoisted_11 - ]), - default: withCtx(() => [ - createTextVNode(" Number of images to generate after each other. ") - ]), - _: 1 - }), - createVNode(unref(NSlider), { - value: unref(settings).data.settings.txt2img.batch_count, - "onUpdate:value": _cache[6] || (_cache[6] = ($event) => unref(settings).data.settings.txt2img.batch_count = $event), - min: 1, - max: 9, - style: { "margin-right": "12px" } - }, null, 8, ["value"]), - createVNode(unref(NInputNumber), { - value: unref(settings).data.settings.txt2img.batch_count, - "onUpdate:value": _cache[7] || (_cache[7] = ($event) => unref(settings).data.settings.txt2img.batch_count = $event), - size: "small", - style: { "min-width": "96px", "width": "96px" } - }, null, 8, ["value"]) - ]), - createVNode(unref(_sfc_main$5), { - "batch-size-object": unref(settings).data.settings.txt2img - }, null, 8, ["batch-size-object"]), - createBaseVNode("div", _hoisted_12, [ - createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { - trigger: withCtx(() => [ - _hoisted_13 - ]), - default: withCtx(() => [ - createTextVNode(" Seed is a number that represents the starting canvas of your image. If you want to create the same image as your friend, you can use the same settings and seed to do so. "), - _hoisted_14 - ]), - _: 1 - }), - createVNode(unref(NInputNumber), { - value: unref(settings).data.settings.txt2img.seed, - "onUpdate:value": _cache[8] || (_cache[8] = ($event) => unref(settings).data.settings.txt2img.seed = $event), - size: "small", - style: { "flex-grow": "1" } - }, null, 8, ["value"]) - ]) - ]; - }), + default: withCtx(() => [ + createVNode(unref(Prompt), { tab: "txt2img" }), + createVNode(unref(_sfc_main$6), { type: "txt2img" }), + createVNode(unref(_sfc_main$9), { + "dimensions-object": unref(settings).data.settings.txt2img + }, null, 8, ["dimensions-object"]), + createBaseVNode("div", _hoisted_2, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_3 + ]), + default: withCtx(() => [ + createTextVNode(" Number of steps to take in the diffusion process. Higher values will result in more detailed images but will take longer to generate. There is also a point of diminishing returns around 100 steps. "), + _hoisted_4 + ]), + _: 1 + }), + createVNode(unref(NSlider), { + value: unref(settings).data.settings.txt2img.steps, + "onUpdate:value": _cache[0] || (_cache[0] = ($event) => unref(settings).data.settings.txt2img.steps = $event), + min: 5, + max: 300, + style: { "margin-right": "12px" } + }, null, 8, ["value"]), + createVNode(unref(NInputNumber), { + value: unref(settings).data.settings.txt2img.steps, + "onUpdate:value": _cache[1] || (_cache[1] = ($event) => unref(settings).data.settings.txt2img.steps = $event), + size: "small", + style: { "min-width": "96px", "width": "96px" } + }, null, 8, ["value"]) + ]), + createVNode(unref(_sfc_main$7), { tab: "txt2img" }), + createVNode(unref(_sfc_main$8), { tab: "txt2img" }), + createBaseVNode("div", _hoisted_5, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_6 + ]), + default: withCtx(() => [ + createTextVNode(" Number of images to generate after each other. ") + ]), + _: 1 + }), + createVNode(unref(NSlider), { + value: unref(settings).data.settings.txt2img.batch_count, + "onUpdate:value": _cache[2] || (_cache[2] = ($event) => unref(settings).data.settings.txt2img.batch_count = $event), + min: 1, + max: 9, + style: { "margin-right": "12px" } + }, null, 8, ["value"]), + createVNode(unref(NInputNumber), { + value: unref(settings).data.settings.txt2img.batch_count, + "onUpdate:value": _cache[3] || (_cache[3] = ($event) => unref(settings).data.settings.txt2img.batch_count = $event), + size: "small", + style: { "min-width": "96px", "width": "96px" } + }, null, 8, ["value"]) + ]), + createVNode(unref(_sfc_main$a), { + "batch-size-object": unref(settings).data.settings.txt2img + }, null, 8, ["batch-size-object"]), + createBaseVNode("div", _hoisted_7, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_8 + ]), + default: withCtx(() => [ + createTextVNode(" Seed is a number that represents the starting canvas of your image. If you want to create the same image as your friend, you can use the same settings and seed to do so. "), + _hoisted_9 + ]), + _: 1 + }), + createVNode(unref(NInputNumber), { + value: unref(settings).data.settings.txt2img.seed, + "onUpdate:value": _cache[4] || (_cache[4] = ($event) => unref(settings).data.settings.txt2img.seed = $event), + size: "small", + style: { "flex-grow": "1" } + }, null, 8, ["value"]) + ]) + ]), _: 1 }) ]), _: 1 }), - createVNode(unref(_sfc_main$2), { style: { "margin-top": "12px", "margin-bottom": "12px" } }) + isSelectedModelSDXL.value ? (openBlock(), createBlock(unref(_sfc_main$4), { + key: 0, + "dimensions-object": unref(settings).data.settings.txt2img + }, null, 8, ["dimensions-object"])) : createCommentVNode("", true), + isSelectedModelSDXL.value ? (openBlock(), createBlock(unref(_sfc_main$2), { key: 1 })) : createCommentVNode("", true), + createVNode(unref(_sfc_main$b), { tab: "txt2img" }), + createVNode(unref(_sfc_main$c), { tab: "txt2img" }), + createVNode(unref(_sfc_main$3), { tab: "txt2img" }) ]), _: 1 }), createVNode(unref(NGi), null, { default: withCtx(() => [ - createVNode(unref(_sfc_main$6), { generate }), - createVNode(unref(_sfc_main$7), { + createVNode(unref(_sfc_main$d), { generate }), + createVNode(unref(_sfc_main$e), { "current-image": unref(global).state.txt2img.currentImage, images: unref(global).state.txt2img.images, data: unref(settings).data.settings.txt2img, - onImageClicked: _cache[9] || (_cache[9] = ($event) => unref(global).state.txt2img.currentImage = $event) + onImageClicked: _cache[5] || (_cache[5] = ($event) => unref(global).state.txt2img.currentImage = $event) }, null, 8, ["current-image", "images", "data"]), - createVNode(unref(_sfc_main$8), { + createVNode(unref(_sfc_main$f), { style: { "margin-top": "12px" }, "gen-data": unref(global).state.txt2img.genData }, null, 8, ["gen-data"]) diff --git a/frontend/dist/assets/TrashBin.js b/frontend/dist/assets/TrashBin.js index 8f894ef91..94dfc07fe 100644 --- a/frontend/dist/assets/TrashBin.js +++ b/frontend/dist/assets/TrashBin.js @@ -1,4 +1,4 @@ -import { O as replaceable, y as h, d as defineComponent, bL as isBrowser, T as useTheme, P as createInjectionKey, aa as c, Q as cB, bM as fadeInTransition, aS as fadeInScaleUpTransition, ac as cNotM, X as toRef, bN as imageLight, z as ref, ad as useLocale, K as watch, aD as on, aC as off, aB as onBeforeUnmount, R as inject, c as computed, S as useConfig, Y as useThemeClass, bO as isMounted, bP as LazyTeleport, br as withDirectives, bQ as zindexable, aX as Transition, F as Fragment, aj as NBaseIcon, bs as vShow, ba as normalizeStyle, bR as kebabCase, l as NTooltip, aR as beforeNextFrameOnce, aW as createId, a3 as provide, bC as getCurrentInstance, b9 as onMounted, af as watchEffect, o as openBlock, j as createElementBlock, f as createBaseVNode } from "./index.js"; +import { P as replaceable, A as h, d as defineComponent, bQ as isBrowser, U as useTheme, Q as createInjectionKey, ab as c, R as cB, bR as fadeInTransition, aT as fadeInScaleUpTransition, ad as cNotM, Y as toRef, bS as imageLight, B as ref, ae as useLocale, K as watch, aE as on, aD as off, aC as onBeforeUnmount, S as inject, c as computed, T as useConfig, Z as useThemeClass, bT as isMounted, bU as LazyTeleport, bv as withDirectives, bV as zindexable, aY as Transition, F as Fragment, ak as NBaseIcon, bw as vShow, bc as normalizeStyle, bW as kebabCase, N as NTooltip, aS as beforeNextFrameOnce, aX as createId, a4 as provide, bG as getCurrentInstance, bb as onMounted, ag as watchEffect, o as openBlock, a as createElementBlock, b as createBaseVNode } from "./index.js"; const RotateClockwiseIcon = replaceable("rotateClockwise", h( "svg", { viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, diff --git a/frontend/dist/assets/SamplerPicker.vue_vue_type_script_setup_true_lang.js b/frontend/dist/assets/Upscale.vue_vue_type_script_setup_true_lang.js similarity index 69% rename from frontend/dist/assets/SamplerPicker.vue_vue_type_script_setup_true_lang.js rename to frontend/dist/assets/Upscale.vue_vue_type_script_setup_true_lang.js index d3120ca90..eeae2599e 100644 --- a/frontend/dist/assets/SamplerPicker.vue_vue_type_script_setup_true_lang.js +++ b/frontend/dist/assets/Upscale.vue_vue_type_script_setup_true_lang.js @@ -1,7 +1,8 @@ -import { R as inject, bC as getCurrentInstance, K as watch, aB as onBeforeUnmount, Q as cB, ab as cM, aa as c, P as createInjectionKey, d as defineComponent, S as useConfig, T as useTheme, z as ref, a3 as provide, y as h, bD as formLight, a2 as keysOf, c as computed, az as formatLength, aH as get, bE as commonVariables, at as cE, X as toRef, aW as createId, bF as formItemInjectionKey, b9 as onMounted, ah as createKey, Y as useThemeClass, aX as Transition, av as resolveWrappedSlot, aM as warn, u as useSettings, o as openBlock, j as createElementBlock, f as createBaseVNode, g as createVNode, w as withCtx, h as unref, n as NCard, F as Fragment, L as renderList, A as NButton, k as createTextVNode, C as toDisplayString, by as convertToTextString, e as createBlock, bG as resolveDynamicComponent, bd as NModal, l as NTooltip, i as NSelect, B as NIcon } from "./index.js"; -import { S as Settings, a as NCheckbox } from "./Settings.js"; +import { S as inject, bG as getCurrentInstance, K as watch, aC as onBeforeUnmount, R as cB, ac as cM, ab as c, Q as createInjectionKey, d as defineComponent, T as useConfig, U as useTheme, B as ref, a4 as provide, A as h, bH as formLight, a3 as keysOf, c as computed, aA as formatLength, aI as get, bI as commonVariables, au as cE, Y as toRef, aX as createId, bJ as formItemInjectionKey, bb as onMounted, ai as createKey, Z as useThemeClass, aY as Transition, aw as resolveWrappedSlot, aO as warn, u as useSettings, o as openBlock, a as createElementBlock, b as createBaseVNode, e as createVNode, f as unref, w as withCtx, h as createTextVNode, bK as NAlert, m as NCard, q as NSelect, k as createCommentVNode, F as Fragment, l as useState, L as upscalerOptions, g as createBlock, N as NTooltip, j as NSpace, n as NTabPane, p as NTabs, M as renderList, C as NButton, E as toDisplayString, bC as convertToTextString, bL as resolveDynamicComponent, bh as NModal, D as NIcon } from "./index.js"; +import { N as NSwitch } from "./Switch.js"; import { N as NInputNumber } from "./InputNumber.js"; -import { a as NSlider } from "./Switch.js"; +import { N as NSlider } from "./Slider.js"; +import { S as Settings, a as NCheckbox } from "./Settings.js"; function useInjectionInstanceCollection(injectionName, collectionKey, registerKeyRef) { var _a; const injection = inject(injectionName, null); @@ -1839,17 +1840,472 @@ const NFormItem = defineComponent({ ); } }); -const _hoisted_1 = { class: "flex-container" }; -const _hoisted_2 = { style: { "margin-left": "12px", "margin-right": "12px", "white-space": "nowrap" } }; -const _hoisted_3 = /* @__PURE__ */ createBaseVNode("p", { style: { "margin-right": "12px", "width": "100px" } }, "Sampler", -1); -const _hoisted_4 = /* @__PURE__ */ createBaseVNode("a", { +const _hoisted_1$4 = { class: "flex-container" }; +const _hoisted_2$4 = /* @__PURE__ */ createBaseVNode("div", { class: "slider-label" }, [ + /* @__PURE__ */ createBaseVNode("p", null, "Enabled") +], -1); +const _hoisted_3$4 = { key: 0 }; +const _hoisted_4$4 = /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "diffusers", -1); +const _hoisted_5$4 = { class: "flex-container space-between" }; +const _hoisted_6$4 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Depth", -1); +const _hoisted_7$4 = { class: "flex-container" }; +const _hoisted_8$3 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Stop at", -1); +const _hoisted_9$3 = { class: "flex-container space-between" }; +const _hoisted_10$2 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Depth", -1); +const _hoisted_11$1 = { class: "flex-container" }; +const _hoisted_12$1 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Stop at", -1); +const _hoisted_13$1 = { class: "flex-container" }; +const _hoisted_14$1 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Scale", -1); +const _hoisted_15$1 = { class: "flex-container" }; +const _hoisted_16$1 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Latent scaler", -1); +const _hoisted_17$1 = { class: "flex-container" }; +const _hoisted_18$1 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Early out", -1); +const _sfc_main$5 = /* @__PURE__ */ defineComponent({ + __name: "DeepShrink", + props: { + tab: { + type: String, + required: true + }, + target: { + type: String, + required: false, + default: "settings" + } + }, + setup(__props) { + const props = __props; + const settings = useSettings(); + const latentUpscalerOptions = [ + { label: "Nearest", value: "nearest" }, + { label: "Nearest exact", value: "nearest-exact" }, + { label: "Area", value: "area" }, + { label: "Bilinear", value: "bilinear" }, + { label: "Bicubic", value: "bicubic" }, + { label: "Bislerp", value: "bislerp" } + ]; + const target = computed(() => { + if (props.target === "settings") { + return settings.data.settings; + } + return settings.defaultSettings; + }); + return (_ctx, _cache) => { + return openBlock(), createElementBlock(Fragment, null, [ + createBaseVNode("div", _hoisted_1$4, [ + _hoisted_2$4, + createVNode(unref(NSwitch), { + value: target.value[props.tab].deepshrink.enabled, + "onUpdate:value": _cache[0] || (_cache[0] = ($event) => target.value[props.tab].deepshrink.enabled = $event) + }, null, 8, ["value"]) + ]), + target.value[props.tab].deepshrink.enabled ? (openBlock(), createElementBlock("div", _hoisted_3$4, [ + createVNode(unref(NAlert), { type: "warning" }, { + default: withCtx(() => [ + createTextVNode(" Only works on "), + _hoisted_4$4, + createTextVNode(" samplers ") + ]), + _: 1 + }), + createVNode(unref(NCard), { + bordered: false, + title: "First layer" + }, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_5$4, [ + _hoisted_6$4, + createVNode(unref(NInputNumber), { + value: target.value[props.tab].deepshrink.depth_1, + "onUpdate:value": _cache[1] || (_cache[1] = ($event) => target.value[props.tab].deepshrink.depth_1 = $event), + max: 4, + min: 1, + step: 1 + }, null, 8, ["value"]) + ]), + createBaseVNode("div", _hoisted_7$4, [ + _hoisted_8$3, + createVNode(unref(NSlider), { + value: target.value[props.tab].deepshrink.stop_at_1, + "onUpdate:value": _cache[2] || (_cache[2] = ($event) => target.value[props.tab].deepshrink.stop_at_1 = $event), + min: 0.05, + max: 1, + step: 0.05, + style: { "margin-right": "12px" } + }, null, 8, ["value"]), + createVNode(unref(NInputNumber), { + value: target.value[props.tab].deepshrink.stop_at_1, + "onUpdate:value": _cache[3] || (_cache[3] = ($event) => target.value[props.tab].deepshrink.stop_at_1 = $event), + max: 1, + min: 0.05, + step: 0.05 + }, null, 8, ["value"]) + ]) + ]), + _: 1 + }), + createVNode(unref(NCard), { + bordered: false, + title: "Second layer" + }, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_9$3, [ + _hoisted_10$2, + createVNode(unref(NInputNumber), { + value: target.value[props.tab].deepshrink.depth_2, + "onUpdate:value": _cache[4] || (_cache[4] = ($event) => target.value[props.tab].deepshrink.depth_2 = $event), + max: 4, + min: 1, + step: 1 + }, null, 8, ["value"]) + ]), + createBaseVNode("div", _hoisted_11$1, [ + _hoisted_12$1, + createVNode(unref(NSlider), { + value: target.value[props.tab].deepshrink.stop_at_2, + "onUpdate:value": _cache[5] || (_cache[5] = ($event) => target.value[props.tab].deepshrink.stop_at_2 = $event), + min: 0.05, + max: 1, + step: 0.05 + }, null, 8, ["value"]), + createVNode(unref(NInputNumber), { + value: target.value[props.tab].deepshrink.stop_at_2, + "onUpdate:value": _cache[6] || (_cache[6] = ($event) => target.value[props.tab].deepshrink.stop_at_2 = $event), + max: 1, + min: 0.05, + step: 0.05 + }, null, 8, ["value"]) + ]) + ]), + _: 1 + }), + createVNode(unref(NCard), { + bordered: false, + title: "Scale" + }, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_13$1, [ + _hoisted_14$1, + createVNode(unref(NSlider), { + value: target.value[props.tab].deepshrink.base_scale, + "onUpdate:value": _cache[7] || (_cache[7] = ($event) => target.value[props.tab].deepshrink.base_scale = $event), + min: 0.05, + max: 1, + step: 0.05 + }, null, 8, ["value"]), + createVNode(unref(NInputNumber), { + value: target.value[props.tab].deepshrink.base_scale, + "onUpdate:value": _cache[8] || (_cache[8] = ($event) => target.value[props.tab].deepshrink.base_scale = $event), + max: 1, + min: 0.05, + step: 0.05 + }, null, 8, ["value"]) + ]), + createBaseVNode("div", _hoisted_15$1, [ + _hoisted_16$1, + createVNode(unref(NSelect), { + value: target.value[props.tab].deepshrink.scaler, + "onUpdate:value": _cache[9] || (_cache[9] = ($event) => target.value[props.tab].deepshrink.scaler = $event), + filterable: "", + options: latentUpscalerOptions + }, null, 8, ["value"]) + ]) + ]), + _: 1 + }), + createVNode(unref(NCard), { + bordered: false, + title: "Other" + }, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_17$1, [ + _hoisted_18$1, + createVNode(unref(NSwitch), { + value: target.value[props.tab].deepshrink.early_out, + "onUpdate:value": _cache[10] || (_cache[10] = ($event) => target.value[props.tab].deepshrink.early_out = $event) + }, null, 8, ["value"]) + ]) + ]), + _: 1 + }) + ])) : createCommentVNode("", true) + ], 64); + }; + } +}); +const _hoisted_1$3 = { class: "flex-container" }; +const _hoisted_2$3 = /* @__PURE__ */ createBaseVNode("div", { class: "slider-label" }, [ + /* @__PURE__ */ createBaseVNode("p", null, "Enabled") +], -1); +const _hoisted_3$3 = { class: "flex-container" }; +const _hoisted_4$3 = /* @__PURE__ */ createBaseVNode("div", { class: "slider-label" }, [ + /* @__PURE__ */ createBaseVNode("p", null, "Mode") +], -1); +const _hoisted_5$3 = { key: 0 }; +const _hoisted_6$3 = { class: "flex-container" }; +const _hoisted_7$3 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Upscaler", -1); +const _hoisted_8$2 = { key: 1 }; +const _hoisted_9$2 = { class: "flex-container" }; +const _hoisted_10$1 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Antialiased", -1); +const _hoisted_11 = { class: "flex-container" }; +const _hoisted_12 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Latent Mode", -1); +const _hoisted_13 = { class: "flex-container" }; +const _hoisted_14 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Steps", -1); +const _hoisted_15 = /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "We recommend using 20-50 steps for most images.", -1); +const _hoisted_16 = { class: "flex-container" }; +const _hoisted_17 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Scale", -1); +const _hoisted_18 = { class: "flex-container" }; +const _hoisted_19 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Strength", -1); +const _sfc_main$4 = /* @__PURE__ */ defineComponent({ + __name: "HighResFix", + props: { + tab: { + type: String, + required: true + }, + target: { + type: String, + required: false, + default: "settings" + } + }, + setup(__props) { + const props = __props; + const settings = useSettings(); + const global = useState(); + const target = computed(() => { + if (props.target === "settings") { + return settings.data.settings; + } + return settings.defaultSettings; + }); + const imageUpscalerOptions = computed(() => { + const localModels = global.state.models.filter( + (model) => model.backend === "Upscaler" && !(upscalerOptions.map((option) => option.label).indexOf(model.name) !== -1) + ).map((model) => ({ + label: model.name, + value: model.path + })); + return [...upscalerOptions, ...localModels]; + }); + const latentUpscalerOptions = [ + { label: "Nearest", value: "nearest" }, + { label: "Nearest exact", value: "nearest-exact" }, + { label: "Area", value: "area" }, + { label: "Bilinear", value: "bilinear" }, + { label: "Bicubic", value: "bicubic" }, + { label: "Bislerp", value: "bislerp" } + ]; + return (_ctx, _cache) => { + return openBlock(), createElementBlock(Fragment, null, [ + createBaseVNode("div", _hoisted_1$3, [ + _hoisted_2$3, + createVNode(unref(NSwitch), { + value: target.value[props.tab].highres.enabled, + "onUpdate:value": _cache[0] || (_cache[0] = ($event) => target.value[props.tab].highres.enabled = $event) + }, null, 8, ["value"]) + ]), + target.value[props.tab].highres.enabled ? (openBlock(), createBlock(unref(NSpace), { + key: 0, + vertical: "", + class: "left-container" + }, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_3$3, [ + _hoisted_4$3, + createVNode(unref(NSelect), { + value: target.value[props.tab].highres.mode, + "onUpdate:value": _cache[1] || (_cache[1] = ($event) => target.value[props.tab].highres.mode = $event), + options: [ + { label: "Latent", value: "latent" }, + { label: "Image", value: "image" } + ] + }, null, 8, ["value"]) + ]), + target.value[props.tab].highres.mode === "image" ? (openBlock(), createElementBlock("div", _hoisted_5$3, [ + createBaseVNode("div", _hoisted_6$3, [ + _hoisted_7$3, + createVNode(unref(NSelect), { + value: target.value[props.tab].highres.image_upscaler, + "onUpdate:value": _cache[2] || (_cache[2] = ($event) => target.value[props.tab].highres.image_upscaler = $event), + size: "small", + style: { "flex-grow": "1" }, + filterable: "", + options: imageUpscalerOptions.value + }, null, 8, ["value", "options"]) + ]) + ])) : (openBlock(), createElementBlock("div", _hoisted_8$2, [ + createBaseVNode("div", _hoisted_9$2, [ + _hoisted_10$1, + createVNode(unref(NSwitch), { + value: target.value[props.tab].highres.antialiased, + "onUpdate:value": _cache[3] || (_cache[3] = ($event) => target.value[props.tab].highres.antialiased = $event) + }, null, 8, ["value"]) + ]), + createBaseVNode("div", _hoisted_11, [ + _hoisted_12, + createVNode(unref(NSelect), { + value: target.value[props.tab].highres.latent_scale_mode, + "onUpdate:value": _cache[4] || (_cache[4] = ($event) => target.value[props.tab].highres.latent_scale_mode = $event), + size: "small", + style: { "flex-grow": "1" }, + filterable: "", + options: latentUpscalerOptions + }, null, 8, ["value"]) + ]) + ])), + createBaseVNode("div", _hoisted_13, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_14 + ]), + default: withCtx(() => [ + createTextVNode(" Number of steps to take in the diffusion process. Higher values will result in more detailed images but will take longer to generate. There is also a point of diminishing returns around 100 steps. "), + _hoisted_15 + ]), + _: 1 + }), + createVNode(unref(NSlider), { + value: target.value[props.tab].highres.steps, + "onUpdate:value": _cache[5] || (_cache[5] = ($event) => target.value[props.tab].highres.steps = $event), + min: 5, + max: 300, + style: { "margin-right": "12px" } + }, null, 8, ["value"]), + createVNode(unref(NInputNumber), { + value: target.value[props.tab].highres.steps, + "onUpdate:value": _cache[6] || (_cache[6] = ($event) => target.value[props.tab].highres.steps = $event), + size: "small", + style: { "min-width": "96px", "width": "96px" } + }, null, 8, ["value"]) + ]), + createBaseVNode("div", _hoisted_16, [ + _hoisted_17, + createVNode(unref(NSlider), { + value: target.value[props.tab].highres.scale, + "onUpdate:value": _cache[7] || (_cache[7] = ($event) => target.value[props.tab].highres.scale = $event), + min: 1, + max: 8, + step: 0.1, + style: { "margin-right": "12px" } + }, null, 8, ["value"]), + createVNode(unref(NInputNumber), { + value: target.value[props.tab].highres.scale, + "onUpdate:value": _cache[8] || (_cache[8] = ($event) => target.value[props.tab].highres.scale = $event), + size: "small", + style: { "min-width": "96px", "width": "96px" }, + step: 0.1 + }, null, 8, ["value"]) + ]), + createBaseVNode("div", _hoisted_18, [ + _hoisted_19, + createVNode(unref(NSlider), { + value: target.value[props.tab].highres.strength, + "onUpdate:value": _cache[9] || (_cache[9] = ($event) => target.value[props.tab].highres.strength = $event), + min: 0.1, + max: 0.9, + step: 0.05, + style: { "margin-right": "12px" } + }, null, 8, ["value"]), + createVNode(unref(NInputNumber), { + value: target.value[props.tab].highres.strength, + "onUpdate:value": _cache[10] || (_cache[10] = ($event) => target.value[props.tab].highres.strength = $event), + size: "small", + style: { "min-width": "96px", "width": "96px" }, + min: 0.1, + max: 0.9, + step: 0.05 + }, null, 8, ["value"]) + ]) + ]), + _: 1 + })) : createCommentVNode("", true) + ], 64); + }; + } +}); +const _sfc_main$3 = /* @__PURE__ */ defineComponent({ + __name: "HighResFixTabs", + props: { + tab: { + type: String, + required: true + }, + target: { + type: String, + required: false, + default: "settings" + } + }, + setup(__props) { + const props = __props; + return (_ctx, _cache) => { + return openBlock(), createBlock(unref(NCard), { + title: "High Resolution Fix", + class: "generate-extra-card" + }, { + default: withCtx(() => [ + createVNode(unref(NTabs), { + animated: "", + type: "segment" + }, { + default: withCtx(() => [ + createVNode(unref(NTabPane), { + tab: "Image to Image", + name: "highresfix" + }, { + default: withCtx(() => [ + createVNode(unref(_sfc_main$4), { + tab: props.tab, + target: props.target + }, null, 8, ["tab", "target"]) + ]), + _: 1 + }), + createVNode(unref(NTabPane), { + tab: "Scalecrafter", + name: "scalecrafter" + }, { + default: withCtx(() => [ + createVNode(unref(_sfc_main$1), { + tab: props.tab, + target: props.target + }, null, 8, ["tab", "target"]) + ]), + _: 1 + }), + createVNode(unref(NTabPane), { + tab: "DeepShrink", + name: "deepshrink" + }, { + default: withCtx(() => [ + createVNode(unref(_sfc_main$5), { + tab: props.tab, + target: props.target + }, null, 8, ["tab", "target"]) + ]), + _: 1 + }) + ]), + _: 1 + }) + ]), + _: 1 + }); + }; + } +}); +const _hoisted_1$2 = { class: "flex-container" }; +const _hoisted_2$2 = { style: { "margin-left": "12px", "margin-right": "12px", "white-space": "nowrap" } }; +const _hoisted_3$2 = /* @__PURE__ */ createBaseVNode("p", { style: { "margin-right": "12px", "width": "100px" } }, "Sampler", -1); +const _hoisted_4$2 = /* @__PURE__ */ createBaseVNode("a", { target: "_blank", href: "https://docs.google.com/document/d/1n0YozLAUwLJWZmbsx350UD_bwAx3gZMnRuleIZt_R1w" }, "Learn more", -1); -const _hoisted_5 = { class: "flex-container" }; -const _hoisted_6 = /* @__PURE__ */ createBaseVNode("p", { style: { "margin-right": "12px", "width": "94px" } }, "Sigmas", -1); -const _hoisted_7 = /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, 'Only "Default" and "Karras" sigmas work on diffusers samplers (and "Karras" are only applied to KDPM samplers)', -1); -const _sfc_main = /* @__PURE__ */ defineComponent({ +const _hoisted_5$2 = { class: "flex-container" }; +const _hoisted_6$2 = /* @__PURE__ */ createBaseVNode("p", { style: { "margin-right": "12px", "width": "94px" } }, "Sigmas", -1); +const _hoisted_7$2 = /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, 'Only "Default" and "Karras" sigmas work on diffusers samplers (and "Karras" are only applied to KDPM samplers)', -1); +const _sfc_main$2 = /* @__PURE__ */ defineComponent({ __name: "SamplerPicker", props: { type: { @@ -1953,7 +2409,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({ }); return (_ctx, _cache) => { return openBlock(), createElementBlock(Fragment, null, [ - createBaseVNode("div", _hoisted_1, [ + createBaseVNode("div", _hoisted_1$2, [ createVNode(unref(NModal), { show: showModal.value, "onUpdate:show": _cache[1] || (_cache[1] = ($event) => showModal.value = $event), @@ -1985,7 +2441,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({ ]), _: 2 }, 1032, ["type", "disabled", "onClick"]), - createBaseVNode("p", _hoisted_2, toDisplayString(unref(convertToTextString)(param)), 1), + createBaseVNode("p", _hoisted_2$2, toDisplayString(unref(convertToTextString)(param)), 1), (openBlock(), createBlock(resolveDynamicComponent( resolveComponent( target.value.sampler_config["ui_settings"][param], @@ -2002,11 +2458,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({ }, 8, ["show"]), createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { trigger: withCtx(() => [ - _hoisted_3 + _hoisted_3$2 ]), default: withCtx(() => [ createTextVNode(" The sampler is the method used to generate the image. Your result may vary drastically depending on the sampler you choose. "), - _hoisted_4 + _hoisted_4$2 ]), _: 1 }), @@ -2032,14 +2488,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({ _: 1 }) ]), - createBaseVNode("div", _hoisted_5, [ + createBaseVNode("div", _hoisted_5$2, [ createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { trigger: withCtx(() => [ - _hoisted_6 + _hoisted_6$2 ]), default: withCtx(() => [ createTextVNode(" Changes the sigmas used in the diffusion process. Can change the quality of the output. "), - _hoisted_7 + _hoisted_7$2 ]), _: 1 }), @@ -2054,8 +2510,263 @@ const _sfc_main = /* @__PURE__ */ defineComponent({ }; } }); +const _hoisted_1$1 = { class: "flex-container" }; +const _hoisted_2$1 = /* @__PURE__ */ createBaseVNode("div", { class: "slider-label" }, [ + /* @__PURE__ */ createBaseVNode("p", null, "Enabled") +], -1); +const _hoisted_3$1 = /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "Automatic", -1); +const _hoisted_4$1 = /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "Karras", -1); +const _hoisted_5$1 = { class: "flex-container" }; +const _hoisted_6$1 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Disperse", -1); +const _hoisted_7$1 = /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, " However, this comes at the cost of increased vram usage, generally in the range of 3-4x. ", -1); +const _hoisted_8$1 = { class: "flex-container" }; +const _hoisted_9$1 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Unsafe resolutions", -1); +const _sfc_main$1 = /* @__PURE__ */ defineComponent({ + __name: "Scalecrafter", + props: { + tab: { + type: String, + required: true + }, + target: { + type: String, + required: false, + default: "settings" + } + }, + setup(__props) { + const props = __props; + const settings = useSettings(); + const target = computed(() => { + if (props.target === "settings") { + return settings.data.settings; + } + return settings.defaultSettings; + }); + return (_ctx, _cache) => { + return openBlock(), createElementBlock(Fragment, null, [ + createBaseVNode("div", _hoisted_1$1, [ + _hoisted_2$1, + createVNode(unref(NSwitch), { + value: target.value[props.tab].scalecrafter.enabled, + "onUpdate:value": _cache[0] || (_cache[0] = ($event) => target.value[props.tab].scalecrafter.enabled = $event) + }, null, 8, ["value"]) + ]), + target.value[props.tab].scalecrafter.enabled ? (openBlock(), createBlock(unref(NSpace), { + key: 0, + vertical: "", + class: "left-container" + }, { + default: withCtx(() => [ + createVNode(unref(NAlert), { type: "warning" }, { + default: withCtx(() => [ + createTextVNode(" Only works with "), + _hoisted_3$1, + createTextVNode(" and "), + _hoisted_4$1, + createTextVNode(" sigmas ") + ]), + _: 1 + }), + createBaseVNode("div", _hoisted_5$1, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_6$1 + ]), + default: withCtx(() => [ + createTextVNode(" May generate more unique images. "), + _hoisted_7$1 + ]), + _: 1 + }), + createVNode(unref(NSwitch), { + value: target.value[props.tab].scalecrafter.disperse, + "onUpdate:value": _cache[1] || (_cache[1] = ($event) => target.value[props.tab].scalecrafter.disperse = $event) + }, null, 8, ["value"]) + ]), + createBaseVNode("div", _hoisted_8$1, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_9$1 + ]), + default: withCtx(() => [ + createTextVNode(" Allow generating with unique resolutions that don't have configs ready for them, or clamp them (really, force them) to the closest resolution. ") + ]), + _: 1 + }), + createVNode(unref(NSwitch), { + value: target.value[props.tab].scalecrafter.unsafe_resolutions, + "onUpdate:value": _cache[2] || (_cache[2] = ($event) => target.value[props.tab].scalecrafter.unsafe_resolutions = $event) + }, null, 8, ["value"]) + ]) + ]), + _: 1 + })) : createCommentVNode("", true) + ], 64); + }; + } +}); +const _hoisted_1 = { class: "flex-container" }; +const _hoisted_2 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Enabled", -1); +const _hoisted_3 = { class: "flex-container" }; +const _hoisted_4 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Model", -1); +const _hoisted_5 = { class: "flex-container" }; +const _hoisted_6 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Scale Factor", -1); +const _hoisted_7 = { class: "flex-container" }; +const _hoisted_8 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Tile Size", -1); +const _hoisted_9 = { class: "flex-container" }; +const _hoisted_10 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Tile Padding", -1); +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "Upscale", + props: { + tab: { + type: String, + required: true + }, + target: { + type: String, + required: false, + default: "settings" + } + }, + setup(__props) { + const props = __props; + const global = useState(); + const settings = useSettings(); + const target = computed(() => { + if (props.target === "settings") { + return settings.data.settings; + } + return settings.defaultSettings; + }); + const upscalerOptionsFull = computed(() => { + const localModels = global.state.models.filter( + (model) => model.backend === "Upscaler" && !(upscalerOptions.map((option) => option.label).indexOf(model.name) !== -1) + ).map((model) => ({ + label: model.name, + value: model.path + })); + return [...upscalerOptions, ...localModels]; + }); + return (_ctx, _cache) => { + return openBlock(), createBlock(unref(NCard), { + title: "Upscale", + class: "generate-extra-card" + }, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_1, [ + _hoisted_2, + createVNode(unref(NSwitch), { + value: target.value[props.tab].upscale.enabled, + "onUpdate:value": _cache[0] || (_cache[0] = ($event) => target.value[props.tab].upscale.enabled = $event) + }, null, 8, ["value"]) + ]), + target.value[props.tab].upscale.enabled ? (openBlock(), createBlock(unref(NSpace), { + key: 0, + vertical: "", + class: "left-container" + }, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_3, [ + _hoisted_4, + createVNode(unref(NSelect), { + value: target.value[props.tab].upscale.model, + "onUpdate:value": _cache[1] || (_cache[1] = ($event) => target.value[props.tab].upscale.model = $event), + style: { "margin-right": "12px" }, + filterable: "", + tag: "", + options: upscalerOptionsFull.value + }, null, 8, ["value", "options"]) + ]), + createBaseVNode("div", _hoisted_5, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_6 + ]), + default: withCtx(() => [ + createTextVNode(" TODO ") + ]), + _: 1 + }), + createVNode(unref(NSlider), { + value: target.value[props.tab].upscale.upscale_factor, + "onUpdate:value": _cache[2] || (_cache[2] = ($event) => target.value[props.tab].upscale.upscale_factor = $event), + min: 1, + max: 4, + step: 0.1, + style: { "margin-right": "12px" } + }, null, 8, ["value"]), + createVNode(unref(NInputNumber), { + value: target.value[props.tab].upscale.upscale_factor, + "onUpdate:value": _cache[3] || (_cache[3] = ($event) => target.value[props.tab].upscale.upscale_factor = $event), + size: "small", + style: { "min-width": "96px", "width": "96px" }, + min: 1, + max: 4, + step: 0.1 + }, null, 8, ["value"]) + ]), + createBaseVNode("div", _hoisted_7, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_8 + ]), + default: withCtx(() => [ + createTextVNode(" How large each tile should be. Larger tiles will use more memory. 0 will disable tiling. ") + ]), + _: 1 + }), + createVNode(unref(NSlider), { + value: target.value[props.tab].upscale.tile_size, + "onUpdate:value": _cache[4] || (_cache[4] = ($event) => target.value[props.tab].upscale.tile_size = $event), + min: 32, + max: 2048, + style: { "margin-right": "12px" } + }, null, 8, ["value"]), + createVNode(unref(NInputNumber), { + value: target.value[props.tab].upscale.tile_size, + "onUpdate:value": _cache[5] || (_cache[5] = ($event) => target.value[props.tab].upscale.tile_size = $event), + size: "small", + min: 32, + max: 2048, + style: { "min-width": "96px", "width": "96px" } + }, null, 8, ["value"]) + ]), + createBaseVNode("div", _hoisted_9, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_10 + ]), + default: withCtx(() => [ + createTextVNode(" How much should tiles overlap. Larger padding will use more memory, but image should not have visible seams. ") + ]), + _: 1 + }), + createVNode(unref(NSlider), { + value: target.value[props.tab].upscale.tile_padding, + "onUpdate:value": _cache[6] || (_cache[6] = ($event) => target.value[props.tab].upscale.tile_padding = $event), + style: { "margin-right": "12px" } + }, null, 8, ["value"]), + createVNode(unref(NInputNumber), { + value: target.value[props.tab].upscale.tile_padding, + "onUpdate:value": _cache[7] || (_cache[7] = ($event) => target.value[props.tab].upscale.tile_padding = $event), + size: "small", + style: { "min-width": "96px", "width": "96px" } + }, null, 8, ["value"]) + ]) + ]), + _: 1 + })) : createCommentVNode("", true) + ]), + _: 1 + }); + }; + } +}); export { NForm as N, - _sfc_main as _, - NFormItem as a + _sfc_main$2 as _, + _sfc_main$3 as a, + _sfc_main as b, + NFormItem as c }; diff --git a/frontend/dist/assets/clock.js b/frontend/dist/assets/clock.js index 7deffb759..eaff2dd06 100644 --- a/frontend/dist/assets/clock.js +++ b/frontend/dist/assets/clock.js @@ -5,16 +5,17 @@ var __publicField = (obj, key, value) => { return value; }; import { N as NDescriptionsItem, a as NDescriptions } from "./DescriptionsItem.js"; -import { d as defineComponent, o as openBlock, j as createElementBlock, f as createBaseVNode, e as createBlock, w as withCtx, g as createVNode, h as unref, k as createTextVNode, C as toDisplayString, n as NCard, m as createCommentVNode, u as useSettings, l as NTooltip, F as Fragment, a as useState, c as computed, G as spaceRegex, B as NIcon, i as NSelect, H as promptHandleKeyUp, I as promptHandleKeyDown, J as NInput, _ as _export_sfc, K as watch, z as ref, t as serverUrl } from "./index.js"; -import { a as NSlider, N as NSwitch } from "./Switch.js"; +import { d as defineComponent, o as openBlock, a as createElementBlock, b as createBaseVNode, g as createBlock, w as withCtx, e as createVNode, f as unref, h as createTextVNode, E as toDisplayString, m as NCard, k as createCommentVNode, u as useSettings, N as NTooltip, c as computed, F as Fragment, l as useState, G as spaceRegex, D as NIcon, q as NSelect, H as promptHandleKeyUp, I as promptHandleKeyDown, J as NInput, _ as _export_sfc, K as watch, B as ref, x as serverUrl } from "./index.js"; +import { N as NSlider } from "./Slider.js"; import { N as NInputNumber } from "./InputNumber.js"; -import { N as NForm, a as NFormItem } from "./SamplerPicker.vue_vue_type_script_setup_true_lang.js"; -const _hoisted_1$2 = { +import { N as NForm, c as NFormItem } from "./Upscale.vue_vue_type_script_setup_true_lang.js"; +import { N as NSwitch } from "./Switch.js"; +const _hoisted_1$4 = { xmlns: "http://www.w3.org/2000/svg", "xmlns:xlink": "http://www.w3.org/1999/xlink", viewBox: "0 0 512 512" }; -const _hoisted_2$2 = /* @__PURE__ */ createBaseVNode( +const _hoisted_2$4 = /* @__PURE__ */ createBaseVNode( "path", { d: "M262.29 192.31a64 64 0 1 0 57.4 57.4a64.13 64.13 0 0 0-57.4-57.4zM416.39 256a154.34 154.34 0 0 1-1.53 20.79l45.21 35.46a10.81 10.81 0 0 1 2.45 13.75l-42.77 74a10.81 10.81 0 0 1-13.14 4.59l-44.9-18.08a16.11 16.11 0 0 0-15.17 1.75A164.48 164.48 0 0 1 325 400.8a15.94 15.94 0 0 0-8.82 12.14l-6.73 47.89a11.08 11.08 0 0 1-10.68 9.17h-85.54a11.11 11.11 0 0 1-10.69-8.87l-6.72-47.82a16.07 16.07 0 0 0-9-12.22a155.3 155.3 0 0 1-21.46-12.57a16 16 0 0 0-15.11-1.71l-44.89 18.07a10.81 10.81 0 0 1-13.14-4.58l-42.77-74a10.8 10.8 0 0 1 2.45-13.75l38.21-30a16.05 16.05 0 0 0 6-14.08c-.36-4.17-.58-8.33-.58-12.5s.21-8.27.58-12.35a16 16 0 0 0-6.07-13.94l-38.19-30A10.81 10.81 0 0 1 49.48 186l42.77-74a10.81 10.81 0 0 1 13.14-4.59l44.9 18.08a16.11 16.11 0 0 0 15.17-1.75A164.48 164.48 0 0 1 187 111.2a15.94 15.94 0 0 0 8.82-12.14l6.73-47.89A11.08 11.08 0 0 1 213.23 42h85.54a11.11 11.11 0 0 1 10.69 8.87l6.72 47.82a16.07 16.07 0 0 0 9 12.22a155.3 155.3 0 0 1 21.46 12.57a16 16 0 0 0 15.11 1.71l44.89-18.07a10.81 10.81 0 0 1 13.14 4.58l42.77 74a10.8 10.8 0 0 1-2.45 13.75l-38.21 30a16.05 16.05 0 0 0-6.05 14.08c.33 4.14.55 8.3.55 12.47z", @@ -28,14 +29,14 @@ const _hoisted_2$2 = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_3$2 = [_hoisted_2$2]; +const _hoisted_3$3 = [_hoisted_2$4]; const SettingsOutline = defineComponent({ name: "SettingsOutline", render: function render(_ctx, _cache) { - return openBlock(), createElementBlock("svg", _hoisted_1$2, _hoisted_3$2); + return openBlock(), createElementBlock("svg", _hoisted_1$4, _hoisted_3$3); } }); -const _sfc_main$3 = /* @__PURE__ */ defineComponent({ +const _sfc_main$5 = /* @__PURE__ */ defineComponent({ __name: "OutputStats", props: { genData: { @@ -73,17 +74,17 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ }; } }); -const _hoisted_1$1 = { +const _hoisted_1$3 = { key: 0, class: "flex-container" }; -const _hoisted_2$1 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Batch Size", -1); -const _hoisted_3$1 = { +const _hoisted_2$3 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Batch Size", -1); +const _hoisted_3$2 = { key: 1, class: "flex-container" }; const _hoisted_4$1 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Batch Size", -1); -const _sfc_main$2 = /* @__PURE__ */ defineComponent({ +const _sfc_main$4 = /* @__PURE__ */ defineComponent({ __name: "BatchSizeInput", props: { batchSizeObject: { @@ -95,10 +96,10 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({ const props = __props; const settings = useSettings(); return (_ctx, _cache) => { - return unref(settings).data.settings.aitDim.batch_size ? (openBlock(), createElementBlock("div", _hoisted_1$1, [ + return unref(settings).data.settings.aitDim.batch_size ? (openBlock(), createElementBlock("div", _hoisted_1$3, [ createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { trigger: withCtx(() => [ - _hoisted_2$1 + _hoisted_2$3 ]), default: withCtx(() => [ createTextVNode(" Number of images to generate in paralel. ") @@ -120,7 +121,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({ max: unref(settings).data.settings.aitDim.batch_size[1], style: { "min-width": "96px", "width": "96px" } }, null, 8, ["value", "min", "max"]) - ])) : (openBlock(), createElementBlock("div", _hoisted_3$1, [ + ])) : (openBlock(), createElementBlock("div", _hoisted_3$2, [ createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { trigger: withCtx(() => [ _hoisted_4$1 @@ -147,11 +148,81 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({ }; } }); -const _hoisted_1 = { +const _hoisted_1$2 = { class: "flex-container" }; +const _hoisted_2$2 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "CFG Scale", -1); +const _hoisted_3$1 = /* @__PURE__ */ createBaseVNode("b", { class: "highlight" }, "We recommend using 3-15 for most images.", -1); +const _sfc_main$3 = /* @__PURE__ */ defineComponent({ + __name: "CFGScaleInput", + props: { + tab: { + type: String, + required: true + }, + target: { + type: String, + required: false, + default: "settings" + } + }, + setup(__props) { + const props = __props; + const settings = useSettings(); + const cfgMax = computed(() => { + var scale = 30; + return scale + Math.max( + settings.defaultSettings.api.apply_unsharp_mask ? 15 : 0, + settings.defaultSettings.api.cfg_rescale_threshold == "off" ? 0 : 30 + ); + }); + const target = computed(() => { + if (props.target === "settings") { + return settings.data.settings[props.tab]; + } else if (props.target === "adetailer") { + return settings.data.settings[props.tab].adetailer; + } else if (props.target === "defaultSettingsAdetailer") { + return settings.defaultSettings[props.tab].adetailer; + } else { + return settings.defaultSettings; + } + }); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1$2, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_2$2 + ]), + default: withCtx(() => [ + createTextVNode(" Guidance scale indicates how close should the model stay to the prompt. Higher values might be exactly what you want, but generated images might have some artifacts. Lower values give the model more freedom, and therefore might produce more coherent/less-artifacty images, but wouldn't follow the prompt as closely. "), + _hoisted_3$1 + ]), + _: 1 + }), + createVNode(unref(NSlider), { + value: target.value.cfg_scale, + "onUpdate:value": _cache[0] || (_cache[0] = ($event) => target.value.cfg_scale = $event), + min: 1, + max: cfgMax.value, + step: 0.5, + style: { "margin-right": "12px" } + }, null, 8, ["value", "max"]), + createVNode(unref(NInputNumber), { + value: target.value.cfg_scale, + "onUpdate:value": _cache[1] || (_cache[1] = ($event) => target.value.cfg_scale = $event), + size: "small", + style: { "min-width": "96px", "width": "96px" }, + min: 1, + max: cfgMax.value, + step: 0.5 + }, null, 8, ["value", "max"]) + ]); + }; + } +}); +const _hoisted_1$1 = { key: 0, class: "flex-container" }; -const _hoisted_2 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Width", -1); +const _hoisted_2$1 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Width", -1); const _hoisted_3 = { key: 1, class: "flex-container" @@ -167,7 +238,7 @@ const _hoisted_7 = { class: "flex-container" }; const _hoisted_8 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Height", -1); -const _sfc_main$1 = /* @__PURE__ */ defineComponent({ +const _sfc_main$2 = /* @__PURE__ */ defineComponent({ __name: "DimensionsInput", props: { dimensionsObject: { @@ -180,15 +251,14 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({ const settings = useSettings(); return (_ctx, _cache) => { return openBlock(), createElementBlock(Fragment, null, [ - unref(settings).data.settings.aitDim.width ? (openBlock(), createElementBlock("div", _hoisted_1, [ - _hoisted_2, + unref(settings).data.settings.aitDim.width ? (openBlock(), createElementBlock("div", _hoisted_1$1, [ + _hoisted_2$1, createVNode(unref(NSlider), { value: props.dimensionsObject.width, "onUpdate:value": _cache[0] || (_cache[0] = ($event) => props.dimensionsObject.width = $event), min: unref(settings).data.settings.aitDim.width[0], max: unref(settings).data.settings.aitDim.width[1], - step: 64, - style: { "margin-right": "12px" } + step: 64 }, null, 8, ["value", "min", "max"]), createVNode(unref(NInputNumber), { value: props.dimensionsObject.width, @@ -206,8 +276,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({ "onUpdate:value": _cache[2] || (_cache[2] = ($event) => props.dimensionsObject.width = $event), min: 128, max: 2048, - step: 1, - style: { "margin-right": "12px" } + step: 1 }, null, 8, ["value"]), createVNode(unref(NInputNumber), { value: props.dimensionsObject.width, @@ -224,8 +293,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({ "onUpdate:value": _cache[4] || (_cache[4] = ($event) => props.dimensionsObject.height = $event), min: unref(settings).data.settings.aitDim.height[0], max: unref(settings).data.settings.aitDim.height[1], - step: 64, - style: { "margin-right": "12px" } + step: 64 }, null, 8, ["value", "min", "max"]), createVNode(unref(NInputNumber), { value: props.dimensionsObject.height, @@ -243,8 +311,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({ "onUpdate:value": _cache[6] || (_cache[6] = ($event) => props.dimensionsObject.height = $event), min: 128, max: 2048, - step: 1, - style: { "margin-right": "12px" } + step: 1 }, null, 8, ["value"]), createVNode(unref(NInputNumber), { value: props.dimensionsObject.height, @@ -258,7 +325,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({ }; } }); -const _sfc_main = /* @__PURE__ */ defineComponent({ +const _sfc_main$1 = /* @__PURE__ */ defineComponent({ __name: "Prompt", props: { tab: { @@ -411,7 +478,70 @@ const _sfc_main = /* @__PURE__ */ defineComponent({ }; } }); -const Prompt = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-780680bc"]]); +const Prompt = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-780680bc"]]); +const _hoisted_1 = { + key: 0, + class: "flex-container" +}; +const _hoisted_2 = /* @__PURE__ */ createBaseVNode("p", { class: "slider-label" }, "Self Attention Scale", -1); +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "SAGInput", + props: { + tab: { + type: String, + required: true + }, + target: { + type: String, + required: false, + default: "settings" + } + }, + setup(__props) { + const props = __props; + const settings = useSettings(); + const target = computed(() => { + if (props.target === "settings") { + return settings.data.settings[props.tab]; + } else if (props.target === "adetailer") { + return settings.data.settings[props.tab].adetailer; + } else if (props.target === "defaultSettingsAdetailer") { + return settings.defaultSettings[props.tab].adetailer; + } else { + return settings.defaultSettings; + } + }); + return (_ctx, _cache) => { + var _a; + return ((_a = unref(settings).data.settings.model) == null ? void 0 : _a.backend) === "PyTorch" ? (openBlock(), createElementBlock("div", _hoisted_1, [ + createVNode(unref(NTooltip), { style: { "max-width": "600px" } }, { + trigger: withCtx(() => [ + _hoisted_2 + ]), + default: withCtx(() => [ + createTextVNode(" If self attention is >0, SAG will guide the model and improve the quality of the image at the cost of speed. Higher values will follow the guidance more closely, which can lead to better, more sharp and detailed outputs. ") + ]), + _: 1 + }), + createVNode(unref(NSlider), { + value: target.value.self_attention_scale, + "onUpdate:value": _cache[0] || (_cache[0] = ($event) => target.value.self_attention_scale = $event), + min: 0, + max: 1, + step: 0.05, + style: { "margin-right": "12px" } + }, null, 8, ["value"]), + createVNode(unref(NInputNumber), { + value: target.value.self_attention_scale, + "onUpdate:value": _cache[1] || (_cache[1] = ($event) => target.value.self_attention_scale = $event), + size: "small", + style: { "min-width": "96px", "width": "96px" }, + step: 0.05 + }, null, 8, ["value"]) + ])) : createCommentVNode("", true); + }; + } +}); class BurnerClock { constructor(observed_value, settings, callback, timerOverrride = 0, sendInterrupt = true) { __publicField(this, "isChanging", ref(false)); @@ -484,7 +614,9 @@ class BurnerClock { export { BurnerClock as B, Prompt as P, - _sfc_main$1 as _, - _sfc_main$2 as a, - _sfc_main$3 as b + _sfc_main$3 as _, + _sfc_main as a, + _sfc_main$2 as b, + _sfc_main$4 as c, + _sfc_main$5 as d }; diff --git a/frontend/dist/assets/index.css b/frontend/dist/assets/index.css index 9df01e50a..c76c322d6 100644 --- a/frontend/dist/assets/index.css +++ b/frontend/dist/assets/index.css @@ -2,14 +2,15 @@ margin: 0 12px; } -.split { - width: 50%; -} - .flex-container { width: 100%; display: inline-flex; align-items: center; + gap: 0 8px; +} + +.flex-container.space-between { + justify-content: space-between; } .slider-label { @@ -26,6 +27,14 @@ color: #63e2b7; } +.generate-extra-card { + margin-top: 12px; +} + +.generate-extra-card:last-child { + margin-bottom: 12px; +} + .navbar { position: fixed; top: 0; @@ -50,23 +59,23 @@ justify-content: center; } -.progress-container[data-v-29f01b28] { +.progress-container[data-v-3a99505a] { margin: 12px; flex-grow: 1; width: 400px; } -.top-bar[data-v-29f01b28] { +.top-bar[data-v-3a99505a] { display: inline-flex; align-items: center; padding-top: 10px; padding-bottom: 10px; - width: calc(100% - 64px); + width: var(--ca9a9586); height: 32px; position: fixed; top: 0; z-index: 1; } -.logo[data-v-29f01b28] { +.logo[data-v-3a99505a] { margin-right: 16px; margin-left: 16px; } @@ -77,52 +86,39 @@ margin-bottom: 10px; } -.image-container img[data-v-5358ed01] { +.image-container img[data-v-d4ff54ab] { width: 100%; height: 100%; object-fit: contain; overflow: hidden; } -.image-container[data-v-5358ed01] { +.image-container[data-v-d4ff54ab] { height: 70vh; width: 100%; display: flex; justify-content: center; } -.image-container img[data-v-efacc8fd] { +.image-container img[data-v-a4145f6c] { width: 100%; height: 100%; object-fit: contain; overflow: hidden; } -.image-container[data-v-efacc8fd] { +.image-container[data-v-a4145f6c] { height: 70vh; width: 100%; display: flex; justify-content: center; } -.image-container img[data-v-9c556ef8] { - width: 100%; - height: 100%; - object-fit: contain; - overflow: hidden; -} -.image-container[data-v-9c556ef8] { - height: 70vh; - width: 100%; - display: flex; - justify-content: center; -} - -.hidden-input[data-v-7963dde9] { +.hidden-input[data-v-23b19530] { display: none; } -.utility-button[data-v-7963dde9] { +.utility-button[data-v-23b19530] { margin-right: 8px; } -.file-upload[data-v-7963dde9] { +.file-upload[data-v-23b19530] { appearance: none; background-color: transparent; border: 1px solid #63e2b7; @@ -142,51 +138,43 @@ vertical-align: middle; white-space: nowrap; } -.file-upload[data-v-7963dde9]:focus:not(:focus-visible):not(.focus-visible) { +.file-upload[data-v-23b19530]:focus:not(:focus-visible):not(.focus-visible) { box-shadow: none; outline: none; } -.file-upload[data-v-7963dde9]:focus { +.file-upload[data-v-23b19530]:focus { box-shadow: rgba(46, 164, 79, 0.4) 0 0 0 3px; outline: none; } -.file-upload[data-v-7963dde9]:disabled { +.file-upload[data-v-23b19530]:disabled { background-color: #94d3a2; border-color: rgba(27, 31, 35, 0.1); color: rgba(255, 255, 255, 0.8); cursor: default; } -.image-container[data-v-7963dde9] { +.image-container[data-v-23b19530] { width: 100%; display: flex; justify-content: center; } -.img-slider[data-v-e10a07d2] { - aspect-ratio: 1/1; - height: 182px; - width: auto; -} -.image-grid[data-v-e10a07d2] { +.image-grid[data-v-89afc237] { display: grid; - grid-template-columns: repeat( - var(--6b1de230), - 1fr - ); + grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); grid-gap: 8px; } -.top-bar[data-v-e10a07d2] { - background-color: var(--a55b21d8); -} -.image-column[data-v-e10a07d2] { - display: flex; - flex-direction: column; +.top-bar[data-v-89afc237] { + background-color: var(--66e6d45b); } .install[data-v-b405f046] { width: 100%; padding: 10px 0px; } + +.router-container { + margin-top: 52px; +} .autocomplete { position: relative; display: inline-block; @@ -194,52 +182,54 @@ .autocomplete-items { position: absolute; z-index: 99; - background-color: var(--4c7ba08e); - border-radius: var(--01ab46a4); + background-color: var(--e68ef196); + border-radius: var(--3f674355); padding: 2px; } .autocomplete-items div { padding: 8px; cursor: pointer; - border-radius: var(--01ab46a4); + border-radius: var(--3f674355); } .autocomplete-active { - background-color: var(--e4e78d9e); - color: var(--d0777f2a); + background-color: var(--646dc050); + color: var(--96bf2bb8); } #autocomplete-list { max-height: min(600px, 70vh); overflow-y: auto; } .n-card { - backdrop-filter: var(--98485856); + backdrop-filter: var(--b08f9a64); } .navbar .n-layout { - backdrop-filter: var(--98485856); + backdrop-filter: var(--b08f9a64); } .navbar .n-layout-toggle-button { - backdrop-filter: var(--98485856); + backdrop-filter: var(--b08f9a64); } .top-bar { - backdrop-filter: var(--98485856); - background-color: var(--6a1d04dc); + backdrop-filter: var(--b08f9a64); + background-color: var(--139458d6); } .navbar { - backdrop-filter: var(--98485856); + backdrop-filter: var(--b08f9a64); } #background { width: 100vw; height: 100vh; position: fixed; - background-image: var(--344206c2); + background-image: var(--31f48ff4); background-size: cover; background-position: center; background-attachment: fixed; top: 0; left: 0; z-index: -99; +} +.main { + margin-left: var(--3ac72808); }body { - margin-left: 64px; color: #fff; font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", @@ -276,3 +266,7 @@ a, .n-menu-item:last-child { margin-top: auto; } + +.n-drawer-content-wrapper { + backdrop-filter: blur(10px); +} diff --git a/frontend/dist/assets/index.js b/frontend/dist/assets/index.js index 3b6a6c669..82d03952d 100644 --- a/frontend/dist/assets/index.js +++ b/frontend/dist/assets/index.js @@ -1552,7 +1552,7 @@ function renderComponentRoot(instance) { slots, attrs, emit: emit2, - render: render15, + render: render17, renderCache, data, setupState, @@ -1566,7 +1566,7 @@ function renderComponentRoot(instance) { if (vnode.shapeFlag & 4) { const proxyToUse = withProxy || proxy; result = normalizeVNode( - render15.call( + render17.call( proxyToUse, proxyToUse, renderCache, @@ -2668,7 +2668,7 @@ function applyOptions(instance) { beforeUnmount, destroyed, unmounted, - render: render15, + render: render17, renderTracked, renderTriggered, errorCaptured, @@ -2767,8 +2767,8 @@ function applyOptions(instance) { instance.exposed = {}; } } - if (render15 && instance.render === NOOP) { - instance.render = render15; + if (render17 && instance.render === NOOP) { + instance.render = render17; } if (inheritAttrs != null) { instance.inheritAttrs = inheritAttrs; @@ -3000,7 +3000,7 @@ function createAppContext() { }; } let uid$1 = 0; -function createAppAPI(render15, hydrate) { +function createAppAPI(render17, hydrate) { return function createApp2(rootComponent, rootProps = null) { if (!isFunction$2(rootComponent)) { rootComponent = extend({}, rootComponent); @@ -3069,7 +3069,7 @@ function createAppAPI(render15, hydrate) { if (isHydrate && hydrate) { hydrate(vnode, rootContainer); } else { - render15(vnode, rootContainer, isSVG2); + render17(vnode, rootContainer, isSVG2); } isMounted2 = true; app2._container = rootContainer; @@ -3079,7 +3079,7 @@ function createAppAPI(render15, hydrate) { }, unmount() { if (isMounted2) { - render15(null, app2._container); + render17(null, app2._container); delete app2._container.__vue_app__; } }, @@ -4794,7 +4794,7 @@ function baseCreateRenderer(options, createHydrationFns) { } return hostNextSibling(vnode.anchor || vnode.el); }; - const render15 = (vnode, container, isSVG2) => { + const render17 = (vnode, container, isSVG2) => { if (vnode == null) { if (container._vnode) { unmount2(container._vnode, null, null, true); @@ -4826,9 +4826,9 @@ function baseCreateRenderer(options, createHydrationFns) { ); } return { - render: render15, + render: render17, hydrate, - createApp: createAppAPI(render15, hydrate) + createApp: createAppAPI(render17, hydrate) }; } function toggleRecurse({ effect, update }, allowed) { @@ -5360,6 +5360,11 @@ function cloneVNode(vnode, extraProps, mergeRef = false) { function createTextVNode(text = " ", flag = 0) { return createVNode(Text, null, text, flag); } +function createStaticVNode(content, numberOfNodes) { + const vnode = createVNode(Static, null, content); + vnode.staticCount = numberOfNodes; + return vnode; +} function createCommentVNode(text = "", asBlock = false) { return asBlock ? (openBlock(), createBlock(Comment, null, text)) : createVNode(Comment, null, text); } @@ -27886,8 +27891,8 @@ const NDropdownRenderOption = defineComponent({ } }, render() { - const { rawNode: { render: render15, props } } = this.tmNode; - return h("div", props, [render15 === null || render15 === void 0 ? void 0 : render15()]); + const { rawNode: { render: render17, props } } = this.tmNode; + return h("div", props, [render17 === null || render17 === void 0 ? void 0 : render17()]); } }); const NDropdownMenu = defineComponent({ @@ -38100,12 +38105,494 @@ const NThemeEditor = defineComponent({ }); } }); -const _hoisted_1$h = { +const loc = window.location; +let new_uri; +if (loc.protocol === "https:") { + new_uri = "wss:"; +} else { + new_uri = "ws:"; +} +const serverUrl = loc.protocol + "//" + loc.host; +const webSocketUrl = new_uri + "//" + loc.host; +const huggingfaceModelsFile = "https://raw.githubusercontent.com/VoltaML/voltaML-fast-stable-diffusion/experimental/static/huggingface-models.json"; +const isDev = false; +const defaultCapabilities = { + supported_backends: [["CPU", "cpu"]], + supported_precisions_cpu: ["float32"], + supported_precisions_gpu: ["float32"], + supported_torch_compile_backends: ["inductor"], + supported_self_attentions: [ + ["Cross-Attention", "cross-attention"], + ["Subquadratic Attention", "subquadratic"], + ["Multihead Attention", "multihead"] + ], + has_tensorfloat: false, + has_tensor_cores: false, + supports_xformers: false, + supports_triton: false, + supports_int8: false +}; +async function getCapabilities() { + try { + const response = await fetch(`${serverUrl}/api/hardware/capabilities`); + if (response.status !== 200) { + console.error("Server is not responding"); + return defaultCapabilities; + } + const data = await response.json(); + return data; + } catch (error) { + console.error(error); + return defaultCapabilities; + } +} +var _a; +const isClient = typeof window !== "undefined"; +const isFunction = (val) => typeof val === "function"; +const isString = (val) => typeof val === "string"; +const noop$1 = () => { +}; +const isIOS = isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && /iP(ad|hone|od)/.test(window.navigator.userAgent); +function resolveUnref(r) { + return typeof r === "function" ? r() : unref(r); +} +function identity(arg) { + return arg; +} +function tryOnScopeDispose(fn) { + if (getCurrentScope()) { + onScopeDispose(fn); + return true; + } + return false; +} +function resolveRef(r) { + return typeof r === "function" ? computed(r) : ref(r); +} +function tryOnMounted(fn, sync = true) { + if (getCurrentInstance()) + onMounted(fn); + else if (sync) + fn(); + else + nextTick(fn); +} +function useIntervalFn(cb, interval = 1e3, options = {}) { + const { + immediate = true, + immediateCallback = false + } = options; + let timer = null; + const isActive = ref(false); + function clean() { + if (timer) { + clearInterval(timer); + timer = null; + } + } + function pause() { + isActive.value = false; + clean(); + } + function resume() { + const intervalValue = resolveUnref(interval); + if (intervalValue <= 0) + return; + isActive.value = true; + if (immediateCallback) + cb(); + clean(); + timer = setInterval(cb, intervalValue); + } + if (immediate && isClient) + resume(); + if (isRef(interval) || isFunction(interval)) { + const stopWatch = watch(interval, () => { + if (isActive.value && isClient) + resume(); + }); + tryOnScopeDispose(stopWatch); + } + tryOnScopeDispose(pause); + return { + isActive, + pause, + resume + }; +} +function unrefElement(elRef) { + var _a2; + const plain = resolveUnref(elRef); + return (_a2 = plain == null ? void 0 : plain.$el) != null ? _a2 : plain; +} +const defaultWindow = isClient ? window : void 0; +function useEventListener(...args) { + let target; + let events2; + let listeners; + let options; + if (isString(args[0]) || Array.isArray(args[0])) { + [events2, listeners, options] = args; + target = defaultWindow; + } else { + [target, events2, listeners, options] = args; + } + if (!target) + return noop$1; + if (!Array.isArray(events2)) + events2 = [events2]; + if (!Array.isArray(listeners)) + listeners = [listeners]; + const cleanups = []; + const cleanup = () => { + cleanups.forEach((fn) => fn()); + cleanups.length = 0; + }; + const register = (el, event2, listener, options2) => { + el.addEventListener(event2, listener, options2); + return () => el.removeEventListener(event2, listener, options2); + }; + const stopWatch = watch(() => [unrefElement(target), resolveUnref(options)], ([el, options2]) => { + cleanup(); + if (!el) + return; + cleanups.push(...events2.flatMap((event2) => { + return listeners.map((listener) => register(el, event2, listener, options2)); + })); + }, { immediate: true, flush: "post" }); + const stop = () => { + stopWatch(); + cleanup(); + }; + tryOnScopeDispose(stop); + return stop; +} +let _iOSWorkaround = false; +function onClickOutside(target, handler, options = {}) { + const { window: window2 = defaultWindow, ignore = [], capture = true, detectIframe = false } = options; + if (!window2) + return; + if (isIOS && !_iOSWorkaround) { + _iOSWorkaround = true; + Array.from(window2.document.body.children).forEach((el) => el.addEventListener("click", noop$1)); + } + let shouldListen = true; + const shouldIgnore = (event2) => { + return ignore.some((target2) => { + if (typeof target2 === "string") { + return Array.from(window2.document.querySelectorAll(target2)).some((el) => el === event2.target || event2.composedPath().includes(el)); + } else { + const el = unrefElement(target2); + return el && (event2.target === el || event2.composedPath().includes(el)); + } + }); + }; + const listener = (event2) => { + const el = unrefElement(target); + if (!el || el === event2.target || event2.composedPath().includes(el)) + return; + if (event2.detail === 0) + shouldListen = !shouldIgnore(event2); + if (!shouldListen) { + shouldListen = true; + return; + } + handler(event2); + }; + const cleanup = [ + useEventListener(window2, "click", listener, { passive: true, capture }), + useEventListener(window2, "pointerdown", (e) => { + const el = unrefElement(target); + if (el) + shouldListen = !e.composedPath().includes(el) && !shouldIgnore(e); + }, { passive: true }), + detectIframe && useEventListener(window2, "blur", (event2) => { + var _a2; + const el = unrefElement(target); + if (((_a2 = window2.document.activeElement) == null ? void 0 : _a2.tagName) === "IFRAME" && !(el == null ? void 0 : el.contains(window2.document.activeElement))) + handler(event2); + }) + ].filter(Boolean); + const stop = () => cleanup.forEach((fn) => fn()); + return stop; +} +function useSupported(callback, sync = false) { + const isSupported = ref(); + const update = () => isSupported.value = Boolean(callback()); + update(); + tryOnMounted(update, sync); + return isSupported; +} +function useMediaQuery(query2, options = {}) { + const { window: window2 = defaultWindow } = options; + const isSupported = useSupported(() => window2 && "matchMedia" in window2 && typeof window2.matchMedia === "function"); + let mediaQuery; + const matches = ref(false); + const cleanup = () => { + if (!mediaQuery) + return; + if ("removeEventListener" in mediaQuery) + mediaQuery.removeEventListener("change", update); + else + mediaQuery.removeListener(update); + }; + const update = () => { + if (!isSupported.value) + return; + cleanup(); + mediaQuery = window2.matchMedia(resolveRef(query2).value); + matches.value = mediaQuery.matches; + if ("addEventListener" in mediaQuery) + mediaQuery.addEventListener("change", update); + else + mediaQuery.addListener(update); + }; + watchEffect(update); + tryOnScopeDispose(() => cleanup()); + return matches; +} +const _global = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; +const globalKey = "__vueuse_ssr_handlers__"; +_global[globalKey] = _global[globalKey] || {}; +var SwipeDirection; +(function(SwipeDirection2) { + SwipeDirection2["UP"] = "UP"; + SwipeDirection2["RIGHT"] = "RIGHT"; + SwipeDirection2["DOWN"] = "DOWN"; + SwipeDirection2["LEFT"] = "LEFT"; + SwipeDirection2["NONE"] = "NONE"; +})(SwipeDirection || (SwipeDirection = {})); +var __defProp2 = Object.defineProperty; +var __getOwnPropSymbols = Object.getOwnPropertySymbols; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __propIsEnum = Object.prototype.propertyIsEnumerable; +var __defNormalProp2 = (obj, key, value) => key in obj ? __defProp2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; +var __spreadValues = (a, b) => { + for (var prop in b || (b = {})) + if (__hasOwnProp.call(b, prop)) + __defNormalProp2(a, prop, b[prop]); + if (__getOwnPropSymbols) + for (var prop of __getOwnPropSymbols(b)) { + if (__propIsEnum.call(b, prop)) + __defNormalProp2(a, prop, b[prop]); + } + return a; +}; +const _TransitionPresets = { + easeInSine: [0.12, 0, 0.39, 0], + easeOutSine: [0.61, 1, 0.88, 1], + easeInOutSine: [0.37, 0, 0.63, 1], + easeInQuad: [0.11, 0, 0.5, 0], + easeOutQuad: [0.5, 1, 0.89, 1], + easeInOutQuad: [0.45, 0, 0.55, 1], + easeInCubic: [0.32, 0, 0.67, 0], + easeOutCubic: [0.33, 1, 0.68, 1], + easeInOutCubic: [0.65, 0, 0.35, 1], + easeInQuart: [0.5, 0, 0.75, 0], + easeOutQuart: [0.25, 1, 0.5, 1], + easeInOutQuart: [0.76, 0, 0.24, 1], + easeInQuint: [0.64, 0, 0.78, 0], + easeOutQuint: [0.22, 1, 0.36, 1], + easeInOutQuint: [0.83, 0, 0.17, 1], + easeInExpo: [0.7, 0, 0.84, 0], + easeOutExpo: [0.16, 1, 0.3, 1], + easeInOutExpo: [0.87, 0, 0.13, 1], + easeInCirc: [0.55, 0, 1, 0.45], + easeOutCirc: [0, 0.55, 0.45, 1], + easeInOutCirc: [0.85, 0, 0.15, 1], + easeInBack: [0.36, 0, 0.66, -0.56], + easeOutBack: [0.34, 1.56, 0.64, 1], + easeInOutBack: [0.68, -0.6, 0.32, 1.6] +}; +__spreadValues({ + linear: identity +}, _TransitionPresets); +const DEFAULT_PING_MESSAGE = "ping"; +function resolveNestedOptions(options) { + if (options === true) + return {}; + return options; +} +function useWebSocket(url, options = {}) { + const { + onConnected, + onDisconnected, + onError, + onMessage, + immediate = true, + autoClose = true, + protocols = [] + } = options; + const data = ref(null); + const status = ref("CLOSED"); + const wsRef = ref(); + const urlRef = resolveRef(url); + let heartbeatPause; + let heartbeatResume; + let explicitlyClosed = false; + let retried = 0; + let bufferedData = []; + let pongTimeoutWait; + const close = (code = 1e3, reason) => { + if (!wsRef.value) + return; + explicitlyClosed = true; + heartbeatPause == null ? void 0 : heartbeatPause(); + wsRef.value.close(code, reason); + }; + const _sendBuffer = () => { + if (bufferedData.length && wsRef.value && status.value === "OPEN") { + for (const buffer of bufferedData) + wsRef.value.send(buffer); + bufferedData = []; + } + }; + const resetHeartbeat = () => { + clearTimeout(pongTimeoutWait); + pongTimeoutWait = void 0; + }; + const send = (data2, useBuffer = true) => { + if (!wsRef.value || status.value !== "OPEN") { + if (useBuffer) + bufferedData.push(data2); + return false; + } + _sendBuffer(); + wsRef.value.send(data2); + return true; + }; + const _init = () => { + if (explicitlyClosed || typeof urlRef.value === "undefined") + return; + const ws = new WebSocket(urlRef.value, protocols); + wsRef.value = ws; + status.value = "CONNECTING"; + ws.onopen = () => { + status.value = "OPEN"; + onConnected == null ? void 0 : onConnected(ws); + heartbeatResume == null ? void 0 : heartbeatResume(); + _sendBuffer(); + }; + ws.onclose = (ev) => { + status.value = "CLOSED"; + wsRef.value = void 0; + onDisconnected == null ? void 0 : onDisconnected(ws, ev); + if (!explicitlyClosed && options.autoReconnect) { + const { + retries = -1, + delay = 1e3, + onFailed + } = resolveNestedOptions(options.autoReconnect); + retried += 1; + if (typeof retries === "number" && (retries < 0 || retried < retries)) + setTimeout(_init, delay); + else if (typeof retries === "function" && retries()) + setTimeout(_init, delay); + else + onFailed == null ? void 0 : onFailed(); + } + }; + ws.onerror = (e) => { + onError == null ? void 0 : onError(ws, e); + }; + ws.onmessage = (e) => { + if (options.heartbeat) { + resetHeartbeat(); + const { + message = DEFAULT_PING_MESSAGE + } = resolveNestedOptions(options.heartbeat); + if (e.data === message) + return; + } + data.value = e.data; + onMessage == null ? void 0 : onMessage(ws, e); + }; + }; + if (options.heartbeat) { + const { + message = DEFAULT_PING_MESSAGE, + interval = 1e3, + pongTimeout = 1e3 + } = resolveNestedOptions(options.heartbeat); + const { pause, resume } = useIntervalFn(() => { + send(message, false); + if (pongTimeoutWait != null) + return; + pongTimeoutWait = setTimeout(() => { + close(); + }, pongTimeout); + }, interval, { immediate: false }); + heartbeatPause = pause; + heartbeatResume = resume; + } + if (autoClose) { + useEventListener(window, "beforeunload", () => close()); + tryOnScopeDispose(close); + } + const open = () => { + close(); + explicitlyClosed = false; + retried = 0; + _init(); + }; + if (immediate) + watch(urlRef, open, { immediate: true }); + return { + data, + status, + close, + send, + open, + ws: wsRef + }; +} +const isLargeScreen = useMediaQuery("(min-width: 1000px)"); +const _hoisted_1$k = { xmlns: "http://www.w3.org/2000/svg", "xmlns:xlink": "http://www.w3.org/1999/xlink", viewBox: "0 0 512 512" }; -const _hoisted_2$f = /* @__PURE__ */ createBaseVNode( +const _hoisted_2$i = /* @__PURE__ */ createBaseVNode( + "path", + { + fill: "none", + stroke: "currentColor", + "stroke-linecap": "round", + "stroke-linejoin": "round", + "stroke-width": "32", + d: "M256 112v288" + }, + null, + -1 + /* HOISTED */ +); +const _hoisted_3$h = /* @__PURE__ */ createBaseVNode( + "path", + { + fill: "none", + stroke: "currentColor", + "stroke-linecap": "round", + "stroke-linejoin": "round", + "stroke-width": "32", + d: "M400 256H112" + }, + null, + -1 + /* HOISTED */ +); +const _hoisted_4$e = [_hoisted_2$i, _hoisted_3$h]; +const Add = defineComponent({ + name: "Add", + render: function render2(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$k, _hoisted_4$e); + } +}); +const _hoisted_1$j = { + xmlns: "http://www.w3.org/2000/svg", + "xmlns:xlink": "http://www.w3.org/1999/xlink", + viewBox: "0 0 512 512" +}; +const _hoisted_2$h = /* @__PURE__ */ createBaseVNode( "path", { d: "M368 96H144a16 16 0 0 1 0-32h224a16 16 0 0 1 0 32z", @@ -38115,7 +38602,7 @@ const _hoisted_2$f = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_3$e = /* @__PURE__ */ createBaseVNode( +const _hoisted_3$g = /* @__PURE__ */ createBaseVNode( "path", { d: "M400 144H112a16 16 0 0 1 0-32h288a16 16 0 0 1 0 32z", @@ -38125,7 +38612,7 @@ const _hoisted_3$e = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_4$b = /* @__PURE__ */ createBaseVNode( +const _hoisted_4$d = /* @__PURE__ */ createBaseVNode( "path", { d: "M419.13 448H92.87A44.92 44.92 0 0 1 48 403.13V204.87A44.92 44.92 0 0 1 92.87 160h326.26A44.92 44.92 0 0 1 464 204.87v198.26A44.92 44.92 0 0 1 419.13 448z", @@ -38135,19 +38622,19 @@ const _hoisted_4$b = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_5$7 = [_hoisted_2$f, _hoisted_3$e, _hoisted_4$b]; +const _hoisted_5$9 = [_hoisted_2$h, _hoisted_3$g, _hoisted_4$d]; const Albums = defineComponent({ name: "Albums", - render: function render2(_ctx, _cache) { - return openBlock(), createElementBlock("svg", _hoisted_1$h, _hoisted_5$7); + render: function render3(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$j, _hoisted_5$9); } }); -const _hoisted_1$g = { +const _hoisted_1$i = { xmlns: "http://www.w3.org/2000/svg", "xmlns:xlink": "http://www.w3.org/1999/xlink", viewBox: "0 0 512 512" }; -const _hoisted_2$e = /* @__PURE__ */ createBaseVNode( +const _hoisted_2$g = /* @__PURE__ */ createBaseVNode( "path", { d: "M459.94 53.25a16.06 16.06 0 0 0-23.22-.56L424.35 65a8 8 0 0 0 0 11.31l11.34 11.32a8 8 0 0 0 11.34 0l12.06-12c6.1-6.09 6.67-16.01.85-22.38z", @@ -38157,7 +38644,7 @@ const _hoisted_2$e = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_3$d = /* @__PURE__ */ createBaseVNode( +const _hoisted_3$f = /* @__PURE__ */ createBaseVNode( "path", { d: "M399.34 90L218.82 270.2a9 9 0 0 0-2.31 3.93L208.16 299a3.91 3.91 0 0 0 4.86 4.86l24.85-8.35a9 9 0 0 0 3.93-2.31L422 112.66a9 9 0 0 0 0-12.66l-9.95-10a9 9 0 0 0-12.71 0z", @@ -38167,7 +38654,7 @@ const _hoisted_3$d = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_4$a = /* @__PURE__ */ createBaseVNode( +const _hoisted_4$c = /* @__PURE__ */ createBaseVNode( "path", { d: "M386.34 193.66L264.45 315.79A41.08 41.08 0 0 1 247.58 326l-25.9 8.67a35.92 35.92 0 0 1-44.33-44.33l8.67-25.9a41.08 41.08 0 0 1 10.19-16.87l122.13-121.91a8 8 0 0 0-5.65-13.66H104a56 56 0 0 0-56 56v240a56 56 0 0 0 56 56h240a56 56 0 0 0 56-56V199.31a8 8 0 0 0-13.66-5.65z", @@ -38177,19 +38664,19 @@ const _hoisted_4$a = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_5$6 = [_hoisted_2$e, _hoisted_3$d, _hoisted_4$a]; +const _hoisted_5$8 = [_hoisted_2$g, _hoisted_3$f, _hoisted_4$c]; const Create = defineComponent({ name: "Create", - render: function render3(_ctx, _cache) { - return openBlock(), createElementBlock("svg", _hoisted_1$g, _hoisted_5$6); + render: function render4(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$i, _hoisted_5$8); } }); -const _hoisted_1$f = { +const _hoisted_1$h = { xmlns: "http://www.w3.org/2000/svg", "xmlns:xlink": "http://www.w3.org/1999/xlink", viewBox: "0 0 512 512" }; -const _hoisted_2$d = /* @__PURE__ */ createBaseVNode( +const _hoisted_2$f = /* @__PURE__ */ createBaseVNode( "path", { d: "M440.9 136.3a4 4 0 0 0 0-6.91L288.16 40.65a64.14 64.14 0 0 0-64.33 0L71.12 129.39a4 4 0 0 0 0 6.91L254 243.88a4 4 0 0 0 4.06 0z", @@ -38199,7 +38686,7 @@ const _hoisted_2$d = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_3$c = /* @__PURE__ */ createBaseVNode( +const _hoisted_3$e = /* @__PURE__ */ createBaseVNode( "path", { d: "M54 163.51a4 4 0 0 0-6 3.49v173.89a48 48 0 0 0 23.84 41.39L234 479.51a4 4 0 0 0 6-3.46V274.3a4 4 0 0 0-2-3.46z", @@ -38209,7 +38696,7 @@ const _hoisted_3$c = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_4$9 = /* @__PURE__ */ createBaseVNode( +const _hoisted_4$b = /* @__PURE__ */ createBaseVNode( "path", { d: "M272 275v201a4 4 0 0 0 6 3.46l162.15-97.23A48 48 0 0 0 464 340.89V167a4 4 0 0 0-6-3.45l-184 108a4 4 0 0 0-2 3.45z", @@ -38219,19 +38706,19 @@ const _hoisted_4$9 = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_5$5 = [_hoisted_2$d, _hoisted_3$c, _hoisted_4$9]; +const _hoisted_5$7 = [_hoisted_2$f, _hoisted_3$e, _hoisted_4$b]; const Cube = defineComponent({ name: "Cube", - render: function render4(_ctx, _cache) { - return openBlock(), createElementBlock("svg", _hoisted_1$f, _hoisted_5$5); + render: function render5(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$h, _hoisted_5$7); } }); -const _hoisted_1$e = { +const _hoisted_1$g = { xmlns: "http://www.w3.org/2000/svg", "xmlns:xlink": "http://www.w3.org/1999/xlink", viewBox: "0 0 512 512" }; -const _hoisted_2$c = /* @__PURE__ */ createBaseVNode( +const _hoisted_2$e = /* @__PURE__ */ createBaseVNode( "path", { d: "M428 224H288a48 48 0 0 1-48-48V36a4 4 0 0 0-4-4h-92a64 64 0 0 0-64 64v320a64 64 0 0 0 64 64h224a64 64 0 0 0 64-64V228a4 4 0 0 0-4-4zm-92 160H176a16 16 0 0 1 0-32h160a16 16 0 0 1 0 32zm0-80H176a16 16 0 0 1 0-32h160a16 16 0 0 1 0 32z", @@ -38241,7 +38728,7 @@ const _hoisted_2$c = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_3$b = /* @__PURE__ */ createBaseVNode( +const _hoisted_3$d = /* @__PURE__ */ createBaseVNode( "path", { d: "M419.22 188.59L275.41 44.78a2 2 0 0 0-3.41 1.41V176a16 16 0 0 0 16 16h129.81a2 2 0 0 0 1.41-3.41z", @@ -38251,19 +38738,19 @@ const _hoisted_3$b = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_4$8 = [_hoisted_2$c, _hoisted_3$b]; +const _hoisted_4$a = [_hoisted_2$e, _hoisted_3$d]; const DocumentText = defineComponent({ name: "DocumentText", - render: function render5(_ctx, _cache) { - return openBlock(), createElementBlock("svg", _hoisted_1$e, _hoisted_4$8); + render: function render6(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$g, _hoisted_4$a); } }); -const _hoisted_1$d = { +const _hoisted_1$f = { xmlns: "http://www.w3.org/2000/svg", "xmlns:xlink": "http://www.w3.org/1999/xlink", viewBox: "0 0 512 512" }; -const _hoisted_2$b = /* @__PURE__ */ createBaseVNode( +const _hoisted_2$d = /* @__PURE__ */ createBaseVNode( "path", { d: "M408 112H184a72 72 0 0 0-72 72v224a72 72 0 0 0 72 72h224a72 72 0 0 0 72-72V184a72 72 0 0 0-72-72zm-32.45 200H312v63.55c0 8.61-6.62 16-15.23 16.43A16 16 0 0 1 280 376v-64h-63.55c-8.61 0-16-6.62-16.43-15.23A16 16 0 0 1 216 280h64v-63.55c0-8.61 6.62-16 15.23-16.43A16 16 0 0 1 312 216v64h64a16 16 0 0 1 16 16.77c-.42 8.61-7.84 15.23-16.45 15.23z", @@ -38273,7 +38760,7 @@ const _hoisted_2$b = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_3$a = /* @__PURE__ */ createBaseVNode( +const _hoisted_3$c = /* @__PURE__ */ createBaseVNode( "path", { d: "M395.88 80A72.12 72.12 0 0 0 328 32H104a72 72 0 0 0-72 72v224a72.12 72.12 0 0 0 48 67.88V160a80 80 0 0 1 80-80z", @@ -38283,19 +38770,19 @@ const _hoisted_3$a = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_4$7 = [_hoisted_2$b, _hoisted_3$a]; +const _hoisted_4$9 = [_hoisted_2$d, _hoisted_3$c]; const Duplicate = defineComponent({ name: "Duplicate", - render: function render6(_ctx, _cache) { - return openBlock(), createElementBlock("svg", _hoisted_1$d, _hoisted_4$7); + render: function render7(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$f, _hoisted_4$9); } }); -const _hoisted_1$c = { +const _hoisted_1$e = { xmlns: "http://www.w3.org/2000/svg", "xmlns:xlink": "http://www.w3.org/1999/xlink", viewBox: "0 0 512 512" }; -const _hoisted_2$a = /* @__PURE__ */ createBaseVNode( +const _hoisted_2$c = /* @__PURE__ */ createBaseVNode( "path", { d: "M416 64H96a64.07 64.07 0 0 0-64 64v256a64.07 64.07 0 0 0 64 64h320a64.07 64.07 0 0 0 64-64V128a64.07 64.07 0 0 0-64-64zm-80 64a48 48 0 1 1-48 48a48.05 48.05 0 0 1 48-48zM96 416a32 32 0 0 1-32-32v-67.63l94.84-84.3a48.06 48.06 0 0 1 65.8 1.9l64.95 64.81L172.37 416zm352-32a32 32 0 0 1-32 32H217.63l121.42-121.42a47.72 47.72 0 0 1 61.64-.16L448 333.84z", @@ -38305,19 +38792,19 @@ const _hoisted_2$a = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_3$9 = [_hoisted_2$a]; +const _hoisted_3$b = [_hoisted_2$c]; const Image$1 = defineComponent({ name: "Image", - render: function render7(_ctx, _cache) { - return openBlock(), createElementBlock("svg", _hoisted_1$c, _hoisted_3$9); + render: function render8(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$e, _hoisted_3$b); } }); -const _hoisted_1$b = { +const _hoisted_1$d = { xmlns: "http://www.w3.org/2000/svg", "xmlns:xlink": "http://www.w3.org/1999/xlink", viewBox: "0 0 512 512" }; -const _hoisted_2$9 = /* @__PURE__ */ createBaseVNode( +const _hoisted_2$b = /* @__PURE__ */ createBaseVNode( "path", { d: "M450.29 112H142c-34 0-62 27.51-62 61.33v245.34c0 33.82 28 61.33 62 61.33h308c34 0 62-26.18 62-60V173.33c0-33.82-27.68-61.33-61.71-61.33zm-77.15 61.34a46 46 0 1 1-46.28 46a46.19 46.19 0 0 1 46.28-46.01zm-231.55 276c-17 0-29.86-13.75-29.86-30.66v-64.83l90.46-80.79a46.54 46.54 0 0 1 63.44 1.83L328.27 337l-113 112.33zM480 418.67a30.67 30.67 0 0 1-30.71 30.66H259L376.08 333a46.24 46.24 0 0 1 59.44-.16L480 370.59z", @@ -38327,7 +38814,7 @@ const _hoisted_2$9 = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_3$8 = /* @__PURE__ */ createBaseVNode( +const _hoisted_3$a = /* @__PURE__ */ createBaseVNode( "path", { d: "M384 32H64A64 64 0 0 0 0 96v256a64.11 64.11 0 0 0 48 62V152a72 72 0 0 1 72-72h326a64.11 64.11 0 0 0-62-48z", @@ -38337,51 +38824,105 @@ const _hoisted_3$8 = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_4$6 = [_hoisted_2$9, _hoisted_3$8]; +const _hoisted_4$8 = [_hoisted_2$b, _hoisted_3$a]; const Images = defineComponent({ name: "Images", - render: function render8(_ctx, _cache) { - return openBlock(), createElementBlock("svg", _hoisted_1$b, _hoisted_4$6); + render: function render9(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$d, _hoisted_4$8); } }); -const _hoisted_1$a = { +const _hoisted_1$c = { xmlns: "http://www.w3.org/2000/svg", "xmlns:xlink": "http://www.w3.org/1999/xlink", viewBox: "0 0 512 512" }; -const _hoisted_2$8 = /* @__PURE__ */ createBaseVNode( +const _hoisted_2$a = /* @__PURE__ */ createBaseVNode( "path", { - d: "M256 464c-114.69 0-208-93.23-208-207.82a207.44 207.44 0 0 1 74.76-160.13l16.9-14l28.17 33.72l-16.9 14A163.72 163.72 0 0 0 92 256.18c0 90.39 73.57 163.93 164 163.93s164-73.54 164-163.93a163.38 163.38 0 0 0-59.83-126.36l-17-14l28-33.82l17 14A207.13 207.13 0 0 1 464 256.18C464 370.77 370.69 464 256 464z", - fill: "currentColor" + fill: "none", + stroke: "currentColor", + "stroke-linecap": "round", + "stroke-miterlimit": "10", + "stroke-width": "48", + d: "M88 152h336" }, null, -1 /* HOISTED */ ); -const _hoisted_3$7 = /* @__PURE__ */ createBaseVNode( +const _hoisted_3$9 = /* @__PURE__ */ createBaseVNode( "path", { - d: "M234 48h44v224h-44z", - fill: "currentColor" + fill: "none", + stroke: "currentColor", + "stroke-linecap": "round", + "stroke-miterlimit": "10", + "stroke-width": "48", + d: "M88 256h336" }, null, -1 /* HOISTED */ ); -const _hoisted_4$5 = [_hoisted_2$8, _hoisted_3$7]; -const PowerSharp = defineComponent({ - name: "PowerSharp", - render: function render9(_ctx, _cache) { - return openBlock(), createElementBlock("svg", _hoisted_1$a, _hoisted_4$5); - } -}); -const _hoisted_1$9 = { - xmlns: "http://www.w3.org/2000/svg", - "xmlns:xlink": "http://www.w3.org/1999/xlink", +const _hoisted_4$7 = /* @__PURE__ */ createBaseVNode( + "path", + { + fill: "none", + stroke: "currentColor", + "stroke-linecap": "round", + "stroke-miterlimit": "10", + "stroke-width": "48", + d: "M88 360h336" + }, + null, + -1 + /* HOISTED */ +); +const _hoisted_5$6 = [_hoisted_2$a, _hoisted_3$9, _hoisted_4$7]; +const Menu = defineComponent({ + name: "Menu", + render: function render10(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$c, _hoisted_5$6); + } +}); +const _hoisted_1$b = { + xmlns: "http://www.w3.org/2000/svg", + "xmlns:xlink": "http://www.w3.org/1999/xlink", viewBox: "0 0 512 512" }; -const _hoisted_2$7 = /* @__PURE__ */ createBaseVNode( +const _hoisted_2$9 = /* @__PURE__ */ createBaseVNode( + "path", + { + d: "M256 464c-114.69 0-208-93.23-208-207.82a207.44 207.44 0 0 1 74.76-160.13l16.9-14l28.17 33.72l-16.9 14A163.72 163.72 0 0 0 92 256.18c0 90.39 73.57 163.93 164 163.93s164-73.54 164-163.93a163.38 163.38 0 0 0-59.83-126.36l-17-14l28-33.82l17 14A207.13 207.13 0 0 1 464 256.18C464 370.77 370.69 464 256 464z", + fill: "currentColor" + }, + null, + -1 + /* HOISTED */ +); +const _hoisted_3$8 = /* @__PURE__ */ createBaseVNode( + "path", + { + d: "M234 48h44v224h-44z", + fill: "currentColor" + }, + null, + -1 + /* HOISTED */ +); +const _hoisted_4$6 = [_hoisted_2$9, _hoisted_3$8]; +const PowerSharp = defineComponent({ + name: "PowerSharp", + render: function render11(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$b, _hoisted_4$6); + } +}); +const _hoisted_1$a = { + xmlns: "http://www.w3.org/2000/svg", + "xmlns:xlink": "http://www.w3.org/1999/xlink", + viewBox: "0 0 512 512" +}; +const _hoisted_2$8 = /* @__PURE__ */ createBaseVNode( "path", { d: "M256 176a80 80 0 1 0 80 80a80.24 80.24 0 0 0-80-80zm172.72 80a165.53 165.53 0 0 1-1.64 22.34l48.69 38.12a11.59 11.59 0 0 1 2.63 14.78l-46.06 79.52a11.64 11.64 0 0 1-14.14 4.93l-57.25-23a176.56 176.56 0 0 1-38.82 22.67l-8.56 60.78a11.93 11.93 0 0 1-11.51 9.86h-92.12a12 12 0 0 1-11.51-9.53l-8.56-60.78A169.3 169.3 0 0 1 151.05 393L93.8 416a11.64 11.64 0 0 1-14.14-4.92L33.6 331.57a11.59 11.59 0 0 1 2.63-14.78l48.69-38.12A174.58 174.58 0 0 1 83.28 256a165.53 165.53 0 0 1 1.64-22.34l-48.69-38.12a11.59 11.59 0 0 1-2.63-14.78l46.06-79.52a11.64 11.64 0 0 1 14.14-4.93l57.25 23a176.56 176.56 0 0 1 38.82-22.67l8.56-60.78A11.93 11.93 0 0 1 209.94 26h92.12a12 12 0 0 1 11.51 9.53l8.56 60.78A169.3 169.3 0 0 1 361 119l57.2-23a11.64 11.64 0 0 1 14.14 4.92l46.06 79.52a11.59 11.59 0 0 1-2.63 14.78l-48.69 38.12a174.58 174.58 0 0 1 1.64 22.66z", @@ -38391,19 +38932,19 @@ const _hoisted_2$7 = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_3$6 = [_hoisted_2$7]; +const _hoisted_3$7 = [_hoisted_2$8]; const SettingsSharp = defineComponent({ name: "SettingsSharp", - render: function render10(_ctx, _cache) { - return openBlock(), createElementBlock("svg", _hoisted_1$9, _hoisted_3$6); + render: function render12(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$a, _hoisted_3$7); } }); -const _hoisted_1$8 = { +const _hoisted_1$9 = { xmlns: "http://www.w3.org/2000/svg", "xmlns:xlink": "http://www.w3.org/1999/xlink", viewBox: "0 0 512 512" }; -const _hoisted_2$6 = /* @__PURE__ */ createBaseVNode( +const _hoisted_2$7 = /* @__PURE__ */ createBaseVNode( "path", { d: "M425.7 118.25A240 240 0 0 0 76.32 447l.18.2c.33.35.64.71 1 1.05c.74.84 1.58 1.79 2.57 2.78a41.17 41.17 0 0 0 60.36-.42a157.13 157.13 0 0 1 231.26 0a41.18 41.18 0 0 0 60.65.06l3.21-3.5l.18-.2a239.93 239.93 0 0 0-10-328.76zM240 128a16 16 0 0 1 32 0v32a16 16 0 0 1-32 0zM128 304H96a16 16 0 0 1 0-32h32a16 16 0 0 1 0 32zm48.8-95.2a16 16 0 0 1-22.62 0l-22.63-22.62a16 16 0 0 1 22.63-22.63l22.62 22.63a16 16 0 0 1 0 22.62zm149.3 23.1l-47.5 75.5a31 31 0 0 1-7 7a30.11 30.11 0 0 1-35-49l75.5-47.5a10.23 10.23 0 0 1 11.7 0a10.06 10.06 0 0 1 2.3 14zm31.72-23.1a16 16 0 0 1-22.62-22.62l22.62-22.63a16 16 0 0 1 22.63 22.63zm65.88 227.6zM416 304h-32a16 16 0 0 1 0-32h32a16 16 0 0 1 0 32z", @@ -38413,19 +38954,19 @@ const _hoisted_2$6 = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_3$5 = [_hoisted_2$6]; +const _hoisted_3$6 = [_hoisted_2$7]; const Speedometer = defineComponent({ name: "Speedometer", - render: function render11(_ctx, _cache) { - return openBlock(), createElementBlock("svg", _hoisted_1$8, _hoisted_3$5); + render: function render13(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$9, _hoisted_3$6); } }); -const _hoisted_1$7 = { +const _hoisted_1$8 = { xmlns: "http://www.w3.org/2000/svg", "xmlns:xlink": "http://www.w3.org/1999/xlink", viewBox: "0 0 512 512" }; -const _hoisted_2$5 = /* @__PURE__ */ createBaseVNode( +const _hoisted_2$6 = /* @__PURE__ */ createBaseVNode( "path", { d: "M104 496H72a24 24 0 0 1-24-24V328a24 24 0 0 1 24-24h32a24 24 0 0 1 24 24v144a24 24 0 0 1-24 24z", @@ -38435,7 +38976,7 @@ const _hoisted_2$5 = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_3$4 = /* @__PURE__ */ createBaseVNode( +const _hoisted_3$5 = /* @__PURE__ */ createBaseVNode( "path", { d: "M328 496h-32a24 24 0 0 1-24-24V232a24 24 0 0 1 24-24h32a24 24 0 0 1 24 24v240a24 24 0 0 1-24 24z", @@ -38445,7 +38986,7 @@ const _hoisted_3$4 = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_4$4 = /* @__PURE__ */ createBaseVNode( +const _hoisted_4$5 = /* @__PURE__ */ createBaseVNode( "path", { d: "M440 496h-32a24 24 0 0 1-24-24V120a24 24 0 0 1 24-24h32a24 24 0 0 1 24 24v352a24 24 0 0 1-24 24z", @@ -38455,7 +38996,7 @@ const _hoisted_4$4 = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_5$4 = /* @__PURE__ */ createBaseVNode( +const _hoisted_5$5 = /* @__PURE__ */ createBaseVNode( "path", { d: "M216 496h-32a24 24 0 0 1-24-24V40a24 24 0 0 1 24-24h32a24 24 0 0 1 24 24v432a24 24 0 0 1-24 24z", @@ -38465,19 +39006,19 @@ const _hoisted_5$4 = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_6$2 = [_hoisted_2$5, _hoisted_3$4, _hoisted_4$4, _hoisted_5$4]; +const _hoisted_6$3 = [_hoisted_2$6, _hoisted_3$5, _hoisted_4$5, _hoisted_5$5]; const StatsChart = defineComponent({ name: "StatsChart", - render: function render12(_ctx, _cache) { - return openBlock(), createElementBlock("svg", _hoisted_1$7, _hoisted_6$2); + render: function render14(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$8, _hoisted_6$3); } }); -const _hoisted_1$6 = { +const _hoisted_1$7 = { xmlns: "http://www.w3.org/2000/svg", "xmlns:xlink": "http://www.w3.org/1999/xlink", viewBox: "0 0 512 512" }; -const _hoisted_2$4 = /* @__PURE__ */ createBaseVNode( +const _hoisted_2$5 = /* @__PURE__ */ createBaseVNode( "path", { d: "M434.67 285.59v-29.8c0-98.73-80.24-178.79-179.2-178.79a179 179 0 0 0-140.14 67.36m-38.53 82v29.8C76.8 355 157 435 256 435a180.45 180.45 0 0 0 140-66.92", @@ -38491,7 +39032,7 @@ const _hoisted_2$4 = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_3$3 = /* @__PURE__ */ createBaseVNode( +const _hoisted_3$4 = /* @__PURE__ */ createBaseVNode( "path", { fill: "none", @@ -38505,7 +39046,7 @@ const _hoisted_3$3 = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_4$3 = /* @__PURE__ */ createBaseVNode( +const _hoisted_4$4 = /* @__PURE__ */ createBaseVNode( "path", { fill: "none", @@ -38519,19 +39060,19 @@ const _hoisted_4$3 = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_5$3 = [_hoisted_2$4, _hoisted_3$3, _hoisted_4$3]; +const _hoisted_5$4 = [_hoisted_2$5, _hoisted_3$4, _hoisted_4$4]; const SyncSharp = defineComponent({ name: "SyncSharp", - render: function render13(_ctx, _cache) { - return openBlock(), createElementBlock("svg", _hoisted_1$6, _hoisted_5$3); + render: function render15(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$7, _hoisted_5$4); } }); -const _hoisted_1$5 = { +const _hoisted_1$6 = { xmlns: "http://www.w3.org/2000/svg", "xmlns:xlink": "http://www.w3.org/1999/xlink", viewBox: "0 0 512 512" }; -const _hoisted_2$3 = /* @__PURE__ */ createBaseVNode( +const _hoisted_2$4 = /* @__PURE__ */ createBaseVNode( "path", { d: "M346.65 304.3a136 136 0 0 0-180.71 0a21 21 0 1 0 27.91 31.38a94 94 0 0 1 124.89 0a21 21 0 0 0 27.91-31.4z", @@ -38541,7 +39082,7 @@ const _hoisted_2$3 = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_3$2 = /* @__PURE__ */ createBaseVNode( +const _hoisted_3$3 = /* @__PURE__ */ createBaseVNode( "path", { d: "M256.28 183.7a221.47 221.47 0 0 0-151.8 59.92a21 21 0 1 0 28.68 30.67a180.28 180.28 0 0 1 246.24 0a21 21 0 1 0 28.68-30.67a221.47 221.47 0 0 0-151.8-59.92z", @@ -38551,7 +39092,7 @@ const _hoisted_3$2 = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_4$2 = /* @__PURE__ */ createBaseVNode( +const _hoisted_4$3 = /* @__PURE__ */ createBaseVNode( "path", { d: "M462 175.86a309 309 0 0 0-411.44 0a21 21 0 1 0 28 31.29a267 267 0 0 1 355.43 0a21 21 0 0 0 28-31.31z", @@ -38561,7 +39102,7 @@ const _hoisted_4$2 = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_5$2 = /* @__PURE__ */ createBaseVNode( +const _hoisted_5$3 = /* @__PURE__ */ createBaseVNode( "circle", { cx: "256.28", @@ -38573,11 +39114,11 @@ const _hoisted_5$2 = /* @__PURE__ */ createBaseVNode( -1 /* HOISTED */ ); -const _hoisted_6$1 = [_hoisted_2$3, _hoisted_3$2, _hoisted_4$2, _hoisted_5$2]; +const _hoisted_6$2 = [_hoisted_2$4, _hoisted_3$3, _hoisted_4$3, _hoisted_5$3]; const Wifi = defineComponent({ name: "Wifi", - render: function render14(_ctx, _cache) { - return openBlock(), createElementBlock("svg", _hoisted_1$5, _hoisted_6$1); + render: function render16(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$6, _hoisted_6$2); } }); /*! @@ -38598,7 +39139,7 @@ function applyToParams(fn, params) { } return newParams; } -const noop$1 = () => { +const noop = () => { }; const isArray = Array.isArray; const TRAILING_SLASH_RE = /\/$/; @@ -39339,7 +39880,7 @@ function createRouterMatcher(routes, globalOptions) { } return originalMatcher ? () => { removeRoute(originalMatcher); - } : noop$1; + } : noop; } function removeRoute(matcherRef) { if (isRouteName(matcherRef)) { @@ -39702,7 +40243,7 @@ function useLink(props) { return router2[unref(props.replace) ? "replace" : "push"]( unref(props.to) // avoid uncaught errors are they are logged anyway - ).catch(noop$1); + ).catch(noop); } return Promise.resolve(); } @@ -40180,7 +40721,7 @@ function createRouter(options) { const toLocation = resolve2(to); const shouldRedirect = handleRedirectRecord(toLocation); if (shouldRedirect) { - pushWithRedirect(assign(shouldRedirect, { replace: true }), toLocation).catch(noop$1); + pushWithRedirect(assign(shouldRedirect, { replace: true }), toLocation).catch(noop); return; } pendingLocation = toLocation; @@ -40213,7 +40754,7 @@ function createRouter(options) { ) && !info.delta && info.type === NavigationType.pop) { routerHistory.go(-1, false); } - }).catch(noop$1); + }).catch(noop); return Promise.reject(); } if (info.delta) { @@ -40245,7 +40786,7 @@ function createRouter(options) { } } triggerAfterEach(toLocation, from, failure); - }).catch(noop$1); + }).catch(noop); }); } let readyHandlers = useCallbacks(); @@ -40378,159 +40919,9 @@ function extractChangingRecords(to, from) { function useRouter() { return inject(routerKey); } -const _hoisted_1$4 = { class: "navbar" }; -const _sfc_main$8 = /* @__PURE__ */ defineComponent({ - __name: "CollapsibleNavbar", - setup(__props) { - function renderIcon(icon) { - return () => h(NIcon, null, { default: () => h(icon) }); - } - const menuOptionsMain = [ - { - label: () => h(RouterLink, { to: "/" }, { default: () => "Text to Image" }), - key: "txt2img", - icon: renderIcon(Image$1) - }, - { - label: () => h(RouterLink, { to: "/img2img" }, { default: () => "Image to Image" }), - key: "img2img", - icon: renderIcon(Images) - }, - { - label: () => h( - RouterLink, - { to: "/imageProcessing" }, - { default: () => "Image Processing" } - ), - key: "imageProcessing", - icon: renderIcon(Duplicate) - }, - { - label: () => h(RouterLink, { to: "/tagger" }, { default: () => "Tagger" }), - key: "tagger", - icon: renderIcon(Create) - }, - { - label: () => h( - RouterLink, - { to: "/imageBrowser" }, - { default: () => "Image Browser" } - ), - key: "imageBrowser", - icon: renderIcon(Albums) - }, - { - label: () => h(RouterLink, { to: "/models" }, { default: () => "Models" }), - key: "models", - icon: renderIcon(Cube) - }, - { - label: () => h(RouterLink, { to: "/accelerate" }, { default: () => "Accelerate" }), - key: "plugins", - icon: renderIcon(Speedometer) - }, - // { - // label: () => h(RouterLink, { to: "/extra" }, { default: () => "Extra" }), - // key: "extra", - // icon: renderIcon(Archive), - // }, - { - label: () => h(RouterLink, { to: "/settings" }, { default: () => "Settings" }), - key: "settings", - icon: renderIcon(SettingsSharp) - } - ]; - let collapsed = ref(true); - return (_ctx, _cache) => { - return openBlock(), createElementBlock("div", _hoisted_1$4, [ - createVNode(unref(NLayout), { - style: { "height": "100%", "overflow": "visible" }, - "has-sider": "", - "content-style": "overflow: visible" - }, { - default: withCtx(() => [ - createVNode(unref(NLayoutSider), { - bordered: "", - "collapse-mode": "width", - "collapsed-width": 64, - width: 240, - collapsed: unref(collapsed), - "show-trigger": "", - onCollapse: _cache[0] || (_cache[0] = ($event) => isRef(collapsed) ? collapsed.value = true : collapsed = true), - onExpand: _cache[1] || (_cache[1] = ($event) => isRef(collapsed) ? collapsed.value = false : collapsed = false), - style: { "overflow": "visible", "overflow-x": "visible" } - }, { - default: withCtx(() => [ - createVNode(unref(NSpace), { - vertical: "", - justify: "space-between", - style: { "height": "100%", "overflow": "visible", "overflow-x": "visible" }, - "item-style": "height: 100%" - }, { - default: withCtx(() => [ - createVNode(unref(NMenu), { - collapsed: unref(collapsed), - "collapsed-width": 64, - "collapsed-icon-size": 22, - options: menuOptionsMain, - style: { "height": "100%", "display": "flex", "flex-direction": "column" } - }, null, 8, ["collapsed"]) - ]), - _: 1 - }) - ]), - _: 1 - }, 8, ["collapsed"]) - ]), - _: 1 - }) - ]); - }; - } -}); -const CollapsibleNavbar_vue_vue_type_style_index_0_lang = ""; -const loc = window.location; -let new_uri; -if (loc.protocol === "https:") { - new_uri = "wss:"; -} else { - new_uri = "ws:"; -} -const serverUrl = loc.protocol + "//" + loc.host; -const webSocketUrl = new_uri + "//" + loc.host; -const huggingfaceModelsFile = "https://raw.githubusercontent.com/VoltaML/voltaML-fast-stable-diffusion/experimental/static/huggingface-models.json"; -const defaultCapabilities = { - supported_backends: [["CPU", "cpu"]], - supported_precisions_cpu: ["float32"], - supported_precisions_gpu: ["float32"], - supported_torch_compile_backends: ["inductor"], - supported_self_attentions: [ - ["Cross-Attention", "cross-attention"], - ["Subquadratic Attention", "subquadratic"], - ["Multihead Attention", "multihead"] - ], - has_tensorfloat: false, - has_tensor_cores: false, - supports_xformers: false, - supports_triton: false, - supports_int8: false -}; -async function getCapabilities() { - try { - const response = await fetch(`${serverUrl}/api/hardware/capabilities`); - if (response.status !== 200) { - console.error("Server is not responding"); - return defaultCapabilities; - } - const data = await response.json(); - return data; - } catch (error) { - console.error(error); - return defaultCapabilities; - } -} const useState2 = defineStore("state", () => { const state2 = reactive({ + collapsibleBarActive: false, progress: 0, generating: false, downloading: false, @@ -40550,6 +40941,8 @@ const useState2 = defineStore("state", () => { txt2img: { images: [], highres: false, + refiner: false, + sdxl_resize: false, currentImage: "", genData: { time_taken: null, @@ -40631,8 +41024,14 @@ const useState2 = defineStore("state", () => { }, autofill: [], autofill_special: [], - capabilities: defaultCapabilities + capabilities: defaultCapabilities, // Should get replaced at runtime + settings_diff: { + active: false, + default_value: "", + current_value: "", + key: [] + } }); async function fetchCapabilites() { state2.capabilities = await getCapabilities(); @@ -40650,16 +41049,182 @@ const useState2 = defineStore("state", () => { } return { state: state2, fetchCapabilites, fetchAutofill }; }); +const _hoisted_1$5 = { class: "navbar" }; +const _sfc_main$9 = /* @__PURE__ */ defineComponent({ + __name: "CollapsibleNavbar", + setup(__props) { + const global2 = useState2(); + function renderIcon(icon) { + return () => h(NIcon, null, { default: () => h(icon) }); + } + const menuOptionsMain = [ + { + label: () => h(RouterLink, { to: "/" }, { default: () => "Text to Image" }), + key: "txt2img", + icon: renderIcon(Image$1) + }, + { + label: () => h(RouterLink, { to: "/img2img" }, { default: () => "Image to Image" }), + key: "img2img", + icon: renderIcon(Images) + }, + { + label: () => h( + RouterLink, + { to: "/imageProcessing" }, + { default: () => "Image Processing" } + ), + key: "imageProcessing", + icon: renderIcon(Duplicate) + }, + { + label: () => h(RouterLink, { to: "/tagger" }, { default: () => "Tagger" }), + key: "tagger", + icon: renderIcon(Create) + }, + { + label: () => h( + RouterLink, + { to: "/imageBrowser" }, + { default: () => "Image Browser" } + ), + key: "imageBrowser", + icon: renderIcon(Albums) + }, + { + label: () => h(RouterLink, { to: "/models" }, { default: () => "Models" }), + key: "models", + icon: renderIcon(Cube) + }, + { + label: () => h(RouterLink, { to: "/accelerate" }, { default: () => "Accelerate" }), + key: "plugins", + icon: renderIcon(Speedometer) + }, + // { + // label: () => h(RouterLink, { to: "/extra" }, { default: () => "Extra" }), + // key: "extra", + // icon: renderIcon(Archive), + // }, + { + label: () => h(RouterLink, { to: "/settings" }, { default: () => "Settings" }), + key: "settings", + icon: renderIcon(SettingsSharp) + } + ]; + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1$5, [ + unref(isLargeScreen) ? (openBlock(), createBlock(unref(NLayout), { + key: 0, + style: { "height": "100%", "overflow": "visible" }, + "has-sider": "", + "content-style": "overflow: visible" + }, { + default: withCtx(() => [ + createVNode(unref(NLayoutSider), { + bordered: "", + "collapse-mode": "width", + "collapsed-width": 64, + width: 240, + collapsed: !unref(global2).state.collapsibleBarActive, + "show-trigger": "", + onCollapse: _cache[0] || (_cache[0] = ($event) => unref(global2).state.collapsibleBarActive = false), + onExpand: _cache[1] || (_cache[1] = ($event) => unref(global2).state.collapsibleBarActive = true), + style: { "overflow": "visible", "overflow-x": "visible" } + }, { + default: withCtx(() => [ + createVNode(unref(NSpace), { + vertical: "", + justify: "space-between", + style: { "height": "100%", "overflow": "visible", "overflow-x": "visible" }, + "item-style": "height: 100%" + }, { + default: withCtx(() => [ + createVNode(unref(NMenu), { + collapsed: !unref(global2).state.collapsibleBarActive, + "collapsed-width": 64, + "collapsed-icon-size": 22, + options: menuOptionsMain, + style: { "height": "100%", "display": "flex", "flex-direction": "column" } + }, null, 8, ["collapsed"]) + ]), + _: 1 + }) + ]), + _: 1 + }, 8, ["collapsed"]) + ]), + _: 1 + })) : (openBlock(), createBlock(unref(NDrawer), { + key: 1, + show: unref(global2).state.collapsibleBarActive, + "onUpdate:show": _cache[2] || (_cache[2] = ($event) => unref(global2).state.collapsibleBarActive = $event), + placement: "left", + width: "272px" + }, { + default: withCtx(() => [ + createVNode(unref(NDrawerContent), { "body-content-style": { + padding: "0px" + } }, { + default: withCtx(() => [ + createVNode(unref(NLayout), { + style: { "height": "100%", "overflow": "visible" }, + "has-sider": "", + "content-style": "overflow: visible" + }, { + default: withCtx(() => [ + createVNode(unref(NLayoutSider), { + bordered: "", + "collapse-mode": "width", + collapsed: false, + style: { "overflow": "visible", "overflow-x": "visible" } + }, { + default: withCtx(() => [ + createVNode(unref(NSpace), { + vertical: "", + justify: "space-between", + style: { "height": "100%", "overflow": "visible", "overflow-x": "visible" }, + "item-style": "height: 100%" + }, { + default: withCtx(() => [ + createVNode(unref(NMenu), { + collapsed: false, + "collapsed-width": 64, + "collapsed-icon-size": 22, + options: menuOptionsMain, + style: { "height": "100%", "display": "flex", "flex-direction": "column" } + }) + ]), + _: 1 + }) + ]), + _: 1 + }) + ]), + _: 1 + }) + ]), + _: 1 + }) + ]), + _: 1 + }, 8, ["show"])) + ]); + }; + } +}); +const CollapsibleNavbar_vue_vue_type_style_index_0_lang = ""; var Backends = /* @__PURE__ */ ((Backends2) => { Backends2[Backends2["PyTorch"] = 0] = "PyTorch"; - Backends2[Backends2["AITemplate"] = 1] = "AITemplate"; - Backends2[Backends2["ONNX"] = 2] = "ONNX"; - Backends2[Backends2["unknown"] = 3] = "unknown"; - Backends2[Backends2["LoRA"] = 4] = "LoRA"; - Backends2[Backends2["LyCORIS"] = 5] = "LyCORIS"; - Backends2[Backends2["VAE"] = 6] = "VAE"; - Backends2[Backends2["Textual Inversion"] = 7] = "Textual Inversion"; - Backends2[Backends2["Upscaler"] = 8] = "Upscaler"; + Backends2[Backends2["SDXL"] = 1] = "SDXL"; + Backends2[Backends2["AITemplate"] = 2] = "AITemplate"; + Backends2[Backends2["ONNX"] = 3] = "ONNX"; + Backends2[Backends2["unknown"] = 4] = "unknown"; + Backends2[Backends2["LoRA"] = 5] = "LoRA"; + Backends2[Backends2["LyCORIS"] = 6] = "LyCORIS"; + Backends2[Backends2["VAE"] = 7] = "VAE"; + Backends2[Backends2["Textual Inversion"] = 8] = "Textual Inversion"; + Backends2[Backends2["Upscaler"] = 9] = "Upscaler"; return Backends2; })(Backends || {}); var ControlNetType = /* @__PURE__ */ ((ControlNetType2) => { @@ -40673,991 +41238,10 @@ var ControlNetType = /* @__PURE__ */ ((ControlNetType2) => { ControlNetType2["SEGMENTATION"] = "lllyasviel/sd-controlnet-seg"; return ControlNetType2; })(ControlNetType || {}); -const defaultSettings = { - $schema: "./schema/ui_data/settings.json", - backend: "PyTorch", - model: null, - flags: { - highres: { - image_upscaler: "RealESRGAN_x4plus_anime_6B", - mode: "latent", - scale: 2, - latent_scale_mode: "bislerp-tortured", - strength: 0.7, - steps: 50, - antialiased: false - } - }, - aitDim: { - width: void 0, - height: void 0, - batch_size: void 0 - }, - txt2img: { - width: 512, - height: 512, - seed: -1, - cfg_scale: 7, - sampler: 8, - prompt: "", - steps: 25, - batch_count: 1, - batch_size: 1, - negative_prompt: "", - self_attention_scale: 0, - sigmas: "automatic" - }, - img2img: { - width: 512, - height: 512, - seed: -1, - cfg_scale: 7, - sampler: 8, - prompt: "", - steps: 25, - batch_count: 1, - batch_size: 1, - negative_prompt: "", - denoising_strength: 0.6, - image: "", - self_attention_scale: 0, - sigmas: "automatic" - }, - inpainting: { - prompt: "", - negative_prompt: "", - image: "", - mask_image: "", - width: 512, - height: 512, - steps: 25, - cfg_scale: 7, - seed: -1, - batch_count: 1, - batch_size: 1, - sampler: 8, - self_attention_scale: 0, - sigmas: "automatic" - }, - controlnet: { - prompt: "", - image: "", - sampler: 8, - controlnet: ControlNetType.CANNY, - negative_prompt: "", - width: 512, - height: 512, - steps: 25, - cfg_scale: 7, - seed: -1, - batch_size: 1, - batch_count: 1, - controlnet_conditioning_scale: 1, - detection_resolution: 512, - is_preprocessed: false, - save_preprocessed: false, - return_preprocessed: true, - sigmas: "automatic" - }, - upscale: { - image: "", - upscale_factor: 4, - model: "RealESRGAN_x4plus_anime_6B", - tile_size: 128, - tile_padding: 10 - }, - tagger: { - image: "", - model: "deepdanbooru", - threshold: 0.5 - }, - api: { - websocket_sync_interval: 0.02, - websocket_perf_interval: 1, - enable_websocket_logging: true, - clip_skip: 1, - clip_quantization: "full", - autocast: true, - attention_processor: "xformers", - subquadratic_size: 512, - attention_slicing: "disabled", - channels_last: true, - vae_slicing: false, - vae_tiling: false, - trace_model: false, - cudnn_benchmark: false, - offload: "disabled", - dont_merge_latents: false, - device: "cuda:0", - data_type: "float16", - use_tomesd: true, - tomesd_ratio: 0.4, - tomesd_downsample_layers: 1, - deterministic_generation: false, - reduced_precision: false, - clear_memory_policy: "always", - huggingface_style_parsing: false, - autoloaded_textual_inversions: [], - autoloaded_models: [], - autoloaded_vae: {}, - save_path_template: "{folder}/{prompt}/{id}-{index}.{extension}", - image_extension: "png", - image_quality: 95, - disable_grid: false, - torch_compile: false, - torch_compile_fullgraph: false, - torch_compile_dynamic: false, - torch_compile_backend: "inductor", - torch_compile_mode: "default", - sfast_compile: false, - sfast_xformers: true, - sfast_triton: true, - sfast_cuda_graph: false, - hypertile: false, - hypertile_unet_chunk: 256, - sgm_noise_multiplier: false, - kdiffusers_quantization: true, - generator: "device", - live_preview_method: "approximation", - live_preview_delay: 2, - prompt_to_prompt: false, - prompt_to_prompt_model: "lllyasviel/Fooocus-Expansion", - prompt_to_prompt_device: "gpu", - free_u: false, - free_u_s1: 0.9, - free_u_s2: 0.2, - free_u_b1: 1.2, - free_u_b2: 1.4 - }, - aitemplate: { - num_threads: 8 - }, - onnx: { - quant_dict: { - text_encoder: null, - unet: null, - vae_decoder: null, - vae_encoder: null - }, - convert_to_fp16: true, - simplify_unet: false - }, - bot: { - default_scheduler: 8, - verbose: false, - use_default_negative_prompt: true - }, - frontend: { - theme: "dark", - enable_theme_editor: false, - image_browser_columns: 5, - on_change_timer: 2e3, - nsfw_ok_threshold: 0, - background_image_override: "", - disable_analytics: true - }, - sampler_config: {} -}; -let rSettings = JSON.parse(JSON.stringify(defaultSettings)); -try { - const req = new XMLHttpRequest(); - req.open("GET", `${serverUrl}/api/settings/`, false); - req.send(); - rSettings = { ...rSettings, ...JSON.parse(req.responseText) }; -} catch (e) { - console.error(e); -} -console.log("Settings:", rSettings); -const recievedSettings = rSettings; -class Settings { - constructor(settings_override) { - __publicField(this, "settings"); - this.settings = { ...defaultSettings, ...settings_override }; - } - to_json() { - return JSON.stringify(this.settings); - } -} -const diffusersSchedulerTuple = { - DDIM: 1, - DDPM: 2, - PNDM: 3, - LMSD: 4, - EulerDiscrete: 5, - HeunDiscrete: 6, - EulerAncestralDiscrete: 7, - DPMSolverMultistep: 8, - DPMSolverSinglestep: 9, - KDPM2Discrete: 10, - KDPM2AncestralDiscrete: 11, - DEISMultistep: 12, - UniPCMultistep: 13, - DPMSolverSDEScheduler: 14 -}; -const upscalerOptions = [ - { - label: "RealESRGAN_x4plus", - value: "RealESRGAN_x4plus" - }, - { - label: "RealESRNet_x4plus", - value: "RealESRNet_x4plus" - }, - { - label: "RealESRGAN_x4plus_anime_6B", - value: "RealESRGAN_x4plus_anime_6B" - }, - { - label: "RealESRGAN_x2plus", - value: "RealESRGAN_x2plus" - }, - { - label: "RealESR-general-x4v3", - value: "RealESR-general-x4v3" - } -]; -function getSchedulerOptions() { - const scheduler_options = [ - { - type: "group", - label: "k-diffusion", - key: "K-Diffusion", - children: [ - { label: "Euler a", value: "euler_a" }, - { label: "Euler", value: "euler" }, - { label: "LMS", value: "lms" }, - { label: "Heun", value: "heun" }, - { label: "DPM Fast", value: "dpm_fast" }, - { label: "DPM Adaptive", value: "dpm_adaptive" }, - { label: "DPM2", value: "dpm2" }, - { label: "DPM2 a", value: "dpm2_a" }, - { label: "DPM++ 2S a", value: "dpmpp_2s_a" }, - { label: "DPM++ 2M", value: "dpmpp_2m" }, - { label: "DPM++ 2M Sharp", value: "dpmpp_2m_sharp" }, - { label: "DPM++ SDE", value: "dpmpp_sde" }, - { label: "DPM++ 2M SDE", value: "dpmpp_2m_sde" }, - { label: "DPM++ 3M SDE", value: "dpmpp_3m_sde" }, - { label: "UniPC Multistep", value: "unipc_multistep" }, - { label: "Restart", value: "restart" } - ] - }, - { - type: "group", - label: "Diffusers", - key: "diffusers", - children: Object.keys(diffusersSchedulerTuple).map((key) => { - return { - label: key, - value: diffusersSchedulerTuple[key] - }; - }) - } - ]; - return scheduler_options; -} -function getControlNetOptions() { - const controlnet_options = [ - { - type: "group", - label: "ControlNet 1.1", - key: "ControlNet 1.1", - children: [ - { - label: "lllyasviel/control_v11p_sd15_canny", - value: "lllyasviel/control_v11p_sd15_canny" - }, - { - label: "lllyasviel/control_v11f1p_sd15_depth", - value: "lllyasviel/control_v11f1p_sd15_depth" - }, - { - label: "lllyasviel/control_v11e_sd15_ip2p", - value: "lllyasviel/control_v11e_sd15_ip2p" - }, - { - label: "lllyasviel/control_v11p_sd15_softedge", - value: "lllyasviel/control_v11p_sd15_softedge" - }, - { - label: "lllyasviel/control_v11p_sd15_openpose", - value: "lllyasviel/control_v11p_sd15_openpose" - }, - { - label: "lllyasviel/control_v11f1e_sd15_tile", - value: "lllyasviel/control_v11f1e_sd15_tile" - }, - { - label: "lllyasviel/control_v11p_sd15_mlsd", - value: "lllyasviel/control_v11p_sd15_mlsd" - }, - { - label: "lllyasviel/control_v11p_sd15_scribble", - value: "lllyasviel/control_v11p_sd15_scribble" - }, - { - label: "lllyasviel/control_v11p_sd15_seg", - value: "lllyasviel/control_v11p_sd15_seg" - } - ] - }, - { - type: "group", - label: "Special", - key: "Special", - children: [ - { - label: "DionTimmer/controlnet_qrcode", - value: "DionTimmer/controlnet_qrcode" - }, - { - label: "CrucibleAI/ControlNetMediaPipeFace", - value: "CrucibleAI/ControlNetMediaPipeFace" - } - ] - }, - { - type: "group", - label: "Original", - key: "Original", - children: [ - { - label: "lllyasviel/sd-controlnet-canny", - value: "lllyasviel/sd-controlnet-canny" - }, - { - label: "lllyasviel/sd-controlnet-depth", - value: "lllyasviel/sd-controlnet-depth" - }, - { - label: "lllyasviel/sd-controlnet-hed", - value: "lllyasviel/sd-controlnet-hed" - }, - { - label: "lllyasviel/sd-controlnet-mlsd", - value: "lllyasviel/sd-controlnet-mlsd" - }, - { - label: "lllyasviel/sd-controlnet-normal", - value: "lllyasviel/sd-controlnet-normal" - }, - { - label: "lllyasviel/sd-controlnet-openpose", - value: "lllyasviel/sd-controlnet-openpose" - }, - { - label: "lllyasviel/sd-controlnet-scribble", - value: "lllyasviel/sd-controlnet-scribble" - }, - { - label: "lllyasviel/sd-controlnet-seg", - value: "lllyasviel/sd-controlnet-seg" - } - ] - } - ]; - return controlnet_options; -} -const deepcopiedSettings = JSON.parse(JSON.stringify(recievedSettings)); -const useSettings = defineStore("settings", () => { - const data = reactive(new Settings(recievedSettings)); - const scheduler_options = computed(() => { - return getSchedulerOptions(); - }); - const controlnet_options = computed(() => { - return getControlNetOptions(); - }); - function resetSettings() { - console.log("Resetting settings to default"); - Object.assign(defaultSettings$1, defaultSettings); - } - const defaultSettings$1 = reactive(deepcopiedSettings); - return { - data, - scheduler_options, - controlnet_options, - defaultSettings: defaultSettings$1, - resetSettings - }; -}); -const ImageUpload_vue_vue_type_style_index_0_scoped_9ed1514f_lang = ""; -const _export_sfc = (sfc, props) => { - const target = sfc.__vccOpts || sfc; - for (const [key, val] of props) { - target[key] = val; - } - return target; -}; -const _sfc_main$7 = /* @__PURE__ */ defineComponent({ - __name: "InitHandler", - setup(__props) { - console.log( - ` - ██╗ ██╗ █████╗ ██╗ ████████╗ █████╗ ███╗ ███╗██╗ - ██║ ██║██╔══██╗██║ ╚══██╔══╝██╔══██╗████╗ ████║██║ - ╚██╗ ██╔╝██║ ██║██║ ██║ ███████║██╔████╔██║██║ - ╚████╔╝ ██║ ██║██║ ██║ ██╔══██║██║╚██╔╝██║██║ - ╚██╔╝ ╚█████╔╝███████╗ ██║ ██║ ██║██║ ╚═╝ ██║███████╗ - ╚═╝ ╚════╝ ╚══════╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝ - ` - ); - const global2 = useState2(); - global2.fetchCapabilites().then(() => { - console.log("Capabilities successfully fetched from the server"); - }); - global2.fetchAutofill(); - return (_ctx, _cache) => { - return null; - }; - } -}); -const _sfc_main$6 = /* @__PURE__ */ defineComponent({ - __name: "LogDrawer", - setup(__props) { - const glob = useState2(); - const log = computed(() => glob.state.log_drawer.logs.join("\n")); - return (_ctx, _cache) => { - return openBlock(), createBlock(unref(NDrawer), { - placement: "bottom", - show: unref(glob).state.log_drawer.enabled, - "onUpdate:show": _cache[0] || (_cache[0] = ($event) => unref(glob).state.log_drawer.enabled = $event), - "auto-focus": false, - "show-mask": true, - height: "70vh" - }, { - default: withCtx(() => [ - createVNode(unref(NDrawerContent), { - closable: "", - title: "Log - 500 latest messages" - }, { - default: withCtx(() => [ - createVNode(unref(NLog), { - ref: "logRef", - log: log.value, - trim: "", - style: { "height": "100%" } - }, null, 8, ["log"]) - ]), - _: 1 - }) - ]), - _: 1 - }, 8, ["show"]); - }; - } -}); -const _hoisted_1$3 = { style: { "width": "100%", "display": "inline-flex", "align-items": "center" } }; -const _hoisted_2$2 = /* @__PURE__ */ createBaseVNode("p", { style: { "width": "108px" } }, "Utilization", -1); -const _hoisted_3$1 = { style: { "width": "100%", "display": "inline-flex", "align-items": "center" } }; -const _hoisted_4$1 = /* @__PURE__ */ createBaseVNode("p", { style: { "width": "108px" } }, "Memory", -1); -const _hoisted_5$1 = { style: { "align-self": "flex-end", "margin-left": "12px" } }; -const _sfc_main$5 = /* @__PURE__ */ defineComponent({ - __name: "PerformanceDrawer", - setup(__props) { - const global2 = useState2(); - const glob = useState2(); - return (_ctx, _cache) => { - return openBlock(), createBlock(unref(NDrawer), { - placement: "bottom", - show: unref(glob).state.perf_drawer.enabled, - "onUpdate:show": _cache[0] || (_cache[0] = ($event) => unref(glob).state.perf_drawer.enabled = $event), - "auto-focus": false, - "show-mask": true, - height: "70vh" - }, { - default: withCtx(() => [ - createVNode(unref(NDrawerContent), { - closable: "", - title: "Performance statistics" - }, { - default: withCtx(() => [ - (openBlock(true), createElementBlock(Fragment, null, renderList(unref(global2).state.perf_drawer.gpus, (gpu) => { - return openBlock(), createBlock(unref(NCard), { - key: gpu.uuid, - style: { "margin-bottom": "12px" } - }, { - default: withCtx(() => [ - createVNode(unref(NSpace), { - inline: "", - justify: "space-between", - style: { "width": "100%" } - }, { - default: withCtx(() => [ - createBaseVNode("h3", null, "[" + toDisplayString(gpu.index) + "] " + toDisplayString(gpu.name), 1), - createBaseVNode("h4", null, toDisplayString(gpu.power_draw) + " / " + toDisplayString(gpu.power_limit) + "W ─ " + toDisplayString(gpu.temperature) + "°C ", 1) - ]), - _: 2 - }, 1024), - createBaseVNode("div", _hoisted_1$3, [ - _hoisted_2$2, - createVNode(unref(NProgress), { - percentage: gpu.utilization, - type: "line", - "indicator-placement": "inside", - style: { "flex-grow": "1", "width": "400px" } - }, null, 8, ["percentage"]) - ]), - createBaseVNode("div", _hoisted_3$1, [ - _hoisted_4$1, - createVNode(unref(NProgress), { - percentage: gpu.memory_usage, - type: "line", - style: { "flex-grow": "1", "width": "400px" }, - color: "#63e2b7", - "indicator-placement": "inside" - }, null, 8, ["percentage"]), - createBaseVNode("p", _hoisted_5$1, toDisplayString(gpu.memory_used) + " / " + toDisplayString(gpu.memory_total) + " MB ", 1) - ]) - ]), - _: 2 - }, 1024); - }), 128)) - ]), - _: 1 - }) - ]), - _: 1 - }, 8, ["show"]); - }; - } -}); -const _hoisted_1$2 = /* @__PURE__ */ createBaseVNode("a", { - target: "_blank", - href: "https://huggingface.co/settings/tokens" -}, "this page", -1); -const _hoisted_2$1 = { style: { "margin-top": "8px", "width": "100%", "display": "flex", "justify-content": "end" } }; -const _sfc_main$4 = /* @__PURE__ */ defineComponent({ - __name: "SecretsHandler", - setup(__props) { - const message = useMessage(); - const global2 = useState2(); - const hf_loading = ref(false); - const hf_token = ref(""); - function noSideSpace(value) { - return !/ /g.test(value); - } - function setHuggingfaceToken() { - hf_loading.value = true; - const url = new URL(`${serverUrl}/api/settings/inject-var-into-dotenv`); - url.searchParams.append("key", "HUGGINGFACE_TOKEN"); - url.searchParams.append("value", hf_token.value); - fetch(url, { method: "POST" }).then((res) => { - if (res.status !== 200) { - message.create("Failed to set HuggingFace token", { type: "error" }); - return; - } - global2.state.secrets.huggingface = "ok"; - message.create("HuggingFace token set successfully", { type: "success" }); - }).catch((e) => { - message.create(`Failed to set HuggingFace token: ${e.message}`, { - type: "error" - }); - }); - hf_loading.value = false; - } - return (_ctx, _cache) => { - return openBlock(), createBlock(unref(NModal), { - show: unref(global2).state.secrets.huggingface !== "ok", - preset: "card", - title: "Missing HuggingFace Token", - style: { "width": "80vw" }, - closable: false - }, { - default: withCtx(() => [ - createVNode(unref(NText), null, { - default: withCtx(() => [ - createTextVNode(" API does not have a HuggingFace token. Please enter a valid token to continue. You can get a token from "), - _hoisted_1$2 - ]), - _: 1 - }), - createVNode(unref(NInput), { - type: "password", - placeholder: "hf_123...", - style: { "margin-top": "8px" }, - "allow-input": noSideSpace, - value: hf_token.value, - "onUpdate:value": _cache[0] || (_cache[0] = ($event) => hf_token.value = $event) - }, null, 8, ["value"]), - createBaseVNode("div", _hoisted_2$1, [ - createVNode(unref(NButton), { - ghost: "", - type: "primary", - loading: hf_loading.value, - onClick: setHuggingfaceToken - }, { - default: withCtx(() => [ - createTextVNode("Set Token") - ]), - _: 1 - }, 8, ["loading"]) - ]) - ]), - _: 1 - }, 8, ["show"]); - }; - } -}); -var _a; -const isClient = typeof window !== "undefined"; -const isFunction = (val) => typeof val === "function"; -const isString = (val) => typeof val === "string"; -const noop = () => { -}; -const isIOS = isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && /iP(ad|hone|od)/.test(window.navigator.userAgent); -function resolveUnref(r) { - return typeof r === "function" ? r() : unref(r); -} -function identity(arg) { - return arg; -} -function tryOnScopeDispose(fn) { - if (getCurrentScope()) { - onScopeDispose(fn); - return true; - } - return false; -} -function resolveRef(r) { - return typeof r === "function" ? computed(r) : ref(r); -} -function useIntervalFn(cb, interval = 1e3, options = {}) { - const { - immediate = true, - immediateCallback = false - } = options; - let timer = null; - const isActive = ref(false); - function clean() { - if (timer) { - clearInterval(timer); - timer = null; - } - } - function pause() { - isActive.value = false; - clean(); - } - function resume() { - const intervalValue = resolveUnref(interval); - if (intervalValue <= 0) - return; - isActive.value = true; - if (immediateCallback) - cb(); - clean(); - timer = setInterval(cb, intervalValue); - } - if (immediate && isClient) - resume(); - if (isRef(interval) || isFunction(interval)) { - const stopWatch = watch(interval, () => { - if (isActive.value && isClient) - resume(); - }); - tryOnScopeDispose(stopWatch); - } - tryOnScopeDispose(pause); - return { - isActive, - pause, - resume - }; -} -function unrefElement(elRef) { - var _a2; - const plain = resolveUnref(elRef); - return (_a2 = plain == null ? void 0 : plain.$el) != null ? _a2 : plain; -} -const defaultWindow = isClient ? window : void 0; -function useEventListener(...args) { - let target; - let events2; - let listeners; - let options; - if (isString(args[0]) || Array.isArray(args[0])) { - [events2, listeners, options] = args; - target = defaultWindow; - } else { - [target, events2, listeners, options] = args; - } - if (!target) - return noop; - if (!Array.isArray(events2)) - events2 = [events2]; - if (!Array.isArray(listeners)) - listeners = [listeners]; - const cleanups = []; - const cleanup = () => { - cleanups.forEach((fn) => fn()); - cleanups.length = 0; - }; - const register = (el, event2, listener, options2) => { - el.addEventListener(event2, listener, options2); - return () => el.removeEventListener(event2, listener, options2); - }; - const stopWatch = watch(() => [unrefElement(target), resolveUnref(options)], ([el, options2]) => { - cleanup(); - if (!el) - return; - cleanups.push(...events2.flatMap((event2) => { - return listeners.map((listener) => register(el, event2, listener, options2)); - })); - }, { immediate: true, flush: "post" }); - const stop = () => { - stopWatch(); - cleanup(); - }; - tryOnScopeDispose(stop); - return stop; -} -let _iOSWorkaround = false; -function onClickOutside(target, handler, options = {}) { - const { window: window2 = defaultWindow, ignore = [], capture = true, detectIframe = false } = options; - if (!window2) - return; - if (isIOS && !_iOSWorkaround) { - _iOSWorkaround = true; - Array.from(window2.document.body.children).forEach((el) => el.addEventListener("click", noop)); - } - let shouldListen = true; - const shouldIgnore = (event2) => { - return ignore.some((target2) => { - if (typeof target2 === "string") { - return Array.from(window2.document.querySelectorAll(target2)).some((el) => el === event2.target || event2.composedPath().includes(el)); - } else { - const el = unrefElement(target2); - return el && (event2.target === el || event2.composedPath().includes(el)); - } - }); - }; - const listener = (event2) => { - const el = unrefElement(target); - if (!el || el === event2.target || event2.composedPath().includes(el)) - return; - if (event2.detail === 0) - shouldListen = !shouldIgnore(event2); - if (!shouldListen) { - shouldListen = true; - return; - } - handler(event2); - }; - const cleanup = [ - useEventListener(window2, "click", listener, { passive: true, capture }), - useEventListener(window2, "pointerdown", (e) => { - const el = unrefElement(target); - if (el) - shouldListen = !e.composedPath().includes(el) && !shouldIgnore(e); - }, { passive: true }), - detectIframe && useEventListener(window2, "blur", (event2) => { - var _a2; - const el = unrefElement(target); - if (((_a2 = window2.document.activeElement) == null ? void 0 : _a2.tagName) === "IFRAME" && !(el == null ? void 0 : el.contains(window2.document.activeElement))) - handler(event2); - }) - ].filter(Boolean); - const stop = () => cleanup.forEach((fn) => fn()); - return stop; -} -const _global = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; -const globalKey = "__vueuse_ssr_handlers__"; -_global[globalKey] = _global[globalKey] || {}; -var SwipeDirection; -(function(SwipeDirection2) { - SwipeDirection2["UP"] = "UP"; - SwipeDirection2["RIGHT"] = "RIGHT"; - SwipeDirection2["DOWN"] = "DOWN"; - SwipeDirection2["LEFT"] = "LEFT"; - SwipeDirection2["NONE"] = "NONE"; -})(SwipeDirection || (SwipeDirection = {})); -var __defProp2 = Object.defineProperty; -var __getOwnPropSymbols = Object.getOwnPropertySymbols; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __propIsEnum = Object.prototype.propertyIsEnumerable; -var __defNormalProp2 = (obj, key, value) => key in obj ? __defProp2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; -var __spreadValues = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp.call(b, prop)) - __defNormalProp2(a, prop, b[prop]); - if (__getOwnPropSymbols) - for (var prop of __getOwnPropSymbols(b)) { - if (__propIsEnum.call(b, prop)) - __defNormalProp2(a, prop, b[prop]); - } - return a; -}; -const _TransitionPresets = { - easeInSine: [0.12, 0, 0.39, 0], - easeOutSine: [0.61, 1, 0.88, 1], - easeInOutSine: [0.37, 0, 0.63, 1], - easeInQuad: [0.11, 0, 0.5, 0], - easeOutQuad: [0.5, 1, 0.89, 1], - easeInOutQuad: [0.45, 0, 0.55, 1], - easeInCubic: [0.32, 0, 0.67, 0], - easeOutCubic: [0.33, 1, 0.68, 1], - easeInOutCubic: [0.65, 0, 0.35, 1], - easeInQuart: [0.5, 0, 0.75, 0], - easeOutQuart: [0.25, 1, 0.5, 1], - easeInOutQuart: [0.76, 0, 0.24, 1], - easeInQuint: [0.64, 0, 0.78, 0], - easeOutQuint: [0.22, 1, 0.36, 1], - easeInOutQuint: [0.83, 0, 0.17, 1], - easeInExpo: [0.7, 0, 0.84, 0], - easeOutExpo: [0.16, 1, 0.3, 1], - easeInOutExpo: [0.87, 0, 0.13, 1], - easeInCirc: [0.55, 0, 1, 0.45], - easeOutCirc: [0, 0.55, 0.45, 1], - easeInOutCirc: [0.85, 0, 0.15, 1], - easeInBack: [0.36, 0, 0.66, -0.56], - easeOutBack: [0.34, 1.56, 0.64, 1], - easeInOutBack: [0.68, -0.6, 0.32, 1.6] -}; -__spreadValues({ - linear: identity -}, _TransitionPresets); -const DEFAULT_PING_MESSAGE = "ping"; -function resolveNestedOptions(options) { - if (options === true) - return {}; - return options; -} -function useWebSocket(url, options = {}) { - const { - onConnected, - onDisconnected, - onError, - onMessage, - immediate = true, - autoClose = true, - protocols = [] - } = options; - const data = ref(null); - const status = ref("CLOSED"); - const wsRef = ref(); - const urlRef = resolveRef(url); - let heartbeatPause; - let heartbeatResume; - let explicitlyClosed = false; - let retried = 0; - let bufferedData = []; - let pongTimeoutWait; - const close = (code = 1e3, reason) => { - if (!wsRef.value) - return; - explicitlyClosed = true; - heartbeatPause == null ? void 0 : heartbeatPause(); - wsRef.value.close(code, reason); - }; - const _sendBuffer = () => { - if (bufferedData.length && wsRef.value && status.value === "OPEN") { - for (const buffer of bufferedData) - wsRef.value.send(buffer); - bufferedData = []; - } - }; - const resetHeartbeat = () => { - clearTimeout(pongTimeoutWait); - pongTimeoutWait = void 0; - }; - const send = (data2, useBuffer = true) => { - if (!wsRef.value || status.value !== "OPEN") { - if (useBuffer) - bufferedData.push(data2); - return false; - } - _sendBuffer(); - wsRef.value.send(data2); - return true; - }; - const _init = () => { - if (explicitlyClosed || typeof urlRef.value === "undefined") - return; - const ws = new WebSocket(urlRef.value, protocols); - wsRef.value = ws; - status.value = "CONNECTING"; - ws.onopen = () => { - status.value = "OPEN"; - onConnected == null ? void 0 : onConnected(ws); - heartbeatResume == null ? void 0 : heartbeatResume(); - _sendBuffer(); - }; - ws.onclose = (ev) => { - status.value = "CLOSED"; - wsRef.value = void 0; - onDisconnected == null ? void 0 : onDisconnected(ws, ev); - if (!explicitlyClosed && options.autoReconnect) { - const { - retries = -1, - delay = 1e3, - onFailed - } = resolveNestedOptions(options.autoReconnect); - retried += 1; - if (typeof retries === "number" && (retries < 0 || retried < retries)) - setTimeout(_init, delay); - else if (typeof retries === "function" && retries()) - setTimeout(_init, delay); - else - onFailed == null ? void 0 : onFailed(); - } - }; - ws.onerror = (e) => { - onError == null ? void 0 : onError(ws, e); - }; - ws.onmessage = (e) => { - if (options.heartbeat) { - resetHeartbeat(); - const { - message = DEFAULT_PING_MESSAGE - } = resolveNestedOptions(options.heartbeat); - if (e.data === message) - return; - } - data.value = e.data; - onMessage == null ? void 0 : onMessage(ws, e); - }; - }; - if (options.heartbeat) { - const { - message = DEFAULT_PING_MESSAGE, - interval = 1e3, - pongTimeout = 1e3 - } = resolveNestedOptions(options.heartbeat); - const { pause, resume } = useIntervalFn(() => { - send(message, false); - if (pongTimeoutWait != null) - return; - pongTimeoutWait = setTimeout(() => { - close(); - }, pongTimeout); - }, interval, { immediate: false }); - heartbeatPause = pause; - heartbeatResume = resume; - } - if (autoClose) { - useEventListener(window, "beforeunload", () => close()); - tryOnScopeDispose(close); - } - const open = () => { - close(); - explicitlyClosed = false; - retried = 0; - _init(); - }; - if (immediate) - watch(urlRef, open, { immediate: true }); - return { - data, - status, - close, - send, - open, - ws: wsRef - }; -} -function processWebSocket(message, global2, notificationProvider) { - switch (message.type) { - case "test": { - break; +function processWebSocket(message, global2, notificationProvider) { + switch (message.type) { + case "test": { + break; } case "progress": { global2.state.progress = message.data.progress; @@ -41692,8 +41276,10 @@ function processWebSocket(message, global2, notificationProvider) { break; } case "notification": { - message.data.timeout = message.data.timeout || 5e3; console.log(message.data.message); + if (message.data.timeout === 0) { + message.data.timeout = null; + } notificationProvider.create({ type: message.data.severity, title: message.data.title, @@ -41742,344 +41328,1098 @@ function processWebSocket(message, global2, notificationProvider) { global2.state.log_drawer.logs.pop(); } } - break; + break; + } + case "incorrect_settings_value": { + global2.state.settings_diff.default_value = message.data.default_value; + global2.state.settings_diff.current_value = message.data.current_value; + global2.state.settings_diff.key = message.data.key; + global2.state.settings_diff.active = true; + break; + } + default: { + console.log(message); + } + } +} +const useWebsocket = defineStore("websocket", () => { + const notificationProvider = useNotification(); + const messageProvider = useMessage(); + const global2 = useState2(); + const onConnectedCallbacks = []; + const onDisconnectedCallbacks = []; + const onRefreshCallbacks = []; + const websocket = useWebSocket(`${webSocketUrl}/api/websockets/master`, { + heartbeat: { + message: "ping", + interval: 1e3, + pongTimeout: 5e3 + }, + immediate: false, + onMessage: (ws, event2) => { + if (event2.data === "pong") { + return; + } + const data = JSON.parse(event2.data); + if (data.type === "refresh_models") { + onRefreshCallbacks.forEach((callback) => callback()); + console.log("Models refreshed"); + return; + } + processWebSocket(data, global2, notificationProvider); + }, + onConnected: () => { + messageProvider.success("Connected to server"); + onConnectedCallbacks.forEach((callback) => callback()); + }, + onDisconnected: () => { + onDisconnectedCallbacks.forEach((callback) => callback()); + } + }); + function ws_text() { + switch (readyState.value) { + case "CLOSED": + return "Closed"; + case "CONNECTING": + return "Connecting"; + case "OPEN": + return "Connected"; + } + } + function get_color() { + switch (readyState.value) { + case "CLOSED": + return "error"; + case "CONNECTING": + return "warning"; + case "OPEN": + return "success"; + } + } + const readyState = ref(websocket.status); + const loading = computed(() => readyState.value === "CONNECTING"); + const text = computed(() => ws_text()); + const color = computed(() => get_color()); + return { + websocket, + readyState, + loading, + text, + ws_open: websocket.open, + color, + onConnectedCallbacks, + onDisconnectedCallbacks, + onRefreshCallbacks + }; +}); +const spaceRegex = new RegExp("[\\s,]+"); +const arrowKeys = [38, 40]; +let currentFocus = -1; +function convertToTextString(str) { + const upper = str.charAt(0).toUpperCase() + str.slice(1); + return upper.replace(/_/g, " "); +} +function cloneObj(obj) { + return window.structuredClone(obj); +} +function addActive(x) { + if (!x) + return false; + removeActive(x); + if (currentFocus >= x.length) { + currentFocus = 0; + } + if (currentFocus < 0) { + currentFocus = x.length - 1; + } + x[currentFocus].classList.add("autocomplete-active"); +} +function removeActive(x) { + for (let i = 0; i < x.length; i++) { + x[i].classList.remove("autocomplete-active"); + } +} +function closeAllLists(elmnt, input) { + var _a2, _b; + const x = document.getElementsByClassName("autocomplete-items"); + for (let i = 0; i < x.length; i++) { + if (elmnt != x[i] && elmnt != input) { + (_b = (_a2 = x[i]) == null ? void 0 : _a2.parentNode) == null ? void 0 : _b.removeChild(x[i]); + } + } +} +async function startWebsocket(messageProvider) { + const websocketState = useWebsocket(); + const timeout = 1e3; + const controller = new AbortController(); + const id = setTimeout(() => controller.abort(), timeout); + const response = await fetch(`${serverUrl}/api/test/alive`, { + signal: controller.signal + }).catch(() => { + messageProvider.error("Server is not responding"); + }); + clearTimeout(id); + if (response === void 0) { + return; + } + if (response.status !== 200) { + messageProvider.error("Server is not responding"); + return; + } + console.log("Starting websocket"); + websocketState.ws_open(); +} +function getTextBoundaries(elem) { + if (elem === null) { + console.error("Element is null"); + return [0, 0]; + } + if (elem.tagName === "INPUT" && elem.type === "text" || elem.tagName === "TEXTAREA") { + return [ + elem.selectionStart === null ? 0 : elem.selectionStart, + elem.selectionEnd === null ? 0 : elem.selectionEnd + ]; + } + console.error("Element is not input"); + return [0, 0]; +} +function promptHandleKeyUp(e, data, key, globalState) { + var _a2, _b, _c, _d, _e; + if (e.key === "ArrowUp" && e.ctrlKey) { + const values = getTextBoundaries( + document.activeElement + ); + const boundaryIndexStart = values[0]; + const boundaryIndexEnd = values[1]; + e.preventDefault(); + const elem = document.activeElement; + const current_selection = elem.value.substring( + boundaryIndexStart, + boundaryIndexEnd + ); + const regex = /\(([^:]+([:]?[\s]?)([\d.\d]+))\)/; + const matches = regex.exec(current_selection); + if (matches) { + if (matches) { + const value = parseFloat(matches[3]); + const new_value = (value + 0.1).toFixed(1); + const beforeString = elem.value.substring(0, boundaryIndexStart); + const afterString = elem.value.substring(boundaryIndexEnd); + const newString = `${beforeString}${current_selection.replace( + matches[3], + new_value + )}${afterString}`; + elem.value = newString; + data[key] = newString; + elem.setSelectionRange(boundaryIndexStart, boundaryIndexEnd); + } + } else if (boundaryIndexStart !== boundaryIndexEnd) { + const new_inner_string = `(${current_selection}:1.1)`; + const beforeString = elem.value.substring(0, boundaryIndexStart); + const afterString = elem.value.substring(boundaryIndexEnd); + elem.value = `${beforeString}${new_inner_string}${afterString}`; + data[key] = `${beforeString}${new_inner_string}${afterString}`; + elem.setSelectionRange(boundaryIndexStart, boundaryIndexEnd + 6); + } else { + console.log("No selection, cannot parse for weighting"); + } + } + if (e.key === "ArrowDown" && e.ctrlKey) { + const values = getTextBoundaries( + document.activeElement + ); + const boundaryIndexStart = values[0]; + const boundaryIndexEnd = values[1]; + e.preventDefault(); + const elem = document.activeElement; + const current_selection = elem.value.substring( + boundaryIndexStart, + boundaryIndexEnd + ); + const regex = /\(([^:]+([:]?[\s]?)([\d.\d]+))\)/; + const matches = regex.exec(current_selection); + if (matches) { + if (matches) { + const value = parseFloat(matches[3]); + const new_value = Math.max(value - 0.1, 0).toFixed(1); + const beforeString = elem.value.substring(0, boundaryIndexStart); + const afterString = elem.value.substring(boundaryIndexEnd); + const newString = `${beforeString}${current_selection.replace( + matches[3], + new_value + )}${afterString}`; + elem.value = newString; + data[key] = newString; + elem.setSelectionRange(boundaryIndexStart, boundaryIndexEnd); + } + } else if (boundaryIndexStart !== boundaryIndexEnd) { + const new_inner_string = `(${current_selection}:0.9)`; + const beforeString = elem.value.substring(0, boundaryIndexStart); + const afterString = elem.value.substring(boundaryIndexEnd); + elem.value = `${beforeString}${new_inner_string}${afterString}`; + data[key] = `${beforeString}${new_inner_string}${afterString}`; + elem.setSelectionRange(boundaryIndexStart, boundaryIndexEnd + 6); + } else { + console.log("No selection, cannot parse for weighting"); + } + } + const input = e.target; + if (input) { + const text = input.value; + const currentTokenStripped = (_a2 = text.split(",").pop()) == null ? void 0 : _a2.trim(); + closeAllLists(void 0, input); + if (!currentTokenStripped) { + return false; + } + const toAppend = []; + for (let i = 0; i < globalState.state.autofill_special.length; i++) { + if (globalState.state.autofill_special[i].toLowerCase().includes(currentTokenStripped.toLowerCase())) { + const b = document.createElement("DIV"); + b.innerText = globalState.state.autofill_special[i]; + b.innerHTML += ""; + b.addEventListener("click", function() { + input.value = text.substring(0, text.lastIndexOf(",") + 1) + globalState.state.autofill_special[i]; + data[key] = input.value; + closeAllLists(void 0, input); + }); + toAppend.push(b); + } + } + const lowercaseStrippedToken = currentTokenStripped.toLowerCase(); + if (lowercaseStrippedToken.length >= 3) { + for (let i = 0; i < globalState.state.autofill.length; i++) { + if (globalState.state.autofill[i].toLowerCase().includes(lowercaseStrippedToken)) { + if (toAppend.length >= 30) { + break; + } + const b = document.createElement("DIV"); + b.innerText = globalState.state.autofill[i]; + b.innerHTML += ""; + b.addEventListener("click", function() { + input.value = text.substring(0, text.lastIndexOf(",") + 1) + globalState.state.autofill[i]; + data[key] = input.value; + closeAllLists(void 0, input); + }); + toAppend.push(b); + } + } } - default: { - console.log(message); + if (toAppend.length === 0) { + return false; } - } -} -const useWebsocket = defineStore("websocket", () => { - const notificationProvider = useNotification(); - const messageProvider = useMessage(); - const global2 = useState2(); - const onConnectedCallbacks = []; - const onDisconnectedCallbacks = []; - const onRefreshCallbacks = []; - const websocket = useWebSocket(`${webSocketUrl}/api/websockets/master`, { - heartbeat: { - message: "ping", - interval: 1e3, - pongTimeout: 5e3 - }, - immediate: false, - onMessage: (ws, event2) => { - if (event2.data === "pong") { - return; - } - const data = JSON.parse(event2.data); - if (data.type === "refresh_models") { - onRefreshCallbacks.forEach((callback) => callback()); - console.log("Models refreshed"); - return; - } - processWebSocket(data, global2, notificationProvider); - }, - onConnected: () => { - messageProvider.success("Connected to server"); - onConnectedCallbacks.forEach((callback) => callback()); - }, - onDisconnected: () => { - onDisconnectedCallbacks.forEach((callback) => callback()); + const div = document.createElement("DIV"); + div.setAttribute("id", "autocomplete-list"); + div.setAttribute("class", "autocomplete-items"); + (_e = (_d = (_c = (_b = input.parentNode) == null ? void 0 : _b.parentNode) == null ? void 0 : _c.parentNode) == null ? void 0 : _d.parentNode) == null ? void 0 : _e.appendChild(div); + for (let i = 0; i < toAppend.length; i++) { + div.appendChild(toAppend[i]); } - }); - function ws_text() { - switch (readyState.value) { - case "CLOSED": - return "Closed"; - case "CONNECTING": - return "Connecting"; - case "OPEN": - return "Connected"; + onClickOutside(div, () => { + closeAllLists(void 0, input); + }); + const autocompleteList = document.getElementById("autocomplete-list"); + const x = autocompleteList == null ? void 0 : autocompleteList.getElementsByTagName("div"); + if (e.key === "ArrowDown") { + currentFocus++; + addActive(x); + e.preventDefault(); + } else if (e.key === "ArrowUp") { + currentFocus--; + addActive(x); + e.preventDefault(); + } else if (e.key === "Enter" || e.key === "Tab") { + e.stopImmediatePropagation(); + e.preventDefault(); + if (currentFocus > -1) { + if (x) + x[currentFocus].click(); + } + } else if (e.key === "Escape") { + closeAllLists(void 0, input); } } - function get_color() { - switch (readyState.value) { - case "CLOSED": - return "error"; - case "CONNECTING": - return "warning"; - case "OPEN": - return "success"; +} +function promptHandleKeyDown(e) { + if (arrowKeys.includes(e.keyCode) && e.ctrlKey) { + e.preventDefault(); + } + if (document.getElementById("autocomplete-list")) { + if (e.key === "Enter" || e.key === "Tab" || e.key === "ArrowDown" || e.key === "ArrowUp") { + e.preventDefault(); } } - const readyState = ref(websocket.status); - const loading = computed(() => readyState.value === "CONNECTING"); - const text = computed(() => ws_text()); - const color = computed(() => get_color()); - return { - websocket, - readyState, - loading, - text, - ws_open: websocket.open, - color, - onConnectedCallbacks, - onDisconnectedCallbacks, - onRefreshCallbacks - }; +} +function urlFromPath(path) { + const url = new URL(path, serverUrl); + return url.href; +} +const defaultADetailerSettings = { + enabled: false, + steps: 30, + cfg_scale: 7, + seed: -1, + sampler: "dpmpp_2m", + self_attention_scale: 0, + sigmas: "exponential", + strength: 0.4, + mask_dilation: 0, + mask_blur: 0, + mask_padding: 0, + iterations: 1, + upscale: 2 +}; +const deepShrinkFlagDefault = Object.freeze({ + enabled: false, + depth_1: 3, + stop_at_1: 0.15, + depth_2: 4, + stop_at_2: 0.3, + scaler: "bislerp", + base_scale: 0.5, + early_out: false }); -const spaceRegex = new RegExp("[\\s,]+"); -const arrowKeys = [38, 40]; -let currentFocus = -1; -function convertToTextString(str) { - const upper = str.charAt(0).toUpperCase() + str.slice(1); - return upper.replace(/_/g, " "); +const highresFixFlagDefault = Object.freeze({ + enabled: false, + scale: 2, + mode: "image", + image_upscaler: "RealESRGAN_x4plus_anime_6B", + latent_scale_mode: "bislerp", + antialiased: false, + strength: 0.65, + steps: 50 +}); +const scaleCrafterFlagDefault = Object.freeze({ + enabled: false, + base: "sd15", + unsafe_resolutions: true, + disperse: false +}); +const upscaleFlagDefault = Object.freeze({ + enabled: false, + upscale_factor: 4, + tile_size: 128, + tile_padding: 10, + model: "RealESRGAN_x4plus_anime_6B" +}); +var Sampler = /* @__PURE__ */ ((Sampler2) => { + Sampler2[Sampler2["DDIM"] = 1] = "DDIM"; + Sampler2[Sampler2["DDPM"] = 2] = "DDPM"; + Sampler2[Sampler2["PNDM"] = 3] = "PNDM"; + Sampler2[Sampler2["LMSD"] = 4] = "LMSD"; + Sampler2[Sampler2["EulerDiscrete"] = 5] = "EulerDiscrete"; + Sampler2[Sampler2["HeunDiscrete"] = 6] = "HeunDiscrete"; + Sampler2[Sampler2["EulerAncestralDiscrete"] = 7] = "EulerAncestralDiscrete"; + Sampler2[Sampler2["DPMSolverMultistep"] = 8] = "DPMSolverMultistep"; + Sampler2[Sampler2["DPMSolverSinglestep"] = 9] = "DPMSolverSinglestep"; + Sampler2[Sampler2["KDPM2Discrete"] = 10] = "KDPM2Discrete"; + Sampler2[Sampler2["KDPM2AncestralDiscrete"] = 11] = "KDPM2AncestralDiscrete"; + Sampler2[Sampler2["DEISMultistep"] = 12] = "DEISMultistep"; + Sampler2[Sampler2["UniPCMultistep"] = 13] = "UniPCMultistep"; + Sampler2[Sampler2["DPMSolverSDEScheduler"] = 14] = "DPMSolverSDEScheduler"; + return Sampler2; +})(Sampler || {}); +const defaultSettings = { + $schema: "./schema/ui_data/settings.json", + backend: "PyTorch", + model: null, + flags: { + sdxl: { + original_size: { + width: 1024, + height: 1024 + } + }, + refiner: { + model: void 0, + aesthetic_score: 6, + negative_aesthetic_score: 2.5, + steps: 50, + strength: 0.3 + } + }, + aitDim: { + width: void 0, + height: void 0, + batch_size: void 0 + }, + txt2img: { + width: 512, + height: 512, + seed: -1, + cfg_scale: 7, + sampler: Sampler.DPMSolverMultistep, + prompt: "", + steps: 25, + batch_count: 1, + batch_size: 1, + negative_prompt: "", + self_attention_scale: 0, + sigmas: "automatic", + highres: cloneObj(highresFixFlagDefault), + upscale: cloneObj(upscaleFlagDefault), + deepshrink: cloneObj(deepShrinkFlagDefault), + scalecrafter: cloneObj(scaleCrafterFlagDefault), + adetailer: cloneObj(defaultADetailerSettings) + }, + img2img: { + width: 512, + height: 512, + seed: -1, + cfg_scale: 7, + sampler: Sampler.DPMSolverMultistep, + prompt: "", + steps: 25, + batch_count: 1, + batch_size: 1, + negative_prompt: "", + denoising_strength: 0.6, + image: "", + self_attention_scale: 0, + sigmas: "automatic", + highres: cloneObj(highresFixFlagDefault), + upscale: cloneObj(upscaleFlagDefault), + deepshrink: cloneObj(deepShrinkFlagDefault), + scalecrafter: cloneObj(scaleCrafterFlagDefault), + adetailer: cloneObj(defaultADetailerSettings) + }, + inpainting: { + prompt: "", + negative_prompt: "", + image: "", + mask_image: "", + width: 512, + height: 512, + steps: 25, + cfg_scale: 7, + seed: -1, + batch_count: 1, + batch_size: 1, + strength: 0.65, + sampler: Sampler.DPMSolverMultistep, + self_attention_scale: 0, + sigmas: "automatic", + highres: cloneObj(highresFixFlagDefault), + upscale: cloneObj(upscaleFlagDefault), + deepshrink: cloneObj(deepShrinkFlagDefault), + scalecrafter: cloneObj(scaleCrafterFlagDefault), + adetailer: cloneObj(defaultADetailerSettings) + }, + controlnet: { + prompt: "", + image: "", + sampler: Sampler.DPMSolverMultistep, + controlnet: ControlNetType.CANNY, + negative_prompt: "", + width: 512, + height: 512, + steps: 25, + cfg_scale: 7, + seed: -1, + batch_size: 1, + batch_count: 1, + controlnet_conditioning_scale: 1, + detection_resolution: 512, + is_preprocessed: false, + save_preprocessed: false, + return_preprocessed: true, + self_attention_scale: 0, + sigmas: "automatic", + highres: cloneObj(highresFixFlagDefault), + upscale: cloneObj(upscaleFlagDefault), + deepshrink: cloneObj(deepShrinkFlagDefault), + scalecrafter: cloneObj(scaleCrafterFlagDefault), + adetailer: cloneObj(defaultADetailerSettings) + }, + upscale: { + image: "", + upscale_factor: 4, + model: "RealESRGAN_x4plus_anime_6B", + tile_size: 128, + tile_padding: 10 + }, + tagger: { + image: "", + model: "deepdanbooru", + threshold: 0.5 + }, + api: { + websocket_sync_interval: 0.02, + websocket_perf_interval: 1, + enable_websocket_logging: true, + clip_skip: 1, + clip_quantization: "full", + autocast: true, + attention_processor: "xformers", + subquadratic_size: 512, + attention_slicing: "disabled", + channels_last: true, + trace_model: false, + cudnn_benchmark: false, + offload: "disabled", + dont_merge_latents: false, + device: "cuda:0", + data_type: "float16", + use_tomesd: true, + tomesd_ratio: 0.4, + tomesd_downsample_layers: 1, + deterministic_generation: false, + reduced_precision: false, + clear_memory_policy: "always", + huggingface_style_parsing: false, + autoloaded_textual_inversions: [], + autoloaded_models: [], + autoloaded_vae: {}, + save_path_template: "{folder}/{prompt}/{id}-{index}.{extension}", + image_extension: "png", + image_quality: 95, + disable_grid: false, + torch_compile: false, + torch_compile_fullgraph: false, + torch_compile_dynamic: false, + torch_compile_backend: "inductor", + torch_compile_mode: "default", + sfast_compile: false, + sfast_xformers: true, + sfast_triton: true, + sfast_cuda_graph: false, + hypertile: false, + hypertile_unet_chunk: 256, + sgm_noise_multiplier: false, + kdiffusers_quantization: true, + xl_refiner: "joint", + generator: "device", + live_preview_method: "approximation", + live_preview_delay: 2, + upcast_vae: false, + vae_slicing: false, + vae_tiling: false, + apply_unsharp_mask: false, + cfg_rescale_threshold: 10, + prompt_to_prompt: false, + prompt_to_prompt_model: "lllyasviel/Fooocus-Expansion", + prompt_to_prompt_device: "gpu", + free_u: false, + free_u_s1: 0.9, + free_u_s2: 0.2, + free_u_b1: 1.2, + free_u_b2: 1.4 + }, + aitemplate: { + num_threads: 8 + }, + onnx: { + quant_dict: { + text_encoder: null, + unet: null, + vae_decoder: null, + vae_encoder: null + }, + convert_to_fp16: true, + simplify_unet: false + }, + bot: { + default_scheduler: Sampler.DPMSolverMultistep, + verbose: false, + use_default_negative_prompt: true + }, + frontend: { + theme: "dark", + enable_theme_editor: false, + image_browser_columns: 5, + on_change_timer: 2e3, + nsfw_ok_threshold: 0, + background_image_override: "", + disable_analytics: true + }, + sampler_config: {} +}; +let rSettings = JSON.parse(JSON.stringify(defaultSettings)); +try { + const req = new XMLHttpRequest(); + req.open("GET", `${serverUrl}/api/settings/`, false); + req.send(); + rSettings = { ...rSettings, ...JSON.parse(req.responseText) }; +} catch (e) { + console.error(e); } -function addActive(x) { - if (!x) - return false; - removeActive(x); - if (currentFocus >= x.length) { - currentFocus = 0; +console.log("Settings:", rSettings); +const recievedSettings = rSettings; +class Settings { + constructor(settings_override) { + __publicField(this, "settings"); + this.settings = { ...defaultSettings, ...settings_override }; } - if (currentFocus < 0) { - currentFocus = x.length - 1; + to_json() { + return JSON.stringify(this.settings); } - x[currentFocus].classList.add("autocomplete-active"); } -function removeActive(x) { - for (let i = 0; i < x.length; i++) { - x[i].classList.remove("autocomplete-active"); +const diffusersSchedulerTuple = { + DDIM: 1, + DDPM: 2, + PNDM: 3, + LMSD: 4, + EulerDiscrete: 5, + HeunDiscrete: 6, + EulerAncestralDiscrete: 7, + DPMSolverMultistep: 8, + DPMSolverSinglestep: 9, + KDPM2Discrete: 10, + KDPM2AncestralDiscrete: 11, + DEISMultistep: 12, + UniPCMultistep: 13, + DPMSolverSDEScheduler: 14 +}; +const upscalerOptions = [ + { + label: "RealESRGAN_x4plus", + value: "RealESRGAN_x4plus" + }, + { + label: "RealESRNet_x4plus", + value: "RealESRNet_x4plus" + }, + { + label: "RealESRGAN_x4plus_anime_6B", + value: "RealESRGAN_x4plus_anime_6B" + }, + { + label: "RealESRGAN_x2plus", + value: "RealESRGAN_x2plus" + }, + { + label: "RealESR-general-x4v3", + value: "RealESR-general-x4v3" } -} -function closeAllLists(elmnt, input) { - var _a2, _b; - const x = document.getElementsByClassName("autocomplete-items"); - for (let i = 0; i < x.length; i++) { - if (elmnt != x[i] && elmnt != input) { - (_b = (_a2 = x[i]) == null ? void 0 : _a2.parentNode) == null ? void 0 : _b.removeChild(x[i]); +]; +function getSamplerOptions() { + const scheduler_options = [ + { + type: "group", + label: "k-diffusion", + key: "K-Diffusion", + children: [ + { label: "Euler a", value: "euler_a" }, + { label: "Euler", value: "euler" }, + { label: "LMS", value: "lms" }, + { label: "Heun", value: "heun" }, + { label: "Heun++", value: "heunpp" }, + { label: "DPM Fast", value: "dpm_fast" }, + { label: "DPM Adaptive", value: "dpm_adaptive" }, + { label: "DPM2", value: "dpm2" }, + { label: "DPM2 a", value: "dpm2_a" }, + { label: "DPM++ 2S a", value: "dpmpp_2s_a" }, + { label: "DPM++ 2M", value: "dpmpp_2m" }, + { label: "DPM++ 2M Sharp", value: "dpmpp_2m_sharp" }, + { label: "DPM++ SDE", value: "dpmpp_sde" }, + { label: "DPM++ 2M SDE", value: "dpmpp_2m_sde" }, + { label: "DPM++ 3M SDE", value: "dpmpp_3m_sde" }, + { label: "UniPC Multistep", value: "unipc_multistep" }, + { label: "Restart", value: "restart" } + ] + }, + { + type: "group", + label: "Diffusers", + key: "diffusers", + children: [ + ...Object.keys(diffusersSchedulerTuple).map((key) => { + return { + label: key, + value: diffusersSchedulerTuple[key] + }; + }), + { label: "SASolverMultistep", value: "sasolver" } + ] } - } + ]; + return scheduler_options; } -async function startWebsocket(messageProvider) { - const websocketState = useWebsocket(); - const timeout = 1e3; - const controller = new AbortController(); - const id = setTimeout(() => controller.abort(), timeout); - const response = await fetch(`${serverUrl}/api/test/alive`, { - signal: controller.signal - }).catch(() => { - messageProvider.error("Server is not responding"); +function getControlNetOptions() { + const controlnet_options = [ + { + type: "group", + label: "ControlNet 1.1", + key: "ControlNet 1.1", + children: [ + { + label: "lllyasviel/control_v11p_sd15_canny", + value: "lllyasviel/control_v11p_sd15_canny" + }, + { + label: "lllyasviel/control_v11f1p_sd15_depth", + value: "lllyasviel/control_v11f1p_sd15_depth" + }, + { + label: "lllyasviel/control_v11e_sd15_ip2p", + value: "lllyasviel/control_v11e_sd15_ip2p" + }, + { + label: "lllyasviel/control_v11p_sd15_softedge", + value: "lllyasviel/control_v11p_sd15_softedge" + }, + { + label: "lllyasviel/control_v11p_sd15_openpose", + value: "lllyasviel/control_v11p_sd15_openpose" + }, + { + label: "lllyasviel/control_v11f1e_sd15_tile", + value: "lllyasviel/control_v11f1e_sd15_tile" + }, + { + label: "lllyasviel/control_v11p_sd15_mlsd", + value: "lllyasviel/control_v11p_sd15_mlsd" + }, + { + label: "lllyasviel/control_v11p_sd15_scribble", + value: "lllyasviel/control_v11p_sd15_scribble" + }, + { + label: "lllyasviel/control_v11p_sd15_seg", + value: "lllyasviel/control_v11p_sd15_seg" + } + ] + }, + { + type: "group", + label: "Special", + key: "Special", + children: [ + { + label: "DionTimmer/controlnet_qrcode", + value: "DionTimmer/controlnet_qrcode" + }, + { + label: "CrucibleAI/ControlNetMediaPipeFace", + value: "CrucibleAI/ControlNetMediaPipeFace" + } + ] + }, + { + type: "group", + label: "Original", + key: "Original", + children: [ + { + label: "lllyasviel/sd-controlnet-canny", + value: "lllyasviel/sd-controlnet-canny" + }, + { + label: "lllyasviel/sd-controlnet-depth", + value: "lllyasviel/sd-controlnet-depth" + }, + { + label: "lllyasviel/sd-controlnet-hed", + value: "lllyasviel/sd-controlnet-hed" + }, + { + label: "lllyasviel/sd-controlnet-mlsd", + value: "lllyasviel/sd-controlnet-mlsd" + }, + { + label: "lllyasviel/sd-controlnet-normal", + value: "lllyasviel/sd-controlnet-normal" + }, + { + label: "lllyasviel/sd-controlnet-openpose", + value: "lllyasviel/sd-controlnet-openpose" + }, + { + label: "lllyasviel/sd-controlnet-scribble", + value: "lllyasviel/sd-controlnet-scribble" + }, + { + label: "lllyasviel/sd-controlnet-seg", + value: "lllyasviel/sd-controlnet-seg" + } + ] + } + ]; + return controlnet_options; +} +const deepcopiedSettings = JSON.parse(JSON.stringify(recievedSettings)); +const useSettings = defineStore("settings", () => { + const data = reactive(new Settings(recievedSettings)); + const samplers = computed(() => { + return getSamplerOptions(); }); - clearTimeout(id); - if (response === void 0) { - return; - } - if (response.status !== 200) { - messageProvider.error("Server is not responding"); - return; + const controlnet_options = computed(() => { + return getControlNetOptions(); + }); + function resetSettings() { + console.log("Resetting settings to default"); + Object.assign(defaultSettings$1, defaultSettings); } - console.log("Starting websocket"); - websocketState.ws_open(); -} -function getTextBoundaries(elem) { - if (elem === null) { - console.error("Element is null"); - return [0, 0]; + async function saveSettings() { + fetch(`${serverUrl}/api/settings/save`, { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(defaultSettings$1) + }).then((res) => { + if (res.status === 200) { + console.log("Settings saved successfully"); + } else { + throw new Error("Failed to save settings"); + } + }); } - if (elem.tagName === "INPUT" && elem.type === "text" || elem.tagName === "TEXTAREA") { - return [ - elem.selectionStart === null ? 0 : elem.selectionStart, - elem.selectionEnd === null ? 0 : elem.selectionEnd - ]; + const defaultSettings$1 = reactive(deepcopiedSettings); + return { + data, + scheduler_options: samplers, + controlnet_options, + defaultSettings: defaultSettings$1, + resetSettings, + saveSettings + }; +}); +const ImageUpload_vue_vue_type_style_index_0_scoped_9ed1514f_lang = ""; +const _export_sfc = (sfc, props) => { + const target = sfc.__vccOpts || sfc; + for (const [key, val] of props) { + target[key] = val; } - console.error("Element is not input"); - return [0, 0]; -} -function promptHandleKeyUp(e, data, key, globalState) { - var _a2, _b, _c, _d, _e; - if (e.key === "ArrowUp" && e.ctrlKey) { - const values = getTextBoundaries( - document.activeElement - ); - const boundaryIndexStart = values[0]; - const boundaryIndexEnd = values[1]; - e.preventDefault(); - const elem = document.activeElement; - const current_selection = elem.value.substring( - boundaryIndexStart, - boundaryIndexEnd + return target; +}; +const _sfc_main$8 = /* @__PURE__ */ defineComponent({ + __name: "InitHandler", + setup(__props) { + console.log( + ` + ██╗ ██╗ █████╗ ██╗ ████████╗ █████╗ ███╗ ███╗██╗ + ██║ ██║██╔══██╗██║ ╚══██╔══╝██╔══██╗████╗ ████║██║ + ╚██╗ ██╔╝██║ ██║██║ ██║ ███████║██╔████╔██║██║ + ╚████╔╝ ██║ ██║██║ ██║ ██╔══██║██║╚██╔╝██║██║ + ╚██╔╝ ╚█████╔╝███████╗ ██║ ██║ ██║██║ ╚═╝ ██║███████╗ + ╚═╝ ╚════╝ ╚══════╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝ + ` ); - const regex = /\(([^:]+([:]?[\s]?)([\d.\d]+))\)/; - const matches = regex.exec(current_selection); - if (matches) { - if (matches) { - const value = parseFloat(matches[3]); - const new_value = (value + 0.1).toFixed(1); - const beforeString = elem.value.substring(0, boundaryIndexStart); - const afterString = elem.value.substring(boundaryIndexEnd); - const newString = `${beforeString}${current_selection.replace( - matches[3], - new_value - )}${afterString}`; - elem.value = newString; - data[key] = newString; - elem.setSelectionRange(boundaryIndexStart, boundaryIndexEnd); - } - } else if (boundaryIndexStart !== boundaryIndexEnd) { - const new_inner_string = `(${current_selection}:1.1)`; - const beforeString = elem.value.substring(0, boundaryIndexStart); - const afterString = elem.value.substring(boundaryIndexEnd); - elem.value = `${beforeString}${new_inner_string}${afterString}`; - data[key] = `${beforeString}${new_inner_string}${afterString}`; - elem.setSelectionRange(boundaryIndexStart, boundaryIndexEnd + 6); - } else { - console.log("No selection, cannot parse for weighting"); - } + const global2 = useState2(); + global2.fetchCapabilites().then(() => { + console.log("Capabilities successfully fetched from the server"); + }); + global2.fetchAutofill(); + return (_ctx, _cache) => { + return null; + }; } - if (e.key === "ArrowDown" && e.ctrlKey) { - const values = getTextBoundaries( - document.activeElement - ); - const boundaryIndexStart = values[0]; - const boundaryIndexEnd = values[1]; - e.preventDefault(); - const elem = document.activeElement; - const current_selection = elem.value.substring( - boundaryIndexStart, - boundaryIndexEnd - ); - const regex = /\(([^:]+([:]?[\s]?)([\d.\d]+))\)/; - const matches = regex.exec(current_selection); - if (matches) { - if (matches) { - const value = parseFloat(matches[3]); - const new_value = Math.max(value - 0.1, 0).toFixed(1); - const beforeString = elem.value.substring(0, boundaryIndexStart); - const afterString = elem.value.substring(boundaryIndexEnd); - const newString = `${beforeString}${current_selection.replace( - matches[3], - new_value - )}${afterString}`; - elem.value = newString; - data[key] = newString; - elem.setSelectionRange(boundaryIndexStart, boundaryIndexEnd); - } - } else if (boundaryIndexStart !== boundaryIndexEnd) { - const new_inner_string = `(${current_selection}:0.9)`; - const beforeString = elem.value.substring(0, boundaryIndexStart); - const afterString = elem.value.substring(boundaryIndexEnd); - elem.value = `${beforeString}${new_inner_string}${afterString}`; - data[key] = `${beforeString}${new_inner_string}${afterString}`; - elem.setSelectionRange(boundaryIndexStart, boundaryIndexEnd + 6); - } else { - console.log("No selection, cannot parse for weighting"); - } +}); +const _sfc_main$7 = /* @__PURE__ */ defineComponent({ + __name: "LogDrawer", + setup(__props) { + const glob = useState2(); + const log = computed(() => glob.state.log_drawer.logs.join("\n")); + return (_ctx, _cache) => { + return openBlock(), createBlock(unref(NDrawer), { + placement: "bottom", + show: unref(glob).state.log_drawer.enabled, + "onUpdate:show": _cache[0] || (_cache[0] = ($event) => unref(glob).state.log_drawer.enabled = $event), + "auto-focus": false, + "show-mask": true, + height: "70vh" + }, { + default: withCtx(() => [ + createVNode(unref(NDrawerContent), { + closable: "", + title: "Log - 500 latest messages" + }, { + default: withCtx(() => [ + createVNode(unref(NLog), { + ref: "logRef", + log: log.value, + trim: "", + style: { "height": "100%" } + }, null, 8, ["log"]) + ]), + _: 1 + }) + ]), + _: 1 + }, 8, ["show"]); + }; } - const input = e.target; - if (input) { - const text = input.value; - const currentTokenStripped = (_a2 = text.split(",").pop()) == null ? void 0 : _a2.trim(); - closeAllLists(void 0, input); - if (!currentTokenStripped) { - return false; - } - const toAppend = []; - for (let i = 0; i < globalState.state.autofill_special.length; i++) { - if (globalState.state.autofill_special[i].toLowerCase().includes(currentTokenStripped.toLowerCase())) { - const b = document.createElement("DIV"); - b.innerText = globalState.state.autofill_special[i]; - b.innerHTML += ""; - b.addEventListener("click", function() { - input.value = text.substring(0, text.lastIndexOf(",") + 1) + globalState.state.autofill_special[i]; - data[key] = input.value; - closeAllLists(void 0, input); - }); - toAppend.push(b); - } +}); +const _hoisted_1$4 = { style: { "width": "100%", "display": "inline-flex", "align-items": "center" } }; +const _hoisted_2$3 = /* @__PURE__ */ createBaseVNode("p", { style: { "width": "108px" } }, "Utilization", -1); +const _hoisted_3$2 = { style: { "width": "100%", "display": "inline-flex", "align-items": "center" } }; +const _hoisted_4$2 = /* @__PURE__ */ createBaseVNode("p", { style: { "width": "108px" } }, "Memory", -1); +const _hoisted_5$2 = { style: { "align-self": "flex-end", "margin-left": "12px" } }; +const _sfc_main$6 = /* @__PURE__ */ defineComponent({ + __name: "PerformanceDrawer", + setup(__props) { + const global2 = useState2(); + const glob = useState2(); + return (_ctx, _cache) => { + return openBlock(), createBlock(unref(NDrawer), { + placement: "bottom", + show: unref(glob).state.perf_drawer.enabled, + "onUpdate:show": _cache[0] || (_cache[0] = ($event) => unref(glob).state.perf_drawer.enabled = $event), + "auto-focus": false, + "show-mask": true, + height: "70vh" + }, { + default: withCtx(() => [ + createVNode(unref(NDrawerContent), { + closable: "", + title: "Performance statistics" + }, { + default: withCtx(() => [ + (openBlock(true), createElementBlock(Fragment, null, renderList(unref(global2).state.perf_drawer.gpus, (gpu) => { + return openBlock(), createBlock(unref(NCard), { + key: gpu.uuid, + style: { "margin-bottom": "12px" } + }, { + default: withCtx(() => [ + createVNode(unref(NSpace), { + inline: "", + justify: "space-between", + style: { "width": "100%" } + }, { + default: withCtx(() => [ + createBaseVNode("h3", null, "[" + toDisplayString(gpu.index) + "] " + toDisplayString(gpu.name), 1), + createBaseVNode("h4", null, toDisplayString(gpu.power_draw) + " / " + toDisplayString(gpu.power_limit) + "W ─ " + toDisplayString(gpu.temperature) + "°C ", 1) + ]), + _: 2 + }, 1024), + createBaseVNode("div", _hoisted_1$4, [ + _hoisted_2$3, + createVNode(unref(NProgress), { + percentage: gpu.utilization, + type: "line", + "indicator-placement": "inside", + style: { "flex-grow": "1", "width": "400px" } + }, null, 8, ["percentage"]) + ]), + createBaseVNode("div", _hoisted_3$2, [ + _hoisted_4$2, + createVNode(unref(NProgress), { + percentage: gpu.memory_usage, + type: "line", + style: { "flex-grow": "1", "width": "400px" }, + color: "#63e2b7", + "indicator-placement": "inside" + }, null, 8, ["percentage"]), + createBaseVNode("p", _hoisted_5$2, toDisplayString(gpu.memory_used) + " / " + toDisplayString(gpu.memory_total) + " MB ", 1) + ]) + ]), + _: 2 + }, 1024); + }), 128)) + ]), + _: 1 + }) + ]), + _: 1 + }, 8, ["show"]); + }; + } +}); +const _hoisted_1$3 = /* @__PURE__ */ createBaseVNode("a", { + target: "_blank", + href: "https://huggingface.co/settings/tokens" +}, "this page", -1); +const _hoisted_2$2 = { style: { "margin-top": "8px", "width": "100%", "display": "flex", "justify-content": "end" } }; +const _sfc_main$5 = /* @__PURE__ */ defineComponent({ + __name: "SecretsHandler", + setup(__props) { + const message = useMessage(); + const global2 = useState2(); + const hf_loading = ref(false); + const hf_token = ref(""); + function noSideSpace(value) { + return !/ /g.test(value); } - const lowercaseStrippedToken = currentTokenStripped.toLowerCase(); - if (lowercaseStrippedToken.length >= 3) { - for (let i = 0; i < globalState.state.autofill.length; i++) { - if (globalState.state.autofill[i].toLowerCase().includes(lowercaseStrippedToken)) { - if (toAppend.length >= 30) { - break; - } - const b = document.createElement("DIV"); - b.innerText = globalState.state.autofill[i]; - b.innerHTML += ""; - b.addEventListener("click", function() { - input.value = text.substring(0, text.lastIndexOf(",") + 1) + globalState.state.autofill[i]; - data[key] = input.value; - closeAllLists(void 0, input); - }); - toAppend.push(b); + function setHuggingfaceToken() { + hf_loading.value = true; + const url = new URL(`${serverUrl}/api/settings/inject-var-into-dotenv`); + url.searchParams.append("key", "HUGGINGFACE_TOKEN"); + url.searchParams.append("value", hf_token.value); + fetch(url, { method: "POST" }).then((res) => { + if (res.status !== 200) { + message.create("Failed to set HuggingFace token", { type: "error" }); + return; } - } - } - if (toAppend.length === 0) { - return false; - } - const div = document.createElement("DIV"); - div.setAttribute("id", "autocomplete-list"); - div.setAttribute("class", "autocomplete-items"); - (_e = (_d = (_c = (_b = input.parentNode) == null ? void 0 : _b.parentNode) == null ? void 0 : _c.parentNode) == null ? void 0 : _d.parentNode) == null ? void 0 : _e.appendChild(div); - for (let i = 0; i < toAppend.length; i++) { - div.appendChild(toAppend[i]); - } - onClickOutside(div, () => { - closeAllLists(void 0, input); - }); - const autocompleteList = document.getElementById("autocomplete-list"); - const x = autocompleteList == null ? void 0 : autocompleteList.getElementsByTagName("div"); - if (e.key === "ArrowDown") { - currentFocus++; - addActive(x); - e.preventDefault(); - } else if (e.key === "ArrowUp") { - currentFocus--; - addActive(x); - e.preventDefault(); - } else if (e.key === "Enter" || e.key === "Tab") { - e.stopImmediatePropagation(); - e.preventDefault(); - if (currentFocus > -1) { - if (x) - x[currentFocus].click(); - } - } else if (e.key === "Escape") { - closeAllLists(void 0, input); - } - } -} -function promptHandleKeyDown(e) { - if (arrowKeys.includes(e.keyCode) && e.ctrlKey) { - e.preventDefault(); - } - if (document.getElementById("autocomplete-list")) { - if (e.key === "Enter" || e.key === "Tab" || e.key === "ArrowDown" || e.key === "ArrowUp") { - e.preventDefault(); + global2.state.secrets.huggingface = "ok"; + message.create("HuggingFace token set successfully", { type: "success" }); + }).catch((e) => { + message.create(`Failed to set HuggingFace token: ${e.message}`, { + type: "error" + }); + }); + hf_loading.value = false; } + return (_ctx, _cache) => { + return openBlock(), createBlock(unref(NModal), { + show: unref(global2).state.secrets.huggingface !== "ok", + preset: "card", + title: "Missing HuggingFace Token", + style: { "width": "80vw" }, + closable: false + }, { + default: withCtx(() => [ + createVNode(unref(NText), null, { + default: withCtx(() => [ + createTextVNode(" API does not have a HuggingFace token. Please enter a valid token to continue. You can get a token from "), + _hoisted_1$3 + ]), + _: 1 + }), + createVNode(unref(NInput), { + type: "password", + placeholder: "hf_123...", + style: { "margin-top": "8px" }, + "allow-input": noSideSpace, + value: hf_token.value, + "onUpdate:value": _cache[0] || (_cache[0] = ($event) => hf_token.value = $event) + }, null, 8, ["value"]), + createBaseVNode("div", _hoisted_2$2, [ + createVNode(unref(NButton), { + ghost: "", + type: "primary", + loading: hf_loading.value, + onClick: setHuggingfaceToken + }, { + default: withCtx(() => [ + createTextVNode("Set Token") + ]), + _: 1 + }, 8, ["loading"]) + ]) + ]), + _: 1 + }, 8, ["show"]); + }; } -} -function urlFromPath(path) { - const url = new URL(path, serverUrl); - return url.href; -} -const _withScopeId = (n) => (pushScopeId("data-v-29f01b28"), n = n(), popScopeId(), n); -const _hoisted_1$1 = { class: "top-bar" }; -const _hoisted_2 = { key: 0 }; -const _hoisted_3 = { key: 1 }; -const _hoisted_4 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createBaseVNode("img", { +}); +const _withScopeId = (n) => (pushScopeId("data-v-3a99505a"), n = n(), popScopeId(), n); +const _hoisted_1$2 = { class: "top-bar" }; +const _hoisted_2$1 = { key: 0 }; +const _hoisted_3$1 = { key: 0 }; +const _hoisted_4$1 = { key: 1 }; +const _hoisted_5$1 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createBaseVNode("img", { src: "https://i.imgflip.com/84840n.jpg", style: { "max-width": "30vw", "max-height": "30vh" } }, null, -1)); -const _hoisted_5 = { key: 2 }; -const _hoisted_6 = { style: { "display": "inline-flex", "width": "100%", "margin-bottom": "12px" } }; -const _hoisted_7 = { style: { "display": "inline-flex" } }; -const _hoisted_8 = { key: 0 }; +const _hoisted_6$1 = { key: 2 }; +const _hoisted_7$1 = { style: { "display": "inline-flex", "width": "100%", "margin-bottom": "12px" } }; +const _hoisted_8 = { style: { "display": "flex", "flex-direction": "row", "align-items": "center" } }; const _hoisted_9 = { style: { "display": "inline-flex" } }; -const _hoisted_10 = { key: 1 }; -const _hoisted_11 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createBaseVNode("b", null, "Ignore the tokens on CivitAI", -1)); -const _hoisted_12 = { key: 0 }; -const _hoisted_13 = { style: { "display": "inline-flex" } }; -const _hoisted_14 = { key: 1 }; -const _hoisted_15 = { class: "progress-container" }; -const _hoisted_16 = { style: { "display": "inline-flex", "align-items": "center" } }; -const _sfc_main$3 = /* @__PURE__ */ defineComponent({ +const _hoisted_10 = { key: 0 }; +const _hoisted_11 = { style: { "display": "inline-flex" } }; +const _hoisted_12 = { key: 1 }; +const _hoisted_13 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createBaseVNode("b", null, "Ignore the tokens on CivitAI", -1)); +const _hoisted_14 = { key: 0 }; +const _hoisted_15 = { style: { "display": "inline-flex" } }; +const _hoisted_16 = { key: 1 }; +const _hoisted_17 = { class: "progress-container" }; +const _hoisted_18 = { style: { "display": "inline-flex", "align-items": "center" } }; +const _sfc_main$4 = /* @__PURE__ */ defineComponent({ __name: "TopBar", setup(__props) { + useCssVars((_ctx) => ({ + "ca9a9586": topBarWidth.value + })); const router2 = useRouter(); const websocketState = useWebsocket(); const global2 = useState2(); @@ -42130,35 +42470,74 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ } }); }); + const manualVAEModels = computed(() => { + const selectedModel = global2.state.selected_model; + if ((selectedModel == null ? void 0 : selectedModel.type) === "SDXL") { + return [ + { + name: "Default VAE (fp32)", + path: "default", + backend: "VAE", + valid: true, + state: "not loaded", + vae: "default", + textual_inversions: [], + type: "SDXL", + stage: "last_stage" + }, + { + name: "FP16 VAE", + path: "madebyollin/sdxl-vae-fp16-fix", + backend: "VAE", + valid: true, + state: "not loaded", + vae: "fp16", + textual_inversions: [], + type: "SDXL", + stage: "last_stage" + } + ]; + } else { + return [ + { + name: "Default VAE", + path: "default", + backend: "VAE", + valid: true, + state: "not loaded", + vae: "default", + textual_inversions: [], + type: "SD1.x", + stage: "last_stage" + }, + { + name: "Tiny VAE (fast)", + path: "madebyollin/taesd", + backend: "VAE", + valid: true, + state: "not loaded", + vae: "madebyollin/taesd", + textual_inversions: [], + type: "SD1.x", + stage: "last_stage" + }, + { + name: "Asymmetric VAE", + path: "cross-attention/asymmetric-autoencoder-kl-x-1-5", + backend: "VAE", + valid: true, + state: "not loaded", + vae: "cross-attention/asymmetric-autoencoder-kl-x-1-5", + textual_inversions: [], + type: "SD1.x", + stage: "last_stage" + } + ]; + } + }); const vaeModels = computed(() => { return [ - { - name: "Default VAE", - path: "default", - backend: "VAE", - valid: true, - state: "not loaded", - vae: "default", - textual_inversions: [] - }, - { - name: "Tiny VAE (fast)", - path: "madebyollin/taesd", - backend: "VAE", - valid: true, - state: "not loaded", - vae: "madebyollin/taesd", - textual_inversions: [] - }, - { - name: "Asymmetric VAE", - path: "cross-attention/asymmetric-autoencoder-kl-x-1-5", - backend: "VAE", - valid: true, - state: "not loaded", - vae: "cross-attention/asymmetric-autoencoder-kl-x-1-5", - textual_inversions: [] - }, + ...manualVAEModels.value, ...filteredModels.value.filter((model) => { return model.backend === "VAE"; }).sort((a, b) => { @@ -42273,7 +42652,11 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ model.state = "loading"; modelsLoading.value = true; const load_url = new URL(`${serverUrl}/api/models/load`); - const params = { model: model.path, backend: model.backend }; + const params = { + model: model.path, + backend: model.backend, + type: model.type + }; load_url.search = new URLSearchParams(params).toString(); fetch(load_url, { method: "POST" @@ -42314,7 +42697,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ "Content-Type": "application/json" }, body: JSON.stringify({ - model: global2.state.selected_model.name, + model: global2.state.selected_model.path, vae: vae.path }) }); @@ -42335,7 +42718,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ "Content-Type": "application/json" }, body: JSON.stringify({ - model: global2.state.selected_model.name, + model: global2.state.selected_model.path, textual_inversion: textualInversion.path }) }); @@ -42389,6 +42772,21 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ global2.state.models.splice(0, global2.state.models.length); console.log("Reset models"); } + function getModelTag(type) { + switch (type) { + case "SD1.x": + return [type, "primary"]; + case "SD2.x": + return [type, "info"]; + case "SDXL": + return [type, "warning"]; + case "Kandinsky 2.1": + case "Kandinsky 2.2": + return ["Kandinsky", "success"]; + default: + return [type, "error"]; + } + } websocketState.onConnectedCallbacks.push(() => { refreshModels(); }); @@ -42544,12 +42942,31 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ break; } } + const topBarWidth = computed(() => { + return isLargeScreen.value ? "calc(100% - 64px)" : "100%"; + }); startWebsocket(message); return (_ctx, _cache) => { var _a2; - return openBlock(), createElementBlock("div", _hoisted_1$1, [ + return openBlock(), createElementBlock("div", _hoisted_1$2, [ + !unref(isLargeScreen) ? (openBlock(), createBlock(unref(NButton), { + key: 0, + bordered: false, + style: { "margin": "0 2px", "padding": "8px 8px" }, + onClick: _cache[0] || (_cache[0] = ($event) => unref(global2).state.collapsibleBarActive = true) + }, { + default: withCtx(() => [ + createVNode(unref(NIcon), { size: "24" }, { + default: withCtx(() => [ + createVNode(unref(Menu)) + ]), + _: 1 + }) + ]), + _: 1 + })) : createCommentVNode("", true), createVNode(unref(NSelect), { - style: { "max-width": "250px", "padding-left": "12px", "padding-right": "12px" }, + style: { "max-width": "250px", "padding-right": "4px" }, options: generatedModelOptions.value, "onUpdate:value": onModelChange, loading: modelsLoading.value, @@ -42559,18 +42976,26 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ filterable: "" }, null, 8, ["options", "loading", "value"]), createVNode(unref(NButton), { - onClick: _cache[0] || (_cache[0] = ($event) => showModal.value = true), + onClick: _cache[1] || (_cache[1] = ($event) => showModal.value = true), loading: modelsLoading.value, type: unref(settings).data.settings.model ? "default" : "success" }, { default: withCtx(() => [ - createTextVNode(" Load Model") + unref(isLargeScreen) ? (openBlock(), createElementBlock("p", _hoisted_2$1, "Load Model")) : (openBlock(), createBlock(unref(NIcon), { + key: 1, + size: "18" + }, { + default: withCtx(() => [ + createVNode(unref(Add)) + ]), + _: 1 + })) ]), _: 1 }, 8, ["loading", "type"]), createVNode(unref(NModal), { show: showModal.value, - "onUpdate:show": _cache[4] || (_cache[4] = ($event) => showModal.value = $event), + "onUpdate:show": _cache[5] || (_cache[5] = ($event) => showModal.value = $event), closable: "", "mask-closable": "", preset: "card", @@ -42579,7 +43004,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ "auto-focus": false }, { default: withCtx(() => [ - unref(websocketState).readyState === "CLOSED" ? (openBlock(), createElementBlock("div", _hoisted_2, [ + unref(websocketState).readyState === "CLOSED" ? (openBlock(), createElementBlock("div", _hoisted_3$1, [ createVNode(unref(NResult), { title: "You are not connected to the server", description: "Click the button below to reconnect", @@ -42589,7 +43014,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ footer: withCtx(() => [ createVNode(unref(NButton), { type: "success", - onClick: _cache[1] || (_cache[1] = ($event) => unref(startWebsocket)(unref(message))) + onClick: _cache[2] || (_cache[2] = ($event) => unref(startWebsocket)(unref(message))) }, { default: withCtx(() => [ createTextVNode("Reconnect") @@ -42599,7 +43024,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ ]), _: 1 }) - ])) : unref(global2).state.models.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_3, [ + ])) : unref(global2).state.models.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_4$1, [ createVNode(unref(NResult), { title: "No models found", style: { "height": "70vh", "display": "flex", "align-items": "center", "justify-content": "center", "flex-direction": "column" }, @@ -42610,7 +43035,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ trigger: withCtx(() => [ createVNode(unref(NButton), { type: "success", - onClick: _cache[2] || (_cache[2] = () => { + onClick: _cache[3] || (_cache[3] = () => { unref(global2).state.modelManager.tab = "civitai"; unref(router2).push("/models"); showModal.value = false; @@ -42623,18 +43048,18 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ }) ]), default: withCtx(() => [ - _hoisted_4 + _hoisted_5$1 ]), _: 1 }) ]), _: 1 }) - ])) : (openBlock(), createElementBlock("div", _hoisted_5, [ - createBaseVNode("div", _hoisted_6, [ + ])) : (openBlock(), createElementBlock("div", _hoisted_6$1, [ + createBaseVNode("div", _hoisted_7$1, [ createVNode(unref(NInput), { value: filter.value, - "onUpdate:value": _cache[3] || (_cache[3] = ($event) => filter.value = $event), + "onUpdate:value": _cache[4] || (_cache[4] = ($event) => filter.value = $event), clearable: "", placeholder: "Filter Models" }, null, 8, ["value"]), @@ -42681,8 +43106,20 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ style: { "display": "inline-flex", "width": "100%", "align-items": "center", "justify-content": "space-between", "border-bottom": "1px solid rgb(66, 66, 71)" }, key: model.path }, [ - createBaseVNode("p", null, toDisplayString(model.name), 1), - createBaseVNode("div", _hoisted_7, [ + createBaseVNode("div", _hoisted_8, [ + createVNode(unref(NTag), { + type: getModelTag(model.type)[1], + ghost: "", + style: { "margin-right": "8px" } + }, { + default: withCtx(() => [ + createTextVNode(toDisplayString(getModelTag(model.type)[0]), 1) + ]), + _: 2 + }, 1032, ["type"]), + createBaseVNode("p", null, toDisplayString(model.name), 1) + ]), + createBaseVNode("div", _hoisted_9, [ model.state === "loaded" ? (openBlock(), createBlock(unref(NButton), { key: 0, type: "error", @@ -42730,7 +43167,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ default: withCtx(() => [ createVNode(unref(NCard), { title: vae_title.value }, { default: withCtx(() => [ - unref(global2).state.selected_model !== null ? (openBlock(), createElementBlock("div", _hoisted_8, [ + unref(global2).state.selected_model !== null ? (openBlock(), createElementBlock("div", _hoisted_10, [ (openBlock(true), createElementBlock(Fragment, null, renderList(vaeModels.value, (vae) => { var _a3; return openBlock(), createElementBlock("div", { @@ -42738,7 +43175,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ key: vae.path }, [ createBaseVNode("p", null, toDisplayString(vae.name), 1), - createBaseVNode("div", _hoisted_9, [ + createBaseVNode("div", _hoisted_11, [ ((_a3 = unref(global2).state.selected_model) == null ? void 0 : _a3.vae) == vae.path ? (openBlock(), createBlock(unref(NButton), { key: 0, type: "error", @@ -42765,7 +43202,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ ]) ]); }), 128)) - ])) : (openBlock(), createElementBlock("div", _hoisted_10, [ + ])) : (openBlock(), createElementBlock("div", _hoisted_12, [ createVNode(unref(NAlert), { type: "warning", "show-icon": "", @@ -42794,12 +43231,12 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ title: "Usage of textual inversion" }, { default: withCtx(() => [ - _hoisted_11, + _hoisted_13, createTextVNode(". The name of the inversion that is displayed here will be the actual token (easynegative.pt -> easynegative) ") ]), _: 1 }), - unref(global2).state.selected_model !== null ? (openBlock(), createElementBlock("div", _hoisted_12, [ + unref(global2).state.selected_model !== null ? (openBlock(), createElementBlock("div", _hoisted_14, [ (openBlock(true), createElementBlock(Fragment, null, renderList(textualInversionModels.value, (textualInversion) => { var _a3; return openBlock(), createElementBlock("div", { @@ -42807,7 +43244,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ key: textualInversion.path }, [ createBaseVNode("p", null, toDisplayString(textualInversion.name), 1), - createBaseVNode("div", _hoisted_13, [ + createBaseVNode("div", _hoisted_15, [ ((_a3 = unref(global2).state.selected_model) == null ? void 0 : _a3.textual_inversions.includes( textualInversion.path )) ? (openBlock(), createBlock(unref(NButton), { @@ -42836,7 +43273,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ ]) ]); }), 128)) - ])) : (openBlock(), createElementBlock("div", _hoisted_14, [ + ])) : (openBlock(), createElementBlock("div", _hoisted_16, [ createVNode(unref(NAlert), { type: "warning", "show-icon": "", @@ -42971,7 +43408,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ ]), _: 1 }, 8, ["show"]), - createBaseVNode("div", _hoisted_15, [ + createBaseVNode("div", _hoisted_17, [ createVNode(unref(NProgress), { type: "line", percentage: unref(global2).state.progress, @@ -42991,7 +43428,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ _: 1 }, 8, ["percentage", "processing"]) ]), - createBaseVNode("div", _hoisted_16, [ + createBaseVNode("div", _hoisted_18, [ createVNode(unref(NDropdown), { options: dropdownOptions, onSelect: dropdownSelected @@ -43003,7 +43440,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ "icon-placement": "left", "render-icon": renderIcon(unref(Wifi)), loading: unref(websocketState).loading, - onClick: _cache[5] || (_cache[5] = ($event) => unref(startWebsocket)(unref(message))) + onClick: _cache[6] || (_cache[6] = ($event) => unref(startWebsocket)(unref(message))) }, null, 8, ["type", "render-icon", "loading"]) ]), _: 1 @@ -43013,16 +43450,125 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({ }; } }); -const TopBar_vue_vue_type_style_index_0_scoped_29f01b28_lang = ""; -const TopBar = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-29f01b28"]]); +const TopBar_vue_vue_type_style_index_0_scoped_3a99505a_lang = ""; +const TopBar = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-3a99505a"]]); const Prompt_vue_vue_type_style_index_0_lang = ""; const Prompt_vue_vue_type_style_index_1_scoped_780680bc_lang = ""; -const Upscale_vue_vue_type_style_index_0_scoped_5358ed01_lang = ""; -const ControlNet_vue_vue_type_style_index_0_scoped_efacc8fd_lang = ""; -const Img2Img_vue_vue_type_style_index_0_scoped_9c556ef8_lang = ""; -const Inpainting_vue_vue_type_style_index_0_scoped_7963dde9_lang = ""; -const CivitAIDownload_vue_vue_type_style_index_0_scoped_e10a07d2_lang = ""; +const ControlNet_vue_vue_type_style_index_0_scoped_d4ff54ab_lang = ""; +const Img2Img_vue_vue_type_style_index_0_scoped_a4145f6c_lang = ""; +const Inpainting_vue_vue_type_style_index_0_scoped_23b19530_lang = ""; +const CivitAIDownload_vue_vue_type_style_index_0_scoped_89afc237_lang = ""; const HuggingfaceDownload_vue_vue_type_style_index_0_scoped_b405f046_lang = ""; +const _hoisted_1$1 = { style: { "margin": "16px 0" } }; +const _hoisted_2 = /* @__PURE__ */ createBaseVNode("b", null, "Key in question:", -1); +const _hoisted_3 = /* @__PURE__ */ createBaseVNode("br", null, null, -1); +const _hoisted_4 = /* @__PURE__ */ createBaseVNode("b", null, "Current value", -1); +const _hoisted_5 = /* @__PURE__ */ createBaseVNode("br", null, null, -1); +const _hoisted_6 = /* @__PURE__ */ createBaseVNode("b", null, "Default value", -1); +const _hoisted_7 = /* @__PURE__ */ createBaseVNode("br", null, null, -1); +const _sfc_main$3 = /* @__PURE__ */ defineComponent({ + __name: "SettingsDiffResolver", + setup(__props) { + const global2 = useState2(); + const settings = useSettings(); + const message = useMessage(); + function apply2() { + const key = global2.state.settings_diff.key; + const default_value = global2.state.settings_diff.default_value; + const indexable_keys = key.slice(0, key.length - 1); + const last_key = key[key.length - 1]; + let current = settings.defaultSettings; + for (const indexable_key of indexable_keys) { + current = current[indexable_key]; + } + current[last_key] = default_value; + settings.saveSettings().then(() => { + message.success("Settings saved"); + }).catch((e) => { + message.error("Failed to save settings: " + e); + }).finally(() => { + global2.state.settings_diff.active = false; + }); + } + return (_ctx, _cache) => { + return openBlock(), createBlock(unref(NModal), { + show: unref(global2).state.settings_diff.active + }, { + default: withCtx(() => [ + createVNode(unref(NCard), { + title: "Settings Diff Resolver", + style: { "max-width": "90vw" } + }, { + default: withCtx(() => [ + createVNode(unref(NAlert), { + "show-icon": "", + type: "warning" + }, { + default: withCtx(() => [ + createTextVNode("Failed to save config") + ]), + _: 1 + }), + createBaseVNode("div", _hoisted_1$1, [ + _hoisted_2, + createTextVNode(" " + toDisplayString(unref(global2).state.settings_diff.key.join("->")) + " ", 1), + _hoisted_3, + _hoisted_4, + createTextVNode(" " + toDisplayString(unref(global2).state.settings_diff.current_value) + " ", 1), + _hoisted_5, + _hoisted_6, + createTextVNode(" " + toDisplayString(unref(global2).state.settings_diff.default_value) + " ", 1), + _hoisted_7 + ]), + createVNode(unref(NGrid), { + cols: "2", + "x-gap": "8" + }, { + default: withCtx(() => [ + createVNode(unref(NGi), null, { + default: withCtx(() => [ + createVNode(unref(NButton), { + type: "warning", + block: "", + ghost: "", + style: { "width": "100%" }, + onClick: _cache[0] || (_cache[0] = ($event) => unref(global2).state.settings_diff.active = false) + }, { + default: withCtx(() => [ + createTextVNode(" I Will Fix It Myself ") + ]), + _: 1 + }) + ]), + _: 1 + }), + createVNode(unref(NGi), null, { + default: withCtx(() => [ + createVNode(unref(NButton), { + type: "primary", + style: { "width": "100%" }, + onClick: apply2 + }, { + default: withCtx(() => [ + createTextVNode(" Apply Default Value and Save ") + ]), + _: 1 + }) + ]), + _: 1 + }) + ]), + _: 1 + }) + ]), + _: 1 + }) + ]), + _: 1 + }, 8, ["show"]); + }; + } +}); const _sfc_main$2 = {}; function _sfc_render(_ctx, _cache) { const _component_RouterView = resolveComponent("RouterView"); @@ -43036,7 +43582,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({ return (_ctx, _cache) => { return openBlock(), createBlock(unref(NNotificationProvider), { placement: "bottom-right", - max: 3 + max: 2 }, { default: withCtx(() => [ createVNode(unref(NLoadingBarProvider), null, { @@ -43044,13 +43590,14 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({ createVNode(unref(NMessageProvider), null, { default: withCtx(() => [ _hoisted_1, - createVNode(unref(_sfc_main$4)), - createVNode(unref(_sfc_main$8)), + createVNode(unref(_sfc_main$5)), + createVNode(unref(_sfc_main$9)), createVNode(unref(TopBar)), + createVNode(unref(_sfc_main$8)), + createVNode(routerContainerVue, { class: "router-container" }), + createVNode(unref(_sfc_main$6)), createVNode(unref(_sfc_main$7)), - createVNode(routerContainerVue, { style: { "margin-top": "52px" } }), - createVNode(unref(_sfc_main$5)), - createVNode(unref(_sfc_main$6)) + createVNode(unref(_sfc_main$3)) ]), _: 1 }) @@ -43063,19 +43610,21 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({ }; } }); +const Content_vue_vue_type_style_index_0_lang = ""; const _sfc_main = /* @__PURE__ */ defineComponent({ __name: "App", setup(__props) { useCssVars((_ctx) => { var _a2, _b, _c; return { - "4c7ba08e": theme.value.common.popoverColor, - "01ab46a4": theme.value.common.borderRadius, - "e4e78d9e": theme.value.common.pressedColor, - "d0777f2a": theme.value.common.primaryColorHover, - "98485856": blur.value, - "6a1d04dc": ((_b = (_a2 = overrides.value) == null ? void 0 : _a2.Card) == null ? void 0 : _b.color) ?? ((_c = theme.value.Card.common) == null ? void 0 : _c.cardColor), - "344206c2": backgroundImage.value + "e68ef196": theme.value.common.popoverColor, + "3f674355": theme.value.common.borderRadius, + "646dc050": theme.value.common.pressedColor, + "96bf2bb8": theme.value.common.primaryColorHover, + "b08f9a64": blur.value, + "139458d6": ((_b = (_a2 = overrides.value) == null ? void 0 : _a2.Card) == null ? void 0 : _b.color) ?? ((_c = theme.value.Card.common) == null ? void 0 : _c.cardColor), + "31f48ff4": backgroundImage.value, + "3ac72808": marginLeft.value }; }); const settings = useSettings(); @@ -43121,6 +43670,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({ document.body.style.backgroundColor = ((_b = (_a2 = overrides.value) == null ? void 0 : _a2.common) == null ? void 0 : _b.baseColor) ?? theme.value.common.baseColor; } ); + const marginLeft = computed(() => { + return isLargeScreen.value ? "64px" : "0px"; + }); return (_ctx, _cache) => { return openBlock(), createBlock(unref(NConfigProvider), { theme: theme.value, @@ -43198,27 +43750,27 @@ const router = createRouter({ { path: "/", name: "home", - component: () => __vitePreload(() => import("./TextToImageView.js"), true ? ["assets/TextToImageView.js","assets/GenerateSection.vue_vue_type_script_setup_true_lang.js","assets/ImageOutput.vue_vue_type_script_setup_true_lang.js","assets/SendOutputTo.vue_vue_type_script_setup_true_lang.js","assets/Switch.js","assets/TrashBin.js","assets/clock.js","assets/DescriptionsItem.js","assets/InputNumber.js","assets/SamplerPicker.vue_vue_type_script_setup_true_lang.js","assets/Settings.js","assets/v4.js"] : void 0) + component: () => __vitePreload(() => import("./TextToImageView.js"), true ? ["assets/TextToImageView.js","assets/GenerateSection.vue_vue_type_script_setup_true_lang.js","assets/ImageOutput.vue_vue_type_script_setup_true_lang.js","assets/SendOutputTo.vue_vue_type_script_setup_true_lang.js","assets/Switch.js","assets/TrashBin.js","assets/clock.js","assets/DescriptionsItem.js","assets/Slider.js","assets/InputNumber.js","assets/Upscale.vue_vue_type_script_setup_true_lang.js","assets/Settings.js","assets/v4.js"] : void 0) }, { path: "/txt2img", name: "txt2img", - component: () => __vitePreload(() => import("./TextToImageView.js"), true ? ["assets/TextToImageView.js","assets/GenerateSection.vue_vue_type_script_setup_true_lang.js","assets/ImageOutput.vue_vue_type_script_setup_true_lang.js","assets/SendOutputTo.vue_vue_type_script_setup_true_lang.js","assets/Switch.js","assets/TrashBin.js","assets/clock.js","assets/DescriptionsItem.js","assets/InputNumber.js","assets/SamplerPicker.vue_vue_type_script_setup_true_lang.js","assets/Settings.js","assets/v4.js"] : void 0) + component: () => __vitePreload(() => import("./TextToImageView.js"), true ? ["assets/TextToImageView.js","assets/GenerateSection.vue_vue_type_script_setup_true_lang.js","assets/ImageOutput.vue_vue_type_script_setup_true_lang.js","assets/SendOutputTo.vue_vue_type_script_setup_true_lang.js","assets/Switch.js","assets/TrashBin.js","assets/clock.js","assets/DescriptionsItem.js","assets/Slider.js","assets/InputNumber.js","assets/Upscale.vue_vue_type_script_setup_true_lang.js","assets/Settings.js","assets/v4.js"] : void 0) }, { path: "/img2img", name: "img2img", - component: () => __vitePreload(() => import("./Image2ImageView.js"), true ? ["assets/Image2ImageView.js","assets/clock.js","assets/DescriptionsItem.js","assets/Switch.js","assets/InputNumber.js","assets/SamplerPicker.vue_vue_type_script_setup_true_lang.js","assets/Settings.js","assets/GenerateSection.vue_vue_type_script_setup_true_lang.js","assets/ImageOutput.vue_vue_type_script_setup_true_lang.js","assets/SendOutputTo.vue_vue_type_script_setup_true_lang.js","assets/TrashBin.js","assets/ImageUpload.js","assets/CloudUpload.js","assets/v4.js"] : void 0) + component: () => __vitePreload(() => import("./Image2ImageView.js"), true ? ["assets/Image2ImageView.js","assets/clock.js","assets/DescriptionsItem.js","assets/Slider.js","assets/InputNumber.js","assets/Upscale.vue_vue_type_script_setup_true_lang.js","assets/Switch.js","assets/Settings.js","assets/GenerateSection.vue_vue_type_script_setup_true_lang.js","assets/ImageOutput.vue_vue_type_script_setup_true_lang.js","assets/SendOutputTo.vue_vue_type_script_setup_true_lang.js","assets/TrashBin.js","assets/ImageUpload.js","assets/CloudUpload.js","assets/v4.js"] : void 0) }, { path: "/imageProcessing", name: "imageProcessing", - component: () => __vitePreload(() => import("./ImageProcessingView.js"), true ? ["assets/ImageProcessingView.js","assets/GenerateSection.vue_vue_type_script_setup_true_lang.js","assets/ImageOutput.vue_vue_type_script_setup_true_lang.js","assets/SendOutputTo.vue_vue_type_script_setup_true_lang.js","assets/Switch.js","assets/TrashBin.js","assets/ImageUpload.js","assets/CloudUpload.js","assets/InputNumber.js"] : void 0) + component: () => __vitePreload(() => import("./ImageProcessingView.js"), true ? ["assets/ImageProcessingView.js","assets/GenerateSection.vue_vue_type_script_setup_true_lang.js","assets/ImageOutput.vue_vue_type_script_setup_true_lang.js","assets/SendOutputTo.vue_vue_type_script_setup_true_lang.js","assets/Switch.js","assets/TrashBin.js","assets/ImageUpload.js","assets/CloudUpload.js","assets/Slider.js","assets/InputNumber.js"] : void 0) }, { path: "/models", name: "models", - component: () => __vitePreload(() => import("./ModelsView.js"), true ? ["assets/ModelsView.js","assets/ModelPopup.vue_vue_type_script_setup_true_lang.js","assets/DescriptionsItem.js","assets/GridOutline.js","assets/Switch.js","assets/Settings.js","assets/TrashBin.js","assets/CloudUpload.js"] : void 0) + component: () => __vitePreload(() => import("./ModelsView.js"), true ? ["assets/ModelsView.js","assets/ModelPopup.vue_vue_type_script_setup_true_lang.js","assets/DescriptionsItem.js","assets/Settings.js","assets/Switch.js","assets/TrashBin.js","assets/CloudUpload.js"] : void 0) }, { path: "/about", @@ -43228,7 +43780,7 @@ const router = createRouter({ { path: "/accelerate", name: "accelerate", - component: () => __vitePreload(() => import("./AccelerateView.js"), true ? ["assets/AccelerateView.js","assets/Switch.js","assets/InputNumber.js"] : void 0) + component: () => __vitePreload(() => import("./AccelerateView.js"), true ? ["assets/AccelerateView.js","assets/Slider.js","assets/InputNumber.js","assets/Switch.js"] : void 0) }, { path: "/extra", @@ -43243,17 +43795,17 @@ const router = createRouter({ { path: "/settings", name: "settings", - component: () => __vitePreload(() => import("./SettingsView.js"), true ? ["assets/SettingsView.js","assets/SamplerPicker.vue_vue_type_script_setup_true_lang.js","assets/Settings.js","assets/InputNumber.js","assets/Switch.js"] : void 0) + component: () => __vitePreload(() => import("./SettingsView.js"), true ? ["assets/SettingsView.js","assets/Upscale.vue_vue_type_script_setup_true_lang.js","assets/Switch.js","assets/InputNumber.js","assets/Slider.js","assets/Settings.js"] : void 0) }, { path: "/imageBrowser", name: "imageBrowser", - component: () => __vitePreload(() => import("./ImageBrowserView.js"), true ? ["assets/ImageBrowserView.js","assets/SendOutputTo.vue_vue_type_script_setup_true_lang.js","assets/Switch.js","assets/GridOutline.js","assets/TrashBin.js","assets/DescriptionsItem.js","assets/ImageBrowserView.css"] : void 0) + component: () => __vitePreload(() => import("./ImageBrowserView.js"), true ? ["assets/ImageBrowserView.js","assets/SendOutputTo.vue_vue_type_script_setup_true_lang.js","assets/Switch.js","assets/TrashBin.js","assets/Slider.js","assets/DescriptionsItem.js","assets/ImageBrowserView.css"] : void 0) }, { path: "/tagger", name: "tagger", - component: () => __vitePreload(() => import("./TaggerView.js"), true ? ["assets/TaggerView.js","assets/GenerateSection.vue_vue_type_script_setup_true_lang.js","assets/ImageUpload.js","assets/CloudUpload.js","assets/v4.js","assets/Switch.js","assets/InputNumber.js","assets/TaggerView.css"] : void 0) + component: () => __vitePreload(() => import("./TaggerView.js"), true ? ["assets/TaggerView.js","assets/GenerateSection.vue_vue_type_script_setup_true_lang.js","assets/ImageUpload.js","assets/CloudUpload.js","assets/v4.js","assets/Slider.js","assets/InputNumber.js","assets/Switch.js","assets/TaggerView.css"] : void 0) }, { path: "/:pathMatch(.*)", @@ -43275,190 +43827,193 @@ app.use(index, { }); app.mount("#app"); export { - createTmOptions as $, - NButton as A, - NIcon as B, - toDisplayString as C, - NTabPane as D, - NTabs as E, + NInternalSelectMenu as $, + h as A, + ref as B, + NButton as C, + NIcon as D, + toDisplayString as E, Fragment as F, spaceRegex as G, promptHandleKeyUp as H, promptHandleKeyDown as I, NInput as J, watch as K, - renderList as L, - NScrollbar as M, - NSpace as N, - replaceable as O, - createInjectionKey as P, - cB as Q, - inject as R, - useConfig as S, - useTheme as T, - popselectLight$1 as U, - createTreeMate as V, - nextTick as W, - toRef as X, - useThemeClass as Y, - NInternalSelectMenu as Z, + upscalerOptions as L, + renderList as M, + NTooltip as N, + NScrollbar as O, + replaceable as P, + createInjectionKey as Q, + cB as R, + inject as S, + useConfig as T, + useTheme as U, + popselectLight$1 as V, + createTreeMate as W, + nextTick as X, + toRef as Y, + useThemeClass as Z, _export_sfc as _, - useState2 as a, - AddIcon as a$, - happensIn as a0, - call as a1, - keysOf as a2, - provide as a3, - keep as a4, - createRefSetter as a5, - mergeEventHandlers as a6, - omit as a7, - NPopover as a8, - popoverBaseProps as a9, - NScrollbar$1 as aA, - onBeforeUnmount as aB, - off as aC, - on as aD, - ChevronDownIcon as aE, - NDropdown as aF, - pxfy as aG, - get as aH, - NIconSwitchTransition as aI, - NBaseLoading as aJ, - ChevronRightIcon as aK, - VResizeObserver as aL, - warn$2 as aM, - cssrAnchorMetaName as aN, - VVirtualList as aO, - NEmpty as aP, - repeat as aQ, - beforeNextFrameOnce as aR, - fadeInScaleUpTransition as aS, - iconSwitchTransition as aT, - insideModal as aU, - insidePopover as aV, - createId as aW, - Transition as aX, - dataTableLight$1 as aY, - loadingBarApiInjectionKey as aZ, - throwError as a_, - c$1 as aa, - cM as ab, - cNotM as ac, - useLocale as ad, - useMergedState as ae, - watchEffect as af, - useRtl as ag, - createKey as ah, - resolveSlot as ai, - NBaseIcon as aj, - useAdjustedTo as ak, - paginationLight$1 as al, - useMergedClsPrefix as am, - ellipsisLight$1 as an, - onDeactivated as ao, - mergeProps as ap, - useStyle as aq, - useFormItem as ar, - useMemo as as, - cE as at, - radioLight$1 as au, - resolveWrappedSlot as av, - flatten$2 as aw, - getSlot$1 as ax, - depx as ay, - formatLength as az, - upscalerOptions as b, - VFollower as b$, - NProgress as b0, - NFadeInExpandTransition as b1, - EyeIcon as b2, - fadeInHeightExpandTransition as b3, - Teleport as b4, - uploadLight$1 as b5, - useCssVars as b6, - themeOverridesKey as b7, - reactive as b8, - onMounted as b9, - useNotification as bA, - defaultSettings as bB, - getCurrentInstance as bC, - formLight$1 as bD, - commonVariables$m as bE, - formItemInjectionKey as bF, - resolveDynamicComponent as bG, - checkboxLight$1 as bH, - urlFromPath as bI, - diffusersSchedulerTuple as bJ, - useRouter as bK, - isBrowser$3 as bL, - fadeInTransition as bM, - imageLight as bN, - isMounted as bO, - LazyTeleport as bP, - zindexable$1 as bQ, - kebabCase$1 as bR, - useCompitable as bS, - descriptionsLight$1 as bT, - withModifiers as bU, - NAlert as bV, - rgba as bW, - inputNumberLight$1 as bX, - XButton as bY, - VBinder as bZ, - VTarget as b_, - normalizeStyle as ba, - NText as bb, - huggingfaceModelsFile as bc, - NModal as bd, - NDivider as be, - Backends as bf, - stepsLight$1 as bg, - FinishedIcon as bh, - ErrorIcon$1 as bi, - upperFirst$1 as bj, - toString as bk, - createCompounder as bl, - cloneVNode as bm, - onBeforeUpdate as bn, - indexMap as bo, - onUpdated as bp, - resolveSlotWithProps as bq, - withDirectives as br, - vShow as bs, - getPreciseEventTarget as bt, - carouselLight$1 as bu, - color2Class as bv, - rateLight as bw, - NTag as bx, - convertToTextString as by, - themeKey as bz, + createElementBlock as a, + throwError as a$, + createTmOptions as a0, + happensIn as a1, + call as a2, + keysOf as a3, + provide as a4, + keep as a5, + createRefSetter as a6, + mergeEventHandlers as a7, + omit as a8, + NPopover as a9, + formatLength as aA, + NScrollbar$1 as aB, + onBeforeUnmount as aC, + off as aD, + on as aE, + ChevronDownIcon as aF, + NDropdown as aG, + pxfy as aH, + get as aI, + NIconSwitchTransition as aJ, + NBaseLoading as aK, + ChevronRightIcon as aL, + cssrAnchorMetaName as aM, + VResizeObserver as aN, + warn$2 as aO, + VVirtualList as aP, + NEmpty as aQ, + repeat as aR, + beforeNextFrameOnce as aS, + fadeInScaleUpTransition as aT, + iconSwitchTransition as aU, + insideModal as aV, + insidePopover as aW, + createId as aX, + Transition as aY, + dataTableLight$1 as aZ, + loadingBarApiInjectionKey as a_, + popoverBaseProps as aa, + c$1 as ab, + cM as ac, + cNotM as ad, + useLocale as ae, + useMergedState as af, + watchEffect as ag, + useRtl as ah, + createKey as ai, + resolveSlot as aj, + NBaseIcon as ak, + useAdjustedTo as al, + paginationLight$1 as am, + useMergedClsPrefix as an, + ellipsisLight$1 as ao, + onDeactivated as ap, + mergeProps as aq, + useStyle as ar, + useFormItem as as, + useMemo as at, + cE as au, + radioLight$1 as av, + resolveWrappedSlot as aw, + flatten$2 as ax, + getSlot$1 as ay, + depx as az, + createBaseVNode as b, + XButton as b$, + AddIcon as b0, + NProgress as b1, + NFadeInExpandTransition as b2, + EyeIcon as b3, + fadeInHeightExpandTransition as b4, + Teleport as b5, + uploadLight$1 as b6, + createStaticVNode as b7, + useCssVars as b8, + themeOverridesKey as b9, + rateLight as bA, + NTag as bB, + convertToTextString as bC, + themeKey as bD, + useNotification as bE, + defaultSettings as bF, + getCurrentInstance as bG, + formLight$1 as bH, + commonVariables$m as bI, + formItemInjectionKey as bJ, + NAlert as bK, + resolveDynamicComponent as bL, + checkboxLight$1 as bM, + urlFromPath as bN, + diffusersSchedulerTuple as bO, + useRouter as bP, + isBrowser$3 as bQ, + fadeInTransition as bR, + imageLight as bS, + isMounted as bT, + LazyTeleport as bU, + zindexable$1 as bV, + kebabCase$1 as bW, + useCompitable as bX, + descriptionsLight$1 as bY, + rgba as bZ, + inputNumberLight$1 as b_, + reactive as ba, + onMounted as bb, + normalizeStyle as bc, + NText as bd, + withModifiers as be, + huggingfaceModelsFile as bf, + Menu as bg, + NModal as bh, + NDivider as bi, + Backends as bj, + stepsLight$1 as bk, + FinishedIcon as bl, + ErrorIcon$1 as bm, + upperFirst$1 as bn, + toString as bo, + createCompounder as bp, + cloneVNode as bq, + onBeforeUpdate as br, + indexMap as bs, + onUpdated as bt, + resolveSlotWithProps as bu, + withDirectives as bv, + vShow as bw, + getPreciseEventTarget as bx, + carouselLight$1 as by, + color2Class as bz, computed as c, - sliderLight$1 as c0, - isSlotEmpty as c1, - switchLight$1 as c2, - NResult as c3, + VBinder as c0, + VTarget as c1, + VFollower as c2, + sliderLight$1 as c3, + isSlotEmpty as c4, + switchLight$1 as c5, + NResult as c6, defineComponent as d, - createBlock as e, - createBaseVNode as f, - createVNode as g, - unref as h, - NSelect as i, - createElementBlock as j, - createTextVNode as k, - NTooltip as l, - createCommentVNode as m, - NCard as n, + createVNode as e, + unref as f, + createBlock as g, + createTextVNode as h, + isDev as i, + NSpace as j, + createCommentVNode as k, + useState2 as l, + NCard as m, + NTabPane as n, openBlock as o, - useMessage as p, - onUnmounted as q, - NGi as r, - NGrid as s, - serverUrl as t, + NTabs as p, + NSelect as q, + useMessage as r, + onUnmounted as s, + NGi as t, useSettings as u, - pushScopeId as v, + NGrid as v, withCtx as w, - popScopeId as x, - h as y, - ref as z + serverUrl as x, + pushScopeId as y, + popScopeId as z }; diff --git a/frontend/src/App.vue b/frontend/src/App.vue index f2346d5b1..445ae374b 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -17,6 +17,7 @@ import { computed, provide, ref, watch } from "vue"; import { useState as useAnalytics } from "vue-gtag-next"; import Content from "./Content.vue"; import { serverUrl } from "./env"; +import { isLargeScreen } from "./helper/mediaQueries"; import { useSettings } from "./store/settings"; import type { ExtendedThemeOverrides } from "./types"; @@ -72,6 +73,10 @@ watch( overrides.value?.common?.baseColor ?? theme.value.common.baseColor; } ); + +const marginLeft = computed(() => { + return isLargeScreen.value ? "64px" : "0px"; +}); diff --git a/frontend/src/Content.vue b/frontend/src/Content.vue index 5c9d38880..045b62ce9 100644 --- a/frontend/src/Content.vue +++ b/frontend/src/Content.vue @@ -1,6 +1,6 @@ - + diff --git a/frontend/src/components/imageProcessing/index.ts b/frontend/src/components/imageProcessing/index.ts index b35cd812b..c27a8a325 100644 --- a/frontend/src/components/imageProcessing/index.ts +++ b/frontend/src/components/imageProcessing/index.ts @@ -1 +1 @@ -export { default as Upscale } from "./Upscale.vue"; +export { default as ESRGAN } from "./ESRGAN.vue"; diff --git a/frontend/src/components/inference/ControlNet.vue b/frontend/src/components/inference/ControlNet.vue index d24702797..99f646741 100644 --- a/frontend/src/components/inference/ControlNet.vue +++ b/frontend/src/components/inference/ControlNet.vue @@ -77,36 +77,9 @@ /> - -@@ -28,7 +29,14 @@ import { LogDrawer, PerformanceDrawer, SecretsHandler, + SettingsDiffResolver, TopBar, } from "./components"; import routerContainerVue from "./router/router-container.vue"; + + diff --git a/frontend/src/assets/2img.css b/frontend/src/assets/2img.css index 4fbcf468e..34bd76b06 100644 --- a/frontend/src/assets/2img.css +++ b/frontend/src/assets/2img.css @@ -2,14 +2,15 @@ margin: 0 12px; } -.split { - width: 50%; -} - .flex-container { width: 100%; display: inline-flex; align-items: center; + gap: 0 8px; +} + +.flex-container.space-between { + justify-content: space-between; } .slider-label { @@ -25,3 +26,11 @@ .highlight { color: #63e2b7; } + +.generate-extra-card { + margin-top: 12px; +} + +.generate-extra-card:last-child { + margin-bottom: 12px; +} diff --git a/frontend/src/assets/main.css b/frontend/src/assets/main.css index 18e9b89e9..b57916c25 100644 --- a/frontend/src/assets/main.css +++ b/frontend/src/assets/main.css @@ -1,5 +1,4 @@ body { - margin-left: 64px; color: #fff; font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", @@ -36,3 +35,7 @@ a, .n-menu-item:last-child { margin-top: auto; } + +.n-drawer-content-wrapper { + backdrop-filter: blur(10px); +} diff --git a/frontend/src/components/CollapsibleNavbar.vue b/frontend/src/components/CollapsibleNavbar.vue index a440c7abc..516f65522 100644 --- a/frontend/src/components/CollapsibleNavbar.vue +++ b/frontend/src/components/CollapsibleNavbar.vue @@ -4,16 +4,17 @@ style="height: 100%; overflow: visible" has-sider content-style="overflow: visible" + v-if="isLargeScreen" > @@ -8,9 +8,10 @@ - + + + + + + ++ ++ ++ ++ -+- - - - - Guidance scale indicates how much should model stay close to the - prompt. Higher values might be exactly what you want, but - generated images might have some artefacts. Lower values - indicates that model can "dream" about this prompt more. - We recommend using 3-15 for most images. -- - + + @@ -248,6 +221,9 @@+ ++ @@ -277,13 +253,17 @@ import "@/assets/2img.css"; import { BurnerClock } from "@/clock"; import { BatchSizeInput, + CFGScale, DimensionsInput, GenerateSection, + HighResFixTabs, ImageOutput, ImageUpload, OutputStats, Prompt, + SAGInput, SamplerPicker, + Upscale, } from "@/components"; import { serverUrl } from "@/env"; import { @@ -376,6 +356,36 @@ const generate = () => { settings.data.settings.controlnet.return_preprocessed, }, model: settings.data.settings.model?.path, + flags: { + ...(settings.data.settings.controlnet.highres.enabled + ? { + highres_fix: { + mode: settings.data.settings.controlnet.highres.mode, + image_upscaler: + settings.data.settings.controlnet.highres.image_upscaler, + scale: settings.data.settings.controlnet.highres.scale, + latent_scale_mode: + settings.data.settings.controlnet.highres.latent_scale_mode, + strength: settings.data.settings.controlnet.highres.strength, + steps: settings.data.settings.controlnet.highres.steps, + antialiased: + settings.data.settings.controlnet.highres.antialiased, + }, + } + : {}), + ...(settings.data.settings.controlnet.upscale.enabled + ? { + upscale: { + upscale_factor: + settings.data.settings.controlnet.upscale.upscale_factor, + tile_size: settings.data.settings.controlnet.upscale.tile_size, + tile_padding: + settings.data.settings.controlnet.upscale.tile_padding, + model: settings.data.settings.controlnet.upscale.model, + }, + } + : {}), + }, }), }) .then((res) => { diff --git a/frontend/src/components/inference/Img2Img.vue b/frontend/src/components/inference/Img2Img.vue index 550eccfd4..514d25d19 100644 --- a/frontend/src/components/inference/Img2Img.vue +++ b/frontend/src/components/inference/Img2Img.vue @@ -51,76 +51,9 @@ /> - - -- - -- - - - - Guidance scale indicates how much should model stay close to the - prompt. Higher values might be exactly what you want, but - generated images might have some artefacts. Lower values - indicates that model can "dream" about this prompt more. - We recommend using 3-15 for most images. -- - -+- - + - - PyTorch ONLY. If self attention is >0, - SAG will guide the model and improve the quality of the image at - the cost of speed. Higher values will follow the guidance more - closely, which can lead to better, more sharp and detailed - outputs. -- - - @@ -200,6 +133,9 @@+ ++ @@ -229,13 +165,17 @@ import "@/assets/2img.css"; import { BurnerClock } from "@/clock"; import { BatchSizeInput, + CFGScale, DimensionsInput, GenerateSection, + HighResFixTabs, ImageOutput, ImageUpload, OutputStats, Prompt, + SAGInput, SamplerPicker, + Upscale, } from "@/components"; import { serverUrl } from "@/env"; import { @@ -314,7 +254,52 @@ const generate = () => { prompt_to_prompt: settings.data.settings.api.prompt_to_prompt, }, }, + ...(settings.data.settings.img2img.deepshrink.enabled + ? { + flags: { + deepshrink: { + early_out: settings.data.settings.img2img.deepshrink.early_out, + depth_1: settings.data.settings.img2img.deepshrink.depth_1, + stop_at_1: settings.data.settings.img2img.deepshrink.stop_at_1, + depth_2: settings.data.settings.img2img.deepshrink.depth_2, + stop_at_2: settings.data.settings.img2img.deepshrink.stop_at_2, + scaler: settings.data.settings.img2img.deepshrink.scaler, + base_scale: + settings.data.settings.img2img.deepshrink.base_scale, + }, + }, + } + : {}), model: settings.data.settings.model?.path, + flags: { + ...(settings.data.settings.img2img.highres.enabled + ? { + highres_fix: { + mode: settings.data.settings.img2img.highres.mode, + image_upscaler: + settings.data.settings.img2img.highres.image_upscaler, + scale: settings.data.settings.img2img.highres.scale, + latent_scale_mode: + settings.data.settings.img2img.highres.latent_scale_mode, + strength: settings.data.settings.img2img.highres.strength, + steps: settings.data.settings.img2img.highres.steps, + antialiased: settings.data.settings.img2img.highres.antialiased, + }, + } + : {}), + ...(settings.data.settings.img2img.upscale.enabled + ? { + upscale: { + upscale_factor: + settings.data.settings.img2img.upscale.upscale_factor, + tile_size: settings.data.settings.img2img.upscale.tile_size, + tile_padding: + settings.data.settings.img2img.upscale.tile_padding, + model: settings.data.settings.img2img.upscale.model, + }, + } + : {}), + }, }), }) .then((res) => { diff --git a/frontend/src/components/inference/Inpainting.vue b/frontend/src/components/inference/Inpainting.vue index 9be531806..1beefe62c 100644 --- a/frontend/src/components/inference/Inpainting.vue +++ b/frontend/src/components/inference/Inpainting.vue @@ -170,74 +170,32 @@ /> - - -+- - - - - Guidance scale indicates how much should model stay close to the - prompt. Higher values might be exactly what you want, but - generated images might have some artefacts. Lower values - indicates that model can "dream" about this prompt more. - We recommend using 3-15 for most images. -- - - - ++ ++ + + @@ -306,6 +264,9 @@- - + - PyTorch ONLY. If self attention is >0, - SAG will guide the model and improve the quality of the image at - the cost of speed. Higher values will follow the guidance more - closely, which can lead to better, more sharp and detailed - outputs. + How much should the masked are be changed from the original+ @@ -334,11 +295,15 @@ import "@/assets/2img.css"; import { BurnerClock } from "@/clock"; import { + CFGScale, GenerateSection, + HighResFixTabs, ImageOutput, OutputStats, Prompt, + SAGInput, SamplerPicker, + Upscale, } from "@/components"; import { serverUrl } from "@/env"; import { @@ -425,7 +390,56 @@ const generate = () => { prompt_to_prompt: settings.data.settings.api.prompt_to_prompt, }, }, + ...(settings.data.settings.inpainting.deepshrink.enabled + ? { + flags: { + deepshrink: { + early_out: + settings.data.settings.inpainting.deepshrink.early_out, + depth_1: settings.data.settings.inpainting.deepshrink.depth_1, + stop_at_1: + settings.data.settings.inpainting.deepshrink.stop_at_1, + depth_2: settings.data.settings.inpainting.deepshrink.depth_2, + stop_at_2: + settings.data.settings.inpainting.deepshrink.stop_at_2, + scaler: settings.data.settings.inpainting.deepshrink.scaler, + base_scale: + settings.data.settings.inpainting.deepshrink.base_scale, + }, + }, + } + : {}), model: settings.data.settings.model?.path, + flags: { + ...(settings.data.settings.inpainting.highres.enabled + ? { + highres_fix: { + mode: settings.data.settings.inpainting.highres.mode, + image_upscaler: + settings.data.settings.inpainting.highres.image_upscaler, + scale: settings.data.settings.inpainting.highres.scale, + latent_scale_mode: + settings.data.settings.inpainting.highres.latent_scale_mode, + strength: settings.data.settings.inpainting.highres.strength, + steps: settings.data.settings.inpainting.highres.steps, + antialiased: + settings.data.settings.inpainting.highres.antialiased, + }, + } + : {}), + ...(settings.data.settings.inpainting.upscale.enabled + ? { + upscale: { + upscale_factor: + settings.data.settings.inpainting.upscale.upscale_factor, + tile_size: settings.data.settings.inpainting.upscale.tile_size, + tile_padding: + settings.data.settings.inpainting.upscale.tile_padding, + model: settings.data.settings.inpainting.upscale.model, + }, + } + : {}), + }, }), }) .then((res) => { diff --git a/frontend/src/components/inference/Txt2Img.vue b/frontend/src/components/inference/Txt2Img.vue index 981fbbb17..80bb95431 100644 --- a/frontend/src/components/inference/Txt2Img.vue +++ b/frontend/src/components/inference/Txt2Img.vue @@ -43,71 +43,9 @@ /> - - -- - -- - - - - Guidance scale indicates how much should model stay close to the - prompt. Higher values might be exactly what you want, but - generated images might have some artefacts. Lower values - indicates that model can "dream" about this prompt more. - We recommend using 3-15 for most images. -- - -+- - + - - If self attention is >0, SAG will guide the model and improve - the quality of the image at the cost of speed. Higher values - will follow the guidance more closely, which can lead to better, - more sharp and detailed outputs. -- - - @@ -154,7 +92,16 @@ -+ + + + + + + @@ -182,13 +129,19 @@ diff --git a/frontend/src/components/models/CivitAIModelImage.vue b/frontend/src/components/models/CivitAIModelImage.vue new file mode 100644 index 000000000..de3e40b3f --- /dev/null +++ b/frontend/src/components/models/CivitAIModelImage.vue @@ -0,0 +1,129 @@ + + ++ + + diff --git a/frontend/src/components/models/index.ts b/frontend/src/components/models/index.ts index 54946f188..f56a8412c 100644 --- a/frontend/src/components/models/index.ts +++ b/frontend/src/components/models/index.ts @@ -1,4 +1,5 @@ export { default as CivitAIDownload } from "./CivitAIDownload.vue"; +export { default as CivitAIModelImage } from "./CivitAIModelImage.vue"; export { default as HuggingfaceDownload } from "./HuggingfaceDownload.vue"; export { default as ModelConvert } from "./ModelConvert.vue"; export { default as ModelManager } from "./ModelManager.vue"; diff --git a/frontend/src/components/settings/FlagsSettings.vue b/frontend/src/components/settings/FlagsSettings.vue deleted file mode 100644 index 5fa9b97ec..000000000 --- a/frontend/src/components/settings/FlagsSettings.vue +++ /dev/null @@ -1,77 +0,0 @@ - -++ + ++
- - - - diff --git a/frontend/src/components/settings/ReproducibilitySettings.vue b/frontend/src/components/settings/ReproducibilitySettings.vue index 7c788223f..495e1e274 100644 --- a/frontend/src/components/settings/ReproducibilitySettings.vue +++ b/frontend/src/components/settings/ReproducibilitySettings.vue @@ -189,37 +189,133 @@- -- -- - -- - -- - -- - -- - -+- -- - -- - -- - -- + + +++++ +{ + settings.defaultSettings.api.free_u_b1 = 1.3; + settings.defaultSettings.api.free_u_b2 = 1.4; + settings.defaultSettings.api.free_u_s1 = 0.9; + settings.defaultSettings.api.free_u_s2 = 0.2; + } + " + > + Apply SD 1.4 Defaults + +{ + settings.defaultSettings.api.free_u_b1 = 1.5; + settings.defaultSettings.api.free_u_b2 = 1.6; + settings.defaultSettings.api.free_u_s1 = 0.9; + settings.defaultSettings.api.free_u_s2 = 0.2; + } + " + > + Apply SD 1.5 Defaults + +{ + settings.defaultSettings.api.free_u_b1 = 1.4; + settings.defaultSettings.api.free_u_b2 = 1.6; + settings.defaultSettings.api.free_u_s1 = 0.9; + settings.defaultSettings.api.free_u_s2 = 0.2; + } + " + > + Apply SD 2.1 Defaults + +{ + settings.defaultSettings.api.free_u_b1 = 1.3; + settings.defaultSettings.api.free_u_b2 = 1.4; + settings.defaultSettings.api.free_u_s1 = 0.9; + settings.defaultSettings.api.free_u_s2 = 0.2; + } + " + > + Apply SDXL Defaults + ++ ++ + ++ + ++ + ++ + + ++ + + ++ + diff --git a/frontend/src/components/settings/defaultSettings/ControlNetSettings.vue b/frontend/src/components/settings/defaultSettings/ControlNetSettings.vue index eec3dbaa0..7ff20081e 100644 --- a/frontend/src/components/settings/defaultSettings/ControlNetSettings.vue +++ b/frontend/src/components/settings/defaultSettings/ControlNetSettings.vue @@ -77,13 +77,16 @@ :step="8" /> ++ + + +