Supershipの名畑です。オンライン連載漫画の中では特に寿エンパイアが大好きなんですが、先日、せきやてつじ先生の原画展に行ってきました。熱を感じました。エンジョイ!
はじめに
以前「Stable Diffusionのオリジナル開発陣が発表した画像生成AIモデルFLUX.1([dev]/[schnell])をMacBook(M2)で動かしてみた」という記事を書きました。
Stable Diffusionのオリジナル開発陣によって立ち上げられたBlack Forest Labsがリリースした画像生成AIモデル FLUX.1 をMacBookで動かしてみたという記事でした。
あれから2ヶ月が経ち、FLUX.1.1[pro] (コードネーム Blueberry)がリリースされ、さらに当時は限定公開だったWeb APIも一般公開されました。まだベータではありますが。
BlackForestLabsは同時に、開発者や企業向けのBFL APIベータ版の一般提供も開始した。FLUX1.1 [pro]の画像生成能力をアプリケーションに組み込めるようになる。APIの利用料金は1画像あたり4セントという低価格に設定されている。
今回はこの FLUX1.1 [pro] をWeb API経由で呼び出してみます。
コードはすべてPythonです。
アカウント作成とAPI Keyの作成
APIのページのRegisterからアカウントを作成し、ログインします。
1クレジットは0.01ドルです。登録タイミングによるのかもしれませんが、私は最初から50クレジット付与されていました。
Pricingのページによると、モデル毎の費用は以下です。
- FLUX 1.1 [pro] 0.04ドル / 1枚
- FLUX.1 [pro] 0.05ドル / 1枚
- FLUX.1 [dev] 0.025ドル / 1枚
次にAPI Keyを作成します。
Add Keyを押してページ遷移し、好きなKey名を入力します。
すると以下のように発行されます。
私の環境
私の端末のOSはmacOS 14 Sonomaです。
Pythonのバージョンは以下です。
$ python --version
Python 3.12.2
サンプルコードの実行に用いるため、requestsも入れておきます。
$ pip install requests
バージョンを確認しておきました。
$ pip list | grep -e requests
requests 2.31.0
ハードコーディングを避けるため、先ほどのAPI Keyを環境変数に保存します。私の環境での設定ファイルはzshrcです。
$ open ~/.zshrc
BFL_API_KEYという環境変数名にしました。
export BFL_API_KEY=ここに取得したAPI Keyを書く
コード
Getting Startedのサンプルコードをそのまま持ってきました。コメント文だけ少しつけています。本当はstatusはErrorを拾ってbreakさせた方が良さそうですが、ひとまずサンプルコードのまま変えていません。
import os
import requests
import time
# リクエスト
request = requests.post(
'https://api.bfl.ml/v1/flux-pro-1.1',
headers={
'accept': 'application/json',
'x-key': os.environ.get("BFL_API_KEY"),
'Content-Type': 'application/json',
},
json={
'prompt': 'A cat on its back legs running like a human is holding a big silver fish with its arms. The cat is running away from the shop owner and has a panicked look on his face. The scene is situated in a crowded market.',
'width': 1024,
'height': 768,
},
).json()
print(request)
request_id = request["id"]
# 生成完了を待つ
while True:
time.sleep(0.5)
result = requests.get(
'https://api.bfl.ml/v1/get_result',
headers={
'accept': 'application/json',
'x-key': os.environ.get("BFL_API_KEY"),
},
params={
'id': request_id,
},
).json()
if result["status"] == "Ready":
print(f"Result: {result['result']['sample']}")
break
else:
print(f"Status: {result['status']}")
プロンプトを訳すと「後ろ足で人間のように走っている猫が、両腕で大きな銀色の魚を抱えている。猫は店主から逃げ出していて、パニックになった顔に見えます。シーンは混雑した市場の中です。」ですね。
最終的なresultは以下のフォーマットです。ちなみにですが、レスポンスまでの時間は過去に試したAPI群と比べてかなり早かったです。
{
'id': 'リクエストのID',
'status': 'Ready',
'result': {
'sample': '生成された画像が置かれたurl',
'prompt': '指定したプロンプト'
}
}
sample内に画像が置かれたurlが指定されています。私が試したときのドメインはbflapistorage.blob.core.windows.netでした。
生成された画像は以下です。
「このプロンプトだとこんな画像が返ってきてほしいな」と期待したそのままに近いですね。素晴らしいです。
何枚か試しても店主自身が登場する画像は生成されませんでしたが、追われる焦りは表現されています。
別プロンプト
せっかくなのでプロンプトを変えて様々な画像を生成してみました。
使用するプロンプトは過去記事である「Stability AIの最新サービス「Stable Image Ultra」とStable Diffusionの過去モデル(2022年〜)の生成画像をひたすら比較して進化を実感してみた」と同様のものとしています。
日本の萌えヒロイン
「日本の萌えヒロイン(Japanese moe heroine)」をanime style指定で生成しました。
'prompt': 'anime style, Japanese moe heroine',
日本の人気アニメに登場するスイーツ
「日本の人気アニメに登場するスイーツ(Sweets that appear in popular Japanese anime)」です。これもanime style指定です。
'prompt': 'anime style, sweets that appear in popular Japanese anime',
修学旅行中の男子高校生
「修学旅行中の男子高校生(Male high school student on a school trip)」です。こちらもanime style指定となります。
'prompt': 'anime style, male high school student on a school trip',
ギターを演奏するお姫様
次は「ギターを演奏するお姫様(A princess playing guitar)」です。
ここから2プロンプトはfantasy-art styleを指定しています。
'prompt': 'fantasy-art style, a princess playing guitar',
ノートパソコン上の可愛い妖精
「ノートパソコン上の可愛い妖精(A cute fairy on top of a white laptop)」です。ここからはphotographic styleを指定します。
'prompt': 'photographic style, a cute fairy on top of a white laptop',
黒いボブヘアで可愛い28歳の日本人女性
「黒いボブヘアで可愛い28歳の日本人女性(28-year-old Japanese pretty woman with black bobbed hair)」です。
'prompt': 'photographic style, 28-year-old Japanese pretty woman with black bobbed hair',
1980年代の香港の繁華街
「1980年代の香港の繁華街(Hong Kong downtown in the 1980s)」です。
'prompt': 'photographic style, Hong Kong downtown in the 1980s',
2020年の新宿歌舞伎町
最後です。「2020年の新宿歌舞伎町(Shinjuku Kabukicho in 2020)」です。
'prompt': 'photographic style, Shinjuku Kabukicho in 2020',
生成されたどの画像も、かなり高品質です。
高品質なAI生成物に触れすぎていて、現実というものに対する感覚が麻痺しそう。
最後に
Black Forest Labsが勢いを発揮し続けそうな空気ですね。
今後に予定されている動画生成も楽しみです。
宣伝
SupershipのQiita Organizationを合わせてご覧いただけますと嬉しいです。他のメンバーの記事も多数あります。
Supershipではプロダクト開発やサービス開発に関わる方を絶賛募集しております。
興味がある方はSupership株式会社 採用サイトよりご確認ください。