ホーム自己紹介ブログ
NO.90
DATE2022. 09. 03

Stable Diffusion API 開発

Stable Diffusion は、文章を渡すと画像を生成してくれる AI で OSS です。 これを自分の PC で動かそうとすると、GPU が必要になります。 (CPU で動かせるstable_diffusion.openvino というのもあります)

できれば、どの PC でも使えるように、かつ、Slack などサービスと連携できるよう API がほしいなと思いました。 そこで、Stable Diffusion の API を開発しました。

結論

DreamStudio.ai の SDK、 stability-sdkを使いました。

成果物は、次のリポジトリに置いています。

  • https://github.com/silverbirder/stable-diffusion-API

ローカル環境でも、Docker コンテナでも、動きます。

動かすには、DreamStudio.ai の API Key が必要になります。 Docker で動くので、Docker をデプロイできるサービスなら、どこでも動きます。(GPU は不要です)

私は、GCP が好きなので、CloudRun というサービスにデプロイしました。 API は、とりあえず、<url>/?prompt=<text> というパラメータを受け取り、画像を返却します。

Slack で使ってみると、こんな感じになりました。

stable-diffusion-api-on-slack

ひとまず、API で Stable Diffusion を動かせました。

GPU と設計

stability-sdkを使う前までは、自前で Stable Diffusion を動かす環境を用意しようと設計を考えました。設計の調査メモは、次のリンクにメモを残しています。

  • https://zenn.dev/silverbirder/scraps/3842c715662551

具体的に、次のようなパターンを考えました。

  1. Google Colaboratory の GPU を使って Stable Diffusion を動かし、簡易な API で公開する
  2. サーバー(GCE や CloudRun など) で GPU を使って Stable Diffusion を動かし、簡易な API で公開する
  3. バッチ(Cloud Batch)で GPU を使って Stable Diffusion を動かし、必要なときに動かす。(API からバッチ処理をキックする)

1 番目は、Google Colaboratory の利用は 12 時間制限というのがあり、そこを回避する何かが必要なります。ただし、本来の用途と外れていると思うので、却下しました。

2 番目は、金銭的に数万~数十万円以上のランニングコストが発生するので却下です。

3 番目は、一番最初の構想したものです。2 番目のような GPU のサーバを常時起動しているとめちゃくちゃもったいないので、 バッチ処理として 3 番目の案を考えていました。3 番目で実際に構築してみると、(何が原因か深く調べていないですが) 起動に 30 分以上かかってしまい、使い物にならなさそうでした。

で、悩んだ結果、stability-sdk がメンテナンスやランニングコストも不要で、シュッとできそうだったことに気づきました。

もちろん、デメリットはあります。

  • SDK に依存するので、自身がコントロールできない(img2img できない)
  • 課金制

しかし、個人レベルで利用するという前提でしたので、デメリットよりもメリットの方が大きいと判断しました。

stability-sdk

DreamStudio.ai は、Stable Diffusion を使っています。 API として、stability-sdk を公開しています。 使うには、Python で書く必要があります。 ソースコードを読むと、gRPC を使っているため、別言語で SDK を書くのは比較的簡単だと思います。 私は、Python でシュッと書けるので、flask と stability-sdk を使いました。

  • https://github.com/silverbirder/stable-diffusion-API

ひとまず、Prompt だけを受け付ける超絶シンプルな API を書きました。 stability-sdkは、様々パラメータがあるので、それも受け付けられるようにしようかなと思ったり、Midjourney の discord のボットのようなモノを書いても面白そうだなと思いました。

終わりに

マークダウンで、画像を読み込むときに、今回開発した API を指定すると、マークダウンを開いたタイミングで画像が毎回変わります。 prompt と seed を指定すれば固定できるんですけど、こういうのも面白いなと思っています。

AI
バックエンド
成果物

-

読者になる

|

シェアする

|

silverbirders

silverbirder

Webソフトウェアエンジニア

ブログを応援する

この記事がよかったら、お布施という形で応援してもらえるとうれしいです。

おふせぼたん

※ ログイン不要で投稿できます。

※ 同じブラウザから投稿を削除できます。

0

読み込み中...

次の記事へ前の記事へ

関連する記事

タグ「AI」の記事

GitHub Copilot を解約して、OpenAI Codex Pro を契約しました。

今朝、長らくお世話になった GitHub Copilot を解約し、 OpenAI Codex を Plus から Pro にアップグレードしました。 経緯 今月、5月4日あたりから OpenAI Codex で何度か上限制限(5時間以内)

2026年05月09日

AI
AI Slop と増幅器

AI で生成された低品質なもの、AI Slop と呼ばれます。 呼び名はなんでも良いですが、この種のコンテンツを目にするたびに落胆します。 ネット記事や、プルリクエストの説明文、議題とディスカッション、あらゆるところに登場します。 めっちゃ

2026年05月08日

AI
雑談
AIデザインとバイブコーディングの相性の良さ

現在、個人開発でブログキュレーションアプリを開発中です。 https://silverbirder.github.io/blog/contents/20260419/ UIデザインについて、v0などのAIデザインツールを使う際に、 バイブコ

2026年04月24日

AI
デザイン

タグ「バックエンド」の記事

Storybook上で tRPC通信をMSWでモックする方法

はじめに tRPCは、型安全なAPIを簡単に構築できるフレームワークです。開発中、バックエンドの実装を待たずに、Storybook上でフロントエンドの開発を進めたい場合、Mock Service Worker (MSW) を使用してAPIのモックを行うことができます。この記事では、maloguertin/msw-trpc を用いて、tRPC通信をMSWでモックする方法について解説します。実用例として、サンプルコードをGitHubリポジトリ silverbirder/trpc-msw-storybook-nextjs で共有しています。

2024年03月07日

テスト
バックエンド
GraphQL Guildのエコシステムって便利だね

GraphQL Guild ってご存知ですか?GraphQL 界隈だと、Code Generator が有名と思いますが

2022年10月15日

バックエンド
CI/CDのDaggerで、GithubActionsとCircleCIにシュッと連携してみた

前々から気になっていた、CI/CD の非ベンダーロックインな Dagger というツールを試してみました。本記事では、試した内容について共有しようと思います。

2022年08月23日

バックエンド
DevOps
クローリング

タグ「成果物」の記事

記事投稿 連続100回以上している 私専用執筆環境Webアプリ

個人サイトリニューアルを機に、記事を書く執筆環境Webアプリを用意しました。 https://silverbirder.github.io/blog/contents/20260128/ どのようなものか簡単に紹介します。 入力とプレビュー

2026年02月20日

成果物
個人サイトリニューアルの振り返り

個人サイト(ジブンノート)をリニューアルしました。本記事では、個人サイトをリニューアルした際にあった出来事などを振り返りたいと思います。ちなみに、個人サイトは以下のページです。ノート風デザインで、ブログ記事が読めるようになりました!🎉

2026年01月29日

成果物
振り返り
個人サイトをリニューアルしました!

個人サイトをリニューアルしました!🎉 https://silverbirder.github.io リニューアルは、今回で6回目です。制作期間は、去年の12月27日から今年の1月28日までの約1ヶ月間です。個人的には最速の開発期間でした。AIの力は偉大ですね。本記事では、個人サイトのリニューアルでこだわったポイントについて紹介します。

2026年01月28日

成果物
← ブログ一覧へ