forge/backend/app/main.py
DJP 7a804e896d Initial commit - FORGE AI unified platform
Features:
- Image generation (OpenAI, Gemini, Leonardo, Bria, Stability, Flux)
- Nano Banana iterative editing
- Video generation and upscaling
- Audio TTS, STT, sound effects (ElevenLabs)
- Text prompt studio and alt text
- User authentication with JWT/cookies
- Admin panel with voice management
- Job queue with Celery
- PostgreSQL + Redis backend
- Next.js 15 + FastAPI architecture

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 (1M context) <noreply@anthropic.com>
2025-12-09 20:39:00 -05:00

73 lines
1.9 KiB
Python

"""FORGE AI - Main FastAPI Application"""
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
from contextlib import asynccontextmanager
import os
from app.config import settings
from app.api.v1 import router as api_router
@asynccontextmanager
async def lifespan(app: FastAPI):
"""Startup and shutdown events"""
# Startup
print(f"🚀 Starting {settings.app_name} v{settings.app_version}")
# Ensure storage directories exist
storage_dirs = ["images", "videos", "audio", "documents", "temp"]
for dir_name in storage_dirs:
os.makedirs(os.path.join(settings.storage_path, dir_name), exist_ok=True)
yield
# Shutdown
print(f"👋 Shutting down {settings.app_name}")
# Create FastAPI app
app = FastAPI(
title=settings.app_name,
version=settings.app_version,
description="Unified AI Creative Platform - Image, Video, Audio, and Text Processing",
lifespan=lifespan
)
# CORS middleware
app.add_middleware(
CORSMiddleware,
allow_origins=[
"http://localhost:3020",
"http://localhost:3000",
"http://127.0.0.1:3020",
"https://ai-sandbox.oliver.solutions",
],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Mount static files for storage access
if os.path.exists(settings.storage_path):
app.mount("/storage", StaticFiles(directory=settings.storage_path), name="storage")
# Include API router
app.include_router(api_router, prefix="/api/v1")
@app.get("/")
async def root():
"""Root endpoint"""
return {
"name": settings.app_name,
"version": settings.app_version,
"status": "running",
"docs": "/docs"
}
@app.get("/health")
async def health_check():
"""Health check endpoint"""
return {"status": "healthy", "service": settings.app_name}