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で何ができるか探っている人も、このセットアップは強力なツールになるよ。コーディングを楽しんでね!