import io import json import random from api_client import * from pydantic import BaseModel from fastapi import FastAPI, UploadFile, File, Form, responses API_URL = "127.0.0.1:8181" with open("prompt/img2vid.json", "r") as f: prompt = json.load(f) class Img2vidParams(BaseModel): file: UploadFile = File(...) # 图片文件 width: int = 512 height: int = 512 video_frames: int = 25 # 视频帧数 motion_bucket_id: int = 100 # 视频动作量 fps: int = 8 # 视频流畅度 seed: int = None steps: int = 20 cfg: float = 2.0 save_fps: int = 8 # 视频帧率 app = FastAPI() @app.post("/img2vid") async def img2vid(params: Img2vidParams = Form(...)): image_file = io.BytesIO() image_file.name = params.file.filename image_file.write(await params.file.read()) image_file.seek(0) image_path = upload_image_file(API_URL, image_file) prompt["4"]["inputs"]["image"] = image_path prompt["3"]["inputs"]["width"] = params.width prompt["3"]["inputs"]["height"] = params.height prompt["3"]["inputs"]["video_frames"] = params.video_frames prompt["3"]["inputs"]["motion_bucket_id"] = params.motion_bucket_id prompt["3"]["inputs"]["fps"] = params.fps prompt["5"]["inputs"]["seed"] = random.randint(0, 1e16) if params.seed is not None: prompt["5"]["inputs"]["seed"] = params.seed prompt["5"]["inputs"]["steps"] = params.steps prompt["5"]["inputs"]["cfg"] = params.cfg prompt["7"]["inputs"]["save_fps"] = params.save_fps ws, client_id = open_websocket_connection(API_URL) print("client_id: ", client_id) response = queue_prompt(API_URL, prompt, client_id) prompt_id = response["prompt_id"] print("prompt_id: ", prompt_id) track_progress(ws, prompt, prompt_id) outputs = get_images_files(API_URL, prompt_id) return responses.Response(content=outputs[0].read()) import uvicorn uvicorn.run(app, host="0.0.0.0", port=8182)