diff --git a/docs/contributing/MODEL_MANAGER.md b/docs/contributing/MODEL_MANAGER.md index 9699db4f1a..52b75d8c39 100644 --- a/docs/contributing/MODEL_MANAGER.md +++ b/docs/contributing/MODEL_MANAGER.md @@ -408,7 +408,7 @@ config = get_config() logger = InvokeAILogger.get_logger(config=config) db = SqliteDatabase(config.db_path, logger) -record_store = ModelRecordServiceSQL(db) +record_store = ModelRecordServiceSQL(db, logger) queue = DownloadQueueService() queue.start() diff --git a/invokeai/app/api/dependencies.py b/invokeai/app/api/dependencies.py index 27ab030d4c..6e049399db 100644 --- a/invokeai/app/api/dependencies.py +++ b/invokeai/app/api/dependencies.py @@ -99,7 +99,7 @@ class ApiDependencies: model_images_service = ModelImageFileStorageDisk(model_images_folder / "model_images") model_manager = ModelManagerService.build_model_manager( app_config=configuration, - model_record_service=ModelRecordServiceSQL(db=db), + model_record_service=ModelRecordServiceSQL(db=db, logger=logger), download_queue=download_queue_service, events=events, ) diff --git a/invokeai/app/api/routers/images.py b/invokeai/app/api/routers/images.py index 8e3824ce93..2bc0b48251 100644 --- a/invokeai/app/api/routers/images.py +++ b/invokeai/app/api/routers/images.py @@ -233,21 +233,14 @@ async def get_image_workflow( ) async def get_image_full( image_name: str = Path(description="The name of full-resolution image file to get"), -) -> FileResponse: +) -> Response: """Gets a full-resolution image file""" try: path = ApiDependencies.invoker.services.images.get_path(image_name) - - if not ApiDependencies.invoker.services.images.validate_path(path): - raise HTTPException(status_code=404) - - response = FileResponse( - path, - media_type="image/png", - filename=image_name, - content_disposition_type="inline", - ) + with open(path, "rb") as f: + content = f.read() + response = Response(content, media_type="image/png") response.headers["Cache-Control"] = f"max-age={IMAGE_MAX_AGE}" return response except Exception: @@ -268,15 +261,14 @@ async def get_image_full( ) async def get_image_thumbnail( image_name: str = Path(description="The name of thumbnail image file to get"), -) -> FileResponse: +) -> Response: """Gets a thumbnail image file""" try: path = ApiDependencies.invoker.services.images.get_path(image_name, thumbnail=True) - if not ApiDependencies.invoker.services.images.validate_path(path): - raise HTTPException(status_code=404) - - response = FileResponse(path, media_type="image/webp", content_disposition_type="inline") + with open(path, "rb") as f: + content = f.read() + response = Response(content, media_type="image/webp") response.headers["Cache-Control"] = f"max-age={IMAGE_MAX_AGE}" return response except Exception: diff --git a/invokeai/app/api_app.py b/invokeai/app/api_app.py index dca0bc139d..88820a0c4c 100644 --- a/invokeai/app/api_app.py +++ b/invokeai/app/api_app.py @@ -161,6 +161,7 @@ def invoke_api() -> None: # Taken from https://waylonwalker.com/python-find-available-port/, thanks Waylon! # https://github.com/WaylonWalker with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.settimeout(1) if s.connect_ex(("localhost", port)) == 0: return find_port(port=port + 1) else: diff --git a/invokeai/app/invocations/fields.py b/invokeai/app/invocations/fields.py index dff2084de7..f9a483f84c 100644 --- a/invokeai/app/invocations/fields.py +++ b/invokeai/app/invocations/fields.py @@ -162,8 +162,7 @@ class FieldDescriptions: fp32 = "Whether or not to use full float32 precision" precision = "Precision to use" tiled = "Processing using overlapping tiles (reduce memory consumption)" - vae_tile_size = "The tile size for VAE tiling in pixels (image space). If set to 0, the default tile size for the " - "model will be used. Larger tile sizes generally produce better results at the cost of higher memory usage." + vae_tile_size = "The tile size for VAE tiling in pixels (image space). If set to 0, the default tile size for the model will be used. Larger tile sizes generally produce better results at the cost of higher memory usage." detect_res = "Pixel resolution for detection" image_res = "Pixel resolution for output image" safe_mode = "Whether or not to use safe mode" diff --git a/invokeai/app/services/model_records/model_records_sql.py b/invokeai/app/services/model_records/model_records_sql.py index 2f9829dad4..1d0780efe1 100644 --- a/invokeai/app/services/model_records/model_records_sql.py +++ b/invokeai/app/services/model_records/model_records_sql.py @@ -40,11 +40,14 @@ Typical usage: """ import json +import logging import sqlite3 from math import ceil from pathlib import Path from typing import List, Optional, Union +import pydantic + from invokeai.app.services.model_records.model_records_base import ( DuplicateModelException, ModelRecordChanges, @@ -67,7 +70,7 @@ from invokeai.backend.model_manager.config import ( class ModelRecordServiceSQL(ModelRecordServiceBase): """Implementation of the ModelConfigStore ABC using a SQL database.""" - def __init__(self, db: SqliteDatabase): + def __init__(self, db: SqliteDatabase, logger: logging.Logger): """ Initialize a new object from preexisting sqlite3 connection and threading lock objects. @@ -76,6 +79,7 @@ class ModelRecordServiceSQL(ModelRecordServiceBase): super().__init__() self._db = db self._cursor = db.conn.cursor() + self._logger = logger @property def db(self) -> SqliteDatabase: @@ -291,7 +295,20 @@ class ModelRecordServiceSQL(ModelRecordServiceBase): tuple(bindings), ) result = self._cursor.fetchall() - results = [ModelConfigFactory.make_config(json.loads(x[0]), timestamp=x[1]) for x in result] + + # Parse the model configs. + results: list[AnyModelConfig] = [] + for row in result: + try: + model_config = ModelConfigFactory.make_config(json.loads(row[0]), timestamp=row[1]) + except pydantic.ValidationError: + # We catch this error so that the app can still run if there are invalid model configs in the database. + # One reason that an invalid model config might be in the database is if someone had to rollback from a + # newer version of the app that added a new model type. + self._logger.warning(f"Found an invalid model config in the database. Ignoring this model. ({row[0]})") + else: + results.append(model_config) + return results def search_by_path(self, path: Union[str, Path]) -> List[AnyModelConfig]: diff --git a/invokeai/app/services/workflow_records/default_workflows/ESRGAN Upscaling with Canny ControlNet.json b/invokeai/app/services/workflow_records/default_workflows/ESRGAN Upscaling with Canny ControlNet.json index dd98eca18f..2cadcae961 100644 --- a/invokeai/app/services/workflow_records/default_workflows/ESRGAN Upscaling with Canny ControlNet.json +++ b/invokeai/app/services/workflow_records/default_workflows/ESRGAN Upscaling with Canny ControlNet.json @@ -2,7 +2,7 @@ "name": "ESRGAN Upscaling with Canny ControlNet", "author": "InvokeAI", "description": "Sample workflow for using Upscaling with ControlNet with SD1.5", - "version": "2.0.0", + "version": "2.1.0", "contact": "invoke@invoke.ai", "tags": "upscale, controlnet, default", "notes": "", @@ -36,14 +36,13 @@ "version": "3.0.0", "category": "default" }, - "id": "0e71a27e-a22b-4a9b-b20a-6d789abff2bc", "nodes": [ { - "id": "e8bf67fe-67de-4227-87eb-79e86afdfc74", + "id": "63b6ab7e-5b05-4d1b-a3b1-42d8e53ce16b", "type": "invocation", "data": { - "id": "e8bf67fe-67de-4227-87eb-79e86afdfc74", - "version": "1.1.1", + "id": "63b6ab7e-5b05-4d1b-a3b1-42d8e53ce16b", + "version": "1.2.0", "nodePack": "invokeai", "label": "", "notes": "", @@ -57,6 +56,10 @@ "clip": { "name": "clip", "label": "" + }, + "mask": { + "name": "mask", + "label": "" } }, "isOpen": true, @@ -65,122 +68,63 @@ }, "position": { "x": 1250, - "y": 1500 + "y": 1200 } }, { - "id": "d8ace142-c05f-4f1d-8982-88dc7473958d", + "id": "5ca498a4-c8c8-4580-a396-0c984317205d", "type": "invocation", "data": { - "id": "d8ace142-c05f-4f1d-8982-88dc7473958d", - "version": "1.0.2", + "id": "5ca498a4-c8c8-4580-a396-0c984317205d", + "version": "1.1.0", "nodePack": "invokeai", "label": "", "notes": "", - "type": "main_model_loader", + "type": "i2l", "inputs": { - "model": { - "name": "model", + "image": { + "name": "image", + "label": "" + }, + "vae": { + "name": "vae", + "label": "" + }, + "tiled": { + "name": "tiled", "label": "", - "value": { - "key": "5cd43ca0-dd0a-418d-9f7e-35b2b9d5e106", - "hash": "blake3:6987f323017f597213cc3264250edf57056d21a40a0a85d83a1a33a7d44dc41a", - "name": "Deliberate_v5", - "base": "sd-1", - "type": "main" - } - } - }, - "isOpen": true, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": 700, - "y": 1375 - } - }, - { - "id": "771bdf6a-0813-4099-a5d8-921a138754d4", - "type": "invocation", - "data": { - "id": "771bdf6a-0813-4099-a5d8-921a138754d4", - "version": "1.0.2", - "nodePack": "invokeai", - "label": "", - "notes": "", - "type": "image", - "inputs": { - "image": { - "name": "image", - "label": "Image To Upscale", - "value": { - "image_name": "d2e42ba6-d420-496b-82db-91c9b75956c1.png" - } - } - }, - "isOpen": true, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": 344.5593065887157, - "y": 1698.161491368619 - } - }, - { - "id": "f7564dd2-9539-47f2-ac13-190804461f4e", - "type": "invocation", - "data": { - "id": "f7564dd2-9539-47f2-ac13-190804461f4e", - "version": "1.3.2", - "nodePack": "invokeai", - "label": "", - "notes": "", - "type": "esrgan", - "inputs": { - "board": { - "name": "board", - "label": "" - }, - "metadata": { - "name": "metadata", - "label": "" - }, - "image": { - "name": "image", - "label": "" - }, - "model_name": { - "name": "model_name", - "label": "Upscaler Model", - "value": "RealESRGAN_x2plus.pth" + "value": false }, "tile_size": { "name": "tile_size", "label": "", - "value": 400 + "value": 0 + }, + "fp32": { + "name": "fp32", + "label": "", + "value": false } }, - "isOpen": true, + "isOpen": false, "isIntermediate": true, "useCache": true }, "position": { - "x": 717.3863693661265, - "y": 1721.9215053134815 + "x": 1650, + "y": 1675 } }, { - "id": "1d887701-df21-4966-ae6e-a7d82307d7bd", + "id": "3ed9b2ef-f4ec-40a7-94db-92e63b583ec0", "type": "invocation", "data": { - "id": "1d887701-df21-4966-ae6e-a7d82307d7bd", - "version": "1.3.2", + "id": "3ed9b2ef-f4ec-40a7-94db-92e63b583ec0", + "version": "1.3.0", "nodePack": "invokeai", "label": "", "notes": "", - "type": "canny_image_processor", + "type": "l2i", "inputs": { "board": { "name": "board", @@ -190,38 +134,37 @@ "name": "metadata", "label": "" }, - "image": { - "name": "image", + "latents": { + "name": "latents", "label": "" }, - "detect_resolution": { - "name": "detect_resolution", - "label": "", - "value": 512 + "vae": { + "name": "vae", + "label": "" }, - "image_resolution": { - "name": "image_resolution", + "tiled": { + "name": "tiled", "label": "", - "value": 512 + "value": false }, - "low_threshold": { - "name": "low_threshold", + "tile_size": { + "name": "tile_size", "label": "", - "value": 100 + "value": 0 }, - "high_threshold": { - "name": "high_threshold", + "fp32": { + "name": "fp32", "label": "", - "value": 200 + "value": false } }, "isOpen": true, - "isIntermediate": true, + "isIntermediate": false, "useCache": true }, "position": { - "x": 1200, - "y": 1900 + "x": 2559.4751127537957, + "y": 1246.6000376741406 } }, { @@ -229,7 +172,7 @@ "type": "invocation", "data": { "id": "ca1d020c-89a8-4958-880a-016d28775cfa", - "version": "1.1.1", + "version": "1.1.2", "nodePack": "invokeai", "label": "", "notes": "", @@ -285,6 +228,193 @@ "y": 1902.9649340196056 } }, + { + "id": "1d887701-df21-4966-ae6e-a7d82307d7bd", + "type": "invocation", + "data": { + "id": "1d887701-df21-4966-ae6e-a7d82307d7bd", + "version": "1.3.3", + "nodePack": "invokeai", + "label": "", + "notes": "", + "type": "canny_image_processor", + "inputs": { + "board": { + "name": "board", + "label": "" + }, + "metadata": { + "name": "metadata", + "label": "" + }, + "image": { + "name": "image", + "label": "" + }, + "detect_resolution": { + "name": "detect_resolution", + "label": "", + "value": 512 + }, + "image_resolution": { + "name": "image_resolution", + "label": "", + "value": 512 + }, + "low_threshold": { + "name": "low_threshold", + "label": "", + "value": 100 + }, + "high_threshold": { + "name": "high_threshold", + "label": "", + "value": 200 + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": 1200, + "y": 1900 + } + }, + { + "id": "d8ace142-c05f-4f1d-8982-88dc7473958d", + "type": "invocation", + "data": { + "id": "d8ace142-c05f-4f1d-8982-88dc7473958d", + "version": "1.0.3", + "nodePack": "invokeai", + "label": "", + "notes": "", + "type": "main_model_loader", + "inputs": { + "model": { + "name": "model", + "label": "", + "value": { + "key": "5cd43ca0-dd0a-418d-9f7e-35b2b9d5e106", + "hash": "blake3:6987f323017f597213cc3264250edf57056d21a40a0a85d83a1a33a7d44dc41a", + "name": "Deliberate_v5", + "base": "sd-1", + "type": "main" + } + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": 700, + "y": 1375 + } + }, + { + "id": "e8bf67fe-67de-4227-87eb-79e86afdfc74", + "type": "invocation", + "data": { + "id": "e8bf67fe-67de-4227-87eb-79e86afdfc74", + "version": "1.2.0", + "nodePack": "invokeai", + "label": "", + "notes": "", + "type": "compel", + "inputs": { + "prompt": { + "name": "prompt", + "label": "", + "value": "" + }, + "clip": { + "name": "clip", + "label": "" + }, + "mask": { + "name": "mask", + "label": "" + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": 1250, + "y": 1500 + } + }, + { + "id": "771bdf6a-0813-4099-a5d8-921a138754d4", + "type": "invocation", + "data": { + "id": "771bdf6a-0813-4099-a5d8-921a138754d4", + "version": "1.0.2", + "nodePack": "invokeai", + "label": "", + "notes": "", + "type": "image", + "inputs": { + "image": { + "name": "image", + "label": "Image To Upscale" + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": 344.5593065887157, + "y": 1698.161491368619 + } + }, + { + "id": "f7564dd2-9539-47f2-ac13-190804461f4e", + "type": "invocation", + "data": { + "id": "f7564dd2-9539-47f2-ac13-190804461f4e", + "version": "1.3.2", + "nodePack": "invokeai", + "label": "", + "notes": "", + "type": "esrgan", + "inputs": { + "board": { + "name": "board", + "label": "" + }, + "metadata": { + "name": "metadata", + "label": "" + }, + "image": { + "name": "image", + "label": "" + }, + "model_name": { + "name": "model_name", + "label": "Upscaler Model", + "value": "RealESRGAN_x2plus.pth" + }, + "tile_size": { + "name": "tile_size", + "label": "", + "value": 400 + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": 717.3863693661265, + "y": 1721.9215053134815 + } + }, { "id": "f50624ce-82bf-41d0-bdf7-8aab11a80d48", "type": "invocation", @@ -413,122 +543,6 @@ "y": 1232.6219060454753 } }, - { - "id": "3ed9b2ef-f4ec-40a7-94db-92e63b583ec0", - "type": "invocation", - "data": { - "id": "3ed9b2ef-f4ec-40a7-94db-92e63b583ec0", - "version": "1.2.2", - "nodePack": "invokeai", - "label": "", - "notes": "", - "type": "l2i", - "inputs": { - "board": { - "name": "board", - "label": "" - }, - "metadata": { - "name": "metadata", - "label": "" - }, - "latents": { - "name": "latents", - "label": "" - }, - "vae": { - "name": "vae", - "label": "" - }, - "tiled": { - "name": "tiled", - "label": "", - "value": false - }, - "fp32": { - "name": "fp32", - "label": "", - "value": false - } - }, - "isOpen": true, - "isIntermediate": false, - "useCache": true - }, - "position": { - "x": 2559.4751127537957, - "y": 1246.6000376741406 - } - }, - { - "id": "5ca498a4-c8c8-4580-a396-0c984317205d", - "type": "invocation", - "data": { - "id": "5ca498a4-c8c8-4580-a396-0c984317205d", - "version": "1.0.2", - "nodePack": "invokeai", - "label": "", - "notes": "", - "type": "i2l", - "inputs": { - "image": { - "name": "image", - "label": "" - }, - "vae": { - "name": "vae", - "label": "" - }, - "tiled": { - "name": "tiled", - "label": "", - "value": false - }, - "fp32": { - "name": "fp32", - "label": "", - "value": false - } - }, - "isOpen": false, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": 1650, - "y": 1675 - } - }, - { - "id": "63b6ab7e-5b05-4d1b-a3b1-42d8e53ce16b", - "type": "invocation", - "data": { - "id": "63b6ab7e-5b05-4d1b-a3b1-42d8e53ce16b", - "version": "1.1.1", - "nodePack": "invokeai", - "label": "", - "notes": "", - "type": "compel", - "inputs": { - "prompt": { - "name": "prompt", - "label": "", - "value": "" - }, - "clip": { - "name": "clip", - "label": "" - } - }, - "isOpen": true, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": 1250, - "y": 1200 - } - }, { "id": "eb8f6f8a-c7b1-4914-806e-045ee2717a35", "type": "invocation", diff --git a/invokeai/app/services/workflow_records/default_workflows/Face Detailer with IP-Adapter & Canny (See Note in Details).json b/invokeai/app/services/workflow_records/default_workflows/Face Detailer with IP-Adapter & Canny (See Note in Details).json index 8c7dcee30c..481ba85e64 100644 --- a/invokeai/app/services/workflow_records/default_workflows/Face Detailer with IP-Adapter & Canny (See Note in Details).json +++ b/invokeai/app/services/workflow_records/default_workflows/Face Detailer with IP-Adapter & Canny (See Note in Details).json @@ -2,7 +2,7 @@ "name": "Face Detailer with IP-Adapter & Canny (See Note in Details)", "author": "kosmoskatten", "description": "A workflow to add detail to and improve faces. This workflow is most effective when used with a model that creates realistic outputs. ", - "version": "2.0.0", + "version": "2.1.0", "contact": "invoke@invoke.ai", "tags": "face detailer, IP-Adapter, Canny", "notes": "Set this image as the blur mask: https://i.imgur.com/Gxi61zP.png", @@ -37,16 +37,219 @@ } ], "meta": { - "category": "default", - "version": "3.0.0" + "version": "3.0.0", + "category": "default" }, "nodes": [ { - "id": "44f2c190-eb03-460d-8d11-a94d13b33f19", + "id": "c6359181-6479-40ec-bf3a-b7e8451683b8", "type": "invocation", "data": { - "id": "44f2c190-eb03-460d-8d11-a94d13b33f19", - "version": "1.1.1", + "id": "c6359181-6479-40ec-bf3a-b7e8451683b8", + "version": "1.0.3", + "label": "", + "notes": "", + "type": "main_model_loader", + "inputs": { + "model": { + "name": "model", + "label": "" + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": 2031.5518710051792, + "y": -492.1742944307074 + } + }, + { + "id": "8fe598c6-d447-44fa-a165-4975af77d080", + "type": "invocation", + "data": { + "id": "8fe598c6-d447-44fa-a165-4975af77d080", + "version": "1.3.3", + "nodePack": "invokeai", + "label": "", + "notes": "", + "type": "canny_image_processor", + "inputs": { + "board": { + "name": "board", + "label": "" + }, + "metadata": { + "name": "metadata", + "label": "" + }, + "image": { + "name": "image", + "label": "" + }, + "detect_resolution": { + "name": "detect_resolution", + "label": "", + "value": 512 + }, + "image_resolution": { + "name": "image_resolution", + "label": "", + "value": 512 + }, + "low_threshold": { + "name": "low_threshold", + "label": "", + "value": 100 + }, + "high_threshold": { + "name": "high_threshold", + "label": "", + "value": 200 + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": 3519.4131037388597, + "y": 576.7946795840575 + } + }, + { + "id": "f60b6161-8f26-42f6-89ff-545e6011e501", + "type": "invocation", + "data": { + "id": "f60b6161-8f26-42f6-89ff-545e6011e501", + "version": "1.1.2", + "nodePack": "invokeai", + "label": "", + "notes": "", + "type": "controlnet", + "inputs": { + "image": { + "name": "image", + "label": "" + }, + "control_model": { + "name": "control_model", + "label": "Control Model (select canny)", + "value": { + "key": "5bdaacf7-a7a3-4fb8-b394-cc0ffbb8941d", + "hash": "blake3:260c7f8e10aefea9868cfc68d89970e91033bd37132b14b903e70ee05ebf530e", + "name": "sd-controlnet-canny", + "base": "sd-1", + "type": "controlnet" + } + }, + "control_weight": { + "name": "control_weight", + "label": "", + "value": 0.5 + }, + "begin_step_percent": { + "name": "begin_step_percent", + "label": "", + "value": 0 + }, + "end_step_percent": { + "name": "end_step_percent", + "label": "", + "value": 0.5 + }, + "control_mode": { + "name": "control_mode", + "label": "", + "value": "balanced" + }, + "resize_mode": { + "name": "resize_mode", + "label": "", + "value": "just_resize" + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": 3950, + "y": 150 + } + }, + { + "id": "22b750db-b85e-486b-b278-ac983e329813", + "type": "invocation", + "data": { + "id": "22b750db-b85e-486b-b278-ac983e329813", + "version": "1.4.1", + "nodePack": "invokeai", + "label": "", + "notes": "", + "type": "ip_adapter", + "inputs": { + "image": { + "name": "image", + "label": "" + }, + "ip_adapter_model": { + "name": "ip_adapter_model", + "label": "IP-Adapter Model (select IP Adapter Face)", + "value": { + "key": "1cc210bb-4d0a-4312-b36c-b5d46c43768e", + "hash": "blake3:3d669dffa7471b357b4df088b99ffb6bf4d4383d5e0ef1de5ec1c89728a3d5a5", + "name": "ip_adapter_sd15", + "base": "sd-1", + "type": "ip_adapter" + } + }, + "clip_vision_model": { + "name": "clip_vision_model", + "label": "", + "value": "ViT-H" + }, + "weight": { + "name": "weight", + "label": "", + "value": 0.5 + }, + "method": { + "name": "method", + "label": "", + "value": "full" + }, + "begin_step_percent": { + "name": "begin_step_percent", + "label": "", + "value": 0 + }, + "end_step_percent": { + "name": "end_step_percent", + "label": "", + "value": 0.8 + }, + "mask": { + "name": "mask", + "label": "" + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": 3575, + "y": -200 + } + }, + { + "id": "f4d15b64-c4a6-42a5-90fc-e4ed07a0ca65", + "type": "invocation", + "data": { + "id": "f4d15b64-c4a6-42a5-90fc-e4ed07a0ca65", + "version": "1.2.0", "nodePack": "invokeai", "label": "", "notes": "", @@ -60,6 +263,140 @@ "clip": { "name": "clip", "label": "" + }, + "mask": { + "name": "mask", + "label": "" + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": 2550, + "y": -525 + } + }, + { + "id": "2224ed72-2453-4252-bd89-3085240e0b6f", + "type": "invocation", + "data": { + "id": "2224ed72-2453-4252-bd89-3085240e0b6f", + "version": "1.3.0", + "nodePack": "invokeai", + "label": "", + "notes": "", + "type": "l2i", + "inputs": { + "board": { + "name": "board", + "label": "" + }, + "metadata": { + "name": "metadata", + "label": "" + }, + "latents": { + "name": "latents", + "label": "" + }, + "vae": { + "name": "vae", + "label": "" + }, + "tiled": { + "name": "tiled", + "label": "", + "value": false + }, + "tile_size": { + "name": "tile_size", + "label": "", + "value": 0 + }, + "fp32": { + "name": "fp32", + "label": "", + "value": true + } + }, + "isOpen": true, + "isIntermediate": false, + "useCache": true + }, + "position": { + "x": 4980.1395106966565, + "y": -255.9158921745602 + } + }, + { + "id": "de8b1a48-a2e4-42ca-90bb-66058bffd534", + "type": "invocation", + "data": { + "id": "de8b1a48-a2e4-42ca-90bb-66058bffd534", + "version": "1.1.0", + "nodePack": "invokeai", + "label": "", + "notes": "", + "type": "i2l", + "inputs": { + "image": { + "name": "image", + "label": "" + }, + "vae": { + "name": "vae", + "label": "" + }, + "tiled": { + "name": "tiled", + "label": "", + "value": false + }, + "tile_size": { + "name": "tile_size", + "label": "", + "value": 0 + }, + "fp32": { + "name": "fp32", + "label": "", + "value": true + } + }, + "isOpen": false, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": 3100, + "y": -275 + } + }, + { + "id": "44f2c190-eb03-460d-8d11-a94d13b33f19", + "type": "invocation", + "data": { + "id": "44f2c190-eb03-460d-8d11-a94d13b33f19", + "version": "1.2.0", + "nodePack": "invokeai", + "label": "", + "notes": "", + "type": "compel", + "inputs": { + "prompt": { + "name": "prompt", + "label": "", + "value": "" + }, + "clip": { + "name": "clip", + "label": "" + }, + "mask": { + "name": "mask", + "label": "" } }, "isOpen": true, @@ -251,45 +588,6 @@ "y": 0 } }, - { - "id": "de8b1a48-a2e4-42ca-90bb-66058bffd534", - "type": "invocation", - "data": { - "id": "de8b1a48-a2e4-42ca-90bb-66058bffd534", - "version": "1.0.2", - "nodePack": "invokeai", - "label": "", - "notes": "", - "type": "i2l", - "inputs": { - "image": { - "name": "image", - "label": "" - }, - "vae": { - "name": "vae", - "label": "" - }, - "tiled": { - "name": "tiled", - "label": "", - "value": false - }, - "fp32": { - "name": "fp32", - "label": "", - "value": true - } - }, - "isOpen": false, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": 3100, - "y": -275 - } - }, { "id": "bd06261d-a74a-4d1f-8374-745ed6194bc2", "type": "invocation", @@ -418,53 +716,6 @@ "y": -175 } }, - { - "id": "2224ed72-2453-4252-bd89-3085240e0b6f", - "type": "invocation", - "data": { - "id": "2224ed72-2453-4252-bd89-3085240e0b6f", - "version": "1.2.2", - "nodePack": "invokeai", - "label": "", - "notes": "", - "type": "l2i", - "inputs": { - "board": { - "name": "board", - "label": "" - }, - "metadata": { - "name": "metadata", - "label": "" - }, - "latents": { - "name": "latents", - "label": "" - }, - "vae": { - "name": "vae", - "label": "" - }, - "tiled": { - "name": "tiled", - "label": "", - "value": false - }, - "fp32": { - "name": "fp32", - "label": "", - "value": true - } - }, - "isOpen": true, - "isIntermediate": false, - "useCache": true - }, - "position": { - "x": 4980.1395106966565, - "y": -255.9158921745602 - } - }, { "id": "2974e5b3-3d41-4b6f-9953-cd21e8f3a323", "type": "invocation", @@ -692,201 +943,6 @@ "y": -275 } }, - { - "id": "f4d15b64-c4a6-42a5-90fc-e4ed07a0ca65", - "type": "invocation", - "data": { - "id": "f4d15b64-c4a6-42a5-90fc-e4ed07a0ca65", - "version": "1.1.1", - "nodePack": "invokeai", - "label": "", - "notes": "", - "type": "compel", - "inputs": { - "prompt": { - "name": "prompt", - "label": "", - "value": "" - }, - "clip": { - "name": "clip", - "label": "" - } - }, - "isOpen": true, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": 2550, - "y": -525 - } - }, - { - "id": "22b750db-b85e-486b-b278-ac983e329813", - "type": "invocation", - "data": { - "id": "22b750db-b85e-486b-b278-ac983e329813", - "version": "1.2.2", - "nodePack": "invokeai", - "label": "", - "notes": "", - "type": "ip_adapter", - "inputs": { - "image": { - "name": "image", - "label": "" - }, - "ip_adapter_model": { - "name": "ip_adapter_model", - "label": "IP-Adapter Model (select IP Adapter Face)", - "value": { - "key": "1cc210bb-4d0a-4312-b36c-b5d46c43768e", - "hash": "blake3:3d669dffa7471b357b4df088b99ffb6bf4d4383d5e0ef1de5ec1c89728a3d5a5", - "name": "ip_adapter_sd15", - "base": "sd-1", - "type": "ip_adapter" - } - }, - "weight": { - "name": "weight", - "label": "", - "value": 0.5 - }, - "begin_step_percent": { - "name": "begin_step_percent", - "label": "", - "value": 0 - }, - "end_step_percent": { - "name": "end_step_percent", - "label": "", - "value": 0.8 - } - }, - "isOpen": true, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": 3575, - "y": -200 - } - }, - { - "id": "f60b6161-8f26-42f6-89ff-545e6011e501", - "type": "invocation", - "data": { - "id": "f60b6161-8f26-42f6-89ff-545e6011e501", - "version": "1.1.1", - "nodePack": "invokeai", - "label": "", - "notes": "", - "type": "controlnet", - "inputs": { - "image": { - "name": "image", - "label": "" - }, - "control_model": { - "name": "control_model", - "label": "Control Model (select canny)", - "value": { - "key": "5bdaacf7-a7a3-4fb8-b394-cc0ffbb8941d", - "hash": "blake3:260c7f8e10aefea9868cfc68d89970e91033bd37132b14b903e70ee05ebf530e", - "name": "sd-controlnet-canny", - "base": "sd-1", - "type": "controlnet" - } - }, - "control_weight": { - "name": "control_weight", - "label": "", - "value": 0.5 - }, - "begin_step_percent": { - "name": "begin_step_percent", - "label": "", - "value": 0 - }, - "end_step_percent": { - "name": "end_step_percent", - "label": "", - "value": 0.5 - }, - "control_mode": { - "name": "control_mode", - "label": "", - "value": "balanced" - }, - "resize_mode": { - "name": "resize_mode", - "label": "", - "value": "just_resize" - } - }, - "isOpen": true, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": 3950, - "y": 150 - } - }, - { - "id": "8fe598c6-d447-44fa-a165-4975af77d080", - "type": "invocation", - "data": { - "id": "8fe598c6-d447-44fa-a165-4975af77d080", - "version": "1.3.2", - "nodePack": "invokeai", - "label": "", - "notes": "", - "type": "canny_image_processor", - "inputs": { - "board": { - "name": "board", - "label": "" - }, - "metadata": { - "name": "metadata", - "label": "" - }, - "image": { - "name": "image", - "label": "" - }, - "detect_resolution": { - "name": "detect_resolution", - "label": "", - "value": 512 - }, - "image_resolution": { - "name": "image_resolution", - "label": "", - "value": 512 - }, - "low_threshold": { - "name": "low_threshold", - "label": "", - "value": 100 - }, - "high_threshold": { - "name": "high_threshold", - "label": "", - "value": 200 - } - }, - "isOpen": true, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": 3519.4131037388597, - "y": 576.7946795840575 - } - }, { "id": "4bd4ae80-567f-4366-b8c6-3bb06f4fb46a", "type": "invocation", @@ -1035,30 +1091,6 @@ "x": 2578.2364832140506, "y": 78.7948456497351 } - }, - { - "id": "c6359181-6479-40ec-bf3a-b7e8451683b8", - "type": "invocation", - "data": { - "id": "c6359181-6479-40ec-bf3a-b7e8451683b8", - "version": "1.0.2", - "label": "", - "notes": "", - "type": "main_model_loader", - "inputs": { - "model": { - "name": "model", - "label": "" - } - }, - "isOpen": true, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": 2031.5518710051792, - "y": -492.1742944307074 - } } ], "edges": [ diff --git a/invokeai/app/services/workflow_records/default_workflows/Multi ControlNet (Canny & Depth).json b/invokeai/app/services/workflow_records/default_workflows/Multi ControlNet (Canny & Depth).json index d859094216..3ff99b5eb3 100644 --- a/invokeai/app/services/workflow_records/default_workflows/Multi ControlNet (Canny & Depth).json +++ b/invokeai/app/services/workflow_records/default_workflows/Multi ControlNet (Canny & Depth).json @@ -2,7 +2,7 @@ "name": "Multi ControlNet (Canny & Depth)", "author": "InvokeAI", "description": "A sample workflow using canny & depth ControlNets to guide the generation process. ", - "version": "2.0.0", + "version": "2.1.0", "contact": "invoke@invoke.ai", "tags": "ControlNet, canny, depth", "notes": "", @@ -37,140 +37,104 @@ } ], "meta": { - "category": "default", - "version": "3.0.0" + "version": "3.0.0", + "category": "default" }, "nodes": [ { - "id": "8e860e51-5045-456e-bf04-9a62a2a5c49e", + "id": "9db25398-c869-4a63-8815-c6559341ef12", "type": "invocation", "data": { - "id": "8e860e51-5045-456e-bf04-9a62a2a5c49e", - "version": "1.0.2", + "id": "9db25398-c869-4a63-8815-c6559341ef12", + "version": "1.3.0", "nodePack": "invokeai", "label": "", "notes": "", - "type": "image", + "type": "l2i", "inputs": { - "image": { - "name": "image", - "label": "Depth Input Image" - } - }, - "isOpen": true, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": 3666.135718057363, - "y": 186.66887319822808 - } - }, - { - "id": "a33199c2-8340-401e-b8a2-42ffa875fc1c", - "type": "invocation", - "data": { - "id": "a33199c2-8340-401e-b8a2-42ffa875fc1c", - "version": "1.1.1", - "nodePack": "invokeai", - "label": "", - "notes": "", - "type": "controlnet", - "inputs": { - "image": { - "name": "image", + "board": { + "name": "board", "label": "" }, - "control_model": { - "name": "control_model", - "label": "Control Model (select depth)", - "value": { - "key": "87e8855c-671f-4c9e-bbbb-8ed47ccb4aac", - "hash": "blake3:2550bf22a53942dfa28ab2fed9d10d80851112531f44d977168992edf9d0534c", - "name": "control_v11f1p_sd15_depth", - "base": "sd-1", - "type": "controlnet" - } + "metadata": { + "name": "metadata", + "label": "" }, - "control_weight": { - "name": "control_weight", + "latents": { + "name": "latents", + "label": "" + }, + "vae": { + "name": "vae", + "label": "" + }, + "tiled": { + "name": "tiled", "label": "", - "value": 1 + "value": false }, - "begin_step_percent": { - "name": "begin_step_percent", + "tile_size": { + "name": "tile_size", "label": "", "value": 0 }, - "end_step_percent": { - "name": "end_step_percent", + "fp32": { + "name": "fp32", "label": "", - "value": 1 - }, - "control_mode": { - "name": "control_mode", - "label": "", - "value": "balanced" - }, - "resize_mode": { - "name": "resize_mode", - "label": "", - "value": "just_resize" + "value": false } }, "isOpen": true, - "isIntermediate": true, + "isIntermediate": false, "useCache": true }, "position": { - "x": 4477.604342844504, - "y": -49.39005411272677 - } - }, - { - "id": "273e3f96-49ea-4dc5-9d5b-9660390f14e1", - "type": "invocation", - "data": { - "id": "273e3f96-49ea-4dc5-9d5b-9660390f14e1", - "version": "1.1.1", - "nodePack": "invokeai", - "label": "", - "notes": "", - "type": "compel", - "inputs": { - "prompt": { - "name": "prompt", - "label": "Negative Prompt", - "value": "" - }, - "clip": { - "name": "clip", - "label": "" - } - }, - "isOpen": true, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": 4075, + "x": 5675, "y": -825 } }, { - "id": "54486974-835b-4d81-8f82-05f9f32ce9e9", + "id": "c826ba5e-9676-4475-b260-07b85e88753c", "type": "invocation", "data": { - "id": "54486974-835b-4d81-8f82-05f9f32ce9e9", - "version": "1.0.2", + "id": "c826ba5e-9676-4475-b260-07b85e88753c", + "version": "1.3.3", "nodePack": "invokeai", "label": "", "notes": "", - "type": "main_model_loader", + "type": "canny_image_processor", "inputs": { - "model": { - "name": "model", + "board": { + "name": "board", "label": "" + }, + "metadata": { + "name": "metadata", + "label": "" + }, + "image": { + "name": "image", + "label": "" + }, + "detect_resolution": { + "name": "detect_resolution", + "label": "", + "value": 512 + }, + "image_resolution": { + "name": "image_resolution", + "label": "", + "value": 512 + }, + "low_threshold": { + "name": "low_threshold", + "label": "", + "value": 100 + }, + "high_threshold": { + "name": "high_threshold", + "label": "", + "value": 200 } }, "isOpen": true, @@ -178,29 +142,52 @@ "useCache": true }, "position": { - "x": 3600, - "y": -1000 + "x": 4095.757337055795, + "y": -455.63440891935863 } }, { - "id": "7ce68934-3419-42d4-ac70-82cfc9397306", + "id": "018b1214-c2af-43a7-9910-fb687c6726d7", "type": "invocation", "data": { - "id": "7ce68934-3419-42d4-ac70-82cfc9397306", - "version": "1.1.1", + "id": "018b1214-c2af-43a7-9910-fb687c6726d7", + "version": "1.2.4", "nodePack": "invokeai", "label": "", "notes": "", - "type": "compel", + "type": "midas_depth_image_processor", "inputs": { - "prompt": { - "name": "prompt", - "label": "Positive Prompt", - "value": "" - }, - "clip": { - "name": "clip", + "board": { + "name": "board", "label": "" + }, + "metadata": { + "name": "metadata", + "label": "" + }, + "image": { + "name": "image", + "label": "" + }, + "a_mult": { + "name": "a_mult", + "label": "", + "value": 2 + }, + "bg_th": { + "name": "bg_th", + "label": "", + "value": 0.1 + }, + "detect_resolution": { + "name": "detect_resolution", + "label": "", + "value": 512 + }, + "image_resolution": { + "name": "image_resolution", + "label": "", + "value": 512 } }, "isOpen": true, @@ -208,8 +195,8 @@ "useCache": true }, "position": { - "x": 4075, - "y": -1125 + "x": 4082.783145980783, + "y": 0.01629251229994111 } }, { @@ -217,7 +204,7 @@ "type": "invocation", "data": { "id": "d204d184-f209-4fae-a0a1-d152800844e1", - "version": "1.1.1", + "version": "1.1.2", "nodePack": "invokeai", "label": "", "notes": "", @@ -273,6 +260,185 @@ "y": -618.4221638099414 } }, + { + "id": "7ce68934-3419-42d4-ac70-82cfc9397306", + "type": "invocation", + "data": { + "id": "7ce68934-3419-42d4-ac70-82cfc9397306", + "version": "1.2.0", + "nodePack": "invokeai", + "label": "", + "notes": "", + "type": "compel", + "inputs": { + "prompt": { + "name": "prompt", + "label": "Positive Prompt", + "value": "" + }, + "clip": { + "name": "clip", + "label": "" + }, + "mask": { + "name": "mask", + "label": "" + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": 4075, + "y": -1125 + } + }, + { + "id": "54486974-835b-4d81-8f82-05f9f32ce9e9", + "type": "invocation", + "data": { + "id": "54486974-835b-4d81-8f82-05f9f32ce9e9", + "version": "1.0.3", + "nodePack": "invokeai", + "label": "", + "notes": "", + "type": "main_model_loader", + "inputs": { + "model": { + "name": "model", + "label": "" + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": 3600, + "y": -1000 + } + }, + { + "id": "273e3f96-49ea-4dc5-9d5b-9660390f14e1", + "type": "invocation", + "data": { + "id": "273e3f96-49ea-4dc5-9d5b-9660390f14e1", + "version": "1.2.0", + "nodePack": "invokeai", + "label": "", + "notes": "", + "type": "compel", + "inputs": { + "prompt": { + "name": "prompt", + "label": "Negative Prompt", + "value": "" + }, + "clip": { + "name": "clip", + "label": "" + }, + "mask": { + "name": "mask", + "label": "" + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": 4075, + "y": -825 + } + }, + { + "id": "a33199c2-8340-401e-b8a2-42ffa875fc1c", + "type": "invocation", + "data": { + "id": "a33199c2-8340-401e-b8a2-42ffa875fc1c", + "version": "1.1.2", + "nodePack": "invokeai", + "label": "", + "notes": "", + "type": "controlnet", + "inputs": { + "image": { + "name": "image", + "label": "" + }, + "control_model": { + "name": "control_model", + "label": "Control Model (select depth)", + "value": { + "key": "87e8855c-671f-4c9e-bbbb-8ed47ccb4aac", + "hash": "blake3:2550bf22a53942dfa28ab2fed9d10d80851112531f44d977168992edf9d0534c", + "name": "control_v11f1p_sd15_depth", + "base": "sd-1", + "type": "controlnet" + } + }, + "control_weight": { + "name": "control_weight", + "label": "", + "value": 1 + }, + "begin_step_percent": { + "name": "begin_step_percent", + "label": "", + "value": 0 + }, + "end_step_percent": { + "name": "end_step_percent", + "label": "", + "value": 1 + }, + "control_mode": { + "name": "control_mode", + "label": "", + "value": "balanced" + }, + "resize_mode": { + "name": "resize_mode", + "label": "", + "value": "just_resize" + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": 4477.604342844504, + "y": -49.39005411272677 + } + }, + { + "id": "8e860e51-5045-456e-bf04-9a62a2a5c49e", + "type": "invocation", + "data": { + "id": "8e860e51-5045-456e-bf04-9a62a2a5c49e", + "version": "1.0.2", + "nodePack": "invokeai", + "label": "", + "notes": "", + "type": "image", + "inputs": { + "image": { + "name": "image", + "label": "Depth Input Image" + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": 3666.135718057363, + "y": 186.66887319822808 + } + }, { "id": "c4b23e64-7986-40c4-9cad-46327b12e204", "type": "invocation", @@ -322,159 +488,6 @@ "y": -575 } }, - { - "id": "018b1214-c2af-43a7-9910-fb687c6726d7", - "type": "invocation", - "data": { - "id": "018b1214-c2af-43a7-9910-fb687c6726d7", - "version": "1.2.3", - "nodePack": "invokeai", - "label": "", - "notes": "", - "type": "midas_depth_image_processor", - "inputs": { - "board": { - "name": "board", - "label": "" - }, - "metadata": { - "name": "metadata", - "label": "" - }, - "image": { - "name": "image", - "label": "" - }, - "a_mult": { - "name": "a_mult", - "label": "", - "value": 2 - }, - "bg_th": { - "name": "bg_th", - "label": "", - "value": 0.1 - }, - "detect_resolution": { - "name": "detect_resolution", - "label": "", - "value": 512 - }, - "image_resolution": { - "name": "image_resolution", - "label": "", - "value": 512 - } - }, - "isOpen": true, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": 4082.783145980783, - "y": 0.01629251229994111 - } - }, - { - "id": "c826ba5e-9676-4475-b260-07b85e88753c", - "type": "invocation", - "data": { - "id": "c826ba5e-9676-4475-b260-07b85e88753c", - "version": "1.3.2", - "nodePack": "invokeai", - "label": "", - "notes": "", - "type": "canny_image_processor", - "inputs": { - "board": { - "name": "board", - "label": "" - }, - "metadata": { - "name": "metadata", - "label": "" - }, - "image": { - "name": "image", - "label": "" - }, - "detect_resolution": { - "name": "detect_resolution", - "label": "", - "value": 512 - }, - "image_resolution": { - "name": "image_resolution", - "label": "", - "value": 512 - }, - "low_threshold": { - "name": "low_threshold", - "label": "", - "value": 100 - }, - "high_threshold": { - "name": "high_threshold", - "label": "", - "value": 200 - } - }, - "isOpen": true, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": 4095.757337055795, - "y": -455.63440891935863 - } - }, - { - "id": "9db25398-c869-4a63-8815-c6559341ef12", - "type": "invocation", - "data": { - "id": "9db25398-c869-4a63-8815-c6559341ef12", - "version": "1.2.2", - "nodePack": "invokeai", - "label": "", - "notes": "", - "type": "l2i", - "inputs": { - "board": { - "name": "board", - "label": "" - }, - "metadata": { - "name": "metadata", - "label": "" - }, - "latents": { - "name": "latents", - "label": "" - }, - "vae": { - "name": "vae", - "label": "" - }, - "tiled": { - "name": "tiled", - "label": "", - "value": false - }, - "fp32": { - "name": "fp32", - "label": "", - "value": false - } - }, - "isOpen": true, - "isIntermediate": false, - "useCache": true - }, - "position": { - "x": 5675, - "y": -825 - } - }, { "id": "ac481b7f-08bf-4a9d-9e0c-3a82ea5243ce", "type": "invocation", diff --git a/invokeai/app/services/workflow_records/default_workflows/MultiDiffusion SDXL (Beta).json b/invokeai/app/services/workflow_records/default_workflows/MultiDiffusion SDXL (Beta).json new file mode 100644 index 0000000000..b2842315c4 --- /dev/null +++ b/invokeai/app/services/workflow_records/default_workflows/MultiDiffusion SDXL (Beta).json @@ -0,0 +1,2181 @@ +{ + "name": "MultiDiffusion SDXL (Beta)", + "author": "Invoke", + "description": "A workflow to upscale an input image with tiled upscaling, using SDXL based models.", + "version": "1.0.0", + "contact": "invoke@invoke.ai", + "tags": "tiled, upscaling, sdxl", + "notes": "", + "exposedFields": [ + { + "nodeId": "1ba845a6-eb88-49a1-a490-5fe6754f3ec9", + "fieldName": "value" + }, + { + "nodeId": "c3b60a50-8039-4924-90e3-8c608e1fecb5", + "fieldName": "board" + }, + { + "nodeId": "5ca87ace-edf9-49c7-a424-cd42416b86a7", + "fieldName": "image" + }, + { + "nodeId": "1dd915a3-6756-48ed-b68b-ee3b4bd06c1d", + "fieldName": "a" + }, + { + "nodeId": "696de0e1-cdd2-42e8-abeb-57a926bc6df6", + "fieldName": "a" + }, + { + "nodeId": "bd094e2f-41e5-4b61-9f7b-56cf337d53fa", + "fieldName": "a" + }, + { + "nodeId": "e277e4b7-01cd-4daa-86ab-7bfa3cdcd9fd", + "fieldName": "model" + }, + { + "nodeId": "f0cd0d2f-9614-43f7-9944-a75b8d5ccd65", + "fieldName": "model_name" + }, + { + "nodeId": "c26bff37-4f12-482f-ba45-3a5d729b4c4f", + "fieldName": "value" + }, + { + "nodeId": "f5ca24ee-21c5-4c8c-8d3c-371b5079b086", + "fieldName": "value" + }, + { + "nodeId": "094bc4ed-5c68-4342-84f4-51056c755796", + "fieldName": "value" + }, + { + "nodeId": "100b3143-b3fb-4ff3-bb3c-8d4d3f89ae3a", + "fieldName": "vae_model" + }, + { + "nodeId": "f936ebb3-6902-4df9-a775-6a68bac2da70", + "fieldName": "model" + } + ], + "meta": { + "version": "3.0.0", + "category": "default" + }, + "nodes": [ + { + "id": "f936ebb3-6902-4df9-a775-6a68bac2da70", + "type": "invocation", + "data": { + "id": "f936ebb3-6902-4df9-a775-6a68bac2da70", + "type": "model_identifier", + "version": "1.0.0", + "label": "", + "notes": "", + "isOpen": true, + "isIntermediate": true, + "useCache": true, + "inputs": { + "model": { + "name": "model", + "label": "ControlNet Model - choose xinsir's tile ControlNet", + "value": { + "key": "845b6959-1657-4164-be33-fe0f63ad1752", + "hash": "random:3b602344599a53b4e4c80a2259362e122543e6f9e8e428be76ab910f9368704b", + "name": "controlnet-tile-sdxl-1.0", + "base": "sdxl", + "type": "controlnet" + } + } + } + }, + "position": { + "x": -3983.6167650620723, + "y": -1329.1431151846386 + } + }, + { + "id": "00239057-20d4-4cd2-a010-28727b256ea2", + "type": "invocation", + "data": { + "id": "00239057-20d4-4cd2-a010-28727b256ea2", + "type": "rand_int", + "version": "1.0.1", + "label": "", + "notes": "", + "isOpen": false, + "isIntermediate": true, + "useCache": false, + "inputs": { + "low": { + "name": "low", + "label": "", + "value": 0 + }, + "high": { + "name": "high", + "label": "", + "value": 2147483647 + } + } + }, + "position": { + "x": -4000, + "y": -1800 + } + }, + { + "id": "094bc4ed-5c68-4342-84f4-51056c755796", + "type": "invocation", + "data": { + "id": "094bc4ed-5c68-4342-84f4-51056c755796", + "type": "boolean", + "version": "1.0.1", + "label": "Tiled Option", + "notes": "", + "isOpen": true, + "isIntermediate": true, + "useCache": true, + "inputs": { + "value": { + "name": "value", + "label": "Tiled VAE (Saves VRAM, Color Inconsistency)", + "value": false + } + } + }, + "position": { + "x": -2746.0467136971292, + "y": -2219.070070545694 + } + }, + { + "id": "f5ca24ee-21c5-4c8c-8d3c-371b5079b086", + "type": "invocation", + "data": { + "id": "f5ca24ee-21c5-4c8c-8d3c-371b5079b086", + "type": "string", + "version": "1.0.1", + "label": "", + "notes": "", + "isOpen": true, + "isIntermediate": true, + "useCache": true, + "inputs": { + "value": { + "name": "value", + "label": "Negative Prompt (Optional)", + "value": "" + } + } + }, + "position": { + "x": -3525, + "y": -2525 + } + }, + { + "id": "c26bff37-4f12-482f-ba45-3a5d729b4c4f", + "type": "invocation", + "data": { + "id": "c26bff37-4f12-482f-ba45-3a5d729b4c4f", + "type": "string", + "version": "1.0.1", + "label": "", + "notes": "", + "isOpen": true, + "isIntermediate": true, + "useCache": true, + "inputs": { + "value": { + "name": "value", + "label": "Positive Prompt (Optional)", + "value": "" + } + } + }, + "position": { + "x": -3525, + "y": -2825 + } + }, + { + "id": "6daa9526-382b-491d-964f-f53fc308664f", + "type": "invocation", + "data": { + "id": "6daa9526-382b-491d-964f-f53fc308664f", + "type": "float_math", + "version": "1.0.1", + "label": "", + "notes": "", + "isOpen": false, + "isIntermediate": true, + "useCache": true, + "inputs": { + "operation": { + "name": "operation", + "label": "", + "value": "ADD" + }, + "a": { + "name": "a", + "label": "", + "value": 0.35 + }, + "b": { + "name": "b", + "label": "", + "value": 100 + } + } + }, + "position": { + "x": -3500, + "y": -1450 + } + }, + { + "id": "f1afd295-860f-48b6-a76a-90609bf2cc11", + "type": "invocation", + "data": { + "id": "f1afd295-860f-48b6-a76a-90609bf2cc11", + "type": "float_math", + "version": "1.0.1", + "label": "", + "notes": "", + "isOpen": false, + "isIntermediate": true, + "useCache": true, + "inputs": { + "operation": { + "name": "operation", + "label": "", + "value": "MUL" + }, + "a": { + "name": "a", + "label": "", + "value": 1 + }, + "b": { + "name": "b", + "label": "", + "value": 0.013 + } + } + }, + "position": { + "x": -3500, + "y": -1550 + } + }, + { + "id": "88ae723e-4933-4371-b52d-3ada52a59d36", + "type": "invocation", + "data": { + "id": "88ae723e-4933-4371-b52d-3ada52a59d36", + "type": "float_math", + "version": "1.0.1", + "label": "", + "notes": "", + "isOpen": false, + "isIntermediate": true, + "useCache": true, + "inputs": { + "operation": { + "name": "operation", + "label": "", + "value": "ADD" + }, + "a": { + "name": "a", + "label": "", + "value": 0 + }, + "b": { + "name": "b", + "label": "", + "value": 100 + } + } + }, + "position": { + "x": -3500, + "y": -1500 + } + }, + { + "id": "1dd915a3-6756-48ed-b68b-ee3b4bd06c1d", + "type": "invocation", + "data": { + "id": "1dd915a3-6756-48ed-b68b-ee3b4bd06c1d", + "type": "float_math", + "version": "1.0.1", + "label": "Creativity Input", + "notes": "", + "isOpen": false, + "isIntermediate": true, + "useCache": true, + "inputs": { + "operation": { + "name": "operation", + "label": "", + "value": "MUL" + }, + "a": { + "name": "a", + "label": "Creativity Control (-10 to 10)", + "value": 5 + }, + "b": { + "name": "b", + "label": "", + "value": -1 + } + } + }, + "position": { + "x": -3500, + "y": -2125 + } + }, + { + "id": "c8f5c671-8c87-4d96-a75e-a9937ac6bc03", + "type": "invocation", + "data": { + "id": "c8f5c671-8c87-4d96-a75e-a9937ac6bc03", + "type": "float_math", + "version": "1.0.1", + "label": "", + "notes": "", + "isOpen": false, + "isIntermediate": true, + "useCache": true, + "inputs": { + "operation": { + "name": "operation", + "label": "", + "value": "DIV" + }, + "a": { + "name": "a", + "label": "", + "value": 1 + }, + "b": { + "name": "b", + "label": "", + "value": 100 + } + } + }, + "position": { + "x": -3500, + "y": -1975 + } + }, + { + "id": "14e65dbe-4249-4b25-9a63-3a10cfaeb61c", + "type": "invocation", + "data": { + "id": "14e65dbe-4249-4b25-9a63-3a10cfaeb61c", + "type": "float_math", + "version": "1.0.1", + "label": "", + "notes": "", + "isOpen": false, + "isIntermediate": true, + "useCache": true, + "inputs": { + "operation": { + "name": "operation", + "label": "", + "value": "ADD" + }, + "a": { + "name": "a", + "label": "A", + "value": 0 + }, + "b": { + "name": "b", + "label": "", + "value": 10 + } + } + }, + "position": { + "x": -3500, + "y": -2075 + } + }, + { + "id": "49a8cc12-aa19-48c5-b6b3-04e0b603b384", + "type": "invocation", + "data": { + "id": "49a8cc12-aa19-48c5-b6b3-04e0b603b384", + "type": "float_math", + "version": "1.0.1", + "label": "", + "notes": "", + "isOpen": false, + "isIntermediate": true, + "useCache": true, + "inputs": { + "operation": { + "name": "operation", + "label": "", + "value": "MUL" + }, + "a": { + "name": "a", + "label": "", + "value": 1 + }, + "b": { + "name": "b", + "label": "", + "value": 4.99 + } + } + }, + "position": { + "x": -3500, + "y": -2025 + } + }, + { + "id": "e4d5ca7c-8fcf-4c59-9c58-67194c80dc73", + "type": "invocation", + "data": { + "id": "e4d5ca7c-8fcf-4c59-9c58-67194c80dc73", + "type": "float_math", + "version": "1.0.1", + "label": "", + "notes": "", + "isOpen": false, + "isIntermediate": true, + "useCache": true, + "inputs": { + "operation": { + "name": "operation", + "label": "", + "value": "ADD" + }, + "a": { + "name": "a", + "label": "", + "value": 0 + }, + "b": { + "name": "b", + "label": "", + "value": 1 + } + } + }, + "position": { + "x": -3500, + "y": -1925 + } + }, + { + "id": "696de0e1-cdd2-42e8-abeb-57a926bc6df6", + "type": "invocation", + "data": { + "id": "696de0e1-cdd2-42e8-abeb-57a926bc6df6", + "type": "float_math", + "version": "1.0.1", + "label": "Sharpness Input", + "notes": "", + "isOpen": true, + "isIntermediate": true, + "useCache": true, + "inputs": { + "operation": { + "name": "operation", + "label": "", + "value": "ADD" + }, + "a": { + "name": "a", + "label": "Sharpness Control (-10 to 10)", + "value": 0 + }, + "b": { + "name": "b", + "label": "", + "value": 10 + } + } + }, + "position": { + "x": -4750, + "y": -2275 + } + }, + { + "id": "79390b60-4077-4f94-ad0a-4229cc73ddb2", + "type": "invocation", + "data": { + "id": "79390b60-4077-4f94-ad0a-4229cc73ddb2", + "type": "float_math", + "version": "1.0.1", + "label": "", + "notes": "", + "isOpen": false, + "isIntermediate": true, + "useCache": true, + "inputs": { + "operation": { + "name": "operation", + "label": "", + "value": "MUL" + }, + "a": { + "name": "a", + "label": "", + "value": 1 + }, + "b": { + "name": "b", + "label": "", + "value": 3.75 + } + } + }, + "position": { + "x": -4750, + "y": -2000 + } + }, + { + "id": "4950132a-2d06-4571-b2c0-55cb37a31e9b", + "type": "invocation", + "data": { + "id": "4950132a-2d06-4571-b2c0-55cb37a31e9b", + "type": "float_math", + "version": "1.0.1", + "label": "", + "notes": "", + "isOpen": false, + "isIntermediate": true, + "useCache": true, + "inputs": { + "operation": { + "name": "operation", + "label": "", + "value": "ADD" + }, + "a": { + "name": "a", + "label": "", + "value": 25 + }, + "b": { + "name": "b", + "label": "", + "value": 1 + } + } + }, + "position": { + "x": -4750, + "y": -1950 + } + }, + { + "id": "bd094e2f-41e5-4b61-9f7b-56cf337d53fa", + "type": "invocation", + "data": { + "id": "bd094e2f-41e5-4b61-9f7b-56cf337d53fa", + "type": "float_math", + "version": "1.0.1", + "label": "Structural Input", + "notes": "", + "isOpen": false, + "isIntermediate": true, + "useCache": true, + "inputs": { + "operation": { + "name": "operation", + "label": "", + "value": "ADD" + }, + "a": { + "name": "a", + "label": "Structural Control (-10 to 10)", + "value": 0 + }, + "b": { + "name": "b", + "label": "", + "value": 10 + } + } + }, + "position": { + "x": -3500, + "y": -1700 + } + }, + { + "id": "bc53651f-208b-440c-be30-f93f72ae700e", + "type": "invocation", + "data": { + "id": "bc53651f-208b-440c-be30-f93f72ae700e", + "type": "float_math", + "version": "1.0.1", + "label": "", + "notes": "", + "isOpen": false, + "isIntermediate": true, + "useCache": true, + "inputs": { + "operation": { + "name": "operation", + "label": "", + "value": "MUL" + }, + "a": { + "name": "a", + "label": "", + "value": 1 + }, + "b": { + "name": "b", + "label": "", + "value": 0.025 + } + } + }, + "position": { + "x": -3500, + "y": -1650 + } + }, + { + "id": "67346654-cac0-446a-8cde-9af4b5a029a6", + "type": "invocation", + "data": { + "id": "67346654-cac0-446a-8cde-9af4b5a029a6", + "type": "float_math", + "version": "1.0.1", + "label": "", + "notes": "", + "isOpen": false, + "isIntermediate": true, + "useCache": true, + "inputs": { + "operation": { + "name": "operation", + "label": "", + "value": "ADD" + }, + "a": { + "name": "a", + "label": "", + "value": 0.3 + }, + "b": { + "name": "b", + "label": "", + "value": 1 + } + } + }, + "position": { + "x": -3500, + "y": -1600 + } + }, + { + "id": "6636a27a-f130-4a13-b3e5-50b44e4a566f", + "type": "invocation", + "data": { + "id": "6636a27a-f130-4a13-b3e5-50b44e4a566f", + "type": "collect", + "version": "1.0.0", + "label": "", + "notes": "", + "isOpen": true, + "isIntermediate": true, + "useCache": true, + "inputs": { + "item": { + "name": "item", + "label": "" + } + } + }, + "position": { + "x": -3125, + "y": -1500 + } + }, + { + "id": "b78f53b6-2eae-4956-97b4-7e73768d1491", + "type": "invocation", + "data": { + "id": "b78f53b6-2eae-4956-97b4-7e73768d1491", + "type": "controlnet", + "version": "1.1.2", + "label": "ControlNet (use xinsir's tile ControlNet)", + "notes": "", + "isOpen": true, + "isIntermediate": true, + "useCache": true, + "inputs": { + "image": { + "name": "image", + "label": "" + }, + "control_model": { + "name": "control_model", + "label": "" + }, + "control_weight": { + "name": "control_weight", + "label": "", + "value": 0.6 + }, + "begin_step_percent": { + "name": "begin_step_percent", + "label": "", + "value": 0 + }, + "end_step_percent": { + "name": "end_step_percent", + "label": "", + "value": 0.5 + }, + "control_mode": { + "name": "control_mode", + "label": "", + "value": "balanced" + }, + "resize_mode": { + "name": "resize_mode", + "label": "", + "value": "just_resize" + } + } + }, + "position": { + "x": -3493.4229674963885, + "y": -1359.2223984776113 + } + }, + { + "id": "27215391-b20e-412a-b854-7fa5927f5437", + "type": "invocation", + "data": { + "id": "27215391-b20e-412a-b854-7fa5927f5437", + "type": "sdxl_compel_prompt", + "version": "1.2.0", + "label": "", + "notes": "", + "isOpen": false, + "isIntermediate": true, + "useCache": true, + "inputs": { + "prompt": { + "name": "prompt", + "label": "", + "value": "" + }, + "style": { + "name": "style", + "label": "", + "value": "" + }, + "original_width": { + "name": "original_width", + "label": "", + "value": 4096 + }, + "original_height": { + "name": "original_height", + "label": "", + "value": 4096 + }, + "crop_top": { + "name": "crop_top", + "label": "", + "value": 0 + }, + "crop_left": { + "name": "crop_left", + "label": "", + "value": 0 + }, + "target_width": { + "name": "target_width", + "label": "", + "value": 1024 + }, + "target_height": { + "name": "target_height", + "label": "", + "value": 1024 + }, + "clip": { + "name": "clip", + "label": "" + }, + "clip2": { + "name": "clip2", + "label": "" + }, + "mask": { + "name": "mask", + "label": "" + } + } + }, + "position": { + "x": -3525, + "y": -2300 + } + }, + { + "id": "100b3143-b3fb-4ff3-bb3c-8d4d3f89ae3a", + "type": "invocation", + "data": { + "id": "100b3143-b3fb-4ff3-bb3c-8d4d3f89ae3a", + "type": "vae_loader", + "version": "1.0.3", + "label": "", + "notes": "", + "isOpen": true, + "isIntermediate": true, + "useCache": true, + "inputs": { + "vae_model": { + "name": "vae_model", + "label": "", + "value": { + "key": "4bc2bddf-94d9-4efe-a8e2-5eda28710f4c", + "hash": "random:67e47a77a1fcef9c0f5cd5d889d71c191f07383a0bf587f1849b2bc3f359440a", + "name": "sdxl-vae-fp16-fix", + "base": "sdxl", + "type": "vae" + } + } + } + }, + "position": { + "x": -4000, + "y": -2575 + } + }, + { + "id": "e277e4b7-01cd-4daa-86ab-7bfa3cdcd9fd", + "type": "invocation", + "data": { + "id": "e277e4b7-01cd-4daa-86ab-7bfa3cdcd9fd", + "type": "sdxl_model_loader", + "version": "1.0.3", + "label": "", + "notes": "", + "isOpen": true, + "isIntermediate": true, + "useCache": true, + "inputs": { + "model": { + "name": "model", + "label": "SDXL Model" + } + } + }, + "position": { + "x": -4000, + "y": -2825 + } + }, + { + "id": "6142b69a-323f-4ecd-a7e5-67dc61349c51", + "type": "invocation", + "data": { + "id": "6142b69a-323f-4ecd-a7e5-67dc61349c51", + "type": "sdxl_compel_prompt", + "version": "1.2.0", + "label": "", + "notes": "", + "isOpen": false, + "isIntermediate": true, + "useCache": true, + "inputs": { + "prompt": { + "name": "prompt", + "label": "", + "value": "" + }, + "style": { + "name": "style", + "label": "", + "value": "" + }, + "original_width": { + "name": "original_width", + "label": "", + "value": 4096 + }, + "original_height": { + "name": "original_height", + "label": "", + "value": 4096 + }, + "crop_top": { + "name": "crop_top", + "label": "", + "value": 0 + }, + "crop_left": { + "name": "crop_left", + "label": "", + "value": 0 + }, + "target_width": { + "name": "target_width", + "label": "", + "value": 1024 + }, + "target_height": { + "name": "target_height", + "label": "", + "value": 1024 + }, + "clip": { + "name": "clip", + "label": "" + }, + "clip2": { + "name": "clip2", + "label": "" + }, + "mask": { + "name": "mask", + "label": "" + } + } + }, + "position": { + "x": -3525, + "y": -2600 + } + }, + { + "id": "041c59cc-f9e4-4dc9-8b31-84648c5f3ebe", + "type": "invocation", + "data": { + "id": "041c59cc-f9e4-4dc9-8b31-84648c5f3ebe", + "type": "unsharp_mask", + "version": "1.2.2", + "label": "", + "notes": "", + "isOpen": false, + "isIntermediate": true, + "useCache": true, + "inputs": { + "board": { + "name": "board", + "label": "" + }, + "metadata": { + "name": "metadata", + "label": "" + }, + "image": { + "name": "image", + "label": "" + }, + "radius": { + "name": "radius", + "label": "", + "value": 2 + }, + "strength": { + "name": "strength", + "label": "", + "value": 50 + } + } + }, + "position": { + "x": -4400, + "y": -1875 + } + }, + { + "id": "53c2d5fd-863d-4950-93e0-628f3d61b493", + "type": "invocation", + "data": { + "id": "53c2d5fd-863d-4950-93e0-628f3d61b493", + "type": "unsharp_mask", + "version": "1.2.2", + "label": "", + "notes": "", + "isOpen": false, + "isIntermediate": true, + "useCache": true, + "inputs": { + "board": { + "name": "board", + "label": "" + }, + "metadata": { + "name": "metadata", + "label": "" + }, + "image": { + "name": "image", + "label": "" + }, + "radius": { + "name": "radius", + "label": "", + "value": 2 + }, + "strength": { + "name": "strength", + "label": "", + "value": 50 + } + } + }, + "position": { + "x": -4750, + "y": -1875 + } + }, + { + "id": "117f982a-03da-49b1-bf9f-29711160ac02", + "type": "invocation", + "data": { + "id": "117f982a-03da-49b1-bf9f-29711160ac02", + "type": "i2l", + "version": "1.1.0", + "label": "", + "notes": "", + "isOpen": false, + "isIntermediate": true, + "useCache": true, + "inputs": { + "image": { + "name": "image", + "label": "" + }, + "vae": { + "name": "vae", + "label": "" + }, + "tiled": { + "name": "tiled", + "label": "", + "value": false + }, + "tile_size": { + "name": "tile_size", + "label": "", + "value": 0 + }, + "fp32": { + "name": "fp32", + "label": "", + "value": false + } + } + }, + "position": { + "x": -4000, + "y": -1875 + } + }, + { + "id": "c3b60a50-8039-4924-90e3-8c608e1fecb5", + "type": "invocation", + "data": { + "id": "c3b60a50-8039-4924-90e3-8c608e1fecb5", + "type": "l2i", + "version": "1.3.0", + "label": "", + "notes": "", + "isOpen": true, + "isIntermediate": false, + "useCache": true, + "inputs": { + "board": { + "name": "board", + "label": "Output Board" + }, + "metadata": { + "name": "metadata", + "label": "" + }, + "latents": { + "name": "latents", + "label": "" + }, + "vae": { + "name": "vae", + "label": "" + }, + "tiled": { + "name": "tiled", + "label": "", + "value": false + }, + "tile_size": { + "name": "tile_size", + "label": "", + "value": 0 + }, + "fp32": { + "name": "fp32", + "label": "", + "value": false + } + } + }, + "position": { + "x": -2750, + "y": -2575 + } + }, + { + "id": "8dba0d37-cd2e-4fe5-ae9f-5464b85a8a7a", + "type": "invocation", + "data": { + "id": "8dba0d37-cd2e-4fe5-ae9f-5464b85a8a7a", + "type": "tiled_multi_diffusion_denoise_latents", + "version": "1.0.0", + "label": "", + "notes": "", + "isOpen": true, + "isIntermediate": true, + "useCache": true, + "inputs": { + "positive_conditioning": { + "name": "positive_conditioning", + "label": "" + }, + "negative_conditioning": { + "name": "negative_conditioning", + "label": "" + }, + "noise": { + "name": "noise", + "label": "" + }, + "latents": { + "name": "latents", + "label": "" + }, + "tile_height": { + "name": "tile_height", + "label": "", + "value": 1024 + }, + "tile_width": { + "name": "tile_width", + "label": "", + "value": 1024 + }, + "tile_overlap": { + "name": "tile_overlap", + "label": "", + "value": 128 + }, + "steps": { + "name": "steps", + "label": "", + "value": 25 + }, + "cfg_scale": { + "name": "cfg_scale", + "label": "", + "value": 5 + }, + "denoising_start": { + "name": "denoising_start", + "label": "", + "value": 0.6 + }, + "denoising_end": { + "name": "denoising_end", + "label": "", + "value": 1 + }, + "scheduler": { + "name": "scheduler", + "label": "", + "value": "kdpm_2" + }, + "unet": { + "name": "unet", + "label": "" + }, + "cfg_rescale_multiplier": { + "name": "cfg_rescale_multiplier", + "label": "", + "value": 0 + }, + "control": { + "name": "control", + "label": "" + } + } + }, + "position": { + "x": -3125, + "y": -2575 + } + }, + { + "id": "1ba845a6-eb88-49a1-a490-5fe6754f3ec9", + "type": "invocation", + "data": { + "id": "1ba845a6-eb88-49a1-a490-5fe6754f3ec9", + "type": "integer", + "version": "1.0.1", + "label": "", + "notes": "", + "isOpen": true, + "isIntermediate": true, + "useCache": true, + "inputs": { + "value": { + "name": "value", + "label": "Scale (2x, 4x)", + "value": 2 + } + } + }, + "position": { + "x": -4400, + "y": -2175 + } + }, + { + "id": "d350feac-9686-4e0d-bd46-a96bd2630818", + "type": "invocation", + "data": { + "id": "d350feac-9686-4e0d-bd46-a96bd2630818", + "type": "integer_math", + "version": "1.0.1", + "label": "", + "notes": "", + "isOpen": false, + "isIntermediate": true, + "useCache": true, + "inputs": { + "operation": { + "name": "operation", + "label": "", + "value": "MUL" + }, + "a": { + "name": "a", + "label": "", + "value": 1 + }, + "b": { + "name": "b", + "label": "", + "value": 1 + } + } + }, + "position": { + "x": -4400, + "y": -1950 + } + }, + { + "id": "5b256f14-caab-40ff-b8f0-9679cd542163", + "type": "invocation", + "data": { + "id": "5b256f14-caab-40ff-b8f0-9679cd542163", + "type": "integer_math", + "version": "1.0.1", + "label": "", + "notes": "", + "isOpen": false, + "isIntermediate": true, + "useCache": true, + "inputs": { + "operation": { + "name": "operation", + "label": "", + "value": "MUL" + }, + "a": { + "name": "a", + "label": "", + "value": 1 + }, + "b": { + "name": "b", + "label": "", + "value": 1 + } + } + }, + "position": { + "x": -4400, + "y": -2000 + } + }, + { + "id": "7671553a-cd4b-4e25-8332-9d5667e64493", + "type": "invocation", + "data": { + "id": "7671553a-cd4b-4e25-8332-9d5667e64493", + "type": "img_resize", + "version": "1.2.2", + "label": "", + "notes": "", + "isOpen": true, + "isIntermediate": true, + "useCache": true, + "inputs": { + "board": { + "name": "board", + "label": "" + }, + "metadata": { + "name": "metadata", + "label": "" + }, + "image": { + "name": "image", + "label": "" + }, + "width": { + "name": "width", + "label": "", + "value": 512 + }, + "height": { + "name": "height", + "label": "", + "value": 512 + }, + "resample_mode": { + "name": "resample_mode", + "label": "", + "value": "lanczos" + } + } + }, + "position": { + "x": -4375, + "y": -1825 + } + }, + { + "id": "be4082d6-e238-40ea-a9df-fc0d725e8895", + "type": "invocation", + "data": { + "id": "be4082d6-e238-40ea-a9df-fc0d725e8895", + "type": "controlnet", + "version": "1.1.2", + "label": "ControlNet (use xinsir's tile ControlNet)", + "notes": "", + "isOpen": true, + "isIntermediate": true, + "useCache": true, + "inputs": { + "image": { + "name": "image", + "label": "" + }, + "control_model": { + "name": "control_model", + "label": "" + }, + "control_weight": { + "name": "control_weight", + "label": "", + "value": 0.25 + }, + "begin_step_percent": { + "name": "begin_step_percent", + "label": "", + "value": 0.5 + }, + "end_step_percent": { + "name": "end_step_percent", + "label": "", + "value": 0.8 + }, + "control_mode": { + "name": "control_mode", + "label": "Control Mode", + "value": "balanced" + }, + "resize_mode": { + "name": "resize_mode", + "label": "", + "value": "just_resize" + } + } + }, + "position": { + "x": -3131.577032503611, + "y": -1392.1075609956667 + } + }, + { + "id": "8923451b-5a27-4395-b7f2-dce875fca6f5", + "type": "invocation", + "data": { + "id": "8923451b-5a27-4395-b7f2-dce875fca6f5", + "type": "noise", + "version": "1.0.2", + "label": "", + "notes": "", + "isOpen": true, + "isIntermediate": true, + "useCache": true, + "inputs": { + "seed": { + "name": "seed", + "label": "", + "value": 3 + }, + "width": { + "name": "width", + "label": "", + "value": 512 + }, + "height": { + "name": "height", + "label": "", + "value": 512 + }, + "use_cpu": { + "name": "use_cpu", + "label": "", + "value": true + } + } + }, + "position": { + "x": -4000, + "y": -1750 + } + }, + { + "id": "f0cd0d2f-9614-43f7-9944-a75b8d5ccd65", + "type": "invocation", + "data": { + "id": "f0cd0d2f-9614-43f7-9944-a75b8d5ccd65", + "type": "esrgan", + "version": "1.3.2", + "label": "", + "notes": "", + "isOpen": true, + "isIntermediate": true, + "useCache": true, + "inputs": { + "board": { + "name": "board", + "label": "" + }, + "metadata": { + "name": "metadata", + "label": "" + }, + "image": { + "name": "image", + "label": "" + }, + "model_name": { + "name": "model_name", + "label": "Upscaling Model", + "value": "RealESRGAN_x4plus.pth" + }, + "tile_size": { + "name": "tile_size", + "label": "", + "value": 500 + } + } + }, + "position": { + "x": -4750, + "y": -1825 + } + }, + { + "id": "7dbb756b-7d79-431c-a46d-d8f7b082c127", + "type": "invocation", + "data": { + "id": "7dbb756b-7d79-431c-a46d-d8f7b082c127", + "version": "1.0.1", + "label": "", + "notes": "", + "type": "float_to_int", + "inputs": { + "value": { + "name": "value", + "label": "", + "value": 0 + }, + "multiple": { + "name": "multiple", + "label": "", + "value": 8 + }, + "method": { + "name": "method", + "label": "", + "value": "Floor" + } + }, + "isOpen": false, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": -4000, + "y": -1950 + } + }, + { + "id": "5ca87ace-edf9-49c7-a424-cd42416b86a7", + "type": "invocation", + "data": { + "id": "5ca87ace-edf9-49c7-a424-cd42416b86a7", + "version": "1.0.2", + "label": "", + "notes": "", + "type": "image", + "inputs": { + "image": { + "name": "image", + "label": "Image to Upscale" + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": -4750, + "y": -2850 + } + }, + { + "id": "f5d9bf3b-2646-4b17-9894-20fd2b4218ea", + "type": "invocation", + "data": { + "id": "f5d9bf3b-2646-4b17-9894-20fd2b4218ea", + "version": "1.0.1", + "label": "", + "notes": "", + "type": "float_to_int", + "inputs": { + "value": { + "name": "value", + "label": "", + "value": 8 + }, + "multiple": { + "name": "multiple", + "label": "", + "value": 8 + }, + "method": { + "name": "method", + "label": "", + "value": "Floor" + } + }, + "isOpen": false, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": -4000, + "y": -2000 + } + } + ], + "edges": [ + { + "id": "reactflow__edge-f936ebb3-6902-4df9-a775-6a68bac2da70model-be4082d6-e238-40ea-a9df-fc0d725e8895control_model", + "type": "default", + "source": "f936ebb3-6902-4df9-a775-6a68bac2da70", + "target": "be4082d6-e238-40ea-a9df-fc0d725e8895", + "sourceHandle": "model", + "targetHandle": "control_model" + }, + { + "id": "reactflow__edge-f936ebb3-6902-4df9-a775-6a68bac2da70model-b78f53b6-2eae-4956-97b4-7e73768d1491control_model", + "type": "default", + "source": "f936ebb3-6902-4df9-a775-6a68bac2da70", + "target": "b78f53b6-2eae-4956-97b4-7e73768d1491", + "sourceHandle": "model", + "targetHandle": "control_model" + }, + { + "id": "49a8cc12-aa19-48c5-b6b3-04e0b603b384-c8f5c671-8c87-4d96-a75e-a9937ac6bc03-collapsed", + "type": "collapsed", + "source": "49a8cc12-aa19-48c5-b6b3-04e0b603b384", + "target": "c8f5c671-8c87-4d96-a75e-a9937ac6bc03" + }, + { + "id": "14e65dbe-4249-4b25-9a63-3a10cfaeb61c-49a8cc12-aa19-48c5-b6b3-04e0b603b384-collapsed", + "type": "collapsed", + "source": "14e65dbe-4249-4b25-9a63-3a10cfaeb61c", + "target": "49a8cc12-aa19-48c5-b6b3-04e0b603b384" + }, + { + "id": "1dd915a3-6756-48ed-b68b-ee3b4bd06c1d-14e65dbe-4249-4b25-9a63-3a10cfaeb61c-collapsed", + "type": "collapsed", + "source": "1dd915a3-6756-48ed-b68b-ee3b4bd06c1d", + "target": "14e65dbe-4249-4b25-9a63-3a10cfaeb61c" + }, + { + "id": "reactflow__edge-00239057-20d4-4cd2-a010-28727b256ea2value-8923451b-5a27-4395-b7f2-dce875fca6f5seed", + "type": "default", + "source": "00239057-20d4-4cd2-a010-28727b256ea2", + "target": "8923451b-5a27-4395-b7f2-dce875fca6f5", + "sourceHandle": "value", + "targetHandle": "seed" + }, + { + "id": "reactflow__edge-094bc4ed-5c68-4342-84f4-51056c755796value-c3b60a50-8039-4924-90e3-8c608e1fecb5tiled", + "type": "default", + "source": "094bc4ed-5c68-4342-84f4-51056c755796", + "target": "c3b60a50-8039-4924-90e3-8c608e1fecb5", + "sourceHandle": "value", + "targetHandle": "tiled" + }, + { + "id": "reactflow__edge-094bc4ed-5c68-4342-84f4-51056c755796value-117f982a-03da-49b1-bf9f-29711160ac02tiled", + "type": "default", + "source": "094bc4ed-5c68-4342-84f4-51056c755796", + "target": "117f982a-03da-49b1-bf9f-29711160ac02", + "sourceHandle": "value", + "targetHandle": "tiled" + }, + { + "id": "c8f5c671-8c87-4d96-a75e-a9937ac6bc03-e4d5ca7c-8fcf-4c59-9c58-67194c80dc73-collapsed", + "type": "collapsed", + "source": "c8f5c671-8c87-4d96-a75e-a9937ac6bc03", + "target": "e4d5ca7c-8fcf-4c59-9c58-67194c80dc73" + }, + { + "id": "d350feac-9686-4e0d-bd46-a96bd2630818-7dbb756b-7d79-431c-a46d-d8f7b082c127-collapsed", + "type": "collapsed", + "source": "d350feac-9686-4e0d-bd46-a96bd2630818", + "target": "7dbb756b-7d79-431c-a46d-d8f7b082c127" + }, + { + "id": "5b256f14-caab-40ff-b8f0-9679cd542163-f5d9bf3b-2646-4b17-9894-20fd2b4218ea-collapsed", + "type": "collapsed", + "source": "5b256f14-caab-40ff-b8f0-9679cd542163", + "target": "f5d9bf3b-2646-4b17-9894-20fd2b4218ea" + }, + { + "id": "4950132a-2d06-4571-b2c0-55cb37a31e9b-041c59cc-f9e4-4dc9-8b31-84648c5f3ebe-collapsed", + "type": "collapsed", + "source": "4950132a-2d06-4571-b2c0-55cb37a31e9b", + "target": "041c59cc-f9e4-4dc9-8b31-84648c5f3ebe" + }, + { + "id": "4950132a-2d06-4571-b2c0-55cb37a31e9b-53c2d5fd-863d-4950-93e0-628f3d61b493-collapsed", + "type": "collapsed", + "source": "4950132a-2d06-4571-b2c0-55cb37a31e9b", + "target": "53c2d5fd-863d-4950-93e0-628f3d61b493" + }, + { + "id": "reactflow__edge-f5ca24ee-21c5-4c8c-8d3c-371b5079b086value-27215391-b20e-412a-b854-7fa5927f5437style", + "type": "default", + "source": "f5ca24ee-21c5-4c8c-8d3c-371b5079b086", + "target": "27215391-b20e-412a-b854-7fa5927f5437", + "sourceHandle": "value", + "targetHandle": "style" + }, + { + "id": "reactflow__edge-f5ca24ee-21c5-4c8c-8d3c-371b5079b086value-27215391-b20e-412a-b854-7fa5927f5437prompt", + "type": "default", + "source": "f5ca24ee-21c5-4c8c-8d3c-371b5079b086", + "target": "27215391-b20e-412a-b854-7fa5927f5437", + "sourceHandle": "value", + "targetHandle": "prompt" + }, + { + "id": "reactflow__edge-c26bff37-4f12-482f-ba45-3a5d729b4c4fvalue-6142b69a-323f-4ecd-a7e5-67dc61349c51style", + "type": "default", + "source": "c26bff37-4f12-482f-ba45-3a5d729b4c4f", + "target": "6142b69a-323f-4ecd-a7e5-67dc61349c51", + "sourceHandle": "value", + "targetHandle": "style" + }, + { + "id": "reactflow__edge-c26bff37-4f12-482f-ba45-3a5d729b4c4fvalue-6142b69a-323f-4ecd-a7e5-67dc61349c51prompt", + "type": "default", + "source": "c26bff37-4f12-482f-ba45-3a5d729b4c4f", + "target": "6142b69a-323f-4ecd-a7e5-67dc61349c51", + "sourceHandle": "value", + "targetHandle": "prompt" + }, + { + "id": "88ae723e-4933-4371-b52d-3ada52a59d36-6daa9526-382b-491d-964f-f53fc308664f-collapsed", + "type": "collapsed", + "source": "88ae723e-4933-4371-b52d-3ada52a59d36", + "target": "6daa9526-382b-491d-964f-f53fc308664f" + }, + { + "id": "f1afd295-860f-48b6-a76a-90609bf2cc11-88ae723e-4933-4371-b52d-3ada52a59d36-collapsed", + "type": "collapsed", + "source": "f1afd295-860f-48b6-a76a-90609bf2cc11", + "target": "88ae723e-4933-4371-b52d-3ada52a59d36" + }, + { + "id": "bc53651f-208b-440c-be30-f93f72ae700e-67346654-cac0-446a-8cde-9af4b5a029a6-collapsed", + "type": "collapsed", + "source": "bc53651f-208b-440c-be30-f93f72ae700e", + "target": "67346654-cac0-446a-8cde-9af4b5a029a6" + }, + { + "id": "reactflow__edge-67346654-cac0-446a-8cde-9af4b5a029a6value-be4082d6-e238-40ea-a9df-fc0d725e8895begin_step_percent", + "type": "default", + "source": "67346654-cac0-446a-8cde-9af4b5a029a6", + "target": "be4082d6-e238-40ea-a9df-fc0d725e8895", + "sourceHandle": "value", + "targetHandle": "begin_step_percent" + }, + { + "id": "reactflow__edge-67346654-cac0-446a-8cde-9af4b5a029a6value-b78f53b6-2eae-4956-97b4-7e73768d1491end_step_percent", + "type": "default", + "source": "67346654-cac0-446a-8cde-9af4b5a029a6", + "target": "b78f53b6-2eae-4956-97b4-7e73768d1491", + "sourceHandle": "value", + "targetHandle": "end_step_percent" + }, + { + "id": "bd094e2f-41e5-4b61-9f7b-56cf337d53fa-f1afd295-860f-48b6-a76a-90609bf2cc11-collapsed", + "type": "collapsed", + "source": "bd094e2f-41e5-4b61-9f7b-56cf337d53fa", + "target": "f1afd295-860f-48b6-a76a-90609bf2cc11" + }, + { + "id": "bd094e2f-41e5-4b61-9f7b-56cf337d53fa-bc53651f-208b-440c-be30-f93f72ae700e-collapsed", + "type": "collapsed", + "source": "bd094e2f-41e5-4b61-9f7b-56cf337d53fa", + "target": "bc53651f-208b-440c-be30-f93f72ae700e" + }, + { + "id": "reactflow__edge-bc53651f-208b-440c-be30-f93f72ae700evalue-67346654-cac0-446a-8cde-9af4b5a029a6b", + "type": "default", + "source": "bc53651f-208b-440c-be30-f93f72ae700e", + "target": "67346654-cac0-446a-8cde-9af4b5a029a6", + "sourceHandle": "value", + "targetHandle": "b", + "hidden": true + }, + { + "id": "reactflow__edge-6daa9526-382b-491d-964f-f53fc308664fvalue-b78f53b6-2eae-4956-97b4-7e73768d1491control_weight", + "type": "default", + "source": "6daa9526-382b-491d-964f-f53fc308664f", + "target": "b78f53b6-2eae-4956-97b4-7e73768d1491", + "sourceHandle": "value", + "targetHandle": "control_weight" + }, + { + "id": "reactflow__edge-88ae723e-4933-4371-b52d-3ada52a59d36value-6daa9526-382b-491d-964f-f53fc308664fb", + "type": "default", + "source": "88ae723e-4933-4371-b52d-3ada52a59d36", + "target": "6daa9526-382b-491d-964f-f53fc308664f", + "sourceHandle": "value", + "targetHandle": "b", + "hidden": true + }, + { + "id": "reactflow__edge-88ae723e-4933-4371-b52d-3ada52a59d36value-be4082d6-e238-40ea-a9df-fc0d725e8895control_weight", + "type": "default", + "source": "88ae723e-4933-4371-b52d-3ada52a59d36", + "target": "be4082d6-e238-40ea-a9df-fc0d725e8895", + "sourceHandle": "value", + "targetHandle": "control_weight" + }, + { + "id": "reactflow__edge-f1afd295-860f-48b6-a76a-90609bf2cc11value-88ae723e-4933-4371-b52d-3ada52a59d36b", + "type": "default", + "source": "f1afd295-860f-48b6-a76a-90609bf2cc11", + "target": "88ae723e-4933-4371-b52d-3ada52a59d36", + "sourceHandle": "value", + "targetHandle": "b", + "hidden": true + }, + { + "id": "reactflow__edge-bd094e2f-41e5-4b61-9f7b-56cf337d53favalue-f1afd295-860f-48b6-a76a-90609bf2cc11a", + "type": "default", + "source": "bd094e2f-41e5-4b61-9f7b-56cf337d53fa", + "target": "f1afd295-860f-48b6-a76a-90609bf2cc11", + "sourceHandle": "value", + "targetHandle": "a", + "hidden": true + }, + { + "id": "reactflow__edge-1dd915a3-6756-48ed-b68b-ee3b4bd06c1dvalue-14e65dbe-4249-4b25-9a63-3a10cfaeb61ca", + "type": "default", + "source": "1dd915a3-6756-48ed-b68b-ee3b4bd06c1d", + "target": "14e65dbe-4249-4b25-9a63-3a10cfaeb61c", + "sourceHandle": "value", + "targetHandle": "a", + "hidden": true + }, + { + "id": "reactflow__edge-e4d5ca7c-8fcf-4c59-9c58-67194c80dc73value-8dba0d37-cd2e-4fe5-ae9f-5464b85a8a7adenoising_start", + "type": "default", + "source": "e4d5ca7c-8fcf-4c59-9c58-67194c80dc73", + "target": "8dba0d37-cd2e-4fe5-ae9f-5464b85a8a7a", + "sourceHandle": "value", + "targetHandle": "denoising_start" + }, + { + "id": "reactflow__edge-c8f5c671-8c87-4d96-a75e-a9937ac6bc03value-e4d5ca7c-8fcf-4c59-9c58-67194c80dc73b", + "type": "default", + "source": "c8f5c671-8c87-4d96-a75e-a9937ac6bc03", + "target": "e4d5ca7c-8fcf-4c59-9c58-67194c80dc73", + "sourceHandle": "value", + "targetHandle": "b", + "hidden": true + }, + { + "id": "reactflow__edge-49a8cc12-aa19-48c5-b6b3-04e0b603b384value-c8f5c671-8c87-4d96-a75e-a9937ac6bc03a", + "type": "default", + "source": "49a8cc12-aa19-48c5-b6b3-04e0b603b384", + "target": "c8f5c671-8c87-4d96-a75e-a9937ac6bc03", + "sourceHandle": "value", + "targetHandle": "a", + "hidden": true + }, + { + "id": "reactflow__edge-14e65dbe-4249-4b25-9a63-3a10cfaeb61cvalue-49a8cc12-aa19-48c5-b6b3-04e0b603b384a", + "type": "default", + "source": "14e65dbe-4249-4b25-9a63-3a10cfaeb61c", + "target": "49a8cc12-aa19-48c5-b6b3-04e0b603b384", + "sourceHandle": "value", + "targetHandle": "a", + "hidden": true + }, + { + "id": "79390b60-4077-4f94-ad0a-4229cc73ddb2-4950132a-2d06-4571-b2c0-55cb37a31e9b-collapsed", + "type": "collapsed", + "source": "79390b60-4077-4f94-ad0a-4229cc73ddb2", + "target": "4950132a-2d06-4571-b2c0-55cb37a31e9b" + }, + { + "id": "reactflow__edge-4950132a-2d06-4571-b2c0-55cb37a31e9bvalue-041c59cc-f9e4-4dc9-8b31-84648c5f3ebestrength", + "type": "default", + "source": "4950132a-2d06-4571-b2c0-55cb37a31e9b", + "target": "041c59cc-f9e4-4dc9-8b31-84648c5f3ebe", + "sourceHandle": "value", + "targetHandle": "strength", + "hidden": true + }, + { + "id": "reactflow__edge-4950132a-2d06-4571-b2c0-55cb37a31e9bvalue-53c2d5fd-863d-4950-93e0-628f3d61b493strength", + "type": "default", + "source": "4950132a-2d06-4571-b2c0-55cb37a31e9b", + "target": "53c2d5fd-863d-4950-93e0-628f3d61b493", + "sourceHandle": "value", + "targetHandle": "strength", + "hidden": true + }, + { + "id": "reactflow__edge-79390b60-4077-4f94-ad0a-4229cc73ddb2value-4950132a-2d06-4571-b2c0-55cb37a31e9bb", + "type": "default", + "source": "79390b60-4077-4f94-ad0a-4229cc73ddb2", + "target": "4950132a-2d06-4571-b2c0-55cb37a31e9b", + "sourceHandle": "value", + "targetHandle": "b", + "hidden": true + }, + { + "id": "reactflow__edge-696de0e1-cdd2-42e8-abeb-57a926bc6df6value-79390b60-4077-4f94-ad0a-4229cc73ddb2a", + "type": "default", + "source": "696de0e1-cdd2-42e8-abeb-57a926bc6df6", + "target": "79390b60-4077-4f94-ad0a-4229cc73ddb2", + "sourceHandle": "value", + "targetHandle": "a" + }, + { + "id": "reactflow__edge-bd094e2f-41e5-4b61-9f7b-56cf337d53favalue-bc53651f-208b-440c-be30-f93f72ae700ea", + "type": "default", + "source": "bd094e2f-41e5-4b61-9f7b-56cf337d53fa", + "target": "bc53651f-208b-440c-be30-f93f72ae700e", + "sourceHandle": "value", + "targetHandle": "a", + "hidden": true + }, + { + "id": "reactflow__edge-6636a27a-f130-4a13-b3e5-50b44e4a566fcollection-8dba0d37-cd2e-4fe5-ae9f-5464b85a8a7acontrol", + "type": "default", + "source": "6636a27a-f130-4a13-b3e5-50b44e4a566f", + "target": "8dba0d37-cd2e-4fe5-ae9f-5464b85a8a7a", + "sourceHandle": "collection", + "targetHandle": "control" + }, + { + "id": "reactflow__edge-b78f53b6-2eae-4956-97b4-7e73768d1491control-6636a27a-f130-4a13-b3e5-50b44e4a566fitem", + "type": "default", + "source": "b78f53b6-2eae-4956-97b4-7e73768d1491", + "target": "6636a27a-f130-4a13-b3e5-50b44e4a566f", + "sourceHandle": "control", + "targetHandle": "item" + }, + { + "id": "reactflow__edge-be4082d6-e238-40ea-a9df-fc0d725e8895control-6636a27a-f130-4a13-b3e5-50b44e4a566fitem", + "type": "default", + "source": "be4082d6-e238-40ea-a9df-fc0d725e8895", + "target": "6636a27a-f130-4a13-b3e5-50b44e4a566f", + "sourceHandle": "control", + "targetHandle": "item" + }, + { + "id": "reactflow__edge-7671553a-cd4b-4e25-8332-9d5667e64493image-b78f53b6-2eae-4956-97b4-7e73768d1491image", + "type": "default", + "source": "7671553a-cd4b-4e25-8332-9d5667e64493", + "target": "b78f53b6-2eae-4956-97b4-7e73768d1491", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-e277e4b7-01cd-4daa-86ab-7bfa3cdcd9fdclip2-27215391-b20e-412a-b854-7fa5927f5437clip2", + "type": "default", + "source": "e277e4b7-01cd-4daa-86ab-7bfa3cdcd9fd", + "target": "27215391-b20e-412a-b854-7fa5927f5437", + "sourceHandle": "clip2", + "targetHandle": "clip2" + }, + { + "id": "reactflow__edge-e277e4b7-01cd-4daa-86ab-7bfa3cdcd9fdclip-27215391-b20e-412a-b854-7fa5927f5437clip", + "type": "default", + "source": "e277e4b7-01cd-4daa-86ab-7bfa3cdcd9fd", + "target": "27215391-b20e-412a-b854-7fa5927f5437", + "sourceHandle": "clip", + "targetHandle": "clip" + }, + { + "id": "reactflow__edge-e277e4b7-01cd-4daa-86ab-7bfa3cdcd9fdclip2-6142b69a-323f-4ecd-a7e5-67dc61349c51clip2", + "type": "default", + "source": "e277e4b7-01cd-4daa-86ab-7bfa3cdcd9fd", + "target": "6142b69a-323f-4ecd-a7e5-67dc61349c51", + "sourceHandle": "clip2", + "targetHandle": "clip2" + }, + { + "id": "reactflow__edge-6142b69a-323f-4ecd-a7e5-67dc61349c51conditioning-8dba0d37-cd2e-4fe5-ae9f-5464b85a8a7apositive_conditioning", + "type": "default", + "source": "6142b69a-323f-4ecd-a7e5-67dc61349c51", + "target": "8dba0d37-cd2e-4fe5-ae9f-5464b85a8a7a", + "sourceHandle": "conditioning", + "targetHandle": "positive_conditioning" + }, + { + "id": "reactflow__edge-27215391-b20e-412a-b854-7fa5927f5437conditioning-8dba0d37-cd2e-4fe5-ae9f-5464b85a8a7anegative_conditioning", + "type": "default", + "source": "27215391-b20e-412a-b854-7fa5927f5437", + "target": "8dba0d37-cd2e-4fe5-ae9f-5464b85a8a7a", + "sourceHandle": "conditioning", + "targetHandle": "negative_conditioning" + }, + { + "id": "reactflow__edge-e277e4b7-01cd-4daa-86ab-7bfa3cdcd9fdunet-8dba0d37-cd2e-4fe5-ae9f-5464b85a8a7aunet", + "type": "default", + "source": "e277e4b7-01cd-4daa-86ab-7bfa3cdcd9fd", + "target": "8dba0d37-cd2e-4fe5-ae9f-5464b85a8a7a", + "sourceHandle": "unet", + "targetHandle": "unet" + }, + { + "id": "reactflow__edge-100b3143-b3fb-4ff3-bb3c-8d4d3f89ae3avae-117f982a-03da-49b1-bf9f-29711160ac02vae", + "type": "default", + "source": "100b3143-b3fb-4ff3-bb3c-8d4d3f89ae3a", + "target": "117f982a-03da-49b1-bf9f-29711160ac02", + "sourceHandle": "vae", + "targetHandle": "vae" + }, + { + "id": "reactflow__edge-100b3143-b3fb-4ff3-bb3c-8d4d3f89ae3avae-c3b60a50-8039-4924-90e3-8c608e1fecb5vae", + "type": "default", + "source": "100b3143-b3fb-4ff3-bb3c-8d4d3f89ae3a", + "target": "c3b60a50-8039-4924-90e3-8c608e1fecb5", + "sourceHandle": "vae", + "targetHandle": "vae" + }, + { + "id": "reactflow__edge-e277e4b7-01cd-4daa-86ab-7bfa3cdcd9fdclip-6142b69a-323f-4ecd-a7e5-67dc61349c51clip", + "type": "default", + "source": "e277e4b7-01cd-4daa-86ab-7bfa3cdcd9fd", + "target": "6142b69a-323f-4ecd-a7e5-67dc61349c51", + "sourceHandle": "clip", + "targetHandle": "clip" + }, + { + "id": "reactflow__edge-041c59cc-f9e4-4dc9-8b31-84648c5f3ebeimage-7671553a-cd4b-4e25-8332-9d5667e64493image", + "type": "default", + "source": "041c59cc-f9e4-4dc9-8b31-84648c5f3ebe", + "target": "7671553a-cd4b-4e25-8332-9d5667e64493", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-f0cd0d2f-9614-43f7-9944-a75b8d5ccd65image-041c59cc-f9e4-4dc9-8b31-84648c5f3ebeimage", + "type": "default", + "source": "f0cd0d2f-9614-43f7-9944-a75b8d5ccd65", + "target": "041c59cc-f9e4-4dc9-8b31-84648c5f3ebe", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-53c2d5fd-863d-4950-93e0-628f3d61b493image-f0cd0d2f-9614-43f7-9944-a75b8d5ccd65image", + "type": "default", + "source": "53c2d5fd-863d-4950-93e0-628f3d61b493", + "target": "f0cd0d2f-9614-43f7-9944-a75b8d5ccd65", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-5ca87ace-edf9-49c7-a424-cd42416b86a7image-53c2d5fd-863d-4950-93e0-628f3d61b493image", + "type": "default", + "source": "5ca87ace-edf9-49c7-a424-cd42416b86a7", + "target": "53c2d5fd-863d-4950-93e0-628f3d61b493", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-8dba0d37-cd2e-4fe5-ae9f-5464b85a8a7alatents-c3b60a50-8039-4924-90e3-8c608e1fecb5latents", + "type": "default", + "source": "8dba0d37-cd2e-4fe5-ae9f-5464b85a8a7a", + "target": "c3b60a50-8039-4924-90e3-8c608e1fecb5", + "sourceHandle": "latents", + "targetHandle": "latents" + }, + { + "id": "reactflow__edge-117f982a-03da-49b1-bf9f-29711160ac02latents-8dba0d37-cd2e-4fe5-ae9f-5464b85a8a7alatents", + "type": "default", + "source": "117f982a-03da-49b1-bf9f-29711160ac02", + "target": "8dba0d37-cd2e-4fe5-ae9f-5464b85a8a7a", + "sourceHandle": "latents", + "targetHandle": "latents" + }, + { + "id": "reactflow__edge-8923451b-5a27-4395-b7f2-dce875fca6f5noise-8dba0d37-cd2e-4fe5-ae9f-5464b85a8a7anoise", + "type": "default", + "source": "8923451b-5a27-4395-b7f2-dce875fca6f5", + "target": "8dba0d37-cd2e-4fe5-ae9f-5464b85a8a7a", + "sourceHandle": "noise", + "targetHandle": "noise" + }, + { + "id": "reactflow__edge-d350feac-9686-4e0d-bd46-a96bd2630818value-7dbb756b-7d79-431c-a46d-d8f7b082c127value", + "type": "default", + "source": "d350feac-9686-4e0d-bd46-a96bd2630818", + "target": "7dbb756b-7d79-431c-a46d-d8f7b082c127", + "sourceHandle": "value", + "targetHandle": "value", + "hidden": true + }, + { + "id": "reactflow__edge-5b256f14-caab-40ff-b8f0-9679cd542163value-f5d9bf3b-2646-4b17-9894-20fd2b4218eavalue", + "type": "default", + "source": "5b256f14-caab-40ff-b8f0-9679cd542163", + "target": "f5d9bf3b-2646-4b17-9894-20fd2b4218ea", + "sourceHandle": "value", + "targetHandle": "value", + "hidden": true + }, + { + "id": "reactflow__edge-7671553a-cd4b-4e25-8332-9d5667e64493height-8923451b-5a27-4395-b7f2-dce875fca6f5height", + "type": "default", + "source": "7671553a-cd4b-4e25-8332-9d5667e64493", + "target": "8923451b-5a27-4395-b7f2-dce875fca6f5", + "sourceHandle": "height", + "targetHandle": "height" + }, + { + "id": "reactflow__edge-7671553a-cd4b-4e25-8332-9d5667e64493width-8923451b-5a27-4395-b7f2-dce875fca6f5width", + "type": "default", + "source": "7671553a-cd4b-4e25-8332-9d5667e64493", + "target": "8923451b-5a27-4395-b7f2-dce875fca6f5", + "sourceHandle": "width", + "targetHandle": "width" + }, + { + "id": "reactflow__edge-7671553a-cd4b-4e25-8332-9d5667e64493image-117f982a-03da-49b1-bf9f-29711160ac02image", + "type": "default", + "source": "7671553a-cd4b-4e25-8332-9d5667e64493", + "target": "117f982a-03da-49b1-bf9f-29711160ac02", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-7671553a-cd4b-4e25-8332-9d5667e64493image-be4082d6-e238-40ea-a9df-fc0d725e8895image", + "type": "default", + "source": "7671553a-cd4b-4e25-8332-9d5667e64493", + "target": "be4082d6-e238-40ea-a9df-fc0d725e8895", + "sourceHandle": "image", + "targetHandle": "image" + }, + { + "id": "reactflow__edge-7dbb756b-7d79-431c-a46d-d8f7b082c127value-7671553a-cd4b-4e25-8332-9d5667e64493height", + "type": "default", + "source": "7dbb756b-7d79-431c-a46d-d8f7b082c127", + "target": "7671553a-cd4b-4e25-8332-9d5667e64493", + "sourceHandle": "value", + "targetHandle": "height" + }, + { + "id": "reactflow__edge-f5d9bf3b-2646-4b17-9894-20fd2b4218eavalue-7671553a-cd4b-4e25-8332-9d5667e64493width", + "type": "default", + "source": "f5d9bf3b-2646-4b17-9894-20fd2b4218ea", + "target": "7671553a-cd4b-4e25-8332-9d5667e64493", + "sourceHandle": "value", + "targetHandle": "width" + }, + { + "id": "reactflow__edge-5ca87ace-edf9-49c7-a424-cd42416b86a7height-d350feac-9686-4e0d-bd46-a96bd2630818a", + "type": "default", + "source": "5ca87ace-edf9-49c7-a424-cd42416b86a7", + "target": "d350feac-9686-4e0d-bd46-a96bd2630818", + "sourceHandle": "height", + "targetHandle": "a" + }, + { + "id": "reactflow__edge-1ba845a6-eb88-49a1-a490-5fe6754f3ec9value-d350feac-9686-4e0d-bd46-a96bd2630818b", + "type": "default", + "source": "1ba845a6-eb88-49a1-a490-5fe6754f3ec9", + "target": "d350feac-9686-4e0d-bd46-a96bd2630818", + "sourceHandle": "value", + "targetHandle": "b" + }, + { + "id": "reactflow__edge-1ba845a6-eb88-49a1-a490-5fe6754f3ec9value-5b256f14-caab-40ff-b8f0-9679cd542163b", + "type": "default", + "source": "1ba845a6-eb88-49a1-a490-5fe6754f3ec9", + "target": "5b256f14-caab-40ff-b8f0-9679cd542163", + "sourceHandle": "value", + "targetHandle": "b" + }, + { + "id": "reactflow__edge-5ca87ace-edf9-49c7-a424-cd42416b86a7width-5b256f14-caab-40ff-b8f0-9679cd542163a", + "type": "default", + "source": "5ca87ace-edf9-49c7-a424-cd42416b86a7", + "target": "5b256f14-caab-40ff-b8f0-9679cd542163", + "sourceHandle": "width", + "targetHandle": "a" + } + ] +} diff --git a/invokeai/app/services/workflow_records/default_workflows/Prompt from File.json b/invokeai/app/services/workflow_records/default_workflows/Prompt from File.json index 765b236714..de902bc77e 100644 --- a/invokeai/app/services/workflow_records/default_workflows/Prompt from File.json +++ b/invokeai/app/services/workflow_records/default_workflows/Prompt from File.json @@ -2,7 +2,7 @@ "name": "Prompt from File", "author": "InvokeAI", "description": "Sample workflow using Prompt from File node", - "version": "2.0.0", + "version": "2.1.0", "contact": "invoke@invoke.ai", "tags": "text2image, prompt from file, default", "notes": "", @@ -37,16 +37,68 @@ } ], "meta": { - "category": "default", - "version": "3.0.0" + "version": "3.0.0", + "category": "default" }, "nodes": [ { - "id": "c2eaf1ba-5708-4679-9e15-945b8b432692", + "id": "491ec988-3c77-4c37-af8a-39a0c4e7a2a1", "type": "invocation", "data": { - "id": "c2eaf1ba-5708-4679-9e15-945b8b432692", - "version": "1.1.1", + "id": "491ec988-3c77-4c37-af8a-39a0c4e7a2a1", + "version": "1.3.0", + "nodePack": "invokeai", + "label": "", + "notes": "", + "type": "l2i", + "inputs": { + "board": { + "name": "board", + "label": "" + }, + "metadata": { + "name": "metadata", + "label": "" + }, + "latents": { + "name": "latents", + "label": "" + }, + "vae": { + "name": "vae", + "label": "" + }, + "tiled": { + "name": "tiled", + "label": "", + "value": false + }, + "tile_size": { + "name": "tile_size", + "label": "", + "value": 0 + }, + "fp32": { + "name": "fp32", + "label": "", + "value": false + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": 2037.861329274915, + "y": -329.8393457509562 + } + }, + { + "id": "fc9d0e35-a6de-4a19-84e1-c72497c823f6", + "type": "invocation", + "data": { + "id": "fc9d0e35-a6de-4a19-84e1-c72497c823f6", + "version": "1.2.0", "nodePack": "invokeai", "label": "", "notes": "", @@ -60,6 +112,69 @@ "clip": { "name": "clip", "label": "" + }, + "mask": { + "name": "mask", + "label": "" + } + }, + "isOpen": false, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": 925, + "y": -275 + } + }, + { + "id": "d6353b7f-b447-4e17-8f2e-80a88c91d426", + "type": "invocation", + "data": { + "id": "d6353b7f-b447-4e17-8f2e-80a88c91d426", + "version": "1.0.3", + "nodePack": "invokeai", + "label": "", + "notes": "", + "type": "main_model_loader", + "inputs": { + "model": { + "name": "model", + "label": "" + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": 0, + "y": -375 + } + }, + { + "id": "c2eaf1ba-5708-4679-9e15-945b8b432692", + "type": "invocation", + "data": { + "id": "c2eaf1ba-5708-4679-9e15-945b8b432692", + "version": "1.2.0", + "nodePack": "invokeai", + "label": "", + "notes": "", + "type": "compel", + "inputs": { + "prompt": { + "name": "prompt", + "label": "", + "value": "" + }, + "clip": { + "name": "clip", + "label": "" + }, + "mask": { + "name": "mask", + "label": "" } }, "isOpen": false, @@ -141,61 +256,6 @@ "y": -400 } }, - { - "id": "d6353b7f-b447-4e17-8f2e-80a88c91d426", - "type": "invocation", - "data": { - "id": "d6353b7f-b447-4e17-8f2e-80a88c91d426", - "version": "1.0.2", - "nodePack": "invokeai", - "label": "", - "notes": "", - "type": "main_model_loader", - "inputs": { - "model": { - "name": "model", - "label": "" - } - }, - "isOpen": true, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": 0, - "y": -375 - } - }, - { - "id": "fc9d0e35-a6de-4a19-84e1-c72497c823f6", - "type": "invocation", - "data": { - "id": "fc9d0e35-a6de-4a19-84e1-c72497c823f6", - "version": "1.1.1", - "nodePack": "invokeai", - "label": "", - "notes": "", - "type": "compel", - "inputs": { - "prompt": { - "name": "prompt", - "label": "", - "value": "" - }, - "clip": { - "name": "clip", - "label": "" - } - }, - "isOpen": false, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": 925, - "y": -275 - } - }, { "id": "0eb5f3f5-1b91-49eb-9ef0-41d67c7eae77", "type": "invocation", @@ -268,53 +328,6 @@ "y": -50 } }, - { - "id": "491ec988-3c77-4c37-af8a-39a0c4e7a2a1", - "type": "invocation", - "data": { - "id": "491ec988-3c77-4c37-af8a-39a0c4e7a2a1", - "version": "1.2.2", - "nodePack": "invokeai", - "label": "", - "notes": "", - "type": "l2i", - "inputs": { - "board": { - "name": "board", - "label": "" - }, - "metadata": { - "name": "metadata", - "label": "" - }, - "latents": { - "name": "latents", - "label": "" - }, - "vae": { - "name": "vae", - "label": "" - }, - "tiled": { - "name": "tiled", - "label": "", - "value": false - }, - "fp32": { - "name": "fp32", - "label": "", - "value": false - } - }, - "isOpen": true, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": 2037.861329274915, - "y": -329.8393457509562 - } - }, { "id": "2fb1577f-0a56-4f12-8711-8afcaaaf1d5e", "type": "invocation", diff --git a/invokeai/app/services/workflow_records/default_workflows/Text to Image - SD1.5.json b/invokeai/app/services/workflow_records/default_workflows/Text to Image - SD1.5.json index d3d52150bc..65f894724c 100644 --- a/invokeai/app/services/workflow_records/default_workflows/Text to Image - SD1.5.json +++ b/invokeai/app/services/workflow_records/default_workflows/Text to Image - SD1.5.json @@ -2,7 +2,7 @@ "name": "Text to Image - SD1.5", "author": "InvokeAI", "description": "Sample text to image workflow for Stable Diffusion 1.5/2", - "version": "2.0.0", + "version": "2.1.0", "contact": "invoke@invoke.ai", "tags": "text2image, SD1.5, SD2, default", "notes": "", @@ -33,16 +33,127 @@ } ], "meta": { - "category": "default", - "version": "3.0.0" + "version": "3.0.0", + "category": "default" }, "nodes": [ + { + "id": "58c957f5-0d01-41fc-a803-b2bbf0413d4f", + "type": "invocation", + "data": { + "id": "58c957f5-0d01-41fc-a803-b2bbf0413d4f", + "version": "1.3.0", + "nodePack": "invokeai", + "label": "", + "notes": "", + "type": "l2i", + "inputs": { + "board": { + "name": "board", + "label": "" + }, + "metadata": { + "name": "metadata", + "label": "" + }, + "latents": { + "name": "latents", + "label": "" + }, + "vae": { + "name": "vae", + "label": "" + }, + "tiled": { + "name": "tiled", + "label": "", + "value": false + }, + "tile_size": { + "name": "tile_size", + "label": "", + "value": 0 + }, + "fp32": { + "name": "fp32", + "label": "", + "value": true + } + }, + "isOpen": true, + "isIntermediate": false, + "useCache": true + }, + "position": { + "x": 1800, + "y": 25 + } + }, + { + "id": "7d8bf987-284f-413a-b2fd-d825445a5d6c", + "type": "invocation", + "data": { + "id": "7d8bf987-284f-413a-b2fd-d825445a5d6c", + "version": "1.2.0", + "nodePack": "invokeai", + "label": "Positive Compel Prompt", + "notes": "", + "type": "compel", + "inputs": { + "prompt": { + "name": "prompt", + "label": "Positive Prompt", + "value": "Super cute tiger cub, national geographic award-winning photograph" + }, + "clip": { + "name": "clip", + "label": "" + }, + "mask": { + "name": "mask", + "label": "" + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": 1000, + "y": 25 + } + }, + { + "id": "c8d55139-f380-4695-b7f2-8b3d1e1e3db8", + "type": "invocation", + "data": { + "id": "c8d55139-f380-4695-b7f2-8b3d1e1e3db8", + "version": "1.0.3", + "nodePack": "invokeai", + "label": "", + "notes": "", + "type": "main_model_loader", + "inputs": { + "model": { + "name": "model", + "label": "" + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": 600, + "y": 25 + } + }, { "id": "93dc02a4-d05b-48ed-b99c-c9b616af3402", "type": "invocation", "data": { "id": "93dc02a4-d05b-48ed-b99c-c9b616af3402", - "version": "1.1.1", + "version": "1.2.0", "nodePack": "invokeai", "label": "Negative Compel Prompt", "notes": "", @@ -56,6 +167,10 @@ "clip": { "name": "clip", "label": "" + }, + "mask": { + "name": "mask", + "label": "" } }, "isOpen": true, @@ -108,61 +223,6 @@ "y": 325 } }, - { - "id": "c8d55139-f380-4695-b7f2-8b3d1e1e3db8", - "type": "invocation", - "data": { - "id": "c8d55139-f380-4695-b7f2-8b3d1e1e3db8", - "version": "1.0.2", - "nodePack": "invokeai", - "label": "", - "notes": "", - "type": "main_model_loader", - "inputs": { - "model": { - "name": "model", - "label": "" - } - }, - "isOpen": true, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": 600, - "y": 25 - } - }, - { - "id": "7d8bf987-284f-413a-b2fd-d825445a5d6c", - "type": "invocation", - "data": { - "id": "7d8bf987-284f-413a-b2fd-d825445a5d6c", - "version": "1.1.1", - "nodePack": "invokeai", - "label": "Positive Compel Prompt", - "notes": "", - "type": "compel", - "inputs": { - "prompt": { - "name": "prompt", - "label": "Positive Prompt", - "value": "Super cute tiger cub, national geographic award-winning photograph" - }, - "clip": { - "name": "clip", - "label": "" - } - }, - "isOpen": true, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": 1000, - "y": 25 - } - }, { "id": "ea94bc37-d995-4a83-aa99-4af42479f2f2", "type": "invocation", @@ -280,53 +340,6 @@ "x": 1400, "y": 25 } - }, - { - "id": "58c957f5-0d01-41fc-a803-b2bbf0413d4f", - "type": "invocation", - "data": { - "id": "58c957f5-0d01-41fc-a803-b2bbf0413d4f", - "version": "1.2.2", - "nodePack": "invokeai", - "label": "", - "notes": "", - "type": "l2i", - "inputs": { - "board": { - "name": "board", - "label": "" - }, - "metadata": { - "name": "metadata", - "label": "" - }, - "latents": { - "name": "latents", - "label": "" - }, - "vae": { - "name": "vae", - "label": "" - }, - "tiled": { - "name": "tiled", - "label": "", - "value": false - }, - "fp32": { - "name": "fp32", - "label": "", - "value": true - } - }, - "isOpen": true, - "isIntermediate": false, - "useCache": true - }, - "position": { - "x": 1800, - "y": 25 - } } ], "edges": [ diff --git a/invokeai/app/services/workflow_records/default_workflows/Text to Image - SDXL.json b/invokeai/app/services/workflow_records/default_workflows/Text to Image - SDXL.json index 1527bbceb1..0f4777169e 100644 --- a/invokeai/app/services/workflow_records/default_workflows/Text to Image - SDXL.json +++ b/invokeai/app/services/workflow_records/default_workflows/Text to Image - SDXL.json @@ -2,7 +2,7 @@ "name": "Text to Image - SDXL", "author": "InvokeAI", "description": "Sample text to image workflow for SDXL", - "version": "2.0.0", + "version": "2.1.0", "contact": "invoke@invoke.ai", "tags": "text2image, SDXL, default", "notes": "", @@ -29,10 +29,271 @@ } ], "meta": { - "category": "default", - "version": "3.0.0" + "version": "3.0.0", + "category": "default" }, "nodes": [ + { + "id": "0093692f-9cf4-454d-a5b8-62f0e3eb3bb8", + "type": "invocation", + "data": { + "id": "0093692f-9cf4-454d-a5b8-62f0e3eb3bb8", + "version": "1.0.3", + "label": "", + "notes": "", + "type": "vae_loader", + "inputs": { + "vae_model": { + "name": "vae_model", + "label": "VAE (use the FP16 model)", + "value": { + "key": "f20f9e5c-1bce-4c46-a84d-34ebfa7df069", + "hash": "blake3:9705ab1c31fa96b308734214fb7571a958621c7a9247eed82b7d277145f8d9fa", + "name": "sdxl-vae-fp16-fix", + "base": "sdxl", + "type": "vae" + } + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": 375, + "y": -225 + } + }, + { + "id": "63e91020-83b2-4f35-b174-ad9692aabb48", + "type": "invocation", + "data": { + "id": "63e91020-83b2-4f35-b174-ad9692aabb48", + "version": "1.3.0", + "nodePack": "invokeai", + "label": "", + "notes": "", + "type": "l2i", + "inputs": { + "board": { + "name": "board", + "label": "" + }, + "metadata": { + "name": "metadata", + "label": "" + }, + "latents": { + "name": "latents", + "label": "" + }, + "vae": { + "name": "vae", + "label": "" + }, + "tiled": { + "name": "tiled", + "label": "", + "value": false + }, + "tile_size": { + "name": "tile_size", + "label": "", + "value": 0 + }, + "fp32": { + "name": "fp32", + "label": "", + "value": false + } + }, + "isOpen": true, + "isIntermediate": false, + "useCache": false + }, + "position": { + "x": 1475, + "y": -500 + } + }, + { + "id": "faf965a4-7530-427b-b1f3-4ba6505c2a08", + "type": "invocation", + "data": { + "id": "faf965a4-7530-427b-b1f3-4ba6505c2a08", + "version": "1.2.0", + "nodePack": "invokeai", + "label": "SDXL Positive Compel Prompt", + "notes": "", + "type": "sdxl_compel_prompt", + "inputs": { + "prompt": { + "name": "prompt", + "label": "Positive Prompt", + "value": "" + }, + "style": { + "name": "style", + "label": "Positive Style", + "value": "" + }, + "original_width": { + "name": "original_width", + "label": "", + "value": 1024 + }, + "original_height": { + "name": "original_height", + "label": "", + "value": 1024 + }, + "crop_top": { + "name": "crop_top", + "label": "", + "value": 0 + }, + "crop_left": { + "name": "crop_left", + "label": "", + "value": 0 + }, + "target_width": { + "name": "target_width", + "label": "", + "value": 1024 + }, + "target_height": { + "name": "target_height", + "label": "", + "value": 1024 + }, + "clip": { + "name": "clip", + "label": "" + }, + "clip2": { + "name": "clip2", + "label": "" + }, + "mask": { + "name": "mask", + "label": "" + } + }, + "isOpen": false, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": 750, + "y": -175 + } + }, + { + "id": "30d3289c-773c-4152-a9d2-bd8a99c8fd22", + "type": "invocation", + "data": { + "id": "30d3289c-773c-4152-a9d2-bd8a99c8fd22", + "version": "1.0.3", + "nodePack": "invokeai", + "label": "", + "notes": "", + "type": "sdxl_model_loader", + "inputs": { + "model": { + "name": "model", + "label": "", + "value": { + "key": "4a63b226-e8ff-4da4-854e-0b9f04b562ba", + "hash": "blake3:d279309ea6e5ee6e8fd52504275865cc280dac71cbf528c5b07c98b888bddaba", + "name": "dreamshaper-xl-v2-turbo", + "base": "sdxl", + "type": "main" + } + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": 375, + "y": -500 + } + }, + { + "id": "3193ad09-a7c2-4bf4-a3a9-1c61cc33a204", + "type": "invocation", + "data": { + "id": "3193ad09-a7c2-4bf4-a3a9-1c61cc33a204", + "version": "1.2.0", + "nodePack": "invokeai", + "label": "SDXL Negative Compel Prompt", + "notes": "", + "type": "sdxl_compel_prompt", + "inputs": { + "prompt": { + "name": "prompt", + "label": "Negative Prompt", + "value": "" + }, + "style": { + "name": "style", + "label": "Negative Style", + "value": "" + }, + "original_width": { + "name": "original_width", + "label": "", + "value": 1024 + }, + "original_height": { + "name": "original_height", + "label": "", + "value": 1024 + }, + "crop_top": { + "name": "crop_top", + "label": "", + "value": 0 + }, + "crop_left": { + "name": "crop_left", + "label": "", + "value": 0 + }, + "target_width": { + "name": "target_width", + "label": "", + "value": 1024 + }, + "target_height": { + "name": "target_height", + "label": "", + "value": 1024 + }, + "clip": { + "name": "clip", + "label": "" + }, + "clip2": { + "name": "clip2", + "label": "" + }, + "mask": { + "name": "mask", + "label": "" + } + }, + "isOpen": false, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": 750, + "y": 200 + } + }, { "id": "3774ec24-a69e-4254-864c-097d07a6256f", "type": "invocation", @@ -88,75 +349,6 @@ "y": -125 } }, - { - "id": "3193ad09-a7c2-4bf4-a3a9-1c61cc33a204", - "type": "invocation", - "data": { - "id": "3193ad09-a7c2-4bf4-a3a9-1c61cc33a204", - "version": "1.1.1", - "nodePack": "invokeai", - "label": "SDXL Negative Compel Prompt", - "notes": "", - "type": "sdxl_compel_prompt", - "inputs": { - "prompt": { - "name": "prompt", - "label": "Negative Prompt", - "value": "" - }, - "style": { - "name": "style", - "label": "Negative Style", - "value": "" - }, - "original_width": { - "name": "original_width", - "label": "", - "value": 1024 - }, - "original_height": { - "name": "original_height", - "label": "", - "value": 1024 - }, - "crop_top": { - "name": "crop_top", - "label": "", - "value": 0 - }, - "crop_left": { - "name": "crop_left", - "label": "", - "value": 0 - }, - "target_width": { - "name": "target_width", - "label": "", - "value": 1024 - }, - "target_height": { - "name": "target_height", - "label": "", - "value": 1024 - }, - "clip": { - "name": "clip", - "label": "" - }, - "clip2": { - "name": "clip2", - "label": "" - } - }, - "isOpen": false, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": 750, - "y": 200 - } - }, { "id": "55705012-79b9-4aac-9f26-c0b10309785b", "type": "invocation", @@ -229,154 +421,6 @@ "y": -50 } }, - { - "id": "30d3289c-773c-4152-a9d2-bd8a99c8fd22", - "type": "invocation", - "data": { - "id": "30d3289c-773c-4152-a9d2-bd8a99c8fd22", - "version": "1.0.2", - "nodePack": "invokeai", - "label": "", - "notes": "", - "type": "sdxl_model_loader", - "inputs": { - "model": { - "name": "model", - "label": "", - "value": { - "key": "4a63b226-e8ff-4da4-854e-0b9f04b562ba", - "hash": "blake3:d279309ea6e5ee6e8fd52504275865cc280dac71cbf528c5b07c98b888bddaba", - "name": "dreamshaper-xl-v2-turbo", - "base": "sdxl", - "type": "main" - } - } - }, - "isOpen": true, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": 375, - "y": -500 - } - }, - { - "id": "faf965a4-7530-427b-b1f3-4ba6505c2a08", - "type": "invocation", - "data": { - "id": "faf965a4-7530-427b-b1f3-4ba6505c2a08", - "version": "1.1.1", - "nodePack": "invokeai", - "label": "SDXL Positive Compel Prompt", - "notes": "", - "type": "sdxl_compel_prompt", - "inputs": { - "prompt": { - "name": "prompt", - "label": "Positive Prompt", - "value": "" - }, - "style": { - "name": "style", - "label": "Positive Style", - "value": "" - }, - "original_width": { - "name": "original_width", - "label": "", - "value": 1024 - }, - "original_height": { - "name": "original_height", - "label": "", - "value": 1024 - }, - "crop_top": { - "name": "crop_top", - "label": "", - "value": 0 - }, - "crop_left": { - "name": "crop_left", - "label": "", - "value": 0 - }, - "target_width": { - "name": "target_width", - "label": "", - "value": 1024 - }, - "target_height": { - "name": "target_height", - "label": "", - "value": 1024 - }, - "clip": { - "name": "clip", - "label": "" - }, - "clip2": { - "name": "clip2", - "label": "" - } - }, - "isOpen": false, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": 750, - "y": -175 - } - }, - { - "id": "63e91020-83b2-4f35-b174-ad9692aabb48", - "type": "invocation", - "data": { - "id": "63e91020-83b2-4f35-b174-ad9692aabb48", - "version": "1.2.2", - "nodePack": "invokeai", - "label": "", - "notes": "", - "type": "l2i", - "inputs": { - "board": { - "name": "board", - "label": "" - }, - "metadata": { - "name": "metadata", - "label": "" - }, - "latents": { - "name": "latents", - "label": "" - }, - "vae": { - "name": "vae", - "label": "" - }, - "tiled": { - "name": "tiled", - "label": "", - "value": false - }, - "fp32": { - "name": "fp32", - "label": "", - "value": false - } - }, - "isOpen": true, - "isIntermediate": false, - "useCache": false - }, - "position": { - "x": 1475, - "y": -500 - } - }, { "id": "50a36525-3c0a-4cc5-977c-e4bfc3fd6dfb", "type": "invocation", @@ -464,37 +508,6 @@ "y": -500 } }, - { - "id": "0093692f-9cf4-454d-a5b8-62f0e3eb3bb8", - "type": "invocation", - "data": { - "id": "0093692f-9cf4-454d-a5b8-62f0e3eb3bb8", - "version": "1.0.2", - "label": "", - "notes": "", - "type": "vae_loader", - "inputs": { - "vae_model": { - "name": "vae_model", - "label": "VAE (use the FP16 model)", - "value": { - "key": "f20f9e5c-1bce-4c46-a84d-34ebfa7df069", - "hash": "blake3:9705ab1c31fa96b308734214fb7571a958621c7a9247eed82b7d277145f8d9fa", - "name": "sdxl-vae-fp16-fix", - "base": "sdxl", - "type": "vae" - } - } - }, - "isOpen": true, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": 375, - "y": -225 - } - }, { "id": "ade2c0d3-0384-4157-b39b-29ce429cfa15", "type": "invocation", diff --git a/invokeai/app/services/workflow_records/default_workflows/Text to Image with LoRA.json b/invokeai/app/services/workflow_records/default_workflows/Text to Image with LoRA.json index 6df02b675d..b4df4b921c 100644 --- a/invokeai/app/services/workflow_records/default_workflows/Text to Image with LoRA.json +++ b/invokeai/app/services/workflow_records/default_workflows/Text to Image with LoRA.json @@ -2,7 +2,7 @@ "name": "Text to Image with LoRA", "author": "InvokeAI", "description": "Simple text to image workflow with a LoRA", - "version": "2.0.0", + "version": "2.1.0", "contact": "invoke@invoke.ai", "tags": "text to image, lora, default", "notes": "", @@ -37,28 +37,83 @@ } ], "meta": { - "category": "default", - "version": "3.0.0" + "version": "3.0.0", + "category": "default" }, "nodes": [ { - "id": "85b77bb2-c67a-416a-b3e8-291abe746c44", + "id": "a9683c0a-6b1f-4a5e-8187-c57e764b3400", "type": "invocation", "data": { - "id": "85b77bb2-c67a-416a-b3e8-291abe746c44", - "version": "1.1.1", + "id": "a9683c0a-6b1f-4a5e-8187-c57e764b3400", + "version": "1.3.0", + "label": "", + "notes": "", + "type": "l2i", + "inputs": { + "board": { + "name": "board", + "label": "" + }, + "metadata": { + "name": "metadata", + "label": "" + }, + "latents": { + "name": "latents", + "label": "" + }, + "vae": { + "name": "vae", + "label": "" + }, + "tiled": { + "name": "tiled", + "label": "", + "value": false + }, + "tile_size": { + "name": "tile_size", + "label": "", + "value": 0 + }, + "fp32": { + "name": "fp32", + "label": "", + "value": false + } + }, + "isOpen": true, + "isIntermediate": false, + "useCache": true + }, + "position": { + "x": 4450, + "y": -550 + } + }, + { + "id": "c3fa6872-2599-4a82-a596-b3446a66cf8b", + "type": "invocation", + "data": { + "id": "c3fa6872-2599-4a82-a596-b3446a66cf8b", + "version": "1.2.0", "label": "", "notes": "", "type": "compel", "inputs": { "prompt": { "name": "prompt", - "label": "Negative Prompt", - "value": "" + "label": "Positive Prompt", + "value": "super cute tiger cub" }, "clip": { "name": "clip", "label": "" + }, + "mask": { + "name": "mask", + "label": "" } }, "isOpen": true, @@ -67,31 +122,7 @@ }, "position": { "x": 3425, - "y": -300 - } - }, - { - "id": "24e9d7ed-4836-4ec4-8f9e-e747721f9818", - "type": "invocation", - "data": { - "id": "24e9d7ed-4836-4ec4-8f9e-e747721f9818", - "version": "1.0.2", - "label": "", - "notes": "", - "type": "main_model_loader", - "inputs": { - "model": { - "name": "model", - "label": "" - } - }, - "isOpen": true, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": 2500, - "y": -600 + "y": -575 } }, { @@ -99,7 +130,7 @@ "type": "invocation", "data": { "id": "c41e705b-f2e3-4d1a-83c4-e34bb9344966", - "version": "1.0.2", + "version": "1.0.3", "label": "", "notes": "", "type": "lora_loader", @@ -132,23 +163,51 @@ } }, { - "id": "c3fa6872-2599-4a82-a596-b3446a66cf8b", + "id": "24e9d7ed-4836-4ec4-8f9e-e747721f9818", "type": "invocation", "data": { - "id": "c3fa6872-2599-4a82-a596-b3446a66cf8b", - "version": "1.1.1", + "id": "24e9d7ed-4836-4ec4-8f9e-e747721f9818", + "version": "1.0.3", + "label": "", + "notes": "", + "type": "main_model_loader", + "inputs": { + "model": { + "name": "model", + "label": "" + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": 2500, + "y": -600 + } + }, + { + "id": "85b77bb2-c67a-416a-b3e8-291abe746c44", + "type": "invocation", + "data": { + "id": "85b77bb2-c67a-416a-b3e8-291abe746c44", + "version": "1.2.0", "label": "", "notes": "", "type": "compel", "inputs": { "prompt": { "name": "prompt", - "label": "Positive Prompt", - "value": "super cute tiger cub" + "label": "Negative Prompt", + "value": "" }, "clip": { "name": "clip", "label": "" + }, + "mask": { + "name": "mask", + "label": "" } }, "isOpen": true, @@ -157,7 +216,7 @@ }, "position": { "x": 3425, - "y": -575 + "y": -300 } }, { @@ -315,52 +374,6 @@ "x": 3425, "y": 0 } - }, - { - "id": "a9683c0a-6b1f-4a5e-8187-c57e764b3400", - "type": "invocation", - "data": { - "id": "a9683c0a-6b1f-4a5e-8187-c57e764b3400", - "version": "1.2.2", - "label": "", - "notes": "", - "type": "l2i", - "inputs": { - "board": { - "name": "board", - "label": "" - }, - "metadata": { - "name": "metadata", - "label": "" - }, - "latents": { - "name": "latents", - "label": "" - }, - "vae": { - "name": "vae", - "label": "" - }, - "tiled": { - "name": "tiled", - "label": "", - "value": false - }, - "fp32": { - "name": "fp32", - "label": "", - "value": false - } - }, - "isOpen": true, - "isIntermediate": false, - "useCache": true - }, - "position": { - "x": 4450, - "y": -550 - } } ], "edges": [ diff --git a/invokeai/app/services/workflow_records/default_workflows/Tiled Upscaling (Beta).json b/invokeai/app/services/workflow_records/default_workflows/Tiled Upscaling (Beta).json index bb0e9062e4..426fe49c41 100644 --- a/invokeai/app/services/workflow_records/default_workflows/Tiled Upscaling (Beta).json +++ b/invokeai/app/services/workflow_records/default_workflows/Tiled Upscaling (Beta).json @@ -2,7 +2,7 @@ "name": "Tiled Upscaling (Beta)", "author": "Invoke", "description": "A workflow to upscale an input image with tiled upscaling. ", - "version": "2.0.0", + "version": "2.1.0", "contact": "invoke@invoke.ai", "tags": "tiled, upscaling, sd1.5", "notes": "", @@ -41,10 +41,318 @@ } ], "meta": { - "category": "default", - "version": "3.0.0" + "version": "3.0.0", + "category": "default" }, "nodes": [ + { + "id": "2ff466b8-5e2a-4d8f-923a-a3884c7ecbc5", + "type": "invocation", + "data": { + "id": "2ff466b8-5e2a-4d8f-923a-a3884c7ecbc5", + "version": "1.0.3", + "label": "", + "notes": "", + "type": "main_model_loader", + "inputs": { + "model": { + "name": "model", + "label": "" + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": -4514.466823162653, + "y": -1235.7908800002283 + } + }, + { + "id": "287f134f-da8d-41d1-884e-5940e8f7b816", + "type": "invocation", + "data": { + "id": "287f134f-da8d-41d1-884e-5940e8f7b816", + "version": "1.4.1", + "label": "", + "notes": "", + "type": "ip_adapter", + "inputs": { + "image": { + "name": "image", + "label": "" + }, + "ip_adapter_model": { + "name": "ip_adapter_model", + "label": "IP-Adapter Model (select ip_adapter_sd15)", + "value": { + "key": "1cc210bb-4d0a-4312-b36c-b5d46c43768e", + "hash": "blake3:3d669dffa7471b357b4df088b99ffb6bf4d4383d5e0ef1de5ec1c89728a3d5a5", + "name": "ip_adapter_sd15", + "base": "sd-1", + "type": "ip_adapter" + } + }, + "clip_vision_model": { + "name": "clip_vision_model", + "label": "", + "value": "ViT-H" + }, + "weight": { + "name": "weight", + "label": "", + "value": 0.2 + }, + "method": { + "name": "method", + "label": "", + "value": "full" + }, + "begin_step_percent": { + "name": "begin_step_percent", + "label": "", + "value": 0 + }, + "end_step_percent": { + "name": "end_step_percent", + "label": "", + "value": 1 + }, + "mask": { + "name": "mask", + "label": "" + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": -2855.8555540799207, + "y": -183.58854843775742 + } + }, + { + "id": "b76fe66f-7884-43ad-b72c-fadc81d7a73c", + "type": "invocation", + "data": { + "id": "b76fe66f-7884-43ad-b72c-fadc81d7a73c", + "version": "1.3.0", + "label": "", + "notes": "", + "type": "l2i", + "inputs": { + "board": { + "name": "board", + "label": "" + }, + "metadata": { + "name": "metadata", + "label": "" + }, + "latents": { + "name": "latents", + "label": "" + }, + "vae": { + "name": "vae", + "label": "" + }, + "tiled": { + "name": "tiled", + "label": "", + "value": false + }, + "tile_size": { + "name": "tile_size", + "label": "", + "value": 0 + }, + "fp32": { + "name": "fp32", + "label": "", + "value": false + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": -1999.770193862987, + "y": -1075 + } + }, + { + "id": "d334f2da-016a-4524-9911-bdab85546888", + "type": "invocation", + "data": { + "id": "d334f2da-016a-4524-9911-bdab85546888", + "version": "1.1.2", + "label": "", + "notes": "", + "type": "controlnet", + "inputs": { + "image": { + "name": "image", + "label": "" + }, + "control_model": { + "name": "control_model", + "label": "Control Model (select contro_v11f1e_sd15_tile)", + "value": { + "key": "773843c8-db1f-4502-8f65-59782efa7960", + "hash": "blake3:f0812e13758f91baf4e54b7dbb707b70642937d3b2098cd2b94cc36d3eba308e", + "name": "control_v11f1e_sd15_tile", + "base": "sd-1", + "type": "controlnet" + } + }, + "control_weight": { + "name": "control_weight", + "label": "", + "value": 1 + }, + "begin_step_percent": { + "name": "begin_step_percent", + "label": "", + "value": 0 + }, + "end_step_percent": { + "name": "end_step_percent", + "label": "Structural Control", + "value": 1 + }, + "control_mode": { + "name": "control_mode", + "label": "", + "value": "more_control" + }, + "resize_mode": { + "name": "resize_mode", + "label": "", + "value": "just_resize" + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": -2481.9569385477016, + "y": -181.06590482739782 + } + }, + { + "id": "338b883c-3728-4f18-b3a6-6e7190c2f850", + "type": "invocation", + "data": { + "id": "338b883c-3728-4f18-b3a6-6e7190c2f850", + "version": "1.1.0", + "label": "", + "notes": "", + "type": "i2l", + "inputs": { + "image": { + "name": "image", + "label": "" + }, + "vae": { + "name": "vae", + "label": "" + }, + "tiled": { + "name": "tiled", + "label": "", + "value": false + }, + "tile_size": { + "name": "tile_size", + "label": "", + "value": 0 + }, + "fp32": { + "name": "fp32", + "label": "", + "value": false + } + }, + "isOpen": false, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": -2908.4791167517287, + "y": -408.87504820159086 + } + }, + { + "id": "947c3f88-0305-4695-8355-df4abac64b1c", + "type": "invocation", + "data": { + "id": "947c3f88-0305-4695-8355-df4abac64b1c", + "version": "1.2.0", + "label": "", + "notes": "", + "type": "compel", + "inputs": { + "prompt": { + "name": "prompt", + "label": "", + "value": "" + }, + "clip": { + "name": "clip", + "label": "" + }, + "mask": { + "name": "mask", + "label": "" + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": -4014.4136788915944, + "y": -968.5677253775948 + } + }, + { + "id": "9b2d8c58-ce8f-4162-a5a1-48de854040d6", + "type": "invocation", + "data": { + "id": "9b2d8c58-ce8f-4162-a5a1-48de854040d6", + "version": "1.2.0", + "label": "", + "notes": "", + "type": "compel", + "inputs": { + "prompt": { + "name": "prompt", + "label": "Positive Prompt", + "value": "" + }, + "clip": { + "name": "clip", + "label": "" + }, + "mask": { + "name": "mask", + "label": "" + } + }, + "isOpen": true, + "isIntermediate": true, + "useCache": true + }, + "position": { + "x": -4014.4136788915944, + "y": -1243.5677253775948 + } + }, { "id": "b875cae6-d8a3-4fdc-b969-4d53cbd03f9a", "type": "invocation", @@ -181,64 +489,6 @@ "y": 3.422855503409039 } }, - { - "id": "9b2d8c58-ce8f-4162-a5a1-48de854040d6", - "type": "invocation", - "data": { - "id": "9b2d8c58-ce8f-4162-a5a1-48de854040d6", - "version": "1.1.1", - "label": "", - "notes": "", - "type": "compel", - "inputs": { - "prompt": { - "name": "prompt", - "label": "Positive Prompt", - "value": "" - }, - "clip": { - "name": "clip", - "label": "" - } - }, - "isOpen": true, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": -4014.4136788915944, - "y": -1243.5677253775948 - } - }, - { - "id": "947c3f88-0305-4695-8355-df4abac64b1c", - "type": "invocation", - "data": { - "id": "947c3f88-0305-4695-8355-df4abac64b1c", - "version": "1.1.1", - "label": "", - "notes": "", - "type": "compel", - "inputs": { - "prompt": { - "name": "prompt", - "label": "", - "value": "" - }, - "clip": { - "name": "clip", - "label": "" - } - }, - "isOpen": true, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": -4014.4136788915944, - "y": -968.5677253775948 - } - }, { "id": "b3513fed-ed42-408d-b382-128fdb0de523", "type": "invocation", @@ -379,104 +629,6 @@ "y": -29.08699277598673 } }, - { - "id": "338b883c-3728-4f18-b3a6-6e7190c2f850", - "type": "invocation", - "data": { - "id": "338b883c-3728-4f18-b3a6-6e7190c2f850", - "version": "1.0.2", - "label": "", - "notes": "", - "type": "i2l", - "inputs": { - "image": { - "name": "image", - "label": "" - }, - "vae": { - "name": "vae", - "label": "" - }, - "tiled": { - "name": "tiled", - "label": "", - "value": false - }, - "fp32": { - "name": "fp32", - "label": "", - "value": false - } - }, - "isOpen": false, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": -2908.4791167517287, - "y": -408.87504820159086 - } - }, - { - "id": "d334f2da-016a-4524-9911-bdab85546888", - "type": "invocation", - "data": { - "id": "d334f2da-016a-4524-9911-bdab85546888", - "version": "1.1.1", - "label": "", - "notes": "", - "type": "controlnet", - "inputs": { - "image": { - "name": "image", - "label": "" - }, - "control_model": { - "name": "control_model", - "label": "Control Model (select contro_v11f1e_sd15_tile)", - "value": { - "key": "773843c8-db1f-4502-8f65-59782efa7960", - "hash": "blake3:f0812e13758f91baf4e54b7dbb707b70642937d3b2098cd2b94cc36d3eba308e", - "name": "control_v11f1e_sd15_tile", - "base": "sd-1", - "type": "controlnet" - } - }, - "control_weight": { - "name": "control_weight", - "label": "", - "value": 1 - }, - "begin_step_percent": { - "name": "begin_step_percent", - "label": "", - "value": 0 - }, - "end_step_percent": { - "name": "end_step_percent", - "label": "Structural Control", - "value": 1 - }, - "control_mode": { - "name": "control_mode", - "label": "", - "value": "more_control" - }, - "resize_mode": { - "name": "resize_mode", - "label": "", - "value": "just_resize" - } - }, - "isOpen": true, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": -2481.9569385477016, - "y": -181.06590482739782 - } - }, { "id": "1011539e-85de-4e02-a003-0b22358491b8", "type": "invocation", @@ -563,52 +715,6 @@ "y": -1006.415909408244 } }, - { - "id": "b76fe66f-7884-43ad-b72c-fadc81d7a73c", - "type": "invocation", - "data": { - "id": "b76fe66f-7884-43ad-b72c-fadc81d7a73c", - "version": "1.2.2", - "label": "", - "notes": "", - "type": "l2i", - "inputs": { - "board": { - "name": "board", - "label": "" - }, - "metadata": { - "name": "metadata", - "label": "" - }, - "latents": { - "name": "latents", - "label": "" - }, - "vae": { - "name": "vae", - "label": "" - }, - "tiled": { - "name": "tiled", - "label": "", - "value": false - }, - "fp32": { - "name": "fp32", - "label": "", - "value": false - } - }, - "isOpen": true, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": -1999.770193862987, - "y": -1075 - } - }, { "id": "ab6f5dda-4b60-4ddf-99f2-f61fb5937527", "type": "invocation", @@ -779,56 +885,6 @@ "y": -78.2819050861178 } }, - { - "id": "287f134f-da8d-41d1-884e-5940e8f7b816", - "type": "invocation", - "data": { - "id": "287f134f-da8d-41d1-884e-5940e8f7b816", - "version": "1.2.2", - "label": "", - "notes": "", - "type": "ip_adapter", - "inputs": { - "image": { - "name": "image", - "label": "" - }, - "ip_adapter_model": { - "name": "ip_adapter_model", - "label": "IP-Adapter Model (select ip_adapter_sd15)", - "value": { - "key": "1cc210bb-4d0a-4312-b36c-b5d46c43768e", - "hash": "blake3:3d669dffa7471b357b4df088b99ffb6bf4d4383d5e0ef1de5ec1c89728a3d5a5", - "name": "ip_adapter_sd15", - "base": "sd-1", - "type": "ip_adapter" - } - }, - "weight": { - "name": "weight", - "label": "", - "value": 0.2 - }, - "begin_step_percent": { - "name": "begin_step_percent", - "label": "", - "value": 0 - }, - "end_step_percent": { - "name": "end_step_percent", - "label": "", - "value": 1 - } - }, - "isOpen": true, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": -2855.8555540799207, - "y": -183.58854843775742 - } - }, { "id": "1f86c8bf-06f9-4e28-abee-02f46f445ac4", "type": "invocation", @@ -899,30 +955,6 @@ "y": -41.810810454906914 } }, - { - "id": "2ff466b8-5e2a-4d8f-923a-a3884c7ecbc5", - "type": "invocation", - "data": { - "id": "2ff466b8-5e2a-4d8f-923a-a3884c7ecbc5", - "version": "1.0.2", - "label": "", - "notes": "", - "type": "main_model_loader", - "inputs": { - "model": { - "name": "model", - "label": "" - } - }, - "isOpen": true, - "isIntermediate": true, - "useCache": true - }, - "position": { - "x": -4514.466823162653, - "y": -1235.7908800002283 - } - }, { "id": "f5d9bf3b-2646-4b17-9894-20fd2b4218ea", "type": "invocation", diff --git a/invokeai/backend/image_util/lineart_anime.py b/invokeai/backend/image_util/lineart_anime.py index 5185d92c51..33d16bb361 100644 --- a/invokeai/backend/image_util/lineart_anime.py +++ b/invokeai/backend/image_util/lineart_anime.py @@ -98,7 +98,7 @@ class UnetSkipConnectionBlock(nn.Module): """ super(UnetSkipConnectionBlock, self).__init__() self.outermost = outermost - if type(norm_layer) == functools.partial: + if isinstance(norm_layer, functools.partial): use_bias = norm_layer.func == nn.InstanceNorm2d else: use_bias = norm_layer == nn.InstanceNorm2d diff --git a/invokeai/backend/ip_adapter/ip_adapter.py b/invokeai/backend/ip_adapter/ip_adapter.py index 75286f4733..87ce029a87 100644 --- a/invokeai/backend/ip_adapter/ip_adapter.py +++ b/invokeai/backend/ip_adapter/ip_adapter.py @@ -124,16 +124,14 @@ class IPAdapter(RawModel): self.device, dtype=self.dtype ) - def to( - self, device: Optional[torch.device] = None, dtype: Optional[torch.dtype] = None, non_blocking: bool = False - ): + def to(self, device: Optional[torch.device] = None, dtype: Optional[torch.dtype] = None): if device is not None: self.device = device if dtype is not None: self.dtype = dtype - self._image_proj_model.to(device=self.device, dtype=self.dtype, non_blocking=non_blocking) - self.attn_weights.to(device=self.device, dtype=self.dtype, non_blocking=non_blocking) + self._image_proj_model.to(device=self.device, dtype=self.dtype) + self.attn_weights.to(device=self.device, dtype=self.dtype) def calc_size(self) -> int: # HACK(ryand): Fix this issue with circular imports. diff --git a/invokeai/backend/lora.py b/invokeai/backend/lora.py index 9c669a4c78..8ef81915f1 100644 --- a/invokeai/backend/lora.py +++ b/invokeai/backend/lora.py @@ -11,7 +11,6 @@ from typing_extensions import Self from invokeai.backend.model_manager import BaseModelType from invokeai.backend.raw_model import RawModel -from invokeai.backend.util.devices import TorchDevice class LoRALayerBase: @@ -57,14 +56,9 @@ class LoRALayerBase: model_size += val.nelement() * val.element_size() return model_size - def to( - self, - device: Optional[torch.device] = None, - dtype: Optional[torch.dtype] = None, - non_blocking: bool = False, - ) -> None: + def to(self, device: Optional[torch.device] = None, dtype: Optional[torch.dtype] = None) -> None: if self.bias is not None: - self.bias = self.bias.to(device=device, dtype=dtype, non_blocking=non_blocking) + self.bias = self.bias.to(device=device, dtype=dtype) # TODO: find and debug lora/locon with bias @@ -106,19 +100,14 @@ class LoRALayer(LoRALayerBase): model_size += val.nelement() * val.element_size() return model_size - def to( - self, - device: Optional[torch.device] = None, - dtype: Optional[torch.dtype] = None, - non_blocking: bool = False, - ) -> None: - super().to(device=device, dtype=dtype, non_blocking=non_blocking) + def to(self, device: Optional[torch.device] = None, dtype: Optional[torch.dtype] = None) -> None: + super().to(device=device, dtype=dtype) - self.up = self.up.to(device=device, dtype=dtype, non_blocking=non_blocking) - self.down = self.down.to(device=device, dtype=dtype, non_blocking=non_blocking) + self.up = self.up.to(device=device, dtype=dtype) + self.down = self.down.to(device=device, dtype=dtype) if self.mid is not None: - self.mid = self.mid.to(device=device, dtype=dtype, non_blocking=non_blocking) + self.mid = self.mid.to(device=device, dtype=dtype) class LoHALayer(LoRALayerBase): @@ -167,23 +156,18 @@ class LoHALayer(LoRALayerBase): model_size += val.nelement() * val.element_size() return model_size - def to( - self, - device: Optional[torch.device] = None, - dtype: Optional[torch.dtype] = None, - non_blocking: bool = False, - ) -> None: + def to(self, device: Optional[torch.device] = None, dtype: Optional[torch.dtype] = None) -> None: super().to(device=device, dtype=dtype) - self.w1_a = self.w1_a.to(device=device, dtype=dtype, non_blocking=non_blocking) - self.w1_b = self.w1_b.to(device=device, dtype=dtype, non_blocking=non_blocking) + self.w1_a = self.w1_a.to(device=device, dtype=dtype) + self.w1_b = self.w1_b.to(device=device, dtype=dtype) if self.t1 is not None: - self.t1 = self.t1.to(device=device, dtype=dtype, non_blocking=non_blocking) + self.t1 = self.t1.to(device=device, dtype=dtype) - self.w2_a = self.w2_a.to(device=device, dtype=dtype, non_blocking=non_blocking) - self.w2_b = self.w2_b.to(device=device, dtype=dtype, non_blocking=non_blocking) + self.w2_a = self.w2_a.to(device=device, dtype=dtype) + self.w2_b = self.w2_b.to(device=device, dtype=dtype) if self.t2 is not None: - self.t2 = self.t2.to(device=device, dtype=dtype, non_blocking=non_blocking) + self.t2 = self.t2.to(device=device, dtype=dtype) class LoKRLayer(LoRALayerBase): @@ -264,12 +248,7 @@ class LoKRLayer(LoRALayerBase): model_size += val.nelement() * val.element_size() return model_size - def to( - self, - device: Optional[torch.device] = None, - dtype: Optional[torch.dtype] = None, - non_blocking: bool = False, - ) -> None: + def to(self, device: Optional[torch.device] = None, dtype: Optional[torch.dtype] = None) -> None: super().to(device=device, dtype=dtype) if self.w1 is not None: @@ -277,19 +256,19 @@ class LoKRLayer(LoRALayerBase): else: assert self.w1_a is not None assert self.w1_b is not None - self.w1_a = self.w1_a.to(device=device, dtype=dtype, non_blocking=non_blocking) - self.w1_b = self.w1_b.to(device=device, dtype=dtype, non_blocking=non_blocking) + self.w1_a = self.w1_a.to(device=device, dtype=dtype) + self.w1_b = self.w1_b.to(device=device, dtype=dtype) if self.w2 is not None: - self.w2 = self.w2.to(device=device, dtype=dtype, non_blocking=non_blocking) + self.w2 = self.w2.to(device=device, dtype=dtype) else: assert self.w2_a is not None assert self.w2_b is not None - self.w2_a = self.w2_a.to(device=device, dtype=dtype, non_blocking=non_blocking) - self.w2_b = self.w2_b.to(device=device, dtype=dtype, non_blocking=non_blocking) + self.w2_a = self.w2_a.to(device=device, dtype=dtype) + self.w2_b = self.w2_b.to(device=device, dtype=dtype) if self.t2 is not None: - self.t2 = self.t2.to(device=device, dtype=dtype, non_blocking=non_blocking) + self.t2 = self.t2.to(device=device, dtype=dtype) class FullLayer(LoRALayerBase): @@ -319,15 +298,10 @@ class FullLayer(LoRALayerBase): model_size += self.weight.nelement() * self.weight.element_size() return model_size - def to( - self, - device: Optional[torch.device] = None, - dtype: Optional[torch.dtype] = None, - non_blocking: bool = False, - ) -> None: + def to(self, device: Optional[torch.device] = None, dtype: Optional[torch.dtype] = None) -> None: super().to(device=device, dtype=dtype) - self.weight = self.weight.to(device=device, dtype=dtype, non_blocking=non_blocking) + self.weight = self.weight.to(device=device, dtype=dtype) class IA3Layer(LoRALayerBase): @@ -359,16 +333,11 @@ class IA3Layer(LoRALayerBase): model_size += self.on_input.nelement() * self.on_input.element_size() return model_size - def to( - self, - device: Optional[torch.device] = None, - dtype: Optional[torch.dtype] = None, - non_blocking: bool = False, - ): + def to(self, device: Optional[torch.device] = None, dtype: Optional[torch.dtype] = None): super().to(device=device, dtype=dtype) - self.weight = self.weight.to(device=device, dtype=dtype, non_blocking=non_blocking) - self.on_input = self.on_input.to(device=device, dtype=dtype, non_blocking=non_blocking) + self.weight = self.weight.to(device=device, dtype=dtype) + self.on_input = self.on_input.to(device=device, dtype=dtype) AnyLoRALayer = Union[LoRALayer, LoHALayer, LoKRLayer, FullLayer, IA3Layer] @@ -390,15 +359,10 @@ class LoRAModelRaw(RawModel): # (torch.nn.Module): def name(self) -> str: return self._name - def to( - self, - device: Optional[torch.device] = None, - dtype: Optional[torch.dtype] = None, - non_blocking: bool = False, - ) -> None: + def to(self, device: Optional[torch.device] = None, dtype: Optional[torch.dtype] = None) -> None: # TODO: try revert if exception? for _key, layer in self.layers.items(): - layer.to(device=device, dtype=dtype, non_blocking=non_blocking) + layer.to(device=device, dtype=dtype) def calc_size(self) -> int: model_size = 0 @@ -521,7 +485,7 @@ class LoRAModelRaw(RawModel): # (torch.nn.Module): # lower memory consumption by removing already parsed layer values state_dict[layer_key].clear() - layer.to(device=device, dtype=dtype, non_blocking=TorchDevice.get_non_blocking(device)) + layer.to(device=device, dtype=dtype) model.layers[layer_key] = layer return model diff --git a/invokeai/backend/model_manager/load/model_cache/model_cache_default.py b/invokeai/backend/model_manager/load/model_cache/model_cache_default.py index 9027b7b5b7..e69201e739 100644 --- a/invokeai/backend/model_manager/load/model_cache/model_cache_default.py +++ b/invokeai/backend/model_manager/load/model_cache/model_cache_default.py @@ -289,11 +289,9 @@ class ModelCache(ModelCacheBase[AnyModel]): else: new_dict: Dict[str, torch.Tensor] = {} for k, v in cache_entry.state_dict.items(): - new_dict[k] = v.to( - target_device, copy=True, non_blocking=TorchDevice.get_non_blocking(target_device) - ) + new_dict[k] = v.to(target_device, copy=True) cache_entry.model.load_state_dict(new_dict, assign=True) - cache_entry.model.to(target_device, non_blocking=TorchDevice.get_non_blocking(target_device)) + cache_entry.model.to(target_device) cache_entry.device = target_device except Exception as e: # blow away cache entry self._delete_cache_entry(cache_entry) diff --git a/invokeai/backend/model_patcher.py b/invokeai/backend/model_patcher.py index 8c7a62c371..8b8aa6d5a5 100644 --- a/invokeai/backend/model_patcher.py +++ b/invokeai/backend/model_patcher.py @@ -139,15 +139,12 @@ class ModelPatcher: # We intentionally move to the target device first, then cast. Experimentally, this was found to # be significantly faster for 16-bit CPU tensors being moved to a CUDA device than doing the # same thing in a single call to '.to(...)'. - layer.to(device=device, non_blocking=TorchDevice.get_non_blocking(device)) - layer.to(dtype=torch.float32, non_blocking=TorchDevice.get_non_blocking(device)) + layer.to(device=device) + layer.to(dtype=torch.float32) # TODO(ryand): Using torch.autocast(...) over explicit casting may offer a speed benefit on CUDA # devices here. Experimentally, it was found to be very slow on CPU. More investigation needed. layer_weight = layer.get_weight(module.weight) * (lora_weight * layer_scale) - layer.to( - device=TorchDevice.CPU_DEVICE, - non_blocking=TorchDevice.get_non_blocking(TorchDevice.CPU_DEVICE), - ) + layer.to(device=TorchDevice.CPU_DEVICE) assert isinstance(layer_weight, torch.Tensor) # mypy thinks layer_weight is a float|Any ??! if module.weight.shape != layer_weight.shape: @@ -156,7 +153,7 @@ class ModelPatcher: layer_weight = layer_weight.reshape(module.weight.shape) assert isinstance(layer_weight, torch.Tensor) # mypy thinks layer_weight is a float|Any ??! - module.weight += layer_weight.to(dtype=dtype, non_blocking=TorchDevice.get_non_blocking(device)) + module.weight += layer_weight.to(dtype=dtype) yield # wait for context manager exit @@ -164,9 +161,7 @@ class ModelPatcher: assert hasattr(model, "get_submodule") # mypy not picking up fact that torch.nn.Module has get_submodule() with torch.no_grad(): for module_key, weight in original_weights.items(): - model.get_submodule(module_key).weight.copy_( - weight, non_blocking=TorchDevice.get_non_blocking(weight.device) - ) + model.get_submodule(module_key).weight.copy_(weight) @classmethod @contextmanager diff --git a/invokeai/backend/onnx/onnx_runtime.py b/invokeai/backend/onnx/onnx_runtime.py index d562a46dff..a8132d4b23 100644 --- a/invokeai/backend/onnx/onnx_runtime.py +++ b/invokeai/backend/onnx/onnx_runtime.py @@ -190,12 +190,7 @@ class IAIOnnxRuntimeModel(RawModel): return self.session.run(None, inputs) # compatability with RawModel ABC - def to( - self, - device: Optional[torch.device] = None, - dtype: Optional[torch.dtype] = None, - non_blocking: bool = False, - ) -> None: + def to(self, device: Optional[torch.device] = None, dtype: Optional[torch.dtype] = None) -> None: pass # compatability with diffusers load code diff --git a/invokeai/backend/raw_model.py b/invokeai/backend/raw_model.py index 6cce354c45..23502b20cb 100644 --- a/invokeai/backend/raw_model.py +++ b/invokeai/backend/raw_model.py @@ -18,10 +18,5 @@ class RawModel(ABC): """ @abstractmethod - def to( - self, - device: Optional[torch.device] = None, - dtype: Optional[torch.dtype] = None, - non_blocking: bool = False, - ) -> None: + def to(self, device: Optional[torch.device] = None, dtype: Optional[torch.dtype] = None) -> None: pass diff --git a/invokeai/backend/textual_inversion.py b/invokeai/backend/textual_inversion.py index 483f2da88c..0345478b97 100644 --- a/invokeai/backend/textual_inversion.py +++ b/invokeai/backend/textual_inversion.py @@ -65,17 +65,12 @@ class TextualInversionModelRaw(RawModel): return result - def to( - self, - device: Optional[torch.device] = None, - dtype: Optional[torch.dtype] = None, - non_blocking: bool = False, - ) -> None: + def to(self, device: Optional[torch.device] = None, dtype: Optional[torch.dtype] = None) -> None: if not torch.cuda.is_available(): return for emb in [self.embedding, self.embedding_2]: if emb is not None: - emb.to(device=device, dtype=dtype, non_blocking=non_blocking) + emb.to(device=device, dtype=dtype) def calc_size(self) -> int: """Get the size of this model in bytes.""" diff --git a/invokeai/backend/util/devices.py b/invokeai/backend/util/devices.py index 1cba70c662..83ce055024 100644 --- a/invokeai/backend/util/devices.py +++ b/invokeai/backend/util/devices.py @@ -112,15 +112,3 @@ class TorchDevice: @classmethod def _to_dtype(cls, precision_name: TorchPrecisionNames) -> torch.dtype: return NAME_TO_PRECISION[precision_name] - - @staticmethod - def get_non_blocking(to_device: torch.device) -> bool: - """Return the non_blocking flag to be used when moving a tensor to a given device. - MPS may have unexpected errors with non-blocking operations - we should not use non-blocking when moving _to_ MPS. - When moving _from_ MPS, we can use non-blocking operations. - - See: - - https://github.com/pytorch/pytorch/issues/107455 - - https://discuss.pytorch.org/t/should-we-set-non-blocking-to-true/38234/28 - """ - return False if to_device.type == "mps" else True diff --git a/invokeai/frontend/web/public/locales/de.json b/invokeai/frontend/web/public/locales/de.json index 2da27264a1..352b6ffcbf 100644 --- a/invokeai/frontend/web/public/locales/de.json +++ b/invokeai/frontend/web/public/locales/de.json @@ -4,7 +4,7 @@ "reportBugLabel": "Fehler melden", "settingsLabel": "Einstellungen", "img2img": "Bild zu Bild", - "nodes": "Arbeitsabläufe", + "nodes": "Workflows", "upload": "Hochladen", "load": "Laden", "statusDisconnected": "Getrennt", @@ -18,16 +18,16 @@ "postprocessing": "Nachbearbeitung", "t2iAdapter": "T2I Adapter", "communityLabel": "Gemeinschaft", - "dontAskMeAgain": "Frag mich nicht nochmal", - "areYouSure": "Bist du dir sicher?", + "dontAskMeAgain": "Nicht nochmal fragen", + "areYouSure": "Bist du sicher?", "on": "An", - "nodeEditor": "Knoten Editor", + "nodeEditor": "Node-Editor", "ipAdapter": "IP Adapter", - "auto": "Automatisch", + "auto": "Auto", "controlNet": "ControlNet", "imageFailedToLoad": "Kann Bild nicht laden", "modelManager": "Model Manager", - "learnMore": "Mehr lernen", + "learnMore": "Mehr erfahren", "loading": "Lade", "random": "Zufall", "batch": "Stapel-Manager", @@ -42,7 +42,7 @@ "outputs": "Ausgabe", "data": "Daten", "safetensors": "Safe-Tensors", - "outpaint": "Outpaint (Außen ausmalen)", + "outpaint": "Outpaint", "details": "Details", "format": "Format", "unknown": "Unbekannt", @@ -78,7 +78,20 @@ "add": "Hinzufügen", "loglevel": "Protokoll Stufe", "selected": "Ausgewählt", - "beta": "Beta" + "beta": "Beta", + "comparing": "Vergleichen", + "comparingDesc": "Bilder vergleichen", + "editor": "Editor", + "goTo": "Gehe zu", + "positivePrompt": "Positiv-Prompt", + "negativePrompt": "Negativ-Prompt", + "editing": "Bearbeiten", + "editingDesc": "Bearbeiten auf der Kontrollebenen-Leinwand", + "viewing": "Ansehen", + "viewingDesc": "Bilder in großer Galerie ansehen", + "tab": "Tabulator", + "enabled": "Aktiviert", + "disabled": "Ausgeschaltet" }, "gallery": { "galleryImageSize": "Bildgröße", @@ -585,17 +598,18 @@ "mode": "Modus", "resetUI": "$t(accessibility.reset) von UI", "createIssue": "Ticket erstellen", - "about": "Über" + "about": "Über", + "submitSupportTicket": "Support-Ticket senden" }, "boards": { - "autoAddBoard": "Automatisches Hinzufügen zum Board", - "topMessage": "Dieser Ordner enthält Bilder die in den folgenden Funktionen verwendet werden:", + "autoAddBoard": "Board automatisch erstellen", + "topMessage": "Dieser Ordner enthält Bilder, die in den folgenden Funktionen verwendet werden:", "move": "Bewegen", "menuItemAutoAdd": "Auto-Hinzufügen zu diesem Ordner", "myBoard": "Meine Ordner", "searchBoard": "Ordner durchsuchen...", "noMatching": "Keine passenden Ordner", - "selectBoard": "Ordner aussuchen", + "selectBoard": "Ordner wählen", "cancel": "Abbrechen", "addBoard": "Board hinzufügen", "uncategorized": "Ohne Kategorie", @@ -605,30 +619,41 @@ "clearSearch": "Suche leeren", "bottomMessage": "Löschen des Boards und seiner Bilder setzt alle Funktionen zurück, die sie gerade verwenden.", "deleteBoardOnly": "Nur Ordner löschen", - "deleteBoard": "Löschen Ordner", - "deleteBoardAndImages": "Löschen Ordner und Bilder", - "deletedBoardsCannotbeRestored": "Gelöschte Ordner könnte nicht wiederhergestellt werden", - "movingImagesToBoard_one": "Verschiebe {{count}} Bild zu Ordner:", - "movingImagesToBoard_other": "Verschiebe {{count}} Bilder in Ordner:" + "deleteBoard": "Lösche Ordner", + "deleteBoardAndImages": "Lösche Ordner und Bilder", + "deletedBoardsCannotbeRestored": "Gelöschte Ordner können nicht wiederhergestellt werden", + "movingImagesToBoard_one": "Verschiebe {{count}} Bild in Ordner:", + "movingImagesToBoard_other": "Verschiebe {{count}} Bilder in Ordner:", + "selectedForAutoAdd": "Ausgewählt für Automatisches hinzufügen", + "imagesWithCount_one": "{{count}} Bild", + "imagesWithCount_other": "{{count}} Bilder", + "addPrivateBoard": "Privaten Ordner hinzufügen", + "addSharedBoard": "Geteilten Ordner hinzufügen", + "boards": "Ordner", + "unarchiveBoard": "Unarchive Ordner", + "private": "Private Ordner", + "shared": "Geteilte Ordner", + "archiveBoard": "Ordner archivieren", + "archived": "Archiviert" }, "controlnet": { "showAdvanced": "Zeige Erweitert", - "contentShuffleDescription": "Mischt den Inhalt von einem Bild", + "contentShuffleDescription": "Mischt den Inhalt des Bilds", "addT2IAdapter": "$t(common.t2iAdapter) hinzufügen", "importImageFromCanvas": "Bild von Zeichenfläche importieren", - "lineartDescription": "Konvertiere Bild in Strichzeichnung", + "lineartDescription": "Konvertiert Bild in Linienzeichnung", "importMaskFromCanvas": "Importiere Maske von Zeichenfläche", "hed": "HED", "hideAdvanced": "Verstecke Erweitert", "contentShuffle": "Inhalt mischen", - "beginEndStepPercent": "Start / Ende Step Prozent", - "duplicate": "Kopieren", + "beginEndStepPercent": "Start/Ende Step Prozent", + "duplicate": "Duplizieren", "f": "F", "h": "H", - "depthMidasDescription": "Tiefenmap erstellen mit Midas", + "depthMidasDescription": "Z-Map erstellen mit Midas", "controlnet": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.controlNet))", - "weight": "Einfluss", - "selectModel": "Wähle ein Modell", + "weight": "Gewichtung", + "selectModel": "Modell wählen", "depthMidas": "Tiefe (Midas)", "w": "W", "addControlNet": "$t(common.controlNet) hinzufügen", @@ -637,7 +662,7 @@ "ip_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.ipAdapter))", "fill": "Füllen", "addIPAdapter": "$t(common.ipAdapter) hinzufügen", - "colorMapDescription": "Erstelle eine Farbkarte von diesem Bild", + "colorMapDescription": "Erstellt eine color-map von diesem Bild", "t2i_adapter": "$t(controlnet.controlAdapter_one) #{{number}} ($t(common.t2iAdapter))", "imageResolution": "Bild Auflösung", "depthZoe": "Tiefe (Zoe)", @@ -646,41 +671,41 @@ "highThreshold": "Hohe Schwelle", "toggleControlNet": "Dieses ControlNet ein- oder ausschalten", "delete": "Löschen", - "controlAdapter_one": "Control Adapter", - "controlAdapter_other": "Control Adapter", + "controlAdapter_one": "Control-Adapter", + "controlAdapter_other": "Control-Adapter", "colorMapTileSize": "Kachelgröße", - "depthZoeDescription": "Tiefenmap erstellen mit Zoe", - "setControlImageDimensions": "Setze Control-Bild Auflösung auf Breite/Höhe", + "depthZoeDescription": "Z-Map erstellen mit Zoe", + "setControlImageDimensions": "Bildauflösung auf optimalen Wert setzen", "resize": "Größe ändern", - "resetControlImage": "Zurücksetzen vom Referenz Bild", + "resetControlImage": "Zurücksetzen vom Kontrollbild", "balanced": "Ausgewogen", "prompt": "Prompt", - "resizeMode": "Größe", + "resizeMode": "Skalierungs-Modus", "processor": "Prozessor", - "saveControlImage": "Speichere Referenz Bild", + "saveControlImage": "Speichere Kontrollbild", "safe": "Speichern", "pidi": "PIDI", - "normalBae": "Normales BAE", + "normalBae": "Normale BAE", "mlsdDescription": "Minimalistischer Liniensegmentdetektor", "control": "Kontrolle", "coarse": "Grob", "crop": "Zuschneiden", "pidiDescription": "PIDI-Bildverarbeitung", - "mediapipeFace": "Mediapipe Gesichter", + "mediapipeFace": "Mediapipe Gesicht", "mlsd": "M-LSD", - "controlMode": "Steuermodus", + "controlMode": "Kontrollmodus", "cannyDescription": "Canny Umrisserkennung", "lineart": "Linienzeichnung", "lineartAnimeDescription": "Lineart-Verarbeitung im Anime-Stil", "minConfidence": "Minimales Vertrauen", "megaControl": "Mega-Kontrolle", - "autoConfigure": "Prozessor Auto-konfig", + "autoConfigure": "Prozessor Auto-Konfig", "normalBaeDescription": "Normale BAE-Verarbeitung", - "noneDescription": "Es wurde keine Verarbeitung angewendet", - "lineartAnime": "Lineart Anime / \"Strichzeichnung Anime\"", + "noneDescription": "Es wurde nichts angewendet", + "lineartAnime": "Strichzeichnung Anime", "mediapipeFaceDescription": "Gesichtserkennung mit Mediapipe", - "canny": "\"Canny\"", - "hedDescription": "Ganzheitlich verschachtelte Kantenerkennung", + "canny": "Canny", + "hedDescription": "Ganzheitlich-verschachtelte Kantenerkennung", "scribble": "Scribble", "maxFaces": "Maximale Anzahl Gesichter", "resizeSimple": "Größe ändern (einfach)", @@ -689,21 +714,23 @@ "small": "Klein", "base": "Basis", "depthAnything": "Depth Anything", - "depthAnythingDescription": "Erstellung einer Tiefenkarte mit der Depth-Anything-Technik", + "depthAnythingDescription": "Erstellung einer Z-Map mit Depth-Anything-Technik", "face": "Gesicht", "body": "Körper", "hands": "Hände", "dwOpenpose": "DW Openpose", "dwOpenposeDescription": "Posenschätzung mit DW Openpose", - "selectCLIPVisionModel": "Wähle ein CLIP Vision Model aus", + "selectCLIPVisionModel": "Wähle ein CLIP-Vision Modell aus", "ipAdapterMethod": "Methode", "composition": "Nur Komposition", "full": "Voll", - "style": "Nur Style" + "style": "Nur Stil", + "setControlImageDimensionsForce": "Bildauflösung setzen (ev. nicht optimal)", + "beginEndStepPercentShort": "Start/Ende %" }, "queue": { "status": "Status", - "cancelTooltip": "Aktuellen Aufgabe abbrechen", + "cancelTooltip": "Aufgabe abbrechen", "queueEmpty": "Warteschlange leer", "in_progress": "In Arbeit", "queueFront": "Am Anfang der Warteschlange einreihen", @@ -739,7 +766,7 @@ "clearQueueAlertDialog2": "Warteschlange wirklich leeren?", "pruneSucceeded": "{{item_count}} abgeschlossene Elemente aus der Warteschlange entfernt", "pauseSucceeded": "Prozess angehalten", - "cancelFailed": "Problem beim Stornieren des Auftrags", + "cancelFailed": "Problem beim Abbrechen", "pauseFailed": "Problem beim Anhalten des Prozesses", "front": "Vorne", "pruneTooltip": "Bereinigen Sie {{item_count}} abgeschlossene Aufträge", @@ -1026,13 +1053,13 @@ }, "hrf": { "enableHrf": "Korrektur für hohe Auflösungen", - "upscaleMethod": "Vergrößerungsmethoden", + "upscaleMethod": "Vergrößerungsmethode", "metadata": { - "strength": "Hochauflösender Fix Stärke", - "enabled": "Hochauflösender Fix aktiviert", - "method": "Hochauflösender Fix Methode" + "strength": "Auflösungs-Fix Stärke", + "enabled": "Auflösungs-Fix aktiviert", + "method": "Auflösungs-Fix Methode" }, - "hrf": "Hochauflösender Fix" + "hrf": "Hohe-Auflösung-Fix" }, "models": { "noMatchingModels": "Keine passenden Modelle", @@ -1063,7 +1090,7 @@ }, "compositing": { "coherenceTab": "Kohärenzpass", - "infillTab": "Füllung / Infill", + "infillTab": "Infill", "title": "Compositing" } }, @@ -1104,8 +1131,8 @@ "showDynamicPrompts": "Dynamische Prompts anzeigen" }, "prompt": { - "noMatchingTriggers": "Keine passenden Auslöser", - "addPromptTrigger": "Auslöse Text hinzufügen", + "noMatchingTriggers": "Keine passenden Trigger", + "addPromptTrigger": "Prompt-Trigger hinzufügen", "compatibleEmbeddings": "Kompatible Einbettungen" } } diff --git a/invokeai/frontend/web/public/locales/en.json b/invokeai/frontend/web/public/locales/en.json index 4b102d6cf3..91a36bcee3 100644 --- a/invokeai/frontend/web/public/locales/en.json +++ b/invokeai/frontend/web/public/locales/en.json @@ -39,10 +39,10 @@ "movingImagesToBoard_other": "Moving {{count}} images to board:", "myBoard": "My Board", "noMatching": "No matching Boards", - "private": "Private", + "private": "Private Boards", "searchBoard": "Search Boards...", "selectBoard": "Select a Board", - "shared": "Shared", + "shared": "Shared Boards", "topMessage": "This board contains images used in the following features:", "unarchiveBoard": "Unarchive Board", "uncategorized": "Uncategorized", @@ -370,6 +370,8 @@ "deleteImage_other": "Delete {{count}} Images", "deleteImageBin": "Deleted images will be sent to your operating system's Bin.", "deleteImagePermanent": "Deleted images cannot be restored.", + "displayBoardSearch": "Display Board Search", + "displaySearch": "Display Search", "download": "Download", "featuresWillReset": "If you delete this image, those features will immediately be reset.", "galleryImageSize": "Image Size", diff --git a/invokeai/frontend/web/public/locales/fr.json b/invokeai/frontend/web/public/locales/fr.json index b8f560e265..558545b2f4 100644 --- a/invokeai/frontend/web/public/locales/fr.json +++ b/invokeai/frontend/web/public/locales/fr.json @@ -1,7 +1,7 @@ { "common": { "hotkeysLabel": "Raccourcis clavier", - "languagePickerLabel": "Sélecteur de langue", + "languagePickerLabel": "Langue", "reportBugLabel": "Signaler un bug", "settingsLabel": "Paramètres", "img2img": "Image en image", @@ -17,7 +17,53 @@ "cancel": "Annuler", "loading": "Chargement", "txt2img": "Texte vers image", - "postprocessing": "Post-Traitement" + "postprocessing": "Post-Traitement", + "file": "Fichier", + "orderBy": "Trier par", + "comparing": "Comparaison", + "add": "Ajouter", + "dontAskMeAgain": "Ne plus me demander", + "nodeEditor": "Éditeur de nœud", + "outputs": "Sorties", + "unknown": "Inconnu", + "editor": "Éditeur", + "error": "Erreur", + "installed": "Installé", + "format": "format", + "goTo": "Aller à", + "input": "Saisie", + "linear": "Linéaire", + "localSystem": "Système local", + "learnMore": "En savoir plus", + "modelManager": "Gestionnaire de modèle", + "notInstalled": "Non $t(common.installed)", + "openInNewTab": "Ouvrir dans un nouvel onglet", + "somethingWentWrong": "Une erreur s'est produite", + "created": "Créé", + "tab": "Onglet", + "folder": "Dossier", + "imageFailedToLoad": "Impossible de charger l'image", + "prevPage": "Page précédente", + "nextPage": "Page suivante", + "selected": "Sélectionné", + "save": "Enregistrer", + "updated": "Mis à jour", + "random": "Aléatoire", + "unknownError": "Erreur inconnue", + "red": "Rouge", + "green": "Vert", + "delete": "Supprimer", + "simple": "Simple", + "template": "Modèle", + "advanced": "Avancé", + "copy": "Copier", + "saveAs": "Enregistrer sous", + "blue": "Bleu", + "alpha": "Alpha", + "editing": "Édition", + "enabled": "Activé", + "disabled": "Désactivé", + "direction": "Direction" }, "gallery": { "galleryImageSize": "Taille de l'image", @@ -368,6 +414,63 @@ "previousImage": "Image précédente", "showOptionsPanel": "Montrer la page d'options", "invokeProgressBar": "Barre de Progression Invoke", - "menu": "Menu" + "menu": "Menu", + "loadMore": "Charger plus", + "about": "À propos", + "mode": "Mode" + }, + "boards": { + "move": "Déplacer", + "cancel": "Annuler", + "loading": "Chargement…", + "archived": "Archivé", + "clearSearch": "Effacer la recherche", + "imagesWithCount_one": "{{count}} image", + "imagesWithCount_many": "{{count}} images", + "imagesWithCount_other": "{{count}} images" + }, + "accordions": { + "advanced": { + "title": "Avancé" + }, + "image": { + "title": "Image" + } + }, + "controlnet": { + "none": "Aucun", + "detectResolution": "Détecter la résolution", + "balanced": "Équilibré", + "colorMap": "Couleur", + "control": "Contrôle", + "controlMode": "Mode de contrôle", + "processor": "Processeur", + "ipAdapterMethod": "Méthode", + "delete": "Supprimer", + "duplicate": "Dupliquer", + "crop": "Rogner", + "imageResolution": "Résolution d'image", + "resize": "Redimensionner" + }, + "queue": { + "clear": "Effacer", + "failed": "Échec", + "session": "Session", + "queueEmpty": "File d'attente vide", + "next": "Suivant", + "queue": "File d'attente", + "clearSucceeded": "File d'attente effacée", + "total": "Total", + "pending": "En attente", + "in_progress": "En cours", + "time": "Heure", + "status": "État", + "openQueue": "Ouvrir la file d'attente", + "queueFront": "Ajouter en premier", + "cancel": "Annuler", + "canceled": "Annulé", + "clearQueueAlertDialog2": "Voulez-vous vraiment effacer la file d'attente ?", + "queueBack": "Ajouter à la file d'attente", + "completed": "Terminé" } } diff --git a/invokeai/frontend/web/public/locales/it.json b/invokeai/frontend/web/public/locales/it.json index 3c0079de59..eced64a1e3 100644 --- a/invokeai/frontend/web/public/locales/it.json +++ b/invokeai/frontend/web/public/locales/it.json @@ -116,9 +116,9 @@ "deleteSelection": "Elimina la selezione", "image": "immagine", "drop": "Rilascia", - "unstarImage": "Rimuovi preferenza immagine", + "unstarImage": "Rimuovi contrassegno immagine", "dropOrUpload": "$t(gallery.drop) o carica", - "starImage": "Immagine preferita", + "starImage": "Contrassegna l'immagine", "dropToUpload": "$t(gallery.drop) per aggiornare", "problemDeletingImagesDesc": "Impossibile eliminare una o più immagini", "problemDeletingImages": "Problema durante l'eliminazione delle immagini", @@ -142,7 +142,15 @@ "compareHelp1": "Tieni premuto Alt mentre fai clic su un'immagine della galleria o usi i tasti freccia per cambiare l'immagine di confronto.", "compareHelp2": "Premi M per scorrere le modalità di confronto.", "compareHelp3": "Premi C per scambiare le immagini confrontate.", - "compareHelp4": "Premi Z o Esc per uscire." + "compareHelp4": "Premi Z o Esc per uscire.", + "newestFirst": "Prima i più nuovi", + "oldestFirst": "Prima i più vecchi", + "sortDirection": "Direzione dell'ordinamento", + "showStarredImagesFirst": "Mostra prima le immagini contrassegnate", + "showArchivedBoards": "Mostra le bacheche archiviate", + "searchImages": "Ricerca per metadati", + "displayBoardSearch": "Mostra la ricerca nelle Bacheche", + "displaySearch": "Mostra la ricerca" }, "hotkeys": { "keyboardShortcuts": "Tasti di scelta rapida", @@ -941,7 +949,22 @@ "deletedBoardsCannotbeRestored": "Le bacheche eliminate non possono essere ripristinate", "movingImagesToBoard_one": "Spostare {{count}} immagine nella bacheca:", "movingImagesToBoard_many": "Spostare {{count}} immagini nella bacheca:", - "movingImagesToBoard_other": "Spostare {{count}} immagini nella bacheca:" + "movingImagesToBoard_other": "Spostare {{count}} immagini nella bacheca:", + "imagesWithCount_one": "{{count}} immagine", + "imagesWithCount_many": "{{count}} immagini", + "imagesWithCount_other": "{{count}} immagini", + "assetsWithCount_one": "{{count}} risorsa", + "assetsWithCount_many": "{{count}} risorse", + "assetsWithCount_other": "{{count}} risorse", + "archiveBoard": "Archivia la bacheca", + "archived": "Archiviato", + "unarchiveBoard": "Annulla l'archiviazione della bacheca", + "selectedForAutoAdd": "Selezionato per l'aggiunta automatica", + "addSharedBoard": "Aggiungi una Bacheca Condivisa", + "boards": "Bacheche", + "private": "Bacheche private", + "shared": "Bacheche condivise", + "addPrivateBoard": "Aggiungi una Bacheca Privata" }, "controlnet": { "contentShuffleDescription": "Rimescola il contenuto di un'immagine", @@ -1005,7 +1028,7 @@ "minConfidence": "Confidenza minima", "scribble": "Scarabocchio", "amult": "Angolo di illuminazione", - "coarse": "Approssimativo", + "coarse": "Grossolano", "resizeSimple": "Ridimensiona (semplice)", "large": "Grande", "small": "Piccolo", @@ -1330,7 +1353,7 @@ "lora": { "heading": "LoRA", "paragraphs": [ - "Modelli leggeri utilizzati insieme ai modelli base." + "Modelli concettuali utilizzati insieme ai modelli di base." ] }, "controlNet": { diff --git a/invokeai/frontend/web/public/locales/ja.json b/invokeai/frontend/web/public/locales/ja.json index e953944c44..6d5775ecd6 100644 --- a/invokeai/frontend/web/public/locales/ja.json +++ b/invokeai/frontend/web/public/locales/ja.json @@ -70,7 +70,25 @@ "outputs": "アウトプット", "prevPage": "前のページ", "unknownError": "未知のエラー", - "orderBy": "並び順:" + "orderBy": "並び順:", + "comparing": "比較中", + "comparingDesc": "2 つの画像の比較する", + "enabled": "有効", + "notInstalled": "未インストール", + "positivePrompt": "プロンプト", + "negativePrompt": "除外する要素", + "selected": "選択済み", + "aboutDesc": "Invokeを業務で利用する場合はマークしてください:", + "beta": "ベータ", + "disabled": "無効", + "loglevel": "ログラベル", + "editor": "エディタ", + "safetensors": "Safetensors", + "tab": "タブ", + "viewingDesc": "画像を大きなギャラリービューで開く", + "editing": "編集", + "editingDesc": "コントロールレイヤキャンバスで編集", + "toResolve": "解決方法" }, "gallery": { "galleryImageSize": "画像のサイズ", @@ -105,7 +123,23 @@ "noImageSelected": "画像が選択されていません", "deleteSelection": "選択中のものを削除", "downloadSelection": "選択中のものをダウンロード", - "starImage": "スターをつける" + "starImage": "スターをつける", + "viewerImage": "閲覧画像", + "compareImage": "比較画像", + "openInViewer": "ビューアで開く", + "selectForCompare": "比較対象として選択", + "selectAnImageToCompare": "比較する画像を選択", + "slider": "スライダー", + "sideBySide": "横並び", + "hover": "ホバー", + "swapImages": "画像を入れ替える", + "compareOptions": "比較オプション", + "stretchToFit": "画面に合わせる", + "exitCompare": "比較を終了する", + "compareHelp1": "Alt キーを押しながらギャラリー画像をクリックするか、矢印キーを使用して比較画像を変更します。", + "compareHelp3": "Cを押して、比較した画像を入れ替えます。", + "compareHelp4": "[Z]または[Esc]を押して終了します。", + "compareHelp2": "M キーを押して比較モードを切り替えます。" }, "hotkeys": { "keyboardShortcuts": "ホットキー", @@ -282,7 +316,8 @@ "title": "手のひらツール" }, "nextStagingImage": { - "desc": "次のプレビュー画像" + "desc": "次のプレビュー画像", + "title": "次のステージング画像" }, "cancelAndClear": { "desc": "生成をキャンセルしキューもクリアします", @@ -302,6 +337,35 @@ "redoStroke": { "title": "ストロークをやり直す", "desc": "ブラシストロークのやり直し" + }, + "resetOptionsAndGallery": { + "title": "オプションとギャラリーをリセット", + "desc": "オプションとギャラリーパネルをリセット" + }, + "quickToggleMove": { + "title": "高速トグル切り替え", + "desc": "一時的に移動モードを切り替える" + }, + "toggleSnap": { + "title": "スナップの切り替え", + "desc": "グリッドへのスナップの切り替え" + }, + "previousStagingImage": { + "desc": "ステージング領域の前の画像", + "title": "前のステージング画像" + }, + "nodesHotkeys": "ノード", + "toggleOptionsAndGallery": { + "desc": "オプションとギャラリーパネルのオンオフを切り替える", + "title": "オプションとギャラリーを切り替える" + }, + "undoStroke": { + "desc": "ブラシストロークの取り消し", + "title": "ストロークの取り消し" + }, + "toggleViewer": { + "desc": "イメージ ビューアーと現在のタブのワークスペースを切り替えます。", + "title": "画像ビューアの切り替え" } }, "modelManager": { @@ -464,10 +528,11 @@ "showGalleryPanel": "ギャラリーパネルを表示", "menu": "メニュー", "loadMore": "さらに読み込む", - "createIssue": "課題の作成", + "createIssue": "問題を報告", "resetUI": "$t(accessibility.reset) UI", "mode": "モード:", - "about": "Invoke について" + "about": "Invoke について", + "submitSupportTicket": "サポート依頼を送信する" }, "controlnet": { "resize": "リサイズ", @@ -551,7 +616,13 @@ "lineartAnime": "アニメ線画", "mlsdDescription": "最小線分検知", "dwOpenpose": "DW オープンポーズ", - "dwOpenposeDescription": "DW オープンポーズによる人体ポーズの推定" + "dwOpenposeDescription": "DW オープンポーズによる人体ポーズの推定", + "ipAdapterMethod": "方式", + "setControlImageDimensionsForce": "モデルを無視してサイズを W/H にコピー", + "style": "スタイルのみ", + "selectCLIPVisionModel": "CLIP Visionのモデルを選択", + "composition": "構図のみ", + "beginEndStepPercentShort": "開始 / 終了 %" }, "metadata": { "seamless": "シームレス", @@ -620,7 +691,10 @@ "time": "時間", "completedIn": "完了まで", "back": "戻る", - "prune": "刈り込み" + "prune": "刈り込み", + "prompts_other": "プロンプト", + "iterations_other": "繰り返し", + "generations_other": "生成" }, "models": { "noMatchingModels": "一致するモデルがありません", @@ -745,5 +819,10 @@ "addPromptTrigger": "プロンプトトリガーを追加", "compatibleEmbeddings": "互換性のある埋め込み", "noMatchingTriggers": "一致するトリガーがありません" + }, + "ui": { + "tabs": { + "queue": "キュー" + } } } diff --git a/invokeai/frontend/web/public/locales/ru.json b/invokeai/frontend/web/public/locales/ru.json index 2f7c711bf2..ecceaf42aa 100644 --- a/invokeai/frontend/web/public/locales/ru.json +++ b/invokeai/frontend/web/public/locales/ru.json @@ -144,7 +144,17 @@ "compareOptions": "Варианты сравнения", "compareHelp1": "Удерживайте Alt при нажатии на изображение в галерее или при помощи клавиш со стрелками, чтобы изменить сравниваемое изображение.", "compareHelp2": "Нажмите M, чтобы переключиться между режимами сравнения.", - "compareHelp3": "Нажмите C, чтобы поменять местами сравниваемые изображения." + "compareHelp3": "Нажмите C, чтобы поменять местами сравниваемые изображения.", + "newestFirst": "Сначала новые", + "sortDirection": "Направление сортировки", + "oldestFirst": "Сначала старые", + "showStarredImagesFirst": "Сначала избранные изображения", + "selectAllOnPage": "Выбрать все на странице", + "selectAllOnBoard": "Выбрать все на доске", + "showArchivedBoards": "Показать архивированные доски", + "searchImages": "Поиск по метаданным", + "displayBoardSearch": "Отобразить поиск досок", + "displaySearch": "Отобразить поиск" }, "hotkeys": { "keyboardShortcuts": "Горячие клавиши", @@ -1043,7 +1053,22 @@ "downloadBoard": "Скачать доску", "deleteBoard": "Удалить доску", "deleteBoardAndImages": "Удалить доску и изображения", - "deletedBoardsCannotbeRestored": "Удаленные доски не подлежат восстановлению" + "deletedBoardsCannotbeRestored": "Удаленные доски не подлежат восстановлению", + "assetsWithCount_one": "{{count}} ассет", + "assetsWithCount_few": "{{count}} ассета", + "assetsWithCount_many": "{{count}} ассетов", + "imagesWithCount_one": "{{count}} изображение", + "imagesWithCount_few": "{{count}} изображения", + "imagesWithCount_many": "{{count}} изображений", + "archiveBoard": "Архивировать доску", + "archived": "Заархивировано", + "unarchiveBoard": "Разархивировать доску", + "selectedForAutoAdd": "Выбрано для автодобавления", + "addSharedBoard": "Добавить общую доску", + "boards": "Доски", + "addPrivateBoard": "Добавить личную доску", + "private": "Личные доски", + "shared": "Общие доски" }, "dynamicPrompts": { "seedBehaviour": { diff --git a/invokeai/frontend/web/public/locales/zh_CN.json b/invokeai/frontend/web/public/locales/zh_CN.json index 45bab5c6da..c4bb52e7cc 100644 --- a/invokeai/frontend/web/public/locales/zh_CN.json +++ b/invokeai/frontend/web/public/locales/zh_CN.json @@ -70,7 +70,23 @@ "add": "添加", "loglevel": "日志级别", "copy": "复制", - "localSystem": "本地系统" + "localSystem": "本地系统", + "aboutHeading": "掌握你的创造力", + "comparing": "对比中", + "comparingDesc": "正在对比两张图片", + "enabled": "已启用", + "disabled": "已禁用", + "red": "红", + "editor": "编辑器", + "positivePrompt": "正向提示词", + "negativePrompt": "反向提示词", + "selected": "选中的", + "viewing": "查看", + "viewingDesc": "在大型画廊视图中查看图片", + "editing": "编辑中", + "green": "绿", + "blue": "蓝", + "editingDesc": "在控制图层画布上编辑" }, "gallery": { "galleryImageSize": "预览大小", @@ -100,7 +116,24 @@ "problemDeletingImagesDesc": "有一张或多张图像无法被删除", "problemDeletingImages": "删除图像时出现问题", "unstarImage": "取消收藏图像", - "starImage": "收藏图像" + "starImage": "收藏图像", + "alwaysShowImageSizeBadge": "始终显示图像尺寸", + "selectForCompare": "选择以比较", + "selectAnImageToCompare": "选择一个图像进行比较", + "slider": "滑块", + "sideBySide": "并排", + "bulkDownloadFailed": "下载失败", + "bulkDownloadRequested": "准备下载", + "bulkDownloadRequestedDesc": "您的下载请求正在准备中,这可能需要一些时间。", + "bulkDownloadRequestFailed": "下载准备过程中出现问题", + "viewerImage": "查看器图像", + "compareImage": "对比图像", + "openInViewer": "在查看器中打开", + "selectAllOnBoard": "选择板块全部", + "hover": "悬停", + "selectAllOnPage": "选择本页全部", + "swapImages": "交换图像", + "compareOptions": "比较选项" }, "hotkeys": { "keyboardShortcuts": "快捷键", @@ -604,7 +637,8 @@ "mode": "模式", "resetUI": "$t(accessibility.reset) UI", "createIssue": "创建问题", - "about": "关于" + "about": "关于", + "submitSupportTicket": "提交支持工单" }, "tooltip": { "feature": { @@ -806,7 +840,21 @@ "controlAdapter_other": "Control Adapters", "lineartAnime": "Lineart Anime", "canny": "Canny", - "resizeSimple": "缩放(简单)" + "resizeSimple": "缩放(简单)", + "body": "身体", + "ipAdapterMethod": "方法", + "setControlImageDimensionsForce": "将尺寸复制到宽/高(忽略模型)", + "depthAnythingDescription": "使用Depth Anything技术生成深度图", + "selectCLIPVisionModel": "选择一个CLIP视觉模型", + "small": "小", + "full": "全部", + "large": "大", + "face": "脸", + "style": "仅风格", + "hands": "手", + "composition": "仅构图", + "modelSize": "模型尺寸", + "dwOpenposeDescription": "使用DW Openpose进行人体姿态预估" }, "queue": { "status": "状态", @@ -863,7 +911,10 @@ "graphFailedToQueue": "节点图加入队列失败", "batchFieldValues": "批处理值", "time": "时间", - "openQueue": "打开队列" + "openQueue": "打开队列", + "prompts_other": "提示词", + "iterations_other": "迭代", + "generations_other": "生成" }, "sdxl": { "refinerStart": "Refiner 开始作用时机", @@ -1238,5 +1289,9 @@ "image": { "title": "图像" } + }, + "prompt": { + "addPromptTrigger": "添加提示词触发器", + "noMatchingTriggers": "没有匹配的触发器" } } diff --git a/invokeai/frontend/web/src/app/components/InvokeAIUI.tsx b/invokeai/frontend/web/src/app/components/InvokeAIUI.tsx index 12611943bc..1dd1a265fb 100644 --- a/invokeai/frontend/web/src/app/components/InvokeAIUI.tsx +++ b/invokeai/frontend/web/src/app/components/InvokeAIUI.tsx @@ -7,11 +7,10 @@ import { $baseUrl } from 'app/store/nanostores/baseUrl'; import { $customNavComponent } from 'app/store/nanostores/customNavComponent'; import type { CustomStarUi } from 'app/store/nanostores/customStarUI'; import { $customStarUI } from 'app/store/nanostores/customStarUI'; -import { $galleryHeader } from 'app/store/nanostores/galleryHeader'; import { $isDebugging } from 'app/store/nanostores/isDebugging'; import { $logo } from 'app/store/nanostores/logo'; import { $openAPISchemaUrl } from 'app/store/nanostores/openAPISchemaUrl'; -import { $projectId } from 'app/store/nanostores/projectId'; +import { $projectId, $projectName, $projectUrl } from 'app/store/nanostores/projectId'; import { $queueId, DEFAULT_QUEUE_ID } from 'app/store/nanostores/queueId'; import { $store } from 'app/store/nanostores/store'; import { $workflowCategories } from 'app/store/nanostores/workflowCategories'; @@ -37,7 +36,8 @@ interface Props extends PropsWithChildren { customNavComponent?: ReactNode; middleware?: Middleware[]; projectId?: string; - galleryHeader?: ReactNode; + projectName?: string; + projectUrl?: string; queueId?: string; selectedImage?: { imageName: string; @@ -58,7 +58,8 @@ const InvokeAIUI = ({ customNavComponent, middleware, projectId, - galleryHeader, + projectName, + projectUrl, queueId, selectedImage, customStarUi, @@ -108,7 +109,7 @@ const InvokeAIUI = ({ $projectId.set(undefined); $queueId.set(DEFAULT_QUEUE_ID); }; - }, [apiUrl, token, middleware, projectId, queueId]); + }, [apiUrl, token, middleware, projectId, queueId, projectName, projectUrl]); useEffect(() => { if (customStarUi) { @@ -141,14 +142,20 @@ const InvokeAIUI = ({ }, [openAPISchemaUrl]); useEffect(() => { - if (galleryHeader) { - $galleryHeader.set(galleryHeader); - } + $projectName.set(projectName); return () => { - $galleryHeader.set(undefined); + $projectName.set(undefined); }; - }, [galleryHeader]); + }, [projectName]); + + useEffect(() => { + $projectUrl.set(projectUrl); + + return () => { + $projectUrl.set(undefined); + }; + }, [projectUrl]); useEffect(() => { if (logo) { diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/addArchivedOrDeletedBoardListener.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/addArchivedOrDeletedBoardListener.ts index c569a6e36d..1581da9b37 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/addArchivedOrDeletedBoardListener.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/addArchivedOrDeletedBoardListener.ts @@ -11,36 +11,114 @@ import { boardsApi } from 'services/api/endpoints/boards'; import { imagesApi } from 'services/api/endpoints/images'; export const addArchivedOrDeletedBoardListener = (startAppListening: AppStartListening) => { + /** + * The auto-add board shouldn't be set to an archived board or deleted board. When we archive a board, delete + * a board, or change a the archived board visibility flag, we may need to reset the auto-add board. + */ startAppListening({ matcher: isAnyOf( - // Updating a board may change its archived status - boardsApi.endpoints.updateBoard.matchFulfilled, // If a board is deleted, we'll need to reset the auto-add board imagesApi.endpoints.deleteBoard.matchFulfilled, - imagesApi.endpoints.deleteBoardAndImages.matchFulfilled, - // When we change the visibility of archived boards, we may need to reset the auto-add board - shouldShowArchivedBoardsChanged + imagesApi.endpoints.deleteBoardAndImages.matchFulfilled ), effect: async (action, { dispatch, getState }) => { - /** - * The auto-add board shouldn't be set to an archived board or deleted board. When we archive a board, delete - * a board, or change a the archived board visibility flag, we may need to reset the auto-add board. - */ - const state = getState(); const queryArgs = selectListBoardsQueryArgs(state); const queryResult = boardsApi.endpoints.listAllBoards.select(queryArgs)(state); - const autoAddBoardId = state.gallery.autoAddBoardId; + const { autoAddBoardId, selectedBoardId } = state.gallery; if (!queryResult.data) { return; } + if (!queryResult.data.find((board) => board.board_id === selectedBoardId)) { + dispatch(boardIdSelected({ boardId: 'none' })); + dispatch(galleryViewChanged('images')); + } if (!queryResult.data.find((board) => board.board_id === autoAddBoardId)) { dispatch(autoAddBoardIdChanged('none')); + } + }, + }); + + // If we archived a board, it may end up hidden. If it's selected or the auto-add board, we should reset those. + startAppListening({ + matcher: boardsApi.endpoints.updateBoard.matchFulfilled, + effect: async (action, { dispatch, getState }) => { + const state = getState(); + const queryArgs = selectListBoardsQueryArgs(state); + const queryResult = boardsApi.endpoints.listAllBoards.select(queryArgs)(state); + const { shouldShowArchivedBoards } = state.gallery; + + if (!queryResult.data) { + return; + } + + const wasArchived = action.meta.arg.originalArgs.changes.archived === true; + + if (wasArchived && !shouldShowArchivedBoards) { + dispatch(autoAddBoardIdChanged('none')); dispatch(boardIdSelected({ boardId: 'none' })); dispatch(galleryViewChanged('images')); } }, }); + + // When we hide archived boards, if the selected or the auto-add board is archived, we should reset those. + startAppListening({ + actionCreator: shouldShowArchivedBoardsChanged, + effect: async (action, { dispatch, getState }) => { + const shouldShowArchivedBoards = action.payload; + + // We only need to take action if we have just hidden archived boards. + if (!shouldShowArchivedBoards) { + return; + } + + const state = getState(); + const queryArgs = selectListBoardsQueryArgs(state); + const queryResult = boardsApi.endpoints.listAllBoards.select(queryArgs)(state); + const { selectedBoardId, autoAddBoardId } = state.gallery; + + if (!queryResult.data) { + return; + } + + // Handle the case where selected board is archived + const selectedBoard = queryResult.data.find((b) => b.board_id === selectedBoardId); + if (selectedBoard && selectedBoard.archived) { + dispatch(boardIdSelected({ boardId: 'none' })); + dispatch(galleryViewChanged('images')); + } + + // Handle the case where auto-add board is archived + const autoAddBoard = queryResult.data.find((b) => b.board_id === autoAddBoardId); + if (autoAddBoard && autoAddBoard.archived) { + dispatch(autoAddBoardIdChanged('none')); + } + }, + }); + + /** + * When listing boards, if the selected or auto-add boards are no longer in the list, we should reset them. + */ + startAppListening({ + matcher: boardsApi.endpoints.listAllBoards.matchFulfilled, + effect: async (action, { dispatch, getState }) => { + const boards = action.payload; + const state = getState(); + const { selectedBoardId, autoAddBoardId } = state.gallery; + + // Handle the case where selected board isn't in the list of boards + if (!boards.find((b) => b.board_id === selectedBoardId)) { + dispatch(boardIdSelected({ boardId: 'none' })); + dispatch(galleryViewChanged('images')); + } + + // Handle the case where auto-add board isn't in the list of boards + if (!boards.find((b) => b.board_id === autoAddBoardId)) { + dispatch(autoAddBoardIdChanged('none')); + } + }, + }); }; diff --git a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageDeletionListeners.ts b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageDeletionListeners.ts index 056346cb68..489adb7476 100644 --- a/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageDeletionListeners.ts +++ b/invokeai/frontend/web/src/app/store/middleware/listenerMiddleware/listeners/imageDeletionListeners.ts @@ -136,7 +136,12 @@ export const addImageDeletionListeners = (startAppListening: AppStartListening) if (data) { const deletedImageIndex = data.items.findIndex((i) => i.image_name === imageDTO.image_name); const nextImage = data.items[deletedImageIndex + 1] ?? data.items[0] ?? null; - dispatch(imageSelected(nextImage)); + if (nextImage?.image_name === imageDTO.image_name) { + // If the next image is the same as the deleted one, it means it was the last image, reset selection + dispatch(imageSelected(null)); + } else { + dispatch(imageSelected(nextImage)); + } } } @@ -176,6 +181,8 @@ export const addImageDeletionListeners = (startAppListening: AppStartListening) const queryArgs = selectListImagesQueryArgs(state); const { data } = imagesApi.endpoints.listImages.select(queryArgs)(state); if (data) { + // When we delete multiple images, we clear the selection. Then, the the next time we load images, we will + // select the first one. This is handled below in the listener for `imagesApi.endpoints.listImages.matchFulfilled`. dispatch(imageSelected(null)); } } diff --git a/invokeai/frontend/web/src/app/store/nanostores/galleryHeader.ts b/invokeai/frontend/web/src/app/store/nanostores/galleryHeader.ts deleted file mode 100644 index 5de7b1dd40..0000000000 --- a/invokeai/frontend/web/src/app/store/nanostores/galleryHeader.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { atom } from 'nanostores'; -import type { ReactNode } from 'react'; - -export const $galleryHeader = atom(undefined); diff --git a/invokeai/frontend/web/src/app/store/nanostores/projectId.ts b/invokeai/frontend/web/src/app/store/nanostores/projectId.ts index 2268ccdff1..c2b14e91ac 100644 --- a/invokeai/frontend/web/src/app/store/nanostores/projectId.ts +++ b/invokeai/frontend/web/src/app/store/nanostores/projectId.ts @@ -4,3 +4,6 @@ import { atom } from 'nanostores'; * The optional project-id header. */ export const $projectId = atom(); + +export const $projectName = atom(); +export const $projectUrl = atom(); diff --git a/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/AddBoardButton.tsx b/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/AddBoardButton.tsx index c6ddb85daa..60468de145 100644 --- a/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/AddBoardButton.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/AddBoardButton.tsx @@ -1,6 +1,6 @@ import { IconButton } from '@invoke-ai/ui-library'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; -import { boardIdSelected } from 'features/gallery/store/gallerySlice'; +import { boardIdSelected, boardSearchTextChanged } from 'features/gallery/store/gallerySlice'; import { memo, useCallback, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { PiPlusBold } from 'react-icons/pi'; @@ -24,10 +24,12 @@ const AddBoardButton = ({ isPrivateBoard }: Props) => { } return t('boards.addSharedBoard'); }, [allowPrivateBoards, isPrivateBoard, t]); + const handleCreateBoard = useCallback(async () => { try { const board = await createBoard({ board_name: t('boards.myBoard'), is_private: isPrivateBoard }).unwrap(); dispatch(boardIdSelected({ boardId: board.board_id })); + dispatch(boardSearchTextChanged('')); } catch { //no-op } @@ -42,7 +44,9 @@ const AddBoardButton = ({ isPrivateBoard }: Props) => { onClick={handleCreateBoard} size="md" data-testid="add-board-button" - variant="ghost" + variant="link" + w={8} + h={8} /> ); }; diff --git a/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/BoardsList.tsx b/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/BoardsList.tsx index 6f37dbcdb5..4325281e0f 100644 --- a/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/BoardsList.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/BoardsList.tsx @@ -1,20 +1,17 @@ -import { Collapse, Flex, Icon, Text, useDisclosure } from '@invoke-ai/ui-library'; +import { Box, Flex, Text } from '@invoke-ai/ui-library'; import { EMPTY_ARRAY } from 'app/store/constants'; import { useAppSelector } from 'app/store/storeHooks'; import { overlayScrollbarsParams } from 'common/components/OverlayScrollbars/constants'; import DeleteBoardModal from 'features/gallery/components/Boards/DeleteBoardModal'; -import GallerySettingsPopover from 'features/gallery/components/GallerySettingsPopover/GallerySettingsPopover'; import { selectListBoardsQueryArgs } from 'features/gallery/store/gallerySelectors'; import { OverlayScrollbarsComponent } from 'overlayscrollbars-react'; import type { CSSProperties } from 'react'; import { memo, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; -import { PiCaretUpBold } from 'react-icons/pi'; import { useListAllBoardsQuery } from 'services/api/endpoints/boards'; import type { BoardDTO } from 'services/api/types'; import AddBoardButton from './AddBoardButton'; -import BoardsSearch from './BoardsSearch'; import GalleryBoard from './GalleryBoard'; import NoBoardBoard from './NoBoardBoard'; @@ -30,8 +27,6 @@ const BoardsList = () => { const queryArgs = useAppSelector(selectListBoardsQueryArgs); const { data: boards } = useListAllBoardsQuery(queryArgs); const [boardToDelete, setBoardToDelete] = useState(); - const privateBoardsDisclosure = useDisclosure({ defaultIsOpen: false }); - const sharedBoardsDisclosure = useDisclosure({ defaultIsOpen: false }); const { t } = useTranslation(); const { filteredPrivateBoards, filteredSharedBoards } = useMemo(() => { @@ -45,43 +40,30 @@ const BoardsList = () => { return ( <> - - - - - - {allowPrivateBoards && ( - <> - - - - - {t('boards.private')} - - - - - - - - {allowPrivateBoards && } + + + + {allowPrivateBoards && ( + + + + {t('boards.private')} + + + + + {filteredPrivateBoards.map((board) => ( { /> ))} - - - - )} - - - - - {allowPrivateBoards ? t('boards.shared') : t('boards.boards')} - - - - - - - - {!allowPrivateBoards && } - {filteredSharedBoards.map((board) => ( - - ))} + + )} + + + + {allowPrivateBoards ? t('boards.shared') : t('boards.boards')} + + + + + {!allowPrivateBoards && } + {filteredSharedBoards.map((board) => ( + + ))} + - - + + ); diff --git a/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/BoardsSearch.tsx b/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/BoardsSearch.tsx index 931c1e6cbb..fb53a13795 100644 --- a/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/BoardsSearch.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/BoardsSearch.tsx @@ -40,7 +40,7 @@ const BoardsSearch = () => { ); return ( - + s.gallery.autoAddBoardId); const autoAssignBoardOnClick = useAppSelector((s) => s.gallery.autoAssignBoardOnClick); + const selectedBoardId = useAppSelector((s) => s.gallery.selectedBoardId); const editingDisclosure = useDisclosure(); const [localBoardName, setLocalBoardName] = useState(board.board_name); + const onStartEditingRef = useRef(undefined); - const handleSelectBoard = useCallback(() => { - dispatch(boardIdSelected({ boardId: board.board_id })); - if (autoAssignBoardOnClick) { + const onClick = useCallback(() => { + if (selectedBoardId !== board.board_id) { + dispatch(boardIdSelected({ boardId: board.board_id })); + } + if (autoAssignBoardOnClick && autoAddBoardId !== board.board_id) { dispatch(autoAddBoardIdChanged(board.board_id)); } - }, [dispatch, board.board_id, autoAssignBoardOnClick]); + }, [selectedBoardId, board.board_id, autoAssignBoardOnClick, autoAddBoardId, dispatch]); const [updateBoard, { isLoading: isUpdateBoardLoading }] = useUpdateBoardMutation(); @@ -70,7 +76,7 @@ const GalleryBoard = ({ board, isSelected, setBoardToDelete }: GalleryBoardProps [board.board_id] ); - const handleSubmit = useCallback( + const onSubmit = useCallback( async (newBoardName: string) => { if (!newBoardName.trim()) { // empty strings are not allowed @@ -96,21 +102,30 @@ const GalleryBoard = ({ board, isSelected, setBoardToDelete }: GalleryBoardProps [board.board_id, board.board_name, editingDisclosure, updateBoard] ); - const handleChange = useCallback((newBoardName: string) => { + const onChange = useCallback((newBoardName: string) => { setLocalBoardName(newBoardName); }, []); + const onDoubleClick = useCallback((e: MouseEvent) => { + if (onStartEditingRef.current) { + onStartEditingRef.current(e); + } + }, []); + return ( {(ref) => ( } openDelay={1000} + placement="left" + closeOnScroll > @@ -131,10 +146,12 @@ const GalleryBoard = ({ board, isSelected, setBoardToDelete }: GalleryBoardProps value={localBoardName} isDisabled={isUpdateBoardLoading} submitOnBlur={true} - onChange={handleChange} - onSubmit={handleSubmit} + onChange={onChange} + onSubmit={onSubmit} + isPreviewFocusable={false} > + {autoAddBoardId === board.board_id && !editingDisclosure.isOpen && } - {board.archived && !editingDisclosure.isOpen && ( - - )} + {board.archived && !editingDisclosure.isOpen && } {!editingDisclosure.isOpen && {board.image_count}} {t('unifiedCanvas.move')}} /> @@ -164,6 +176,16 @@ const GalleryBoard = ({ board, isSelected, setBoardToDelete }: GalleryBoardProps ); }; +const JankEditableHijack = memo((props: { onStartEditingRef: MutableRefObject }) => { + const editableControls = useEditableControls(); + useEffect(() => { + props.onStartEditingRef.current = editableControls.getEditButtonProps().onClick; + }, [props, editableControls]); + return null; +}); + +JankEditableHijack.displayName = 'JankEditableHijack'; + export default memo(GalleryBoard); const CoverImage = ({ board }: { board: BoardDTO }) => { diff --git a/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/NoBoardBoard.tsx b/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/NoBoardBoard.tsx index fb47bf5810..14bf3d5742 100644 --- a/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/NoBoardBoard.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/NoBoardBoard.tsx @@ -17,7 +17,7 @@ interface Props { } const _hover: SystemStyleObject = { - bg: 'base.800', + bg: 'base.850', }; const NoBoardBoard = memo(({ isSelected }: Props) => { @@ -29,6 +29,7 @@ const NoBoardBoard = memo(({ isSelected }: Props) => { }); const autoAddBoardId = useAppSelector((s) => s.gallery.autoAddBoardId); const autoAssignBoardOnClick = useAppSelector((s) => s.gallery.autoAssignBoardOnClick); + const boardSearchText = useAppSelector((s) => s.gallery.boardSearchText); const boardName = useBoardName('none'); const handleSelectBoard = useCallback(() => { dispatch(boardIdSelected({ boardId: 'none' })); @@ -44,11 +45,26 @@ const NoBoardBoard = memo(({ isSelected }: Props) => { }), [] ); + + const filteredOut = useMemo(() => { + return boardSearchText ? !boardName.toLowerCase().includes(boardSearchText.toLowerCase()) : false; + }, [boardName, boardSearchText]); + const { t } = useTranslation(); + + if (filteredOut) { + return null; + } + return ( {(ref) => ( - } openDelay={1000}> + } + openDelay={1000} + placement="left" + closeOnScroll + > { px={2} py={1} gap={2} - bg={isSelected ? 'base.800' : undefined} + bg={isSelected ? 'base.850' : undefined} _hover={_hover} > diff --git a/invokeai/frontend/web/src/features/gallery/components/GalleryBoardName.tsx b/invokeai/frontend/web/src/features/gallery/components/GalleryBoardName.tsx index 233aa8a8c1..8ede311f9e 100644 --- a/invokeai/frontend/web/src/features/gallery/components/GalleryBoardName.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/GalleryBoardName.tsx @@ -3,12 +3,26 @@ import { useAppSelector } from 'app/store/storeHooks'; import { memo } from 'react'; import { useBoardName } from 'services/api/hooks/useBoardName'; -const GalleryBoardName = () => { +type Props = { + onClick: () => void; +}; + +const GalleryBoardName = (props: Props) => { const selectedBoardId = useAppSelector((s) => s.gallery.selectedBoardId); const boardName = useBoardName(selectedBoardId); return ( - + {boardName} diff --git a/invokeai/frontend/web/src/features/gallery/components/GalleryHeader.tsx b/invokeai/frontend/web/src/features/gallery/components/GalleryHeader.tsx new file mode 100644 index 0000000000..69c2c8fe35 --- /dev/null +++ b/invokeai/frontend/web/src/features/gallery/components/GalleryHeader.tsx @@ -0,0 +1,34 @@ +import { Flex, Link, Text } from '@invoke-ai/ui-library'; +import { useStore } from '@nanostores/react'; +import { $projectName, $projectUrl } from 'app/store/nanostores/projectId'; +import { memo } from 'react'; + +import GalleryBoardName from './GalleryBoardName'; + +type Props = { + onClickBoardName: () => void; +}; + +export const GalleryHeader = memo((props: Props) => { + const projectName = useStore($projectName); + const projectUrl = useStore($projectUrl); + + if (projectName && projectUrl) { + return ( + + + {projectName} + + + + ); + } + + return ( + + + + ); +}); + +GalleryHeader.displayName = 'GalleryHeader'; diff --git a/invokeai/frontend/web/src/features/gallery/components/GallerySettingsPopover/GallerySettingsPopover.tsx b/invokeai/frontend/web/src/features/gallery/components/GallerySettingsPopover/GallerySettingsPopover.tsx index b03c606eb6..c6a4005f15 100644 --- a/invokeai/frontend/web/src/features/gallery/components/GallerySettingsPopover/GallerySettingsPopover.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/GallerySettingsPopover/GallerySettingsPopover.tsx @@ -17,7 +17,7 @@ const GallerySettingsPopover = () => { return ( - } /> + } variant="link" h="full" /> diff --git a/invokeai/frontend/web/src/features/gallery/components/ImageGalleryContent.tsx b/invokeai/frontend/web/src/features/gallery/components/ImageGalleryContent.tsx index 665d96a006..5a096f5cef 100644 --- a/invokeai/frontend/web/src/features/gallery/components/ImageGalleryContent.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/ImageGalleryContent.tsx @@ -1,24 +1,71 @@ -import { Button, ButtonGroup, Flex, Tab, TabList, Tabs } from '@invoke-ai/ui-library'; -import { useStore } from '@nanostores/react'; -import { $galleryHeader } from 'app/store/nanostores/galleryHeader'; +import type { ChakraProps } from '@invoke-ai/ui-library'; +import { + Box, + Collapse, + Divider, + Flex, + IconButton, + Spacer, + Tab, + TabList, + Tabs, + useDisclosure, +} from '@invoke-ai/ui-library'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; +import { GalleryHeader } from 'features/gallery/components/GalleryHeader'; import { galleryViewChanged } from 'features/gallery/store/gallerySlice'; -import { memo, useCallback } from 'react'; +import ResizeHandle from 'features/ui/components/tabs/ResizeHandle'; +import { usePanel, type UsePanelOptions } from 'features/ui/hooks/usePanel'; +import type { CSSProperties } from 'react'; +import { memo, useCallback, useMemo, useRef } from 'react'; import { useTranslation } from 'react-i18next'; -import { PiImagesBold } from 'react-icons/pi'; -import { RiServerLine } from 'react-icons/ri'; +import { PiMagnifyingGlassBold } from 'react-icons/pi'; +import type { ImperativePanelGroupHandle } from 'react-resizable-panels'; +import { Panel, PanelGroup } from 'react-resizable-panels'; import BoardsList from './Boards/BoardsList/BoardsList'; -import GalleryBoardName from './GalleryBoardName'; +import BoardsSearch from './Boards/BoardsList/BoardsSearch'; +import GallerySettingsPopover from './GallerySettingsPopover/GallerySettingsPopover'; import GalleryImageGrid from './ImageGrid/GalleryImageGrid'; import { GalleryPagination } from './ImageGrid/GalleryPagination'; import { GallerySearch } from './ImageGrid/GallerySearch'; +const COLLAPSE_STYLES: CSSProperties = { flexShrink: 0, minHeight: 0 }; + +const BASE_STYLES: ChakraProps['sx'] = { + fontWeight: 'semibold', + fontSize: 'sm', + color: 'base.300', +}; + +const SELECTED_STYLES: ChakraProps['sx'] = { + borderColor: 'base.800', + borderBottomColor: 'base.900', + color: 'invokeBlue.300', +}; + const ImageGalleryContent = () => { const { t } = useTranslation(); const galleryView = useAppSelector((s) => s.gallery.galleryView); + const searchTerm = useAppSelector((s) => s.gallery.searchTerm); + const boardSearchText = useAppSelector((s) => s.gallery.boardSearchText); const dispatch = useAppDispatch(); - const galleryHeader = useStore($galleryHeader); + const searchDisclosure = useDisclosure({ defaultIsOpen: false }); + const boardSearchDisclosure = useDisclosure({ defaultIsOpen: false }); + const panelGroupRef = useRef(null); + + const boardsListPanelOptions = useMemo( + () => ({ + unit: 'pixels', + minSize: 128, + defaultSize: 256, + fallbackMinSizePct: 20, + panelGroupRef, + panelGroupDirection: 'vertical', + }), + [] + ); + const boardsListPanel = usePanel(boardsListPanelOptions); const handleClickImages = useCallback(() => { dispatch(galleryViewChanged('images')); @@ -29,53 +76,103 @@ const ImageGalleryContent = () => { }, [dispatch]); return ( - - {galleryHeader} - - - - - - - } - data-testid="images-tab" - > - {t('parameters.images')} - - } - data-testid="assets-tab" - > - {t('gallery.assets')} - - - - + + + + + + } + variant="link" + /> + {boardSearchText && ( + + )} + - - - - + + + + + + + + + + + + + + + + + {t('parameters.images')} + + + {t('gallery.assets')} + + + + } + variant="link" + /> + {searchTerm && ( + + )} + + + + + + + + + + + + + + + ); }; diff --git a/invokeai/frontend/web/src/features/gallery/components/ImageGrid/GalleryImageGrid.tsx b/invokeai/frontend/web/src/features/gallery/components/ImageGrid/GalleryImageGrid.tsx index 0be30505d5..9e0ba18f8a 100644 --- a/invokeai/frontend/web/src/features/gallery/components/ImageGrid/GalleryImageGrid.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/ImageGrid/GalleryImageGrid.tsx @@ -124,7 +124,7 @@ const Content = () => { }, [calculateNewLimit, container, dispatch]); return ( - + { const panelHandleRef = useRef(null); const [_minSize, _setMinSize] = useState(arg.unit === 'percentages' ? arg.minSize : 0); + const [_defaultSize, _setDefaultSize] = useState(arg.defaultSize ?? arg.minSize); // If the units are pixels, we need to calculate the min size as a percentage of the available space, // then resize the panel if it is too small. @@ -113,18 +126,16 @@ export const usePanel = (arg: UsePanelOptions): UsePanelReturn => { } const minSizePct = getSizeAsPercentage(arg.minSize, arg.panelGroupRef, arg.panelGroupDirection); - _setMinSize(minSizePct); - /** - * TODO(psyche): Ideally, we only resize the panel if there is not enough room for it in the - * panel group. This is a bit tricky, though. We'd need to track the last known panel size - * and compare it to the new size before resizing. This introduces some complexity that I'd - * rather not need to maintain. - * - * For now, we'll just resize the panel to the min size every time the panel group is resized. - */ - if (!panelHandleRef.current.isCollapsed()) { + const defaultSizePct = getSizeAsPercentage( + arg.defaultSize ?? arg.minSize, + arg.panelGroupRef, + arg.panelGroupDirection + ); + _setDefaultSize(defaultSizePct); + + if (!panelHandleRef.current.isCollapsed() && panelHandleRef.current.getSize() < minSizePct && minSizePct > 0) { panelHandleRef.current.resize(minSizePct); } }); @@ -133,8 +144,12 @@ export const usePanel = (arg: UsePanelOptions): UsePanelReturn => { panelGroupHandleElements.forEach((el) => resizeObserver.observe(el)); // Resize the panel to the min size once on startup - const minSizePct = getSizeAsPercentage(arg.minSize, arg.panelGroupRef, arg.panelGroupDirection); - panelHandleRef.current?.resize(minSizePct); + const defaultSizePct = getSizeAsPercentage( + arg.defaultSize ?? arg.minSize, + arg.panelGroupRef, + arg.panelGroupDirection + ); + panelHandleRef.current?.resize(defaultSizePct); return () => { resizeObserver.disconnect(); @@ -188,14 +203,14 @@ export const usePanel = (arg: UsePanelOptions): UsePanelReturn => { const onDoubleClickHandle = useCallback(() => { // If the panel is really super close to the min size, collapse it - if (Math.abs((panelHandleRef.current?.getSize() ?? 0) - _minSize) < 0.01) { + if (Math.abs((panelHandleRef.current?.getSize() ?? 0) - _defaultSize) < 0.01) { collapse(); return; } // Otherwise, resize to the min size - panelHandleRef.current?.resize(_minSize); - }, [_minSize, collapse]); + panelHandleRef.current?.resize(_defaultSize); + }, [_defaultSize, collapse]); return { ref: panelHandleRef, @@ -209,6 +224,7 @@ export const usePanel = (arg: UsePanelOptions): UsePanelReturn => { collapse, resize, onDoubleClickHandle, + defaultSize: _defaultSize, }; }; diff --git a/invokeai/frontend/web/src/services/api/endpoints/images.ts b/invokeai/frontend/web/src/services/api/endpoints/images.ts index 9605bc29c4..2040021d6d 100644 --- a/invokeai/frontend/web/src/services/api/endpoints/images.ts +++ b/invokeai/frontend/web/src/services/api/endpoints/images.ts @@ -93,7 +93,6 @@ export const imagesApi = api.injectEndpoints({ const boardId = imageDTO.board_id ?? 'none'; return [ - { type: 'Image', id: imageDTO.image_name }, { type: 'ImageList', id: getListImagesUrl({ @@ -138,9 +137,6 @@ export const imagesApi = api.injectEndpoints({ id: boardId, }, ]; - for (const imageDTO of imageDTOs) { - tags.push({ type: 'Image', id: imageDTO.image_name }); - } return tags; } @@ -508,7 +504,6 @@ export const imagesApi = api.injectEndpoints({ export const { useGetIntermediatesCountQuery, useListImagesQuery, - useGetImageDTOQuery, useGetImageMetadataQuery, useGetImageWorkflowQuery, useLazyGetImageWorkflowQuery, @@ -526,6 +521,10 @@ export const { useBulkDownloadImagesMutation, } = imagesApi; +export const useGetImageDTOQuery = (...args: Parameters) => { + return imagesApi.useGetImageDTOQuery(...args); +}; + /** * Imperative RTKQ helper to fetch an ImageDTO. * @param image_name The name of the image to fetch diff --git a/invokeai/version/invokeai_version.py b/invokeai/version/invokeai_version.py index 1bdb160e96..09545bce26 100644 --- a/invokeai/version/invokeai_version.py +++ b/invokeai/version/invokeai_version.py @@ -1 +1 @@ -__version__ = "4.2.5" +__version__ = "4.2.6post1" diff --git a/tests/app/services/model_records/test_model_records_sql.py b/tests/app/services/model_records/test_model_records_sql.py index d39e95ab3d..e6a89dff06 100644 --- a/tests/app/services/model_records/test_model_records_sql.py +++ b/tests/app/services/model_records/test_model_records_sql.py @@ -40,7 +40,7 @@ def store( config._root = datadir logger = InvokeAILogger.get_logger(config=config) db = create_mock_sqlite_database(config, logger) - return ModelRecordServiceSQL(db) + return ModelRecordServiceSQL(db, logger) def example_ti_config(key: Optional[str] = None) -> TextualInversionFileConfig: diff --git a/tests/backend/model_manager/model_manager_fixtures.py b/tests/backend/model_manager/model_manager_fixtures.py index 6fd8c51b54..621b7c65b4 100644 --- a/tests/backend/model_manager/model_manager_fixtures.py +++ b/tests/backend/model_manager/model_manager_fixtures.py @@ -110,7 +110,7 @@ def mm2_installer( logger = InvokeAILogger.get_logger() db = create_mock_sqlite_database(mm2_app_config, logger) events = TestEventService() - store = ModelRecordServiceSQL(db) + store = ModelRecordServiceSQL(db, logger) installer = ModelInstallService( app_config=mm2_app_config, @@ -128,7 +128,7 @@ def mm2_installer( def mm2_record_store(mm2_app_config: InvokeAIAppConfig) -> ModelRecordServiceBase: logger = InvokeAILogger.get_logger(config=mm2_app_config) db = create_mock_sqlite_database(mm2_app_config, logger) - store = ModelRecordServiceSQL(db) + store = ModelRecordServiceSQL(db, logger) # add five simple config records to the database config1 = VAEDiffusersConfig( key="test_config_1",