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 的各种可能性,这个设置都能给你提供强大的工具。祝你编码愉快!