- pub
如何用 FastAPI 封装 Luma AI 的 API:实用指南
1. Lumalabs 和 Dream Machine 简介
Lumalabs 是一家在 AI 和机器学习领域非常有创意的公司。它们的一大亮点就是 Dream Machine,这个功能让你可以通过最先进的 AI 从文字或图片生成视频。现在,我们有了一个非官方的 RESTful API,我将告诉你如何用 FastAPI 来封装它。无论你是想把 AI 视频生成集成进你的应用,还是想玩玩 Luma 的功能,这篇指南都能帮你入门。
API 文档:Luma API
2. 设置 FastAPI
2.1. 安装 FastAPI
首先,咱们得装 FastAPI。如果你还没装的话,可以用 pip 快速安装。只需要运行:
pip install fastapi
然后,你还需要一个 ASGI 服务器来运行你的 FastAPI 应用,比如 uvicorn
:
pip install uvicorn
2.2. 创建一个基础的 FastAPI 应用
咱们先来一个超级简单的 FastAPI 应用,确认一切都正常。创建一个叫 main.py
的新 Python 文件:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello, Luma AI!"}
现在,用 uvicorn 启动服务器:
uvicorn main:app --reload
接着,在浏览器里打开 http://127.0.0.1:8000/
,你应该能看到 "Hello, Luma AI!" 的消息。
3. 封装 Luma API
3.1. 设置你的 POST 端点
接下去,我们要创建一个 POST 端点,用 FastAPI 封装 Luma API 来生成视频。目标是让它变得简单好用,方便内部调用。
你可以这样设置端点:
import requests
from fastapi import FastAPI, Form
app = FastAPI()
LUMA_API_URL = "https://api.lumaapi.com/api/v1/generation/add"
LUMA_API_TOKEN = "sk-xxx" # 把这个换成你自己的 token
@app.post("/generate-video/")
def generate_video(
prompt: str = Form(...),
callback_url: str = Form(...),
image_url: str = Form(None),
image_end_url: str = Form(None),
aspect_ratio: str = Form("16:9")
):
payload = {
'arg_prompt': prompt,
'callback': callback_url,
'arg_image_url': image_url,
'arg_image_end_url': image_end_url,
'arg_aspect_ratio': aspect_ratio
}
headers = {
'Authorization': f'Bearer {LUMA_API_TOKEN}'
}
response = requests.post(LUMA_API_URL, headers=headers, data=payload)
return response.json()
3.2. 解析这个端点
准备负载:我们用 FastAPI 的
Form
函数收集必要的数据,比如提示词、回调 URL 和图片 URL,这样能生成 Luma API 需要的表单数据结构。授权:在请求头里加上 Bearer token,以确保安全访问 API。
发送 API 请求:然后我们就把 POST 请求发给 Luma API,并返回 JSON 格式的响应。
4. 测试你的 API
4.1. 使用 FastAPI 的内置文档
FastAPI 的一个大优点就是自动生成的文档。一旦你把应用运行起来,可以去 http://127.0.0.1:8000/docs
,会看到一个很棒的交互式文档页面。
4.2. 发起测试请求
你可以直接在文档里测试你的 /generate-video/
端点。填写表单字段,添加一个示例提示词和回调 URL,选填一些图片 URL,然后点击 "Execute" 查看结果。
5. 处理回调
5.1. 设置回调端点
视频生成完成后,Luma 的 API 会向你提供的回调 URL 发送一个 POST 请求。咱们来设置一个端点来处理这个请求:
from fastapi import Request
@app.post("/api/cb_task/")
async def handle_callback(request: Request):
callback_data = await request.json()
# 处理回调数据,比如把视频 URL 存到数据库里
return {"status": "Callback received", "data": callback_data}
5.2. 处理回调数据
在回调处理函数里,你可以按自己的需要处理数据。比如,你可以把视频 URL 存到数据库中,或者根据响应触发其他操作。
6. 总结
你刚刚用 FastAPI 封装了 Luma API,这样就能轻松地把 AI 驱动的视频生成嵌入到你的项目中了。无论你是在做一个大型应用,还是在探索 AI 的各种可能性,这个设置都能给你提供强大的工具。祝你编码愉快!