Stable Diffusion 3 APIの使い方

# Stable Diffusion 3 APIの使い方
**※2024/7月時点でのStable Diffusion 3 APIの利用方法になります。画像生成AIは進化の早い業界なので、最新のキャッチアップは公式サイトで確認ください。**


# Stability AIのアカウントにサインインし、APIキーを取得　
https://platform.stability.ai/account/

まずは、Stability AIのアカウントにアクセスしてサインアップ）します。

![スクリーンショット 2024-06-19 21.53.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/18a85a3c-f6aa-a890-6241-531e12e712b9.png)

1. API keysをクリック
2. API keyを取得する

## 価格について
https://platform.stability.ai/pricing

| サービス名                         | 説明                                                                                          | 価格 (クレジット) |
|------------------------------------|---------------------------------------------------------------------------------------------|-------------------|
| Ultra                              | 最新のモデル（Stable Diffusion 3 など）を活用した最も強力で柔軟なワークフロー                  | 8                 |
| Core                               | 高品質な画像を迅速に生成するための高度なワークフロー                                          | 3                 |
| Stable Diffusion 3 Medium          | 20億パラメータの Stable Diffusion 3 のバリアント、最新のベースモデル                            | 3.5               |
| Stable Diffusion 3 Large           | 80億パラメータの Stable Diffusion 3 のバリアント、最新のベースモデル                            | 6.5               |
| Stable Diffusion 3 Large Turbo     | Stable Diffusion 3 Large のターボバリアント                                                      | 4                 |
| SDXL 1.0                           | レガシーベースモデル - クラシックでシンプルな画像生成                                           | 0.2-0.6           |
| SD 1.6                             | レガシー柔軟解像度ベースモデル                                                                  | 0.2-1.0           |


## クレジットについて
https://platform.stability.ai/account/credits

アカウントを新規作成した場合は25クレジットが無料付与されます。

$10ドル支払えば、1,000クレジットが購入できます。

![スクリーンショット 2024-06-19 21.59.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/268dfa01-1a75-69de-70c3-32ab4820b59c.png)


# APIで画像作成する
基本的には公式リファレンス通りに進めるだけです。

https://platform.stability.ai/docs/api-reference#tag/Generate/paths/~1v2beta~1stable-image~1generate~1sd3/post



## 必要な環境の準備
### Node.jsのインストール
まだインストールしていない場合は、[Node.jsの公式サイト](https://nodejs.org/en)からNode.jsをダウンロードしてインストールします。

### 依存パッケージのインストール
axiosとform-dataパッケージをプロジェクトにインストールします。

```
npm install axios form-data
```

## プログラム実行

``` javascript
import fs from "node:fs";
import axios from "axios";
import FormData from "form-data";

const payload = {
  prompt: "Lighthouse on a cliff overlooking the ocean",
  output_format: "jpeg"
};

const response = await axios.postForm(
  `https://api.stability.ai/v2beta/stable-image/generate/sd3`,
  axios.toFormData(payload, new FormData()),
  {
    validateStatus: undefined,
    responseType: "arraybuffer",
    headers: { 
      Authorization: `Bearer 取得したAPIキー`, 
      Accept: "image/*" 
    },
  },
);

if(response.status === 200) {
  fs.writeFileSync("./lighthouse.jpeg", Buffer.from(response.data));
} else {
  throw new Error(`${response.status}: ${response.data.toString()}`);
}
```
上記のコードを実行して、画像が作成されればOK

実際に作成された画像
![lighthouse.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/b3f445c1-2297-8582-924a-9b8ed5d76b4d.jpeg)




実行した時に下記のエラーになる場合

```
➜  Desktop node stablediffusion.js
(node:94696) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
(Use `node --trace-warnings ...` to show where the warning was created)
/Users/pc-m12/Desktop/stablediffusion.js:1
import fs from "node:fs";
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at Object.compileFunction (node:vm:360:18)
    at wrapSafe (node:internal/modules/cjs/loader:1124:15)
    at Module._compile (node:internal/modules/cjs/loader:1160:27)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1250:10)
    at Module.load (node:internal/modules/cjs/loader:1074:32)
    at Function.Module._load (node:internal/modules/cjs/loader:909:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
    at node:internal/main/run_main_module:22:47
```

package.jsonファイルに"type": "module"を追加すれば解決します。
``` json
{
  "type": "module",
  "dependencies": {
    "axios": "^1.7.2",
    "form-data": "^4.0.0"
  }
}
```
    

## まとめ
思ったより簡単に利用できた。