Python不要で画像生成！DifyとStableDiffusionを使った簡単な自動化手順

![jidankin.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/643cc9ed-01e0-fbb4-44f3-ef12dc44e98e.jpeg)
これは、「△□〇×さんが示談金を支払う様子」を**StableDiffusion**に生成してもらった画像です。





# はじめに
前回の投稿記事では**Dify**の「ワークフロー」を用いて、**firercrawl**にてスクレイピングを簡単に実施する方法を紹介しました。
今回は、**Dify**の「ワークフロー」を用いて、画像生成を行うサービス**Stablediffusion**にて、簡単画像生成に挑戦してみたいと思います。
一連の**Dify**の「ワークフロー」をマスターすれば、**Dify**を使っていろいろな処理が簡単に出来るようになると思います。




# StableDiffusionのAPI登録
画像生成サービスである**stableDiffusion**のAPI登録を実施します。
ここでは**DreamStudio**のサインインとAPIキーの取得について説明します。

## APIキーの生成
**stableDiffusion**のAPIを取得するには、**DreamStudio**のサインインが必要となります。以下のURLからサインインをしてください。

https://beta.dreamstudio.ai/generate


右上の「Login」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/a15bb094-49c3-f250-c8b1-34bd4d9822fd.png)



ログイン画面が表示されます。新規ユーザーの方は「サインイン」を、既に登録済みの方は「ログイン」を選択してください。操作方法が不明な場合は、他のサイトに掲載されている詳しい説明を参考にしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/24320ad3-ef39-dc0b-67d7-729384c960fa.png)

**DreamStudio**にアクセスすると、次のような画面が表示されます。「API Keys」のセクションにAPIキーが表示されているので、それをコピーしてください。このキーは後で**Dify**に登録する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/55497ae8-1357-ef90-3960-c59f8978eec7.png)


# Stable Diffusionの設定  
次に、**Stable Diffusion**のAPIキーを**Dify**に登録します。  
**Dify**の画面上部にある「ツール」をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/82db1760-16da-d670-1317-5f73c54ef4aa.png)

ツールが多数あり、見つけにくい場合があります。絞り込むために、右側の「すべてのタグ」の検索バーに「stab」と入力してください。  
**Stability**が表示されるので、それを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/36df3586-c90c-b91f-93bf-bfe674568b6a.png)

右側に「認証の設定」が表示されるので、「API Key」のテキストボックスに、先ほど**DreamStudio**からコピーしたAPIキーを貼り付けてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/b29da263-f77c-4770-c793-a26c3c63a56c.png)

次に「ワークフロー」を作成していきます。

# ワークフローの作成  
「ワークフロー」を作成するには、画面上部の「スタジオ」をクリックし、左側の「最初から作成」を選択します。すると、下図のように「最初から作成」ダイアログが表示されます。  
ここで「ワークフロー」を選択し、「アプリの名前」を入力して「作成する」ボタンをクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/086dc7c5-97ce-bc8e-8b5b-758ea6c687a6.png)

これで初期設定された「ワークフロー」が作成され、下図のような画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/e62a08eb-04fa-bcf3-4d15-3ff235dfa4ef.png)

ここから、「開始ブロック」「LLMブロック」「StableDiffusionブロック」「終了ブロック」を設定し、それぞれを連結します。  
他のブロックの追加方法については過去の記事で説明していますので、今回は「StableDiffusionブロック」の追加方法に焦点を当てます。  
下図のように「ツール」タブを選択し、リストから「StableDiffusion」を選択することで、「StableDiffusionブロック」を追加できます。  
4つのブロックを追加し、紐づけた状態は以下の図のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/424f7c01-60df-9d98-fb0e-75009c2d87c3.png)

次に、「開始ブロック」の設定を行います。中央に「入力フィールドを追加」ダイアログが表示されるので、「短文」を選択します。その後、「変数名」「ラベル名」「最大値」を設定し、「保存」ボタンをクリックすることで、「開始ブロック」の設定が完了します。  
次に、「LLMブロック」の設定を行います。下図のように、`SYSTEM`には以下の内容を設定しました：  
「以下の『作りたい画像』を作成するためのプロンプトを英語で出力してください。また、画像生成用プロンプト以外の内容は出力しないでください。」  
最後に、「#作りたい画像」を設定し、「開始ブロック」の入力である`開始` - `text`を接続しました。  
なお、`USER`のプロンプトについては今回は設定していません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/53a1d3b2-1574-8c9c-9e7c-f4a2748b59fc.png)

次に「StableDiffusionブロック」の設定をします。
下図のように「入力変数」を「LLM」-「text」に設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/f5d0d8bb-f74e-d47f-cdba-dbb48a507693.png)

念のため、「StableDiffusion」の「出力変数」を確認します。  
下図のようにいくつか種類がありますが、今回は生成された画像を出力するため、「files」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/dc7499eb-246b-14f8-21af-03ebca14f7bb.png)

最後に「終了ブロック」の設定を行います。**LLM**の出力結果と、**StableDiffusion**で生成した画像を取得するため、下図のように設定します。

・`プロンプト`：`[LLM]-[text String]`  
・`画像`：`[STABLEDIFFUSION]-[files]`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/bf40c9ae-67c3-a970-3448-50ae6e9c7efc.png)
# 実行  
それでは、実行してみます。  
今回はアプリを一度公開してから処理を実行しようと思います。画面右側の「公開する」をクリックします。すると、下図のようなダイアログが表示されるので、「アプリ実行」をクリックします。  

次に、別タブで下図のような画面が表示されます。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/25370080-c7cf-49ca-6228-b4888bfba718.png)  

この画面の左側にある「生成画像の内容」のテキストボックスに、生成したい画像の内容を入力します。  
その後、「Execute」をクリックして、処理を実行します。

臨場感を感じていただくために、生成画像作成までの処理を示した動画をご覧ください。

![Animation.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/d84cfaf1-8ff0-2681-dfef-fc795d5dd855.gif)

下図が最終結果です。  
**LLM**の出力結果と生成された画像が表示されました。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/8ead761b-f9ae-7d9d-7311-ffe675cb3ee8.png)


# おわりに  
今回は**StableDiffusion**を使用して、画像の自動生成に挑戦しました。  
一応画像は生成できましたが、まだ改善の余地はあると感じています。  
とはいえ、このようにサービスを活用し、Difyのワークフローを使えば、さまざまな作業が簡単に実現できるようになります。もしかすると、Pythonでのコーディングはほとんど必要なくなるかもしれません。  
それよりも、ワークフローをどのように設計するかに重点を置く時代が来るかもしれません。  
もしLLMの回答に精度の不安がある場合でも、「ワークフロー」の中で複数のLLMモデルを組み合わせて最適な結果を得ることが可能になります。  

これらのツールが広く使用されるようになると、逆にこれらを使わない人の生産性は向上せず、相対的に「生産性が低い」と見なされる時代が来るかもしれません。  

最後までお読みいただき、ありがとうございました。