import logging from fastapi import FastAPI, HTTPException from fastapi.responses import FileResponse import os import subprocess app = FastAPI() logging.basicConfig(level=logging.INFO) TEMP_DIR = "/tmp" @app.get("/") def home(): return {"message": "Welcome to Brat API!"} @app.get("/brat") async def brat(text: str): if not text: raise HTTPException(status_code=400, detail="Text is required") process = subprocess.run(["node", "brat.js", text], capture_output=True, text=True) stdout = process.stdout.strip() stderr = process.stderr.strip() logging.info(f"stdout: {stdout}") logging.error(f"stderr: {stderr}") if process.returncode != 0: raise HTTPException(status_code=500, detail=f"Failed to generate image: {stderr}") if not os.path.exists(stdout): raise HTTPException(status_code=500, detail=f"Generated file not found: {stdout}") return FileResponse(stdout, media_type="image/png", filename="brat.png") @app.get("/brat-vid") async def brat_vid(text: str): if not text: raise HTTPException(status_code=400, detail="Text is required") process = subprocess.run(["node", "brat.js", "vid", text], capture_output=True, text=True) stdout = process.stdout.strip() stderr = process.stderr.strip() logging.info(f"stdout: {stdout}") logging.error(f"stderr: {stderr}") if process.returncode != 0: raise HTTPException(status_code=500, detail=f"Failed to generate video: {stderr}") if not os.path.exists(stdout): raise HTTPException(status_code=500, detail=f"Generated file not found: {stdout}") return FileResponse(stdout, media_type="video/mp4", filename="brat.mp4") if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=7860)