Files
spawner1145-comfyui-lsnet/scripts/app.py
T
2026-10-06 00:30:52 +08:00

80 lines
2.6 KiB
Python

import sys
from pathlib import Path
# WebUI extensions and direct script execution do not put this plugin root on sys.path.
PLUGIN_ROOT = Path(__file__).resolve().parents[1]
if str(PLUGIN_ROOT) not in sys.path:
sys.path.insert(0, str(PLUGIN_ROOT))
import logging
import threading
from threading import Lock
from fastapi import FastAPI
from backend_lsnet.inference import *
from backend_lsnet.ui import *
from backend_lsnet.api import Api
import uvicorn
import gradio as gr
import os
import argparse
logging.basicConfig(level=logging.INFO)
def parse_args():
parser = argparse.ArgumentParser(description="Kaloscope Artist Inference WebUI")
parser.add_argument("--host", type=str, default="127.0.0.1", help="Server host")
parser.add_argument("--port", type=int, default=7860, help="Server port")
parser.add_argument("--models-dir", type=str, default=None, help="Root containing kaloscope/ model folders")
return parser.parse_args()
try:
from modules import script_callbacks, shared
IN_WEBUI = True
except ImportError:
IN_WEBUI = False
shared = type('Shared', (), {'opts': type('Opts', (), {
'outdir_samples': '',
'outdir_txt2img_samples': '',
'outdir_img2img_samples': ''
})})()
if IN_WEBUI:
from backend_lsnet.api import on_app_started
def on_ui_tabs():
block = create_ui()
return [(block, "Kaloscope", "kaloscope_tab")]
script_callbacks.on_ui_tabs(on_ui_tabs)
script_callbacks.on_app_started(on_app_started)
else:
if __name__ == "__main__":
args = parse_args()
if args.models_dir:
os.environ['KALOSCOPE_MODELS_DIR'] = str(Path(args.models_dir).resolve())
# Create models directory
from backend_lsnet.model_paths import models_root
(models_root() / 'kaloscope').mkdir(parents=True, exist_ok=True)
app = FastAPI(docs_url="/docs", openapi_url="/openapi.json")
queue_lock = Lock()
api = Api(app, queue_lock, prefix="/kaloscope/v1")
logging.info("API 路由已挂载到 FastAPI 实例")
block = create_ui()
logging.info("Gradio 界面已创建")
# Mount Gradio app to FastAPI
app = gr.mount_gradio_app(app, block, path="")
print(f"应用启动在:http://{args.host}:{args.port}")
print(f"API 文档:http://{args.host}:{args.port}/docs")
try:
uvicorn.run(
app,
host=args.host,
port=args.port,
log_level="info"
)
except Exception as e:
logging.error(f"启动失败: {str(e)}")