はじめに
この記事の内容
「Luma Dream Machine」の API を使った Text to Video を、公式の JavaScript SDK で試してみたという話です。
●Luma Dream Machine: New Freedoms of Imagination
https://lumalabs.ai/dream-machine
公式の JavaScript SDK
公式の JavaScript SDK は以下になるようです。
API利用
API利用のため、とりあえず最低金額の 5ドル分を課金しました(※ 要ログイン)。
●Luma Dream Machine | AI Video Generator API
https://lumalabs.ai/dream-machine/api/billing/overview
また、以下のページで APIキーを生成しました(※ 要ログイン)。
●Luma Dream Machine | AI Video Generator API
https://lumalabs.ai/dream-machine/api/keys
公式の JavaScript SDK で試す
公式のドキュメントを参照しながら実際に試していきます。
事前準備
公式の JavaScript SDK を使うにあたり、まずはセットアップです。
●Video Generation
https://docs.lumalabs.ai/docs/javascript-video-generation
パッケージのインストール
npmコマンドで、以下をインストールします。
●lumaai - npm
https://www.npmjs.com/package/lumaai
●lumalabs/lumaai-node: Dream Machine SDK for JS/TS
https://github.com/lumalabs/lumaai-node
npm install lumaai
自分で実装したもの
APIキーは環境変数「LUMAAI_API_KEY」として設定しておきます(※ 以下は Mac での例)。
export LUMAAI_API_KEY='【自分のAPIキー】'
サンプルコード
上のほうにあるサンプルを見てみます。
const fetch = require('node-fetch');
const fs = require('fs');
const { LumaAI } = require('lumaai');
const client = new LumaAI({ authToken: process.env.LUMAAI_API_KEY });
async function generateVideo() {
let generation = await client.generations.create({
prompt: "A teddy bear in sunglasses playing electric guitar and dancing"
});
let completed = false;
while (!completed) {
generation = await client.generations.get(generation.id);
if (generation.state === "completed") {
completed = true;
} else if (generation.state === "failed") {
throw new Error(`Generation failed: ${generation.failure_reason}`);
} else {
console.log("Dreaming...");
await new Promise(r => setTimeout(r, 3000)); // Wait for 3 seconds
}
}
const videoUrl = generation.assets.video;
const response = await fetch(videoUrl);
const fileStream = fs.createWriteStream(`${generation.id}.mp4`);
await new Promise((resolve, reject) => {
response.body.pipe(fileStream);
response.body.on('error', reject);
fileStream.on('finish', resolve);
});
console.log(`File downloaded as ${generation.id}.mp4`);
}
generateVideo();
これで Text to Video を軽く試してみます。
出力結果
サンプルコードの以下のプロンプトは書きかえました。
prompt: "A teddy bear in sunglasses playing electric guitar and dancing"
プロンプトを「炎と氷のドラゴンが対峙して争っているシーン」として、以下の結果を得られました。