Video-service / app.py
Uhhy's picture
Update app.py
0407f16 verified
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from multiprocessing import Process, Queue
from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler
from diffusers.utils import export_to_video
import io
from fastapi.responses import StreamingResponse
import uvicorn
import torch
app = FastAPI()
video_pipe = DiffusionPipeline.from_pretrained("damo-vilab/text-to-video-ms-1.7b", torch_dtype=torch.float16, variant="fp16")
video_pipe.scheduler = DPMSolverMultistepScheduler.from_config(video_pipe.scheduler.config)
video_pipe.enable_model_cpu_offload()
class VideoRequest(BaseModel):
prompt: str
def generate_video_response(request, queue):
try:
video_frames = video_pipe(request.prompt, num_inference_steps=25).frames
video_path = export_to_video(video_frames)
queue.put(video_path)
except Exception as e:
queue.put(f"Error: {str(e)}")
@app.post("/generate_video")
async def generate_video(request: VideoRequest):
queue = Queue()
p = Process(target=generate_video_response, args=(request, queue))
p.start()
p.join()
response = queue.get()
if "Error" in response:
raise HTTPException(status_code=500, detail=response)
return StreamingResponse(io.BytesIO(response), media_type="video/mp4")
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=7860)