Some checks failed
Python Linting / Run Ruff (push) Has been cancelled
Python Linting / Run Pylint (push) Has been cancelled
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.10, [self-hosted Linux], stable) (push) Has been cancelled
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.11, [self-hosted Linux], stable) (push) Has been cancelled
Full Comfy CI Workflow Runs / test-stable (12.1, , linux, 3.12, [self-hosted Linux], stable) (push) Has been cancelled
Full Comfy CI Workflow Runs / test-unix-nightly (12.1, , linux, 3.11, [self-hosted Linux], nightly) (push) Has been cancelled
Execution Tests / test (macos-latest) (push) Has been cancelled
Execution Tests / test (ubuntu-latest) (push) Has been cancelled
Execution Tests / test (windows-latest) (push) Has been cancelled
Test server launches without errors / test (push) Has been cancelled
Unit Tests / test (macos-latest) (push) Has been cancelled
Unit Tests / test (ubuntu-latest) (push) Has been cancelled
Unit Tests / test (windows-2022) (push) Has been cancelled
Includes 30 custom nodes committed directly, 7 Civitai-exclusive loras stored via Git LFS, and a setup script that installs all dependencies and downloads HuggingFace-hosted models on vast.ai. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
62 lines
2.1 KiB
Python
62 lines
2.1 KiB
Python
from server import PromptServer
|
|
from aiohttp import web
|
|
import os
|
|
import inspect
|
|
import json
|
|
import importlib
|
|
import sys
|
|
sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
|
|
import pysssss
|
|
|
|
root_directory = os.path.dirname(inspect.getfile(PromptServer))
|
|
workflows_directory = os.path.join(root_directory, "pysssss-workflows")
|
|
workflows_directory = pysssss.get_config_value(
|
|
"workflows.directory", workflows_directory)
|
|
if not os.path.isabs(workflows_directory):
|
|
workflows_directory = os.path.abspath(os.path.join(root_directory, workflows_directory))
|
|
|
|
NODE_CLASS_MAPPINGS = {}
|
|
NODE_DISPLAY_NAME_MAPPINGS = {}
|
|
|
|
|
|
@PromptServer.instance.routes.get("/pysssss/workflows")
|
|
async def get_workflows(request):
|
|
files = []
|
|
for dirpath, directories, file in os.walk(workflows_directory):
|
|
for file in file:
|
|
if (file.endswith(".json")):
|
|
files.append(os.path.relpath(os.path.join(
|
|
dirpath, file), workflows_directory))
|
|
return web.json_response(list(map(lambda f: os.path.splitext(f)[0].replace("\\", "/"), files)))
|
|
|
|
|
|
@PromptServer.instance.routes.get("/pysssss/workflows/{name:.+}")
|
|
async def get_workflow(request):
|
|
file = os.path.abspath(os.path.join(
|
|
workflows_directory, request.match_info["name"] + ".json"))
|
|
if os.path.commonpath([file, workflows_directory]) != workflows_directory:
|
|
return web.Response(status=403)
|
|
|
|
return web.FileResponse(file)
|
|
|
|
|
|
@PromptServer.instance.routes.post("/pysssss/workflows")
|
|
async def save_workflow(request):
|
|
json_data = await request.json()
|
|
file = os.path.abspath(os.path.join(
|
|
workflows_directory, json_data["name"] + ".json"))
|
|
if os.path.commonpath([file, workflows_directory]) != workflows_directory:
|
|
return web.Response(status=403)
|
|
|
|
if os.path.exists(file) and ("overwrite" not in json_data or json_data["overwrite"] == False):
|
|
return web.Response(status=409)
|
|
|
|
sub_path = os.path.dirname(file)
|
|
if not os.path.exists(sub_path):
|
|
os.makedirs(sub_path)
|
|
|
|
with open(file, "w") as f:
|
|
f.write(json.dumps(json_data["workflow"]))
|
|
|
|
return web.Response(status=201)
|