80 lines
2.6 KiB
Python
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)}")
|