| import platform |
|
|
| import uvicorn |
| from backend.device import get_device_name |
| from backend.models.device import DeviceInfo |
| from constants import APP_VERSION, DEVICE |
| from context import Context |
| from fastapi import FastAPI, Request |
| from fastapi_mcp import FastApiMCP |
| from state import get_settings |
| from fastapi.middleware.cors import CORSMiddleware |
| from models.interface_types import InterfaceType |
| from fastapi.staticfiles import StaticFiles |
|
|
| app_settings = get_settings() |
| app = FastAPI( |
| title="FastSD CPU", |
| description="Fast stable diffusion on CPU", |
| version=APP_VERSION, |
| license_info={ |
| "name": "MIT", |
| "identifier": "MIT", |
| }, |
| describe_all_responses=True, |
| describe_full_response_schema=True, |
| ) |
| origins = ["*"] |
|
|
| app.add_middleware( |
| CORSMiddleware, |
| allow_origins=origins, |
| allow_credentials=True, |
| allow_methods=["*"], |
| allow_headers=["*"], |
| ) |
| print(app_settings.settings.lcm_diffusion_setting) |
|
|
| context = Context(InterfaceType.API_SERVER) |
| app.mount("/results", StaticFiles(directory="results"), name="results") |
|
|
|
|
| @app.get( |
| "/info", |
| description="Get system information", |
| summary="Get system information", |
| operation_id="get_system_info", |
| ) |
| async def info() -> dict: |
| device_info = DeviceInfo( |
| device_type=DEVICE, |
| device_name=get_device_name(), |
| os=platform.system(), |
| platform=platform.platform(), |
| processor=platform.processor(), |
| ) |
| return device_info.model_dump() |
|
|
|
|
| @app.post( |
| "/generate", |
| description="Generate image from text prompt", |
| summary="Text to image generation", |
| operation_id="generate", |
| ) |
| async def generate( |
| prompt: str, |
| request: Request, |
| ) -> str: |
| """ |
| Returns URL of the generated image for text prompt |
| """ |
|
|
| app_settings.settings.lcm_diffusion_setting.prompt = prompt |
| images = context.generate_text_to_image(app_settings.settings) |
| image_names = context.save_images( |
| images, |
| app_settings.settings, |
| ) |
| url = request.url_for("results", path=image_names[0]) |
| image_url = f"The generated image available at the URL {url}" |
| return image_url |
|
|
|
|
| def start_mcp_server(port: int = 8000): |
| mcp = FastApiMCP( |
| app, |
| name="FastSDCPU MCP", |
| description="MCP server for FastSD CPU API", |
| base_url=f"http://localhost:{port}", |
| ) |
|
|
| mcp.mount() |
| uvicorn.run( |
| app, |
| host="0.0.0.0", |
| port=port, |
| ) |
|
|