|
@@ -1,5 +1,6 @@
|
|
|
import re
|
|
|
import requests
|
|
|
+import base64
|
|
|
from fastapi import (
|
|
|
FastAPI,
|
|
|
Request,
|
|
@@ -36,6 +37,7 @@ from config import (
|
|
|
IMAGE_GENERATION_ENGINE,
|
|
|
ENABLE_IMAGE_GENERATION,
|
|
|
AUTOMATIC1111_BASE_URL,
|
|
|
+ AUTOMATIC1111_API_AUTH,
|
|
|
COMFYUI_BASE_URL,
|
|
|
COMFYUI_CFG_SCALE,
|
|
|
COMFYUI_SAMPLER,
|
|
@@ -49,7 +51,6 @@ from config import (
|
|
|
AppConfig,
|
|
|
)
|
|
|
|
|
|
-
|
|
|
log = logging.getLogger(__name__)
|
|
|
log.setLevel(SRC_LOG_LEVELS["IMAGES"])
|
|
|
|
|
@@ -75,11 +76,10 @@ app.state.config.OPENAI_API_KEY = IMAGES_OPENAI_API_KEY
|
|
|
|
|
|
app.state.config.MODEL = IMAGE_GENERATION_MODEL
|
|
|
|
|
|
-
|
|
|
app.state.config.AUTOMATIC1111_BASE_URL = AUTOMATIC1111_BASE_URL
|
|
|
+app.state.config.AUTOMATIC1111_API_AUTH = AUTOMATIC1111_API_AUTH
|
|
|
app.state.config.COMFYUI_BASE_URL = COMFYUI_BASE_URL
|
|
|
|
|
|
-
|
|
|
app.state.config.IMAGE_SIZE = IMAGE_SIZE
|
|
|
app.state.config.IMAGE_STEPS = IMAGE_STEPS
|
|
|
app.state.config.COMFYUI_CFG_SCALE = COMFYUI_CFG_SCALE
|
|
@@ -88,6 +88,16 @@ app.state.config.COMFYUI_SCHEDULER = COMFYUI_SCHEDULER
|
|
|
app.state.config.COMFYUI_SD3 = COMFYUI_SD3
|
|
|
|
|
|
|
|
|
+def get_automatic1111_api_auth():
|
|
|
+ if app.state.config.AUTOMATIC1111_API_AUTH == None:
|
|
|
+ return ""
|
|
|
+ else:
|
|
|
+ auth1111_byte_string = app.state.config.AUTOMATIC1111_API_AUTH.encode('utf-8')
|
|
|
+ auth1111_base64_encoded_bytes = base64.b64encode(auth1111_byte_string)
|
|
|
+ auth1111_base64_encoded_string = auth1111_base64_encoded_bytes.decode('utf-8')
|
|
|
+ return f"Basic {auth1111_base64_encoded_string}"
|
|
|
+
|
|
|
+
|
|
|
@app.get("/config")
|
|
|
async def get_config(request: Request, user=Depends(get_admin_user)):
|
|
|
return {
|
|
@@ -113,6 +123,7 @@ async def update_config(form_data: ConfigUpdateForm, user=Depends(get_admin_user
|
|
|
|
|
|
class EngineUrlUpdateForm(BaseModel):
|
|
|
AUTOMATIC1111_BASE_URL: Optional[str] = None
|
|
|
+ AUTOMATIC1111_API_AUTH: Optional[str] = None
|
|
|
COMFYUI_BASE_URL: Optional[str] = None
|
|
|
|
|
|
|
|
@@ -120,15 +131,15 @@ class EngineUrlUpdateForm(BaseModel):
|
|
|
async def get_engine_url(user=Depends(get_admin_user)):
|
|
|
return {
|
|
|
"AUTOMATIC1111_BASE_URL": app.state.config.AUTOMATIC1111_BASE_URL,
|
|
|
+ "AUTOMATIC1111_API_AUTH": app.state.config.AUTOMATIC1111_API_AUTH,
|
|
|
"COMFYUI_BASE_URL": app.state.config.COMFYUI_BASE_URL,
|
|
|
}
|
|
|
|
|
|
|
|
|
@app.post("/url/update")
|
|
|
async def update_engine_url(
|
|
|
- form_data: EngineUrlUpdateForm, user=Depends(get_admin_user)
|
|
|
+ form_data: EngineUrlUpdateForm, user=Depends(get_admin_user)
|
|
|
):
|
|
|
-
|
|
|
if form_data.AUTOMATIC1111_BASE_URL == None:
|
|
|
app.state.config.AUTOMATIC1111_BASE_URL = AUTOMATIC1111_BASE_URL
|
|
|
else:
|
|
@@ -150,8 +161,14 @@ async def update_engine_url(
|
|
|
except Exception as e:
|
|
|
raise HTTPException(status_code=400, detail=ERROR_MESSAGES.DEFAULT(e))
|
|
|
|
|
|
+ if form_data.AUTOMATIC1111_API_AUTH == None:
|
|
|
+ app.state.config.AUTOMATIC1111_API_AUTH = AUTOMATIC1111_API_AUTH
|
|
|
+ else:
|
|
|
+ app.state.config.AUTOMATIC1111_API_AUTH = form_data.AUTOMATIC1111_API_AUTH
|
|
|
+
|
|
|
return {
|
|
|
"AUTOMATIC1111_BASE_URL": app.state.config.AUTOMATIC1111_BASE_URL,
|
|
|
+ "AUTOMATIC1111_API_AUTH": app.state.config.AUTOMATIC1111_API_AUTH,
|
|
|
"COMFYUI_BASE_URL": app.state.config.COMFYUI_BASE_URL,
|
|
|
"status": True,
|
|
|
}
|
|
@@ -172,7 +189,7 @@ async def get_openai_config(user=Depends(get_admin_user)):
|
|
|
|
|
|
@app.post("/openai/config/update")
|
|
|
async def update_openai_config(
|
|
|
- form_data: OpenAIConfigUpdateForm, user=Depends(get_admin_user)
|
|
|
+ form_data: OpenAIConfigUpdateForm, user=Depends(get_admin_user)
|
|
|
):
|
|
|
if form_data.key == "":
|
|
|
raise HTTPException(status_code=400, detail=ERROR_MESSAGES.API_KEY_NOT_FOUND)
|
|
@@ -198,7 +215,7 @@ async def get_image_size(user=Depends(get_admin_user)):
|
|
|
|
|
|
@app.post("/size/update")
|
|
|
async def update_image_size(
|
|
|
- form_data: ImageSizeUpdateForm, user=Depends(get_admin_user)
|
|
|
+ form_data: ImageSizeUpdateForm, user=Depends(get_admin_user)
|
|
|
):
|
|
|
pattern = r"^\d+x\d+$" # Regular expression pattern
|
|
|
if re.match(pattern, form_data.size):
|
|
@@ -225,7 +242,7 @@ async def get_image_size(user=Depends(get_admin_user)):
|
|
|
|
|
|
@app.post("/steps/update")
|
|
|
async def update_image_size(
|
|
|
- form_data: ImageStepsUpdateForm, user=Depends(get_admin_user)
|
|
|
+ form_data: ImageStepsUpdateForm, user=Depends(get_admin_user)
|
|
|
):
|
|
|
if form_data.steps >= 0:
|
|
|
app.state.config.IMAGE_STEPS = form_data.steps
|
|
@@ -262,7 +279,8 @@ def get_models(user=Depends(get_current_user)):
|
|
|
|
|
|
else:
|
|
|
r = requests.get(
|
|
|
- url=f"{app.state.config.AUTOMATIC1111_BASE_URL}/sdapi/v1/sd-models"
|
|
|
+ url=f"{app.state.config.AUTOMATIC1111_BASE_URL}/sdapi/v1/sd-models",
|
|
|
+ headers={"authorization": get_automatic1111_api_auth()}
|
|
|
)
|
|
|
models = r.json()
|
|
|
return list(
|
|
@@ -289,7 +307,8 @@ async def get_default_model(user=Depends(get_admin_user)):
|
|
|
return {"model": (app.state.config.MODEL if app.state.config.MODEL else "")}
|
|
|
else:
|
|
|
r = requests.get(
|
|
|
- url=f"{app.state.config.AUTOMATIC1111_BASE_URL}/sdapi/v1/options"
|
|
|
+ url=f"{app.state.config.AUTOMATIC1111_BASE_URL}/sdapi/v1/options",
|
|
|
+ headers={"authorization": get_automatic1111_api_auth()}
|
|
|
)
|
|
|
options = r.json()
|
|
|
return {"model": options["sd_model_checkpoint"]}
|
|
@@ -307,8 +326,10 @@ def set_model_handler(model: str):
|
|
|
app.state.config.MODEL = model
|
|
|
return app.state.config.MODEL
|
|
|
else:
|
|
|
+ api_auth = get_automatic1111_api_auth()
|
|
|
r = requests.get(
|
|
|
- url=f"{app.state.config.AUTOMATIC1111_BASE_URL}/sdapi/v1/options"
|
|
|
+ url=f"{app.state.config.AUTOMATIC1111_BASE_URL}/sdapi/v1/options",
|
|
|
+ headers={"authorization": api_auth}
|
|
|
)
|
|
|
options = r.json()
|
|
|
|
|
@@ -317,6 +338,7 @@ def set_model_handler(model: str):
|
|
|
r = requests.post(
|
|
|
url=f"{app.state.config.AUTOMATIC1111_BASE_URL}/sdapi/v1/options",
|
|
|
json=options,
|
|
|
+ headers={"authorization": api_auth},
|
|
|
)
|
|
|
|
|
|
return options
|
|
@@ -324,8 +346,8 @@ def set_model_handler(model: str):
|
|
|
|
|
|
@app.post("/models/default/update")
|
|
|
def update_default_model(
|
|
|
- form_data: UpdateModelForm,
|
|
|
- user=Depends(get_current_user),
|
|
|
+ form_data: UpdateModelForm,
|
|
|
+ user=Depends(get_current_user),
|
|
|
):
|
|
|
return set_model_handler(form_data.model)
|
|
|
|
|
@@ -401,10 +423,9 @@ def save_url_image(url):
|
|
|
|
|
|
@app.post("/generations")
|
|
|
def generate_image(
|
|
|
- form_data: GenerateImageForm,
|
|
|
- user=Depends(get_current_user),
|
|
|
+ form_data: GenerateImageForm,
|
|
|
+ user=Depends(get_current_user),
|
|
|
):
|
|
|
-
|
|
|
width, height = tuple(map(int, app.state.config.IMAGE_SIZE.split("x")))
|
|
|
|
|
|
r = None
|
|
@@ -519,6 +540,7 @@ def generate_image(
|
|
|
r = requests.post(
|
|
|
url=f"{app.state.config.AUTOMATIC1111_BASE_URL}/sdapi/v1/txt2img",
|
|
|
json=data,
|
|
|
+ headers={"authorization": get_automatic1111_api_auth()},
|
|
|
)
|
|
|
|
|
|
res = r.json()
|