- pub
FastAPIでLuma AIのAPIをラップする方法:実践ガイド
1. Lumalabs と Dream Machine の紹介
Lumalabsって、AIや機械学習の世界で注目を浴びてる革新的な会社だよ。で、その中で特に目を引くのが Dream Machine。これを使うと、テキストや画像から動画を作れるんだ。で、今、非公式のRESTful APIを手に入れたから、これをFastAPIでラップする方法を教えるね。開発者の人はアプリにAI動画生成を組み込みたいとか、ただちょっとLumaの機能を試したい人にも役立つガイドだから、ぜひ見ていってね。
APIのドキュメントはこちら:Luma API
2. FastAPIのセットアップ
2.1. FastAPIのインストール
まずはFastAPIをセットアップしよう。もしまだインストールしてないなら、pipでサクッとインストールできるよ。コマンドを実行してみて。
pip install fastapi
それと、FastAPIアプリケーションを動かすためにASGIサーバも必要だから、uvicorn
もインストールしておこう。
pip install uvicorn
2.2. 基本的なFastAPIアプリの作成
じゃあ、基本的なFastAPIアプリから始めて、ちゃんとセットアップできてるか確認しよう。新しいPythonファイルをmain.py
という名前で作ってね。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "こんにちは、Luma AI!"}
で、次にuvicornを使ってサーバを起動してみて。
uvicorn main:app --reload
ブラウザでhttp://127.0.0.1:8000/
にアクセスすると、「こんにちは、Luma AI!」っていうメッセージが見えるはずだよ。
3. Luma APIのラッピング
3.1. POSTエンドポイントの設定
次に、FastAPIで動画生成のためのLuma APIをラップするPOSTエンドポイントを作るよ。内部で使うために、シンプルでクリーンなインターフェースを作るのが目的。
エンドポイントの設定はこんな感じだよ:
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" # 実際のトークンに置き換えてね
@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. エンドポイントの説明
ペイロードの準備: 必要なデータ、例えばプロンプトとかコールバックURL、画像のURLをFastAPIの
Form
関数を使って集めるんだ。こうすることで、Luma APIが期待するフォームデータの構造ができるよ。認証: APIへの安全なアクセスのために、ヘッダーにBearerトークンを含めるんだ。
APIリクエストの実行: それから、Luma APIにPOSTリクエストを送って、レスポンスを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": "コールバックを受信しました", "data": callback_data}
5.2. コールバックデータの処理
コールバックハンドラーの中では、データを好きなように処理できるよ。例えば、動画URLをデータベースに保存したり、レスポンスに基づいて他のアクションをトリガーしたりできるね。
6. まとめ
これでFastAPIを使ってLuma APIをラップしたことになるね。これでAIパワーの動画生成をプロジェクトに簡単に組み込むことができる。大きなアプリケーションに取り組んでいる人も、AIで何ができるか探っている人も、このセットアップは強力なツールになるよ。コーディングを楽しんでね!