Files

51 lines
1.4 KiB
Python
Raw Permalink Normal View History

import logging
import os
import sys
from contextlib import asynccontextmanager
from fastapi import FastAPI
# Ensure FaceFusion submodule is importable (must happen before any facefusion imports)
_project_root = os.path.dirname(os.path.dirname(__file__))
for _candidate in (os.path.join(_project_root, 'facefusion'), '/app/facefusion-src'):
if os.path.isdir(os.path.join(_candidate, 'facefusion')) and _candidate not in sys.path:
sys.path.insert(0, _candidate)
break
from app.routers import jobs, process, processors, system
from app.services import facefusion_bridge, file_manager
from app.services.worker import worker_queue
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s %(levelname)s %(name)s: %(message)s',
)
logger = logging.getLogger(__name__)
@asynccontextmanager
async def lifespan(app: FastAPI):
# Startup
logger.info('Starting FaceFusion API...')
file_manager.ensure_directories()
facefusion_bridge.initialize()
worker_queue.start(facefusion_bridge.process_sync)
logger.info('FaceFusion API ready')
yield
# Shutdown
logger.info('Shutting down...')
worker_queue.stop()
app = FastAPI(
title='FaceFusion API',
version='1.0.0',
description='REST API for FaceFusion face processing',
lifespan=lifespan,
)
app.include_router(process.router)
app.include_router(jobs.router)
app.include_router(processors.router)
app.include_router(system.router)