西川和久の不定期コラム

顔や形まで変わってほしくなかったのに……という時に使える画像生成AI「FLUX.1 Kontext [dev] 」

 画像生成AI「FLUX.1 [dev]」を作ったBlack Forest Labs(以降BFL)から、面白いモデルが登場!それが生成AI画像/編集に対応した「Kontext」だ。[max]、[pro]、[dev]と3種類ある中、GPUを搭載したローカルPCでも使用可能な[dev]を中心にその使い方などをご紹介したい。

FLUX.1 Kontextとは!?

 FLUX.1 Kontextは2025年5月末に発表された画像生成および編集可能なモデル。現在FLUX.1 [dev]が生成AI画像のスタンダード的な位置付けとなっているため、FLUX.1 Kontextの性能にも期待できる。

 当初はAPI経由の[pro]と[max]のみが公開され、即ComfyUIが対応したため試用も簡単。なおComfyUIは少し前にComfyUIアカウントを作り、チャージしておけばさまざまなAPIを使用可能な機能を追加している。

 もちろん本家BFLもAPIに対応しており、ComfyUI経由の料金差が気になるところだが、調べたところ、異なるのはFLUX 1.1 [pro]のみ0.04ドルが0.05ドル。ほかは同じだ。

ComfyUIが対応するAPI経由での料金
BFLflux-dev0.025ドル
BFLflux-pro-1.10.04ドル
BFLflux-pro-1.1-ultra0.06ドル
BFLflux-pro-1.1-pro0.05ドル※
BFLflux tools (edit, fill, expand, canny)0.05ドル
BFLflux.1 Kontext Pro Image0.04ドル
BFLflux.1 Kontext Max Image0.08ドル

※ flux-pro-1.1-proのみ0.04ドルが0.05ドルと気持ち高くなっている。ほかはBFL APIと同じ

 これならGemini、Google、Ideogram、Kling、Luma、MiniMax、OpenAI、PixVerse、Pika、RunwayML、Rodin、Recraft、Stability AI、TripoなどのAPIもComfyUI経由で使えるため、まとめて管理できるとなると、一本で利用するのもありだろう。

ComfyUIのテンプレートからBFL Flux.1 Kontext Proを選ぶ
実行すると料金をチャージしていないため動かず。お試しなら5ドルでいいだろう。Google Playからチャージ
ComfyUI API経由のFLUX.1 Kontext [pro] Workflow
参照画像
変更後

 では早速ComfyUI経由でFLUX.1 Kontext [pro]を使った例をご紹介したい。Promptは“Car changed to yellow”。つまり“赤い車を黄色い車へ”。結果はご覧の通り。比較すると、形状は1ドットも変わらず色だけ変更されている。かかった時間は約9秒だ。

 Workflowは、Flux.1 Kontext [pro] image Nodeに画像を入れるだけと超簡単。API経由なのでモデルをローカルPCへダウンロードする必要もなく、当然強力なGPUも不要。これで0.04ドル(150円換算で6円)なのだから、何十万円もするGPUはもう不要では!?と思ってしまう(笑)。

 Bypassしているのは2枚目の参照画像設定部分。Kontextは複数の画像を入力、それを編集して1枚の画像を生成することもできる。今回は1枚なので2枚目はBypassとなっている。

 なおプロンプトのガイド(英語)はここにあるので、プロンプトにどのように書けばいいか?の参考になる。

ローカルで生成可能なFLUX.1 Kontext [dev]を試す

 次は強力なGPUを搭載したローカルPCで作動するKontext [dev]を試してみたい。Workflowは同じくテンプレートにあるので選択。次に必要なモデルのダウンロード及びフォルダへ配置。詳細は以下の通り。

1. flux1-dev-kontext_fp8_scaled.safetensors
※ ComfyUI/models/diffusion_models/ へ設置

2. ae.safetensors
※ ComfyUI/models/vae/ へ設置

3. clip_l.safetensors
※ ComfyUI/models/text_encoders/ へ設置

4. t5xxl_fp16.safetensorsまたはt5xxl_fp8_e4m3fn_scaled.safetensors
※ ComfyUI/models/text_encoders/ へ設置

既にFLUX.1 [dev]が生成可能な状態であれば、1のみで済み(ほかは全て所定のフォルダにある)、セットアップは意外と楽だ。

ComfyUIのテンプレートからFlux Kontext Dev(Basic)を選ぶ
Flux Kontext Dev(Basic)のWorkflow(引き)

 Workflowを開いた直後はいろいろNodeがあり、引きで詳細が分からないため、不要なNodeなどを整理したのが以下のものとなる。

Flux Kontext Dev(Basic)のWorkflow
参照画像(上記と同じ)
変換後(“Car changed to yellow”)

Workflowを見ると、FLUX.1 [dev]とほぼ同じでKSamplerのLatent_imageに参照画像が入っている感じとなる。Stepは20。GeForce RTX 4090で約22秒、VRAMは約21GB使用。TeaCacheなど高速化Nodeを入れない素のFLUX.1 [dev]より少しかかる感じだが、待てない時間でもない。

 なおBypassしているのはAPI使用時と同じく2枚目の参照画像。今回は未使用のためこうなっている。

 結果はご覧の通り良好。同じく1ドットも変わらず、色だけ変更されている。

いろいろなパターンで試してみる

 単に車の色を赤から黄色だけでは面白くないので、いろいろ試してみたい。時間帯、実写からアニメへ、髪の毛の色、衣装、サングラスをかける、背景、顔の向き、文字変更(英語のみ)、指定の位置へオブジェクトを描く……いかがだろうか?顔はもちろん指定以外のものは何も変わらずと言うのが凄いところ。

 ChatGPTなどでも同じことができるものの、実写の場合、フェイク対策もあり、必ず顔は変わるようになっている。しかしKontextは変わらずなので、ここが良い点なのだが、悪用されると困ったことになる。

Change to golden hour
Converted to anime style
Change to red hair
Change to summer dress
Put on sunglasses
Change to the beach
Turn face sideways
at summer replaced with PC Watch
Wear a straw hat in the boxes

 以下2つは応用編。2人の人物、一貫性を保ったまま、指定の場所へ、そして向きを変えて同時に配置。ただ2つの画像を使う場合はうまく行ったり行かなかったり。これはたまたまうまく行ったケースとなる。

Two women standing facing each other on the beach

 もう1つはPhotoshopで(面積的に)不足部分をOutpaintした上でサマーバッグを貼り付けただけの超雑コラ(笑)。これをKontextを使ってちゃんと1枚にまとめることもできる。

hold a bag

専用LoRAを作る

 最後にせっかくローカルPCで使えるKontext [dev]なので、APIではできないLoRAを作ってみたい。2024年8月にご紹介したai-toolkitが対応しており、これ使えば可能となる。

 方法はこの記事に書いたのとほぼ同じ。config/examplesに train_lora_flux_kontext_24gb.yamlというファイルがあるので、適当にファイル名を変えconfig/へ置く。書き換える部分は以下の通り。

 このやり方は、FLUX.1 [dev]の顔LoRAを作るパターンと同じで、LoRAを当てると学習した(たとえば)顔などが出るようになる。変更箇所は以下の通り。

name: "my_first_flux_kontext_lora_v1" (適当に変更)
#      trigger_word: "p3r5on" (コメントを外してトリガーワードを指定)
- folder_path: "/path/to/images/folder" (datasetのあるpathを指定)
steps: 3000 (3000だと多いので2000へ)
 - "make the person smile  --ctrl_img /path/to/control/folder/person1.jpg"

 最後の-の部分は、学習が進むごとに生成する用のプロンプトなのだが、デフォルトだと10もあり多いため、1つにしてほかはコメントアウトする。

- "change to the dress --ctrl_img /Users/knishika/Documents/works/ai-toolkit/config/sample.jpg"
※ sample.jpgは服の平置き画像

 これは本来Kontext用LoRAとは異なるもので、たとえばここにはいいろいろなLoRAがあり、参照画像をクリスタル化したり、ロボット化(メカ化)、reLightするものなどが並んでいる。

参照画像
クリスタル化
ロボット化(メカ化)
reLight

 この手のLoRAを作る時には、

control_path: "/path/to/control/folder"

 にも画像を用意する必要があるのだが(たとえば、大きな顔のKontext LoRAを作りたい場合は、そんな感じの画像ばかりを集める)、今回は顔LoRAということで、コメントアウトしている。

参照画像(平置きの服)
Kontext dev、LoRAありで“this clothes wearing a Japanese woman”
Kontext dev、LoRAなしで“this clothes wearing a Japanese woman”
Kontext proの結果(LoRAは機能的になく使えない)

 devで顔LoRAなしだと2.5Dのような女性になるが、顔LoRAありだとかなりそれっぽくTry-onの雰囲気が出る。proはdevよりましだろうか。

 ただ学習は結構時間がかかり、GeForce RTX 4090を使いデータセット10枚、2,000 stepsで約3時間。ざっくりFLUX.1 [dev]用のLoRAを作るより倍。1つ作るのにも気合いが必要だ(笑)。

 余談になるが、普通に顔LoRAを作る時もKontextは有効。と言うのも、新規で10~15枚程度の写真を撮るのに全て衣装や場所を変えることはまずしない。同じ衣装で同じ場所だと、顔だけでなく、衣装や場所も一緒に学習して、出力すると似たようなものばかり出てしまう。

 これを回避するには、データセットに使う写真、1枚1枚、Kontextを使い、衣装や場所を変更すれば良い。実際このパターンで学習したところ良好な結果が得られた。

 極端な話、アップの写真1枚だけ用意し、それをKontexでいろいろな顔の角度、寄り引きなどの構図、衣装や背景などを変え、datasetに必要な枚数分作ってもうまく行く可能性がある(実際このWorkflowを組んだ人もいる)。

 いろいろな意味でこれらが可能なKontextがオープンで出た意義は非常に大きいと言えるだろう。

 以上のように、Black Forest Labs「FLUX.1 Kontext [dev] 」は、参照画像から編集できる生成AI画像モデルだ。ChatGPTなどでも同じことは出来るものの、実写の場合、フェイク対策で必ず顔が変わってしまう。しかしKontextは変わらないのが最も大きな違いとなる。

 APIでは不可能な専用LoRAを作る環境も既にあり、アイディア次第でいろいろな編集ができそうだ。興味のある人は是非試してほしい。