From 427104f9368b2784ffd0c77b78ac3506d72054b0 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Wed, 15 Mar 2023 18:50:29 +1100 Subject: [PATCH] chore(ui): organize generated files --- .../web/src/services/{api => }/README.md | 39 +- .../web/src/services/api/openapi.json | 1 - .../{api => }/generate_openapi_json.py | 0 .../frontend/web/src/services/openapi.json | 1821 +++++++++++++++++ 4 files changed, 1823 insertions(+), 38 deletions(-) rename invokeai/frontend/web/src/services/{api => }/README.md (70%) delete mode 100644 invokeai/frontend/web/src/services/api/openapi.json rename invokeai/frontend/web/src/services/{api => }/generate_openapi_json.py (100%) create mode 100644 invokeai/frontend/web/src/services/openapi.json diff --git a/invokeai/frontend/web/src/services/api/README.md b/invokeai/frontend/web/src/services/README.md similarity index 70% rename from invokeai/frontend/web/src/services/api/README.md rename to invokeai/frontend/web/src/services/README.md index b893fa1afa..07eb0bdadf 100644 --- a/invokeai/frontend/web/src/services/api/README.md +++ b/invokeai/frontend/web/src/services/README.md @@ -8,11 +8,10 @@ - [Getting the JSON with a python script](#getting-the-json-with-a-python-script) - [Generate the API client](#generate-the-api-client) - [The generated client](#the-generated-client) - - [Fix a small issue](#fix-a-small-issue) This API client is generated by an [openapi code generator](https://github.com/ferdikoomen/openapi-typescript-codegen). -After generation, we will need to fix a small issue. +All files in `invokeai/frontend/web/src/services/api/` are made by the generator. ## Generation @@ -57,7 +56,7 @@ The script will output `openapi.json` in the repo root. Then we need to move it ```bash # from the repo root -python invokeai/frontend/web/src/services/api/generate_openapi_json.py +python invokeai/frontend/web/src/services/generate_openapi_json.py mv openapi.json invokeai/frontend/web/ ``` @@ -77,37 +76,3 @@ The client will be written to `invokeai/frontend/web/services/api/`: - `axios` client - TS types - An easily parseable schema, which we can use to generate UI - -## Fix a small issue - -In `models/Graph.ts`, `edges` is not parsed correctly from the OpenAPI schema. The generator outputs: - -```typescript -{ - ... - edges?: Array>; - ... -} -``` - -This is incorrect. It should be: - -```typescript -{ - ... - edges?: Array<[EdgeConnection, EdgeConnection]>; - ... -} -``` - -That is, `edges` is an array of tuples, each consisting of two `EdgeConnections`, where the first `EdgeConnection` is the "from" node, and the second is the "to" node. - -You will also need to import the `EdgeConnection` type: - -```typescript -import type { EdgeConnection } from './EdgeConnection'; -``` - -If you regenerate the client, you will need to manually fix this. - -Hopefully we can fix the parsing of the schema in the future. diff --git a/invokeai/frontend/web/src/services/api/openapi.json b/invokeai/frontend/web/src/services/api/openapi.json deleted file mode 100644 index 482256e696..0000000000 --- a/invokeai/frontend/web/src/services/api/openapi.json +++ /dev/null @@ -1 +0,0 @@ -{"openapi": "3.0.2", "info": {"title": "Invoke AI", "version": "0.1.0"}, "paths": {"/api/v1/sessions/": {"get": {"tags": ["sessions"], "summary": "List Sessions", "description": "Gets a list of sessions, optionally searching", "operationId": "list_sessions", "parameters": [{"description": "The page of results to get", "required": false, "schema": {"title": "Page", "type": "integer", "description": "The page of results to get", "default": 0}, "name": "page", "in": "query"}, {"description": "The number of results per page", "required": false, "schema": {"title": "Per Page", "type": "integer", "description": "The number of results per page", "default": 10}, "name": "per_page", "in": "query"}, {"description": "The query string to search for", "required": false, "schema": {"title": "Query", "type": "string", "description": "The query string to search for", "default": ""}, "name": "query", "in": "query"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PaginatedResults_GraphExecutionState_"}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}, "post": {"tags": ["sessions"], "summary": "Create Session", "description": "Creates a new session, optionally initializing it with an invocation graph", "operationId": "create_session", "requestBody": {"content": {"application/json": {"schema": {"title": "Graph", "allOf": [{"$ref": "#/components/schemas/Graph"}], "description": "The graph to initialize the session with"}}}}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/GraphExecutionState"}}}}, "400": {"description": "Invalid json"}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}}, "/api/v1/sessions/{session_id}": {"get": {"tags": ["sessions"], "summary": "Get Session", "description": "Gets a session", "operationId": "get_session", "parameters": [{"description": "The id of the session to get", "required": true, "schema": {"title": "Session Id", "type": "string", "description": "The id of the session to get"}, "name": "session_id", "in": "path"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/GraphExecutionState"}}}}, "404": {"description": "Session not found"}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}}, "/api/v1/sessions/{session_id}/nodes": {"post": {"tags": ["sessions"], "summary": "Add Node", "description": "Adds a node to the graph", "operationId": "add_node", "parameters": [{"description": "The id of the session", "required": true, "schema": {"title": "Session Id", "type": "string", "description": "The id of the session"}, "name": "session_id", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"title": "Node", "anyOf": [{"$ref": "#/components/schemas/LoadImageInvocation"}, {"$ref": "#/components/schemas/ShowImageInvocation"}, {"$ref": "#/components/schemas/CropImageInvocation"}, {"$ref": "#/components/schemas/PasteImageInvocation"}, {"$ref": "#/components/schemas/MaskFromAlphaInvocation"}, {"$ref": "#/components/schemas/BlurInvocation"}, {"$ref": "#/components/schemas/LerpInvocation"}, {"$ref": "#/components/schemas/InverseLerpInvocation"}, {"$ref": "#/components/schemas/CvInpaintInvocation"}, {"$ref": "#/components/schemas/UpscaleInvocation"}, {"$ref": "#/components/schemas/RestoreFaceInvocation"}, {"$ref": "#/components/schemas/TextToImageInvocation"}, {"$ref": "#/components/schemas/GraphInvocation"}, {"$ref": "#/components/schemas/IterateInvocation"}, {"$ref": "#/components/schemas/CollectInvocation"}, {"$ref": "#/components/schemas/ImageToImageInvocation"}, {"$ref": "#/components/schemas/InpaintInvocation"}], "description": "The node to add"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"title": "Response 200 Add Node", "type": "string"}}}}, "400": {"description": "Invalid node or link"}, "404": {"description": "Session not found"}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}}, "/api/v1/sessions/{session_id}/nodes/{node_path}": {"put": {"tags": ["sessions"], "summary": "Update Node", "description": "Updates a node in the graph and removes all linked edges", "operationId": "update_node", "parameters": [{"description": "The id of the session", "required": true, "schema": {"title": "Session Id", "type": "string", "description": "The id of the session"}, "name": "session_id", "in": "path"}, {"description": "The path to the node in the graph", "required": true, "schema": {"title": "Node Path", "type": "string", "description": "The path to the node in the graph"}, "name": "node_path", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"title": "Node", "anyOf": [{"$ref": "#/components/schemas/LoadImageInvocation"}, {"$ref": "#/components/schemas/ShowImageInvocation"}, {"$ref": "#/components/schemas/CropImageInvocation"}, {"$ref": "#/components/schemas/PasteImageInvocation"}, {"$ref": "#/components/schemas/MaskFromAlphaInvocation"}, {"$ref": "#/components/schemas/BlurInvocation"}, {"$ref": "#/components/schemas/LerpInvocation"}, {"$ref": "#/components/schemas/InverseLerpInvocation"}, {"$ref": "#/components/schemas/CvInpaintInvocation"}, {"$ref": "#/components/schemas/UpscaleInvocation"}, {"$ref": "#/components/schemas/RestoreFaceInvocation"}, {"$ref": "#/components/schemas/TextToImageInvocation"}, {"$ref": "#/components/schemas/GraphInvocation"}, {"$ref": "#/components/schemas/IterateInvocation"}, {"$ref": "#/components/schemas/CollectInvocation"}, {"$ref": "#/components/schemas/ImageToImageInvocation"}, {"$ref": "#/components/schemas/InpaintInvocation"}], "description": "The new node"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/GraphExecutionState"}}}}, "400": {"description": "Invalid node or link"}, "404": {"description": "Session not found"}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}, "delete": {"tags": ["sessions"], "summary": "Delete Node", "description": "Deletes a node in the graph and removes all linked edges", "operationId": "delete_node", "parameters": [{"description": "The id of the session", "required": true, "schema": {"title": "Session Id", "type": "string", "description": "The id of the session"}, "name": "session_id", "in": "path"}, {"description": "The path to the node to delete", "required": true, "schema": {"title": "Node Path", "type": "string", "description": "The path to the node to delete"}, "name": "node_path", "in": "path"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/GraphExecutionState"}}}}, "400": {"description": "Invalid node or link"}, "404": {"description": "Session not found"}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}}, "/api/v1/sessions/{session_id}/edges": {"post": {"tags": ["sessions"], "summary": "Add Edge", "description": "Adds an edge to the graph", "operationId": "add_edge", "parameters": [{"description": "The id of the session", "required": true, "schema": {"title": "Session Id", "type": "string", "description": "The id of the session"}, "name": "session_id", "in": "path"}], "requestBody": {"content": {"application/json": {"schema": {"title": "Edge", "maxItems": 2, "minItems": 2, "type": "array", "items": [{"$ref": "#/components/schemas/EdgeConnection"}, {"$ref": "#/components/schemas/EdgeConnection"}], "description": "The edge to add"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/GraphExecutionState"}}}}, "400": {"description": "Invalid node or link"}, "404": {"description": "Session not found"}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}}, "/api/v1/sessions/{session_id}/edges/{from_node_id}/{from_field}/{to_node_id}/{to_field}": {"delete": {"tags": ["sessions"], "summary": "Delete Edge", "description": "Deletes an edge from the graph", "operationId": "delete_edge", "parameters": [{"description": "The id of the session", "required": true, "schema": {"title": "Session Id", "type": "string", "description": "The id of the session"}, "name": "session_id", "in": "path"}, {"description": "The id of the node the edge is coming from", "required": true, "schema": {"title": "From Node Id", "type": "string", "description": "The id of the node the edge is coming from"}, "name": "from_node_id", "in": "path"}, {"description": "The field of the node the edge is coming from", "required": true, "schema": {"title": "From Field", "type": "string", "description": "The field of the node the edge is coming from"}, "name": "from_field", "in": "path"}, {"description": "The id of the node the edge is going to", "required": true, "schema": {"title": "To Node Id", "type": "string", "description": "The id of the node the edge is going to"}, "name": "to_node_id", "in": "path"}, {"description": "The field of the node the edge is going to", "required": true, "schema": {"title": "To Field", "type": "string", "description": "The field of the node the edge is going to"}, "name": "to_field", "in": "path"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/GraphExecutionState"}}}}, "400": {"description": "Invalid node or link"}, "404": {"description": "Session not found"}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}}, "/api/v1/sessions/{session_id}/invoke": {"put": {"tags": ["sessions"], "summary": "Invoke Session", "description": "Invokes a session", "operationId": "invoke_session", "parameters": [{"description": "The id of the session to invoke", "required": true, "schema": {"title": "Session Id", "type": "string", "description": "The id of the session to invoke"}, "name": "session_id", "in": "path"}, {"description": "Whether or not to invoke all remaining invocations", "required": false, "schema": {"title": "All", "type": "boolean", "description": "Whether or not to invoke all remaining invocations", "default": false}, "name": "all", "in": "query"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "202": {"description": "The invocation is queued"}, "400": {"description": "The session has no invocations ready to invoke"}, "404": {"description": "Session not found"}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}}, "/api/v1/images/{image_type}/{image_name}": {"get": {"tags": ["images"], "summary": "Get Image", "description": "Gets a result", "operationId": "get_image", "parameters": [{"description": "The type of image to get", "required": true, "schema": {"allOf": [{"$ref": "#/components/schemas/ImageType"}], "description": "The type of image to get"}, "name": "image_type", "in": "path"}, {"description": "The name of the image to get", "required": true, "schema": {"title": "Image Name", "type": "string", "description": "The name of the image to get"}, "name": "image_name", "in": "path"}], "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}}, "/api/v1/images/uploads/": {"post": {"tags": ["images"], "summary": "Upload Image", "operationId": "upload_image", "requestBody": {"content": {"multipart/form-data": {"schema": {"$ref": "#/components/schemas/Body_upload_image"}}}, "required": true}, "responses": {"200": {"description": "Successful Response", "content": {"application/json": {"schema": {}}}}, "201": {"description": "The image was uploaded successfully"}, "404": {"description": "Session not found"}, "422": {"description": "Validation Error", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HTTPValidationError"}}}}}}}}, "components": {"schemas": {"BlurInvocation": {"title": "BlurInvocation", "required": ["id"], "type": "object", "properties": {"id": {"title": "Id", "type": "string", "description": "The id of this node. Must be unique among all nodes."}, "type": {"title": "Type", "enum": ["blur"], "type": "string", "default": "blur"}, "image": {"title": "Image", "allOf": [{"$ref": "#/components/schemas/ImageField"}], "description": "The image to blur"}, "radius": {"title": "Radius", "minimum": 0.0, "type": "number", "description": "The blur radius", "default": 8.0}, "blur_type": {"title": "Blur Type", "enum": ["gaussian", "box"], "type": "string", "description": "The type of blur", "default": "gaussian"}}, "description": "Blurs an image"}, "Body_upload_image": {"title": "Body_upload_image", "required": ["file"], "type": "object", "properties": {"file": {"title": "File", "type": "string", "format": "binary"}}}, "CollectInvocation": {"title": "CollectInvocation", "required": ["id"], "type": "object", "properties": {"id": {"title": "Id", "type": "string", "description": "The id of this node. Must be unique among all nodes."}, "type": {"title": "Type", "enum": ["collect"], "type": "string", "default": "collect"}, "item": {"title": "Item", "description": "The item to collect (all inputs must be of the same type)"}, "collection": {"title": "Collection", "type": "array", "items": {}, "description": "The collection, will be provided on execution"}}, "description": "Collects values into a collection"}, "CollectInvocationOutput": {"title": "CollectInvocationOutput", "required": ["collection"], "type": "object", "properties": {"type": {"title": "Type", "enum": ["collect_output"], "type": "string", "default": "collect_output"}, "collection": {"title": "Collection", "type": "array", "items": {}, "description": "The collection of input items"}}, "description": "Base class for all invocation outputs"}, "CropImageInvocation": {"title": "CropImageInvocation", "required": ["id"], "type": "object", "properties": {"id": {"title": "Id", "type": "string", "description": "The id of this node. Must be unique among all nodes."}, "type": {"title": "Type", "enum": ["crop"], "type": "string", "default": "crop"}, "image": {"title": "Image", "allOf": [{"$ref": "#/components/schemas/ImageField"}], "description": "The image to crop"}, "x": {"title": "X", "type": "integer", "description": "The left x coordinate of the crop rectangle", "default": 0}, "y": {"title": "Y", "type": "integer", "description": "The top y coordinate of the crop rectangle", "default": 0}, "width": {"title": "Width", "exclusiveMinimum": 0.0, "type": "integer", "description": "The width of the crop rectangle", "default": 512}, "height": {"title": "Height", "exclusiveMinimum": 0.0, "type": "integer", "description": "The height of the crop rectangle", "default": 512}}, "description": "Crops an image to a specified box. The box can be outside of the image."}, "CvInpaintInvocation": {"title": "CvInpaintInvocation", "required": ["id"], "type": "object", "properties": {"id": {"title": "Id", "type": "string", "description": "The id of this node. Must be unique among all nodes."}, "type": {"title": "Type", "enum": ["cv_inpaint"], "type": "string", "default": "cv_inpaint"}, "image": {"title": "Image", "allOf": [{"$ref": "#/components/schemas/ImageField"}], "description": "The image to inpaint"}, "mask": {"title": "Mask", "allOf": [{"$ref": "#/components/schemas/ImageField"}], "description": "The mask to use when inpainting"}}, "description": "Simple inpaint using opencv."}, "EdgeConnection": {"title": "EdgeConnection", "required": ["node_id", "field"], "type": "object", "properties": {"node_id": {"title": "Node Id", "type": "string", "description": "The id of the node for this edge connection"}, "field": {"title": "Field", "type": "string", "description": "The field for this connection"}}}, "Graph": {"title": "Graph", "type": "object", "properties": {"id": {"title": "Id", "type": "string", "description": "The id of this graph"}, "nodes": {"title": "Nodes", "type": "object", "additionalProperties": {"oneOf": [{"$ref": "#/components/schemas/LoadImageInvocation"}, {"$ref": "#/components/schemas/ShowImageInvocation"}, {"$ref": "#/components/schemas/CropImageInvocation"}, {"$ref": "#/components/schemas/PasteImageInvocation"}, {"$ref": "#/components/schemas/MaskFromAlphaInvocation"}, {"$ref": "#/components/schemas/BlurInvocation"}, {"$ref": "#/components/schemas/LerpInvocation"}, {"$ref": "#/components/schemas/InverseLerpInvocation"}, {"$ref": "#/components/schemas/CvInpaintInvocation"}, {"$ref": "#/components/schemas/UpscaleInvocation"}, {"$ref": "#/components/schemas/RestoreFaceInvocation"}, {"$ref": "#/components/schemas/TextToImageInvocation"}, {"$ref": "#/components/schemas/GraphInvocation"}, {"$ref": "#/components/schemas/IterateInvocation"}, {"$ref": "#/components/schemas/CollectInvocation"}, {"$ref": "#/components/schemas/ImageToImageInvocation"}, {"$ref": "#/components/schemas/InpaintInvocation"}], "discriminator": {"propertyName": "type", "mapping": {"load_image": "#/components/schemas/LoadImageInvocation", "show_image": "#/components/schemas/ShowImageInvocation", "crop": "#/components/schemas/CropImageInvocation", "paste": "#/components/schemas/PasteImageInvocation", "tomask": "#/components/schemas/MaskFromAlphaInvocation", "blur": "#/components/schemas/BlurInvocation", "lerp": "#/components/schemas/LerpInvocation", "ilerp": "#/components/schemas/InverseLerpInvocation", "cv_inpaint": "#/components/schemas/CvInpaintInvocation", "upscale": "#/components/schemas/UpscaleInvocation", "restore_face": "#/components/schemas/RestoreFaceInvocation", "txt2img": "#/components/schemas/TextToImageInvocation", "graph": "#/components/schemas/GraphInvocation", "iterate": "#/components/schemas/IterateInvocation", "collect": "#/components/schemas/CollectInvocation", "img2img": "#/components/schemas/ImageToImageInvocation", "inpaint": "#/components/schemas/InpaintInvocation"}}}, "description": "The nodes in this graph"}, "edges": {"title": "Edges", "type": "array", "items": {"maxItems": 2, "minItems": 2, "type": "array", "items": [{"$ref": "#/components/schemas/EdgeConnection"}, {"$ref": "#/components/schemas/EdgeConnection"}]}, "description": "The connections between nodes and their fields in this graph"}}}, "GraphExecutionState": {"title": "GraphExecutionState", "required": ["graph"], "type": "object", "properties": {"id": {"title": "Id", "type": "string", "description": "The id of the execution state"}, "graph": {"title": "Graph", "allOf": [{"$ref": "#/components/schemas/Graph"}], "description": "The graph being executed"}, "execution_graph": {"title": "Execution Graph", "allOf": [{"$ref": "#/components/schemas/Graph"}], "description": "The expanded graph of activated and executed nodes"}, "executed": {"title": "Executed", "uniqueItems": true, "type": "array", "items": {"type": "string"}, "description": "The set of node ids that have been executed"}, "executed_history": {"title": "Executed History", "type": "array", "items": {"type": "string"}, "description": "The list of node ids that have been executed, in order of execution"}, "results": {"title": "Results", "type": "object", "additionalProperties": {"oneOf": [{"$ref": "#/components/schemas/ImageOutput"}, {"$ref": "#/components/schemas/MaskOutput"}, {"$ref": "#/components/schemas/PromptOutput"}, {"$ref": "#/components/schemas/GraphInvocationOutput"}, {"$ref": "#/components/schemas/IterateInvocationOutput"}, {"$ref": "#/components/schemas/CollectInvocationOutput"}], "discriminator": {"propertyName": "type", "mapping": {"image": "#/components/schemas/ImageOutput", "mask": "#/components/schemas/MaskOutput", "prompt": "#/components/schemas/PromptOutput", "graph_output": "#/components/schemas/GraphInvocationOutput", "iterate_output": "#/components/schemas/IterateInvocationOutput", "collect_output": "#/components/schemas/CollectInvocationOutput"}}}, "description": "The results of node executions"}, "errors": {"title": "Errors", "type": "object", "additionalProperties": {"type": "string"}, "description": "Errors raised when executing nodes"}, "prepared_source_mapping": {"title": "Prepared Source Mapping", "type": "object", "additionalProperties": {"type": "string"}, "description": "The map of prepared nodes to original graph nodes"}, "source_prepared_mapping": {"title": "Source Prepared Mapping", "type": "object", "additionalProperties": {"uniqueItems": true, "type": "array", "items": {"type": "string"}}, "description": "The map of original graph nodes to prepared nodes"}}, "description": "Tracks the state of a graph execution"}, "GraphInvocation": {"title": "GraphInvocation", "required": ["id"], "type": "object", "properties": {"id": {"title": "Id", "type": "string", "description": "The id of this node. Must be unique among all nodes."}, "type": {"title": "Type", "enum": ["graph"], "type": "string", "default": "graph"}, "graph": {"title": "Graph", "allOf": [{"$ref": "#/components/schemas/Graph"}], "description": "The graph to run"}}, "description": "A node to process inputs and produce outputs.\nMay use dependency injection in __init__ to receive providers."}, "GraphInvocationOutput": {"title": "GraphInvocationOutput", "type": "object", "properties": {"type": {"title": "Type", "enum": ["graph_output"], "type": "string", "default": "graph_output"}}, "description": "Base class for all invocation outputs"}, "HTTPValidationError": {"title": "HTTPValidationError", "type": "object", "properties": {"detail": {"title": "Detail", "type": "array", "items": {"$ref": "#/components/schemas/ValidationError"}}}}, "ImageField": {"title": "ImageField", "type": "object", "properties": {"image_type": {"title": "Image Type", "type": "string", "description": "The type of the image", "default": "results"}, "image_name": {"title": "Image Name", "type": "string", "description": "The name of the image"}}, "description": "An image field used for passing image objects between invocations"}, "ImageOutput": {"title": "ImageOutput", "type": "object", "properties": {"type": {"title": "Type", "enum": ["image"], "type": "string", "default": "image"}, "image": {"title": "Image", "allOf": [{"$ref": "#/components/schemas/ImageField"}], "description": "The output image"}}, "description": "Base class for invocations that output an image"}, "ImageToImageInvocation": {"title": "ImageToImageInvocation", "required": ["id"], "type": "object", "properties": {"id": {"title": "Id", "type": "string", "description": "The id of this node. Must be unique among all nodes."}, "type": {"title": "Type", "enum": ["img2img"], "type": "string", "default": "img2img"}, "prompt": {"title": "Prompt", "type": "string", "description": "The prompt to generate an image from"}, "seed": {"title": "Seed", "maximum": 4294967295.0, "minimum": -1.0, "type": "integer", "description": "The seed to use (-1 for a random seed)", "default": -1}, "steps": {"title": "Steps", "exclusiveMinimum": 0.0, "type": "integer", "description": "The number of steps to use to generate the image", "default": 10}, "width": {"title": "Width", "multipleOf": 64.0, "exclusiveMinimum": 0.0, "type": "integer", "description": "The width of the resulting image", "default": 512}, "height": {"title": "Height", "multipleOf": 64.0, "exclusiveMinimum": 0.0, "type": "integer", "description": "The height of the resulting image", "default": 512}, "cfg_scale": {"title": "Cfg Scale", "exclusiveMinimum": 0.0, "type": "number", "description": "The Classifier-Free Guidance, higher values may result in a result closer to the prompt", "default": 7.5}, "sampler_name": {"title": "Sampler Name", "enum": ["ddim", "dpmpp_2", "k_dpm_2", "k_dpm_2_a", "k_dpmpp_2", "k_euler", "k_euler_a", "k_heun", "k_lms", "plms"], "type": "string", "description": "The sampler to use", "default": "k_lms"}, "seamless": {"title": "Seamless", "type": "boolean", "description": "Whether or not to generate an image that can tile without seams", "default": false}, "model": {"title": "Model", "type": "string", "description": "The model to use (currently ignored)", "default": ""}, "progress_images": {"title": "Progress Images", "type": "boolean", "description": "Whether or not to produce progress images during generation", "default": false}, "image": {"title": "Image", "allOf": [{"$ref": "#/components/schemas/ImageField"}], "description": "The input image"}, "strength": {"title": "Strength", "maximum": 1.0, "exclusiveMinimum": 0.0, "type": "number", "description": "The strength of the original image", "default": 0.75}, "fit": {"title": "Fit", "type": "boolean", "description": "Whether or not the result should be fit to the aspect ratio of the input image", "default": true}}, "description": "Generates an image using img2img."}, "ImageType": {"title": "ImageType", "enum": ["results", "intermediates", "uploads"], "type": "string", "description": "An enumeration."}, "InpaintInvocation": {"title": "InpaintInvocation", "required": ["id"], "type": "object", "properties": {"id": {"title": "Id", "type": "string", "description": "The id of this node. Must be unique among all nodes."}, "type": {"title": "Type", "enum": ["inpaint"], "type": "string", "default": "inpaint"}, "prompt": {"title": "Prompt", "type": "string", "description": "The prompt to generate an image from"}, "seed": {"title": "Seed", "maximum": 4294967295.0, "minimum": -1.0, "type": "integer", "description": "The seed to use (-1 for a random seed)", "default": -1}, "steps": {"title": "Steps", "exclusiveMinimum": 0.0, "type": "integer", "description": "The number of steps to use to generate the image", "default": 10}, "width": {"title": "Width", "multipleOf": 64.0, "exclusiveMinimum": 0.0, "type": "integer", "description": "The width of the resulting image", "default": 512}, "height": {"title": "Height", "multipleOf": 64.0, "exclusiveMinimum": 0.0, "type": "integer", "description": "The height of the resulting image", "default": 512}, "cfg_scale": {"title": "Cfg Scale", "exclusiveMinimum": 0.0, "type": "number", "description": "The Classifier-Free Guidance, higher values may result in a result closer to the prompt", "default": 7.5}, "sampler_name": {"title": "Sampler Name", "enum": ["ddim", "dpmpp_2", "k_dpm_2", "k_dpm_2_a", "k_dpmpp_2", "k_euler", "k_euler_a", "k_heun", "k_lms", "plms"], "type": "string", "description": "The sampler to use", "default": "k_lms"}, "seamless": {"title": "Seamless", "type": "boolean", "description": "Whether or not to generate an image that can tile without seams", "default": false}, "model": {"title": "Model", "type": "string", "description": "The model to use (currently ignored)", "default": ""}, "progress_images": {"title": "Progress Images", "type": "boolean", "description": "Whether or not to produce progress images during generation", "default": false}, "image": {"title": "Image", "allOf": [{"$ref": "#/components/schemas/ImageField"}], "description": "The input image"}, "strength": {"title": "Strength", "maximum": 1.0, "exclusiveMinimum": 0.0, "type": "number", "description": "The strength of the original image", "default": 0.75}, "fit": {"title": "Fit", "type": "boolean", "description": "Whether or not the result should be fit to the aspect ratio of the input image", "default": true}, "mask": {"title": "Mask", "allOf": [{"$ref": "#/components/schemas/ImageField"}], "description": "The mask"}, "inpaint_replace": {"title": "Inpaint Replace", "maximum": 1.0, "minimum": 0.0, "type": "number", "description": "The amount by which to replace masked areas with latent noise", "default": 0.0}}, "description": "Generates an image using inpaint."}, "InverseLerpInvocation": {"title": "InverseLerpInvocation", "required": ["id"], "type": "object", "properties": {"id": {"title": "Id", "type": "string", "description": "The id of this node. Must be unique among all nodes."}, "type": {"title": "Type", "enum": ["ilerp"], "type": "string", "default": "ilerp"}, "image": {"title": "Image", "allOf": [{"$ref": "#/components/schemas/ImageField"}], "description": "The image to lerp"}, "min": {"title": "Min", "maximum": 255.0, "minimum": 0.0, "type": "integer", "description": "The minimum input value", "default": 0}, "max": {"title": "Max", "maximum": 255.0, "minimum": 0.0, "type": "integer", "description": "The maximum input value", "default": 255}}, "description": "Inverse linear interpolation of all pixels of an image"}, "IterateInvocation": {"title": "IterateInvocation", "required": ["id"], "type": "object", "properties": {"id": {"title": "Id", "type": "string", "description": "The id of this node. Must be unique among all nodes."}, "type": {"title": "Type", "enum": ["iterate"], "type": "string", "default": "iterate"}, "collection": {"title": "Collection", "type": "array", "items": {}, "description": "The list of items to iterate over"}, "index": {"title": "Index", "type": "integer", "description": "The index, will be provided on executed iterators", "default": 0}}, "description": "A node to process inputs and produce outputs.\nMay use dependency injection in __init__ to receive providers."}, "IterateInvocationOutput": {"title": "IterateInvocationOutput", "type": "object", "properties": {"type": {"title": "Type", "enum": ["iterate_output"], "type": "string", "default": "iterate_output"}, "item": {"title": "Item", "description": "The item being iterated over"}}, "description": "Used to connect iteration outputs. Will be expanded to a specific output."}, "LerpInvocation": {"title": "LerpInvocation", "required": ["id"], "type": "object", "properties": {"id": {"title": "Id", "type": "string", "description": "The id of this node. Must be unique among all nodes."}, "type": {"title": "Type", "enum": ["lerp"], "type": "string", "default": "lerp"}, "image": {"title": "Image", "allOf": [{"$ref": "#/components/schemas/ImageField"}], "description": "The image to lerp"}, "min": {"title": "Min", "maximum": 255.0, "minimum": 0.0, "type": "integer", "description": "The minimum output value", "default": 0}, "max": {"title": "Max", "maximum": 255.0, "minimum": 0.0, "type": "integer", "description": "The maximum output value", "default": 255}}, "description": "Linear interpolation of all pixels of an image"}, "LoadImageInvocation": {"title": "LoadImageInvocation", "required": ["id", "image_type", "image_name"], "type": "object", "properties": {"id": {"title": "Id", "type": "string", "description": "The id of this node. Must be unique among all nodes."}, "type": {"title": "Type", "enum": ["load_image"], "type": "string", "default": "load_image"}, "image_type": {"allOf": [{"$ref": "#/components/schemas/ImageType"}], "description": "The type of the image"}, "image_name": {"title": "Image Name", "type": "string", "description": "The name of the image"}}, "description": "Load an image from a filename and provide it as output."}, "MaskFromAlphaInvocation": {"title": "MaskFromAlphaInvocation", "required": ["id"], "type": "object", "properties": {"id": {"title": "Id", "type": "string", "description": "The id of this node. Must be unique among all nodes."}, "type": {"title": "Type", "enum": ["tomask"], "type": "string", "default": "tomask"}, "image": {"title": "Image", "allOf": [{"$ref": "#/components/schemas/ImageField"}], "description": "The image to create the mask from"}, "invert": {"title": "Invert", "type": "boolean", "description": "Whether or not to invert the mask", "default": false}}, "description": "Extracts the alpha channel of an image as a mask."}, "MaskOutput": {"title": "MaskOutput", "type": "object", "properties": {"type": {"title": "Type", "enum": ["mask"], "type": "string", "default": "mask"}, "mask": {"title": "Mask", "allOf": [{"$ref": "#/components/schemas/ImageField"}], "description": "The output mask"}}, "description": "Base class for invocations that output a mask"}, "PaginatedResults_GraphExecutionState_": {"title": "PaginatedResults[GraphExecutionState]", "required": ["items", "page", "pages", "per_page", "total"], "type": "object", "properties": {"items": {"title": "Items", "type": "array", "items": {"$ref": "#/components/schemas/GraphExecutionState"}, "description": "Items"}, "page": {"title": "Page", "type": "integer", "description": "Current Page"}, "pages": {"title": "Pages", "type": "integer", "description": "Total number of pages"}, "per_page": {"title": "Per Page", "type": "integer", "description": "Number of items per page"}, "total": {"title": "Total", "type": "integer", "description": "Total number of items in result"}}, "description": "Paginated results"}, "PasteImageInvocation": {"title": "PasteImageInvocation", "required": ["id"], "type": "object", "properties": {"id": {"title": "Id", "type": "string", "description": "The id of this node. Must be unique among all nodes."}, "type": {"title": "Type", "enum": ["paste"], "type": "string", "default": "paste"}, "base_image": {"title": "Base Image", "allOf": [{"$ref": "#/components/schemas/ImageField"}], "description": "The base image"}, "image": {"title": "Image", "allOf": [{"$ref": "#/components/schemas/ImageField"}], "description": "The image to paste"}, "mask": {"title": "Mask", "allOf": [{"$ref": "#/components/schemas/ImageField"}], "description": "The mask to use when pasting"}, "x": {"title": "X", "type": "integer", "description": "The left x coordinate at which to paste the image", "default": 0}, "y": {"title": "Y", "type": "integer", "description": "The top y coordinate at which to paste the image", "default": 0}}, "description": "Pastes an image into another image."}, "PromptOutput": {"title": "PromptOutput", "type": "object", "properties": {"type": {"title": "Type", "enum": ["prompt"], "type": "string", "default": "prompt"}, "prompt": {"title": "Prompt", "type": "string", "description": "The output prompt"}}, "description": "Base class for invocations that output a prompt"}, "RestoreFaceInvocation": {"title": "RestoreFaceInvocation", "required": ["id"], "type": "object", "properties": {"id": {"title": "Id", "type": "string", "description": "The id of this node. Must be unique among all nodes."}, "type": {"title": "Type", "enum": ["restore_face"], "type": "string", "default": "restore_face"}, "image": {"title": "Image", "allOf": [{"$ref": "#/components/schemas/ImageField"}], "description": "The input image"}, "strength": {"title": "Strength", "maximum": 1.0, "exclusiveMinimum": 0.0, "type": "number", "description": "The strength of the restoration", "default": 0.75}}, "description": "Restores faces in an image."}, "ShowImageInvocation": {"title": "ShowImageInvocation", "required": ["id"], "type": "object", "properties": {"id": {"title": "Id", "type": "string", "description": "The id of this node. Must be unique among all nodes."}, "type": {"title": "Type", "enum": ["show_image"], "type": "string", "default": "show_image"}, "image": {"title": "Image", "allOf": [{"$ref": "#/components/schemas/ImageField"}], "description": "The image to show"}}, "description": "Displays a provided image, and passes it forward in the pipeline."}, "TextToImageInvocation": {"title": "TextToImageInvocation", "required": ["id"], "type": "object", "properties": {"id": {"title": "Id", "type": "string", "description": "The id of this node. Must be unique among all nodes."}, "type": {"title": "Type", "enum": ["txt2img"], "type": "string", "default": "txt2img"}, "prompt": {"title": "Prompt", "type": "string", "description": "The prompt to generate an image from"}, "seed": {"title": "Seed", "maximum": 4294967295.0, "minimum": -1.0, "type": "integer", "description": "The seed to use (-1 for a random seed)", "default": -1}, "steps": {"title": "Steps", "exclusiveMinimum": 0.0, "type": "integer", "description": "The number of steps to use to generate the image", "default": 10}, "width": {"title": "Width", "multipleOf": 64.0, "exclusiveMinimum": 0.0, "type": "integer", "description": "The width of the resulting image", "default": 512}, "height": {"title": "Height", "multipleOf": 64.0, "exclusiveMinimum": 0.0, "type": "integer", "description": "The height of the resulting image", "default": 512}, "cfg_scale": {"title": "Cfg Scale", "exclusiveMinimum": 0.0, "type": "number", "description": "The Classifier-Free Guidance, higher values may result in a result closer to the prompt", "default": 7.5}, "sampler_name": {"title": "Sampler Name", "enum": ["ddim", "dpmpp_2", "k_dpm_2", "k_dpm_2_a", "k_dpmpp_2", "k_euler", "k_euler_a", "k_heun", "k_lms", "plms"], "type": "string", "description": "The sampler to use", "default": "k_lms"}, "seamless": {"title": "Seamless", "type": "boolean", "description": "Whether or not to generate an image that can tile without seams", "default": false}, "model": {"title": "Model", "type": "string", "description": "The model to use (currently ignored)", "default": ""}, "progress_images": {"title": "Progress Images", "type": "boolean", "description": "Whether or not to produce progress images during generation", "default": false}}, "description": "Generates an image using text2img."}, "UpscaleInvocation": {"title": "UpscaleInvocation", "required": ["id"], "type": "object", "properties": {"id": {"title": "Id", "type": "string", "description": "The id of this node. Must be unique among all nodes."}, "type": {"title": "Type", "enum": ["upscale"], "type": "string", "default": "upscale"}, "image": {"title": "Image", "allOf": [{"$ref": "#/components/schemas/ImageField"}], "description": "The input image"}, "strength": {"title": "Strength", "maximum": 1.0, "exclusiveMinimum": 0.0, "type": "number", "description": "The strength", "default": 0.75}, "level": {"title": "Level", "enum": [2, 4], "type": "integer", "description": "The upscale level", "default": 2}}, "description": "Upscales an image."}, "ValidationError": {"title": "ValidationError", "required": ["loc", "msg", "type"], "type": "object", "properties": {"loc": {"title": "Location", "type": "array", "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]}}, "msg": {"title": "Message", "type": "string"}, "type": {"title": "Error Type", "type": "string"}}}}}} \ No newline at end of file diff --git a/invokeai/frontend/web/src/services/api/generate_openapi_json.py b/invokeai/frontend/web/src/services/generate_openapi_json.py similarity index 100% rename from invokeai/frontend/web/src/services/api/generate_openapi_json.py rename to invokeai/frontend/web/src/services/generate_openapi_json.py diff --git a/invokeai/frontend/web/src/services/openapi.json b/invokeai/frontend/web/src/services/openapi.json new file mode 100644 index 0000000000..9ce8ea54ae --- /dev/null +++ b/invokeai/frontend/web/src/services/openapi.json @@ -0,0 +1,1821 @@ +{ + "openapi": "3.0.2", + "info": { "title": "Invoke AI", "version": "0.1.0" }, + "paths": { + "/api/v1/sessions/": { + "get": { + "tags": ["sessions"], + "summary": "List Sessions", + "description": "Gets a list of sessions, optionally searching", + "operationId": "list_sessions", + "parameters": [ + { + "description": "The page of results to get", + "required": false, + "schema": { + "title": "Page", + "type": "integer", + "description": "The page of results to get", + "default": 0 + }, + "name": "page", + "in": "query" + }, + { + "description": "The number of results per page", + "required": false, + "schema": { + "title": "Per Page", + "type": "integer", + "description": "The number of results per page", + "default": 10 + }, + "name": "per_page", + "in": "query" + }, + { + "description": "The query string to search for", + "required": false, + "schema": { + "title": "Query", + "type": "string", + "description": "The query string to search for", + "default": "" + }, + "name": "query", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PaginatedResults_GraphExecutionState_" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/HTTPValidationError" } + } + } + } + } + }, + "post": { + "tags": ["sessions"], + "summary": "Create Session", + "description": "Creates a new session, optionally initializing it with an invocation graph", + "operationId": "create_session", + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "Graph", + "allOf": [{ "$ref": "#/components/schemas/Graph" }], + "description": "The graph to initialize the session with" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/GraphExecutionState" } + } + } + }, + "400": { "description": "Invalid json" }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/HTTPValidationError" } + } + } + } + } + } + }, + "/api/v1/sessions/{session_id}": { + "get": { + "tags": ["sessions"], + "summary": "Get Session", + "description": "Gets a session", + "operationId": "get_session", + "parameters": [ + { + "description": "The id of the session to get", + "required": true, + "schema": { + "title": "Session Id", + "type": "string", + "description": "The id of the session to get" + }, + "name": "session_id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/GraphExecutionState" } + } + } + }, + "404": { "description": "Session not found" }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/HTTPValidationError" } + } + } + } + } + } + }, + "/api/v1/sessions/{session_id}/nodes": { + "post": { + "tags": ["sessions"], + "summary": "Add Node", + "description": "Adds a node to the graph", + "operationId": "add_node", + "parameters": [ + { + "description": "The id of the session", + "required": true, + "schema": { + "title": "Session Id", + "type": "string", + "description": "The id of the session" + }, + "name": "session_id", + "in": "path" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "Node", + "anyOf": [ + { "$ref": "#/components/schemas/LoadImageInvocation" }, + { "$ref": "#/components/schemas/ShowImageInvocation" }, + { "$ref": "#/components/schemas/CropImageInvocation" }, + { "$ref": "#/components/schemas/PasteImageInvocation" }, + { "$ref": "#/components/schemas/MaskFromAlphaInvocation" }, + { "$ref": "#/components/schemas/BlurInvocation" }, + { "$ref": "#/components/schemas/LerpInvocation" }, + { "$ref": "#/components/schemas/InverseLerpInvocation" }, + { "$ref": "#/components/schemas/CvInpaintInvocation" }, + { "$ref": "#/components/schemas/UpscaleInvocation" }, + { "$ref": "#/components/schemas/RestoreFaceInvocation" }, + { "$ref": "#/components/schemas/TextToImageInvocation" }, + { "$ref": "#/components/schemas/GraphInvocation" }, + { "$ref": "#/components/schemas/IterateInvocation" }, + { "$ref": "#/components/schemas/CollectInvocation" }, + { "$ref": "#/components/schemas/ImageToImageInvocation" }, + { "$ref": "#/components/schemas/InpaintInvocation" } + ], + "description": "The node to add" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { "title": "Response 200 Add Node", "type": "string" } + } + } + }, + "400": { "description": "Invalid node or link" }, + "404": { "description": "Session not found" }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/HTTPValidationError" } + } + } + } + } + } + }, + "/api/v1/sessions/{session_id}/nodes/{node_path}": { + "put": { + "tags": ["sessions"], + "summary": "Update Node", + "description": "Updates a node in the graph and removes all linked edges", + "operationId": "update_node", + "parameters": [ + { + "description": "The id of the session", + "required": true, + "schema": { + "title": "Session Id", + "type": "string", + "description": "The id of the session" + }, + "name": "session_id", + "in": "path" + }, + { + "description": "The path to the node in the graph", + "required": true, + "schema": { + "title": "Node Path", + "type": "string", + "description": "The path to the node in the graph" + }, + "name": "node_path", + "in": "path" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "Node", + "anyOf": [ + { "$ref": "#/components/schemas/LoadImageInvocation" }, + { "$ref": "#/components/schemas/ShowImageInvocation" }, + { "$ref": "#/components/schemas/CropImageInvocation" }, + { "$ref": "#/components/schemas/PasteImageInvocation" }, + { "$ref": "#/components/schemas/MaskFromAlphaInvocation" }, + { "$ref": "#/components/schemas/BlurInvocation" }, + { "$ref": "#/components/schemas/LerpInvocation" }, + { "$ref": "#/components/schemas/InverseLerpInvocation" }, + { "$ref": "#/components/schemas/CvInpaintInvocation" }, + { "$ref": "#/components/schemas/UpscaleInvocation" }, + { "$ref": "#/components/schemas/RestoreFaceInvocation" }, + { "$ref": "#/components/schemas/TextToImageInvocation" }, + { "$ref": "#/components/schemas/GraphInvocation" }, + { "$ref": "#/components/schemas/IterateInvocation" }, + { "$ref": "#/components/schemas/CollectInvocation" }, + { "$ref": "#/components/schemas/ImageToImageInvocation" }, + { "$ref": "#/components/schemas/InpaintInvocation" } + ], + "description": "The new node" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/GraphExecutionState" } + } + } + }, + "400": { "description": "Invalid node or link" }, + "404": { "description": "Session not found" }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/HTTPValidationError" } + } + } + } + } + }, + "delete": { + "tags": ["sessions"], + "summary": "Delete Node", + "description": "Deletes a node in the graph and removes all linked edges", + "operationId": "delete_node", + "parameters": [ + { + "description": "The id of the session", + "required": true, + "schema": { + "title": "Session Id", + "type": "string", + "description": "The id of the session" + }, + "name": "session_id", + "in": "path" + }, + { + "description": "The path to the node to delete", + "required": true, + "schema": { + "title": "Node Path", + "type": "string", + "description": "The path to the node to delete" + }, + "name": "node_path", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/GraphExecutionState" } + } + } + }, + "400": { "description": "Invalid node or link" }, + "404": { "description": "Session not found" }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/HTTPValidationError" } + } + } + } + } + } + }, + "/api/v1/sessions/{session_id}/edges": { + "post": { + "tags": ["sessions"], + "summary": "Add Edge", + "description": "Adds an edge to the graph", + "operationId": "add_edge", + "parameters": [ + { + "description": "The id of the session", + "required": true, + "schema": { + "title": "Session Id", + "type": "string", + "description": "The id of the session" + }, + "name": "session_id", + "in": "path" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "Edge", + "maxItems": 2, + "minItems": 2, + "type": "array", + "items": [ + { "$ref": "#/components/schemas/EdgeConnection" }, + { "$ref": "#/components/schemas/EdgeConnection" } + ], + "description": "The edge to add" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/GraphExecutionState" } + } + } + }, + "400": { "description": "Invalid node or link" }, + "404": { "description": "Session not found" }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/HTTPValidationError" } + } + } + } + } + } + }, + "/api/v1/sessions/{session_id}/edges/{from_node_id}/{from_field}/{to_node_id}/{to_field}": { + "delete": { + "tags": ["sessions"], + "summary": "Delete Edge", + "description": "Deletes an edge from the graph", + "operationId": "delete_edge", + "parameters": [ + { + "description": "The id of the session", + "required": true, + "schema": { + "title": "Session Id", + "type": "string", + "description": "The id of the session" + }, + "name": "session_id", + "in": "path" + }, + { + "description": "The id of the node the edge is coming from", + "required": true, + "schema": { + "title": "From Node Id", + "type": "string", + "description": "The id of the node the edge is coming from" + }, + "name": "from_node_id", + "in": "path" + }, + { + "description": "The field of the node the edge is coming from", + "required": true, + "schema": { + "title": "From Field", + "type": "string", + "description": "The field of the node the edge is coming from" + }, + "name": "from_field", + "in": "path" + }, + { + "description": "The id of the node the edge is going to", + "required": true, + "schema": { + "title": "To Node Id", + "type": "string", + "description": "The id of the node the edge is going to" + }, + "name": "to_node_id", + "in": "path" + }, + { + "description": "The field of the node the edge is going to", + "required": true, + "schema": { + "title": "To Field", + "type": "string", + "description": "The field of the node the edge is going to" + }, + "name": "to_field", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/GraphExecutionState" } + } + } + }, + "400": { "description": "Invalid node or link" }, + "404": { "description": "Session not found" }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/HTTPValidationError" } + } + } + } + } + } + }, + "/api/v1/sessions/{session_id}/invoke": { + "put": { + "tags": ["sessions"], + "summary": "Invoke Session", + "description": "Invokes a session", + "operationId": "invoke_session", + "parameters": [ + { + "description": "The id of the session to invoke", + "required": true, + "schema": { + "title": "Session Id", + "type": "string", + "description": "The id of the session to invoke" + }, + "name": "session_id", + "in": "path" + }, + { + "description": "Whether or not to invoke all remaining invocations", + "required": false, + "schema": { + "title": "All", + "type": "boolean", + "description": "Whether or not to invoke all remaining invocations", + "default": false + }, + "name": "all", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { "application/json": { "schema": {} } } + }, + "202": { "description": "The invocation is queued" }, + "400": { + "description": "The session has no invocations ready to invoke" + }, + "404": { "description": "Session not found" }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/HTTPValidationError" } + } + } + } + } + } + }, + "/api/v1/images/{image_type}/{image_name}": { + "get": { + "tags": ["images"], + "summary": "Get Image", + "description": "Gets a result", + "operationId": "get_image", + "parameters": [ + { + "description": "The type of image to get", + "required": true, + "schema": { + "allOf": [{ "$ref": "#/components/schemas/ImageType" }], + "description": "The type of image to get" + }, + "name": "image_type", + "in": "path" + }, + { + "description": "The name of the image to get", + "required": true, + "schema": { + "title": "Image Name", + "type": "string", + "description": "The name of the image to get" + }, + "name": "image_name", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { "application/json": { "schema": {} } } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/HTTPValidationError" } + } + } + } + } + } + }, + "/api/v1/images/uploads/": { + "post": { + "tags": ["images"], + "summary": "Upload Image", + "operationId": "upload_image", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { "$ref": "#/components/schemas/Body_upload_image" } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { "application/json": { "schema": {} } } + }, + "201": { "description": "The image was uploaded successfully" }, + "404": { "description": "Session not found" }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/HTTPValidationError" } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "BlurInvocation": { + "title": "BlurInvocation", + "required": ["id"], + "type": "object", + "properties": { + "id": { + "title": "Id", + "type": "string", + "description": "The id of this node. Must be unique among all nodes." + }, + "type": { + "title": "Type", + "enum": ["blur"], + "type": "string", + "default": "blur" + }, + "image": { + "title": "Image", + "allOf": [{ "$ref": "#/components/schemas/ImageField" }], + "description": "The image to blur" + }, + "radius": { + "title": "Radius", + "minimum": 0.0, + "type": "number", + "description": "The blur radius", + "default": 8.0 + }, + "blur_type": { + "title": "Blur Type", + "enum": ["gaussian", "box"], + "type": "string", + "description": "The type of blur", + "default": "gaussian" + } + }, + "description": "Blurs an image" + }, + "Body_upload_image": { + "title": "Body_upload_image", + "required": ["file"], + "type": "object", + "properties": { + "file": { "title": "File", "type": "string", "format": "binary" } + } + }, + "CollectInvocation": { + "title": "CollectInvocation", + "required": ["id"], + "type": "object", + "properties": { + "id": { + "title": "Id", + "type": "string", + "description": "The id of this node. Must be unique among all nodes." + }, + "type": { + "title": "Type", + "enum": ["collect"], + "type": "string", + "default": "collect" + }, + "item": { + "title": "Item", + "description": "The item to collect (all inputs must be of the same type)" + }, + "collection": { + "title": "Collection", + "type": "array", + "items": {}, + "description": "The collection, will be provided on execution" + } + }, + "description": "Collects values into a collection" + }, + "CollectInvocationOutput": { + "title": "CollectInvocationOutput", + "required": ["collection"], + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": ["collect_output"], + "type": "string", + "default": "collect_output" + }, + "collection": { + "title": "Collection", + "type": "array", + "items": {}, + "description": "The collection of input items" + } + }, + "description": "Base class for all invocation outputs" + }, + "CropImageInvocation": { + "title": "CropImageInvocation", + "required": ["id"], + "type": "object", + "properties": { + "id": { + "title": "Id", + "type": "string", + "description": "The id of this node. Must be unique among all nodes." + }, + "type": { + "title": "Type", + "enum": ["crop"], + "type": "string", + "default": "crop" + }, + "image": { + "title": "Image", + "allOf": [{ "$ref": "#/components/schemas/ImageField" }], + "description": "The image to crop" + }, + "x": { + "title": "X", + "type": "integer", + "description": "The left x coordinate of the crop rectangle", + "default": 0 + }, + "y": { + "title": "Y", + "type": "integer", + "description": "The top y coordinate of the crop rectangle", + "default": 0 + }, + "width": { + "title": "Width", + "exclusiveMinimum": 0.0, + "type": "integer", + "description": "The width of the crop rectangle", + "default": 512 + }, + "height": { + "title": "Height", + "exclusiveMinimum": 0.0, + "type": "integer", + "description": "The height of the crop rectangle", + "default": 512 + } + }, + "description": "Crops an image to a specified box. The box can be outside of the image." + }, + "CvInpaintInvocation": { + "title": "CvInpaintInvocation", + "required": ["id"], + "type": "object", + "properties": { + "id": { + "title": "Id", + "type": "string", + "description": "The id of this node. Must be unique among all nodes." + }, + "type": { + "title": "Type", + "enum": ["cv_inpaint"], + "type": "string", + "default": "cv_inpaint" + }, + "image": { + "title": "Image", + "allOf": [{ "$ref": "#/components/schemas/ImageField" }], + "description": "The image to inpaint" + }, + "mask": { + "title": "Mask", + "allOf": [{ "$ref": "#/components/schemas/ImageField" }], + "description": "The mask to use when inpainting" + } + }, + "description": "Simple inpaint using opencv." + }, + "EdgeConnection": { + "title": "EdgeConnection", + "required": ["node_id", "field"], + "type": "object", + "properties": { + "node_id": { + "title": "Node Id", + "type": "string", + "description": "The id of the node for this edge connection" + }, + "field": { + "title": "Field", + "type": "string", + "description": "The field for this connection" + } + } + }, + "Graph": { + "title": "Graph", + "type": "object", + "properties": { + "id": { + "title": "Id", + "type": "string", + "description": "The id of this graph" + }, + "nodes": { + "title": "Nodes", + "type": "object", + "additionalProperties": { + "oneOf": [ + { "$ref": "#/components/schemas/LoadImageInvocation" }, + { "$ref": "#/components/schemas/ShowImageInvocation" }, + { "$ref": "#/components/schemas/CropImageInvocation" }, + { "$ref": "#/components/schemas/PasteImageInvocation" }, + { "$ref": "#/components/schemas/MaskFromAlphaInvocation" }, + { "$ref": "#/components/schemas/BlurInvocation" }, + { "$ref": "#/components/schemas/LerpInvocation" }, + { "$ref": "#/components/schemas/InverseLerpInvocation" }, + { "$ref": "#/components/schemas/CvInpaintInvocation" }, + { "$ref": "#/components/schemas/UpscaleInvocation" }, + { "$ref": "#/components/schemas/RestoreFaceInvocation" }, + { "$ref": "#/components/schemas/TextToImageInvocation" }, + { "$ref": "#/components/schemas/GraphInvocation" }, + { "$ref": "#/components/schemas/IterateInvocation" }, + { "$ref": "#/components/schemas/CollectInvocation" }, + { "$ref": "#/components/schemas/ImageToImageInvocation" }, + { "$ref": "#/components/schemas/InpaintInvocation" } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "load_image": "#/components/schemas/LoadImageInvocation", + "show_image": "#/components/schemas/ShowImageInvocation", + "crop": "#/components/schemas/CropImageInvocation", + "paste": "#/components/schemas/PasteImageInvocation", + "tomask": "#/components/schemas/MaskFromAlphaInvocation", + "blur": "#/components/schemas/BlurInvocation", + "lerp": "#/components/schemas/LerpInvocation", + "ilerp": "#/components/schemas/InverseLerpInvocation", + "cv_inpaint": "#/components/schemas/CvInpaintInvocation", + "upscale": "#/components/schemas/UpscaleInvocation", + "restore_face": "#/components/schemas/RestoreFaceInvocation", + "txt2img": "#/components/schemas/TextToImageInvocation", + "graph": "#/components/schemas/GraphInvocation", + "iterate": "#/components/schemas/IterateInvocation", + "collect": "#/components/schemas/CollectInvocation", + "img2img": "#/components/schemas/ImageToImageInvocation", + "inpaint": "#/components/schemas/InpaintInvocation" + } + } + }, + "description": "The nodes in this graph" + }, + "edges": { + "title": "Edges", + "type": "array", + "items": { + "maxItems": 2, + "minItems": 2, + "type": "array", + "items": [ + { "$ref": "#/components/schemas/EdgeConnection" }, + { "$ref": "#/components/schemas/EdgeConnection" } + ] + }, + "description": "The connections between nodes and their fields in this graph" + } + } + }, + "GraphExecutionState": { + "title": "GraphExecutionState", + "required": ["graph"], + "type": "object", + "properties": { + "id": { + "title": "Id", + "type": "string", + "description": "The id of the execution state" + }, + "graph": { + "title": "Graph", + "allOf": [{ "$ref": "#/components/schemas/Graph" }], + "description": "The graph being executed" + }, + "execution_graph": { + "title": "Execution Graph", + "allOf": [{ "$ref": "#/components/schemas/Graph" }], + "description": "The expanded graph of activated and executed nodes" + }, + "executed": { + "title": "Executed", + "uniqueItems": true, + "type": "array", + "items": { "type": "string" }, + "description": "The set of node ids that have been executed" + }, + "executed_history": { + "title": "Executed History", + "type": "array", + "items": { "type": "string" }, + "description": "The list of node ids that have been executed, in order of execution" + }, + "results": { + "title": "Results", + "type": "object", + "additionalProperties": { + "oneOf": [ + { "$ref": "#/components/schemas/ImageOutput" }, + { "$ref": "#/components/schemas/MaskOutput" }, + { "$ref": "#/components/schemas/PromptOutput" }, + { "$ref": "#/components/schemas/GraphInvocationOutput" }, + { "$ref": "#/components/schemas/IterateInvocationOutput" }, + { "$ref": "#/components/schemas/CollectInvocationOutput" } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "image": "#/components/schemas/ImageOutput", + "mask": "#/components/schemas/MaskOutput", + "prompt": "#/components/schemas/PromptOutput", + "graph_output": "#/components/schemas/GraphInvocationOutput", + "iterate_output": "#/components/schemas/IterateInvocationOutput", + "collect_output": "#/components/schemas/CollectInvocationOutput" + } + } + }, + "description": "The results of node executions" + }, + "errors": { + "title": "Errors", + "type": "object", + "additionalProperties": { "type": "string" }, + "description": "Errors raised when executing nodes" + }, + "prepared_source_mapping": { + "title": "Prepared Source Mapping", + "type": "object", + "additionalProperties": { "type": "string" }, + "description": "The map of prepared nodes to original graph nodes" + }, + "source_prepared_mapping": { + "title": "Source Prepared Mapping", + "type": "object", + "additionalProperties": { + "uniqueItems": true, + "type": "array", + "items": { "type": "string" } + }, + "description": "The map of original graph nodes to prepared nodes" + } + }, + "description": "Tracks the state of a graph execution" + }, + "GraphInvocation": { + "title": "GraphInvocation", + "required": ["id"], + "type": "object", + "properties": { + "id": { + "title": "Id", + "type": "string", + "description": "The id of this node. Must be unique among all nodes." + }, + "type": { + "title": "Type", + "enum": ["graph"], + "type": "string", + "default": "graph" + }, + "graph": { + "title": "Graph", + "allOf": [{ "$ref": "#/components/schemas/Graph" }], + "description": "The graph to run" + } + }, + "description": "A node to process inputs and produce outputs.\nMay use dependency injection in __init__ to receive providers." + }, + "GraphInvocationOutput": { + "title": "GraphInvocationOutput", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": ["graph_output"], + "type": "string", + "default": "graph_output" + } + }, + "description": "Base class for all invocation outputs" + }, + "HTTPValidationError": { + "title": "HTTPValidationError", + "type": "object", + "properties": { + "detail": { + "title": "Detail", + "type": "array", + "items": { "$ref": "#/components/schemas/ValidationError" } + } + } + }, + "ImageField": { + "title": "ImageField", + "type": "object", + "properties": { + "image_type": { + "title": "Image Type", + "type": "string", + "description": "The type of the image", + "default": "results" + }, + "image_name": { + "title": "Image Name", + "type": "string", + "description": "The name of the image" + } + }, + "description": "An image field used for passing image objects between invocations" + }, + "ImageOutput": { + "title": "ImageOutput", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": ["image"], + "type": "string", + "default": "image" + }, + "image": { + "title": "Image", + "allOf": [{ "$ref": "#/components/schemas/ImageField" }], + "description": "The output image" + } + }, + "description": "Base class for invocations that output an image" + }, + "ImageToImageInvocation": { + "title": "ImageToImageInvocation", + "required": ["id"], + "type": "object", + "properties": { + "id": { + "title": "Id", + "type": "string", + "description": "The id of this node. Must be unique among all nodes." + }, + "type": { + "title": "Type", + "enum": ["img2img"], + "type": "string", + "default": "img2img" + }, + "prompt": { + "title": "Prompt", + "type": "string", + "description": "The prompt to generate an image from" + }, + "seed": { + "title": "Seed", + "maximum": 4294967295.0, + "minimum": -1.0, + "type": "integer", + "description": "The seed to use (-1 for a random seed)", + "default": -1 + }, + "steps": { + "title": "Steps", + "exclusiveMinimum": 0.0, + "type": "integer", + "description": "The number of steps to use to generate the image", + "default": 10 + }, + "width": { + "title": "Width", + "multipleOf": 64.0, + "exclusiveMinimum": 0.0, + "type": "integer", + "description": "The width of the resulting image", + "default": 512 + }, + "height": { + "title": "Height", + "multipleOf": 64.0, + "exclusiveMinimum": 0.0, + "type": "integer", + "description": "The height of the resulting image", + "default": 512 + }, + "cfg_scale": { + "title": "Cfg Scale", + "exclusiveMinimum": 0.0, + "type": "number", + "description": "The Classifier-Free Guidance, higher values may result in a result closer to the prompt", + "default": 7.5 + }, + "sampler_name": { + "title": "Sampler Name", + "enum": [ + "ddim", + "dpmpp_2", + "k_dpm_2", + "k_dpm_2_a", + "k_dpmpp_2", + "k_euler", + "k_euler_a", + "k_heun", + "k_lms", + "plms" + ], + "type": "string", + "description": "The sampler to use", + "default": "k_lms" + }, + "seamless": { + "title": "Seamless", + "type": "boolean", + "description": "Whether or not to generate an image that can tile without seams", + "default": false + }, + "model": { + "title": "Model", + "type": "string", + "description": "The model to use (currently ignored)", + "default": "" + }, + "progress_images": { + "title": "Progress Images", + "type": "boolean", + "description": "Whether or not to produce progress images during generation", + "default": false + }, + "image": { + "title": "Image", + "allOf": [{ "$ref": "#/components/schemas/ImageField" }], + "description": "The input image" + }, + "strength": { + "title": "Strength", + "maximum": 1.0, + "exclusiveMinimum": 0.0, + "type": "number", + "description": "The strength of the original image", + "default": 0.75 + }, + "fit": { + "title": "Fit", + "type": "boolean", + "description": "Whether or not the result should be fit to the aspect ratio of the input image", + "default": true + } + }, + "description": "Generates an image using img2img." + }, + "ImageType": { + "title": "ImageType", + "enum": ["results", "intermediates", "uploads"], + "type": "string", + "description": "An enumeration." + }, + "InpaintInvocation": { + "title": "InpaintInvocation", + "required": ["id"], + "type": "object", + "properties": { + "id": { + "title": "Id", + "type": "string", + "description": "The id of this node. Must be unique among all nodes." + }, + "type": { + "title": "Type", + "enum": ["inpaint"], + "type": "string", + "default": "inpaint" + }, + "prompt": { + "title": "Prompt", + "type": "string", + "description": "The prompt to generate an image from" + }, + "seed": { + "title": "Seed", + "maximum": 4294967295.0, + "minimum": -1.0, + "type": "integer", + "description": "The seed to use (-1 for a random seed)", + "default": -1 + }, + "steps": { + "title": "Steps", + "exclusiveMinimum": 0.0, + "type": "integer", + "description": "The number of steps to use to generate the image", + "default": 10 + }, + "width": { + "title": "Width", + "multipleOf": 64.0, + "exclusiveMinimum": 0.0, + "type": "integer", + "description": "The width of the resulting image", + "default": 512 + }, + "height": { + "title": "Height", + "multipleOf": 64.0, + "exclusiveMinimum": 0.0, + "type": "integer", + "description": "The height of the resulting image", + "default": 512 + }, + "cfg_scale": { + "title": "Cfg Scale", + "exclusiveMinimum": 0.0, + "type": "number", + "description": "The Classifier-Free Guidance, higher values may result in a result closer to the prompt", + "default": 7.5 + }, + "sampler_name": { + "title": "Sampler Name", + "enum": [ + "ddim", + "dpmpp_2", + "k_dpm_2", + "k_dpm_2_a", + "k_dpmpp_2", + "k_euler", + "k_euler_a", + "k_heun", + "k_lms", + "plms" + ], + "type": "string", + "description": "The sampler to use", + "default": "k_lms" + }, + "seamless": { + "title": "Seamless", + "type": "boolean", + "description": "Whether or not to generate an image that can tile without seams", + "default": false + }, + "model": { + "title": "Model", + "type": "string", + "description": "The model to use (currently ignored)", + "default": "" + }, + "progress_images": { + "title": "Progress Images", + "type": "boolean", + "description": "Whether or not to produce progress images during generation", + "default": false + }, + "image": { + "title": "Image", + "allOf": [{ "$ref": "#/components/schemas/ImageField" }], + "description": "The input image" + }, + "strength": { + "title": "Strength", + "maximum": 1.0, + "exclusiveMinimum": 0.0, + "type": "number", + "description": "The strength of the original image", + "default": 0.75 + }, + "fit": { + "title": "Fit", + "type": "boolean", + "description": "Whether or not the result should be fit to the aspect ratio of the input image", + "default": true + }, + "mask": { + "title": "Mask", + "allOf": [{ "$ref": "#/components/schemas/ImageField" }], + "description": "The mask" + }, + "inpaint_replace": { + "title": "Inpaint Replace", + "maximum": 1.0, + "minimum": 0.0, + "type": "number", + "description": "The amount by which to replace masked areas with latent noise", + "default": 0.0 + } + }, + "description": "Generates an image using inpaint." + }, + "InverseLerpInvocation": { + "title": "InverseLerpInvocation", + "required": ["id"], + "type": "object", + "properties": { + "id": { + "title": "Id", + "type": "string", + "description": "The id of this node. Must be unique among all nodes." + }, + "type": { + "title": "Type", + "enum": ["ilerp"], + "type": "string", + "default": "ilerp" + }, + "image": { + "title": "Image", + "allOf": [{ "$ref": "#/components/schemas/ImageField" }], + "description": "The image to lerp" + }, + "min": { + "title": "Min", + "maximum": 255.0, + "minimum": 0.0, + "type": "integer", + "description": "The minimum input value", + "default": 0 + }, + "max": { + "title": "Max", + "maximum": 255.0, + "minimum": 0.0, + "type": "integer", + "description": "The maximum input value", + "default": 255 + } + }, + "description": "Inverse linear interpolation of all pixels of an image" + }, + "IterateInvocation": { + "title": "IterateInvocation", + "required": ["id"], + "type": "object", + "properties": { + "id": { + "title": "Id", + "type": "string", + "description": "The id of this node. Must be unique among all nodes." + }, + "type": { + "title": "Type", + "enum": ["iterate"], + "type": "string", + "default": "iterate" + }, + "collection": { + "title": "Collection", + "type": "array", + "items": {}, + "description": "The list of items to iterate over" + }, + "index": { + "title": "Index", + "type": "integer", + "description": "The index, will be provided on executed iterators", + "default": 0 + } + }, + "description": "A node to process inputs and produce outputs.\nMay use dependency injection in __init__ to receive providers." + }, + "IterateInvocationOutput": { + "title": "IterateInvocationOutput", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": ["iterate_output"], + "type": "string", + "default": "iterate_output" + }, + "item": { + "title": "Item", + "description": "The item being iterated over" + } + }, + "description": "Used to connect iteration outputs. Will be expanded to a specific output." + }, + "LerpInvocation": { + "title": "LerpInvocation", + "required": ["id"], + "type": "object", + "properties": { + "id": { + "title": "Id", + "type": "string", + "description": "The id of this node. Must be unique among all nodes." + }, + "type": { + "title": "Type", + "enum": ["lerp"], + "type": "string", + "default": "lerp" + }, + "image": { + "title": "Image", + "allOf": [{ "$ref": "#/components/schemas/ImageField" }], + "description": "The image to lerp" + }, + "min": { + "title": "Min", + "maximum": 255.0, + "minimum": 0.0, + "type": "integer", + "description": "The minimum output value", + "default": 0 + }, + "max": { + "title": "Max", + "maximum": 255.0, + "minimum": 0.0, + "type": "integer", + "description": "The maximum output value", + "default": 255 + } + }, + "description": "Linear interpolation of all pixels of an image" + }, + "LoadImageInvocation": { + "title": "LoadImageInvocation", + "required": ["id", "image_type", "image_name"], + "type": "object", + "properties": { + "id": { + "title": "Id", + "type": "string", + "description": "The id of this node. Must be unique among all nodes." + }, + "type": { + "title": "Type", + "enum": ["load_image"], + "type": "string", + "default": "load_image" + }, + "image_type": { + "allOf": [{ "$ref": "#/components/schemas/ImageType" }], + "description": "The type of the image" + }, + "image_name": { + "title": "Image Name", + "type": "string", + "description": "The name of the image" + } + }, + "description": "Load an image from a filename and provide it as output." + }, + "MaskFromAlphaInvocation": { + "title": "MaskFromAlphaInvocation", + "required": ["id"], + "type": "object", + "properties": { + "id": { + "title": "Id", + "type": "string", + "description": "The id of this node. Must be unique among all nodes." + }, + "type": { + "title": "Type", + "enum": ["tomask"], + "type": "string", + "default": "tomask" + }, + "image": { + "title": "Image", + "allOf": [{ "$ref": "#/components/schemas/ImageField" }], + "description": "The image to create the mask from" + }, + "invert": { + "title": "Invert", + "type": "boolean", + "description": "Whether or not to invert the mask", + "default": false + } + }, + "description": "Extracts the alpha channel of an image as a mask." + }, + "MaskOutput": { + "title": "MaskOutput", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": ["mask"], + "type": "string", + "default": "mask" + }, + "mask": { + "title": "Mask", + "allOf": [{ "$ref": "#/components/schemas/ImageField" }], + "description": "The output mask" + } + }, + "description": "Base class for invocations that output a mask" + }, + "PaginatedResults_GraphExecutionState_": { + "title": "PaginatedResults[GraphExecutionState]", + "required": ["items", "page", "pages", "per_page", "total"], + "type": "object", + "properties": { + "items": { + "title": "Items", + "type": "array", + "items": { "$ref": "#/components/schemas/GraphExecutionState" }, + "description": "Items" + }, + "page": { + "title": "Page", + "type": "integer", + "description": "Current Page" + }, + "pages": { + "title": "Pages", + "type": "integer", + "description": "Total number of pages" + }, + "per_page": { + "title": "Per Page", + "type": "integer", + "description": "Number of items per page" + }, + "total": { + "title": "Total", + "type": "integer", + "description": "Total number of items in result" + } + }, + "description": "Paginated results" + }, + "PasteImageInvocation": { + "title": "PasteImageInvocation", + "required": ["id"], + "type": "object", + "properties": { + "id": { + "title": "Id", + "type": "string", + "description": "The id of this node. Must be unique among all nodes." + }, + "type": { + "title": "Type", + "enum": ["paste"], + "type": "string", + "default": "paste" + }, + "base_image": { + "title": "Base Image", + "allOf": [{ "$ref": "#/components/schemas/ImageField" }], + "description": "The base image" + }, + "image": { + "title": "Image", + "allOf": [{ "$ref": "#/components/schemas/ImageField" }], + "description": "The image to paste" + }, + "mask": { + "title": "Mask", + "allOf": [{ "$ref": "#/components/schemas/ImageField" }], + "description": "The mask to use when pasting" + }, + "x": { + "title": "X", + "type": "integer", + "description": "The left x coordinate at which to paste the image", + "default": 0 + }, + "y": { + "title": "Y", + "type": "integer", + "description": "The top y coordinate at which to paste the image", + "default": 0 + } + }, + "description": "Pastes an image into another image." + }, + "PromptOutput": { + "title": "PromptOutput", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": ["prompt"], + "type": "string", + "default": "prompt" + }, + "prompt": { + "title": "Prompt", + "type": "string", + "description": "The output prompt" + } + }, + "description": "Base class for invocations that output a prompt" + }, + "RestoreFaceInvocation": { + "title": "RestoreFaceInvocation", + "required": ["id"], + "type": "object", + "properties": { + "id": { + "title": "Id", + "type": "string", + "description": "The id of this node. Must be unique among all nodes." + }, + "type": { + "title": "Type", + "enum": ["restore_face"], + "type": "string", + "default": "restore_face" + }, + "image": { + "title": "Image", + "allOf": [{ "$ref": "#/components/schemas/ImageField" }], + "description": "The input image" + }, + "strength": { + "title": "Strength", + "maximum": 1.0, + "exclusiveMinimum": 0.0, + "type": "number", + "description": "The strength of the restoration", + "default": 0.75 + } + }, + "description": "Restores faces in an image." + }, + "ShowImageInvocation": { + "title": "ShowImageInvocation", + "required": ["id"], + "type": "object", + "properties": { + "id": { + "title": "Id", + "type": "string", + "description": "The id of this node. Must be unique among all nodes." + }, + "type": { + "title": "Type", + "enum": ["show_image"], + "type": "string", + "default": "show_image" + }, + "image": { + "title": "Image", + "allOf": [{ "$ref": "#/components/schemas/ImageField" }], + "description": "The image to show" + } + }, + "description": "Displays a provided image, and passes it forward in the pipeline." + }, + "TextToImageInvocation": { + "title": "TextToImageInvocation", + "required": ["id"], + "type": "object", + "properties": { + "id": { + "title": "Id", + "type": "string", + "description": "The id of this node. Must be unique among all nodes." + }, + "type": { + "title": "Type", + "enum": ["txt2img"], + "type": "string", + "default": "txt2img" + }, + "prompt": { + "title": "Prompt", + "type": "string", + "description": "The prompt to generate an image from" + }, + "seed": { + "title": "Seed", + "maximum": 4294967295.0, + "minimum": -1.0, + "type": "integer", + "description": "The seed to use (-1 for a random seed)", + "default": -1 + }, + "steps": { + "title": "Steps", + "exclusiveMinimum": 0.0, + "type": "integer", + "description": "The number of steps to use to generate the image", + "default": 10 + }, + "width": { + "title": "Width", + "multipleOf": 64.0, + "exclusiveMinimum": 0.0, + "type": "integer", + "description": "The width of the resulting image", + "default": 512 + }, + "height": { + "title": "Height", + "multipleOf": 64.0, + "exclusiveMinimum": 0.0, + "type": "integer", + "description": "The height of the resulting image", + "default": 512 + }, + "cfg_scale": { + "title": "Cfg Scale", + "exclusiveMinimum": 0.0, + "type": "number", + "description": "The Classifier-Free Guidance, higher values may result in a result closer to the prompt", + "default": 7.5 + }, + "sampler_name": { + "title": "Sampler Name", + "enum": [ + "ddim", + "dpmpp_2", + "k_dpm_2", + "k_dpm_2_a", + "k_dpmpp_2", + "k_euler", + "k_euler_a", + "k_heun", + "k_lms", + "plms" + ], + "type": "string", + "description": "The sampler to use", + "default": "k_lms" + }, + "seamless": { + "title": "Seamless", + "type": "boolean", + "description": "Whether or not to generate an image that can tile without seams", + "default": false + }, + "model": { + "title": "Model", + "type": "string", + "description": "The model to use (currently ignored)", + "default": "" + }, + "progress_images": { + "title": "Progress Images", + "type": "boolean", + "description": "Whether or not to produce progress images during generation", + "default": false + } + }, + "description": "Generates an image using text2img." + }, + "UpscaleInvocation": { + "title": "UpscaleInvocation", + "required": ["id"], + "type": "object", + "properties": { + "id": { + "title": "Id", + "type": "string", + "description": "The id of this node. Must be unique among all nodes." + }, + "type": { + "title": "Type", + "enum": ["upscale"], + "type": "string", + "default": "upscale" + }, + "image": { + "title": "Image", + "allOf": [{ "$ref": "#/components/schemas/ImageField" }], + "description": "The input image" + }, + "strength": { + "title": "Strength", + "maximum": 1.0, + "exclusiveMinimum": 0.0, + "type": "number", + "description": "The strength", + "default": 0.75 + }, + "level": { + "title": "Level", + "enum": [2, 4], + "type": "integer", + "description": "The upscale level", + "default": 2 + } + }, + "description": "Upscales an image." + }, + "ValidationError": { + "title": "ValidationError", + "required": ["loc", "msg", "type"], + "type": "object", + "properties": { + "loc": { + "title": "Location", + "type": "array", + "items": { "anyOf": [{ "type": "string" }, { "type": "integer" }] } + }, + "msg": { "title": "Message", "type": "string" }, + "type": { "title": "Error Type", "type": "string" } + } + } + } + } +}