Stable Diffusionでキャラ用のプロンプトを作成するツール作った

  1. 🏷️
  2. Stable Diffusion
  3. AI生成
  4. プログラミング
  5. JavaScript
  6. TypeScript
  7. Astro
sd-character-prompts-builderのサンプル画像

Stable Diffusionでアニメキャラを作ってるときに、 しょっちゅうpromptを忘れることがある。 「あ〜前髪を指定し忘れた...」とか、「胸の大きさを指定し忘れた...」とか、そんなんばっかり。

メモ用紙に書いてチェックリスト化してたけど、書ききれなくなってきた。 ので、思い切ってWebアプリ作っちゃおうということに。

ご利用は↓から。

sd-character-prompts-builder-sample

「何これ❓」

ボタンをポチポチするだけで、promptを作成できるアプリ。

キャラクタの再現に必要なpromptを予め用意してあるので、 上から順番にポチポチしていけば、一定以上のクオリティのpromptが完成する。

「何が嬉しいの❓」

以下のメリットがある。

1. 入れるべきpromptを忘れずに指定できる

これは冒頭で述べた通り。 作ってわかったが、キャラの顔まわりだけでも考慮すべきpromptは300個近くあるんだよね。 それを全部覚えて、毎回忘れずに指定するのは無理。

swept bangs とか忘れるでしょ絶対。

必ずリストか何かが必要になる。 このアプリはリストの代わりになる。

2. promptの順番が保証される

これも結構大事で、キャラクタごとにpromptの順番がぐちゃぐちゃだと非常に管理し辛い。

「おっぱい大きくするか😇」と思っても胸の大きさのpromptを 長〜いテキストから探すの結構つらいんだよね。

このツールを使う限り、順番は常に同じになるので、↑の心配はなくなる。

あ、ちなみに胸の大きさはすぐ変えたくなるので、 一番最後に配置してあるw large breasts で物足りないから huge breasts に変更したりとか、1回はやったことあるだろ❓な❓

3. 親子関係のあるpromptをまとめて指定できる

「アンダーリムの眼鏡っ娘作るか...🥰」 と思ったときに under-rim eyewear だけ指定したりする。 が、これはもったいない。 某所のタグ付け的には、 under-rim eyewearsemi-rimless eyewear に属している(親子関係がある) ので、 semi-rimless eyewear もつけたほうが(おそらく)良い。

本アプリはこうした親子関係をUI上でグループ化して表示して、 親promptを有効化しないと子promptが表示されないようにしてある。 これで、子promptだけを指定しちゃったりすることはなくなる。

ただ、親子promptを指定したときと、子promptだけ指定したときとで、 どちらが生成結果が良くなるかは未知数。 私も生成結果を定性的に比較したわけではない...。 環境によっては、子promptだけのほうが良くなるかもね。 まぁ、その場合は手動で出力promptを削ってくれ〜。

「***のpromptがねぇんだけど💢」

追加するから連絡くれ。

あと、V2.1.0の現在、対象は顔周りと胸の大きさに関係するprompt (いわゆるコイカツで言うところの じゃなくて キャラ に該当する要素)に限られる。 服やポーズのpromptの実装は将来に期待してね❤️

「promptが英語で分かんねえ💢」

がんばって読んでくれ。どうせ覚える。

まぁ、見慣れないpromptがあるのは事実なので、 そういうのはサンプル画像を表示できるようにしたいとは思ってる。 これも将来だね。

「web UIの拡張じゃねえのかよ💢」

そうだよ()。あっちはpythonらしいので、技術的にハードルが高いんだよね。すまんな。

技術の話

ここから完全に別の話で、Webアプリの技術的な話。

Astro

今回はAstroを採用。 最近、流行ってる感じがしたし、 今度ブログを乗り換えるならAstroが良いなと思っているため。

第一印象としては、まず早い。 ビルドシステムがViteだから、開発サーバーが一瞬で立ち上がるのは素晴らしい。 このブログはGatsbyで作ってて、確かWebPackなんだけど、 開発サーバーは10sくらいかかったりするんだよね。フィーリングがぜんぜん違う。

また、特殊なシステムが少なくて、 VanillaなHTML、CSS、JSに寄ってるところが良い。 個人が趣味で作ってるブログやアプリに、 Reactはtoo muchってやつだよなって感じた。

ただ、当然、Reactでできて、Astroでできないこともある。 特に、関数をコンポーネント越しに渡すのは原則無理。

例えば、ボタン要素なんかをコンポーネント化する場合、 まず、コールバック関数を共通ライブラリあたりに切り出しておく。 で、ボタンコンポーネントにはキーになる文字列だけを渡す(関数は渡せないので)。 最後に、ボタンコンポーネント内で、キーを参照してコールバック関数を引っ張り出して...みたいなことになる。 超面倒くさい。

本アプリでもそういう場面多くて、めんどくさすぎた。 ので、親コンポーネント側で、ボタンコンポーネントを直接 querySelector でひっぱってきちゃうことにした。 でも、これ、コンポーネントが暗黙的に結合していて、良くない設計だと思うんだよなぁ...。

CSSでも↑と同じような問題が発生する。 親コンポーネントで迂闊に div button {color: red} とか指定しようものなら、 子や孫コンポーネントの button の文字が真っ赤になったりする。 影響ダダ漏れって感じ😭

ほかにもいろいろあるんだけど、続きはもっとまとめてQiitaに書こうかな。 この記事はここまで。

TypeScript

本格的にTypeScriptの型をいじくりまわすことになった。良い勉強になった。

思想が大事だね。 『データ定義して、そこから型を抽出しよう』は間違いで、 『型を定義して、そこに合うようにデータを定義しよう』が正しい。

プロンプトのデータ定義のときに、前者の考え方をしてたら、型情報がぐっちゃぐちゃになって書き直す羽目になった。 最初は「型の定義とデータの定義を別々にやってたら二重管理なるやん❗」とか思ってたけど違った。 型を定義したら、データの定義が制限されるので、片方が間違ってたらトランスパイル時にエラーになるんだよね。 そこで修正するんだから、2つの定義が不一致を起こすことはないんだ。

TSいじってる人には「何を当たり前のことを...」と思われるかもw

ともかく、「なるべく型は厳しくしろ。その型にデータを流し込んでエラーが出るなら、エラーを信じろ。」の精神が大事だと思いました。まる。

Bio
Bio icon

tenpaMk2

🇯🇵インドアクソオタク。

Tag cloud
  1. AI生成
  2. ALTER
  3. ANIPLEX
  4. Astro
  5. AZT8-45
  6. A列車で行こう
  7. Borderline Toybox
  8. BROCCOLI
  9. Building Gadgets MOD
  10. Chart.js
  11. cocoen-js
  12. Create MOD
  13. DDDy
  14. Excalibur.js
  15. Fate
  16. Fate/Apocrypha
  17. Fate/EXTELLA
  18. Fate/EXTRA CCC
  19. Fate/stay night
  20. FGO
  21. FLARE
  22. FREEing
  23. GameDev
  24. Gatsby
  25. Gatsby Theme
  26. Git
  27. Google Analytics
  28. Hexo
  29. Hexo時代の記事
  30. HOBBY STOCK
  31. hololive
  32. homebrew
  33. JavaScript
  34. KDcolle
  35. KDColle
  36. Kon'D
  37. Lightroom
  38. Mac
  39. Markdown
  40. Minecraft
  41. MVStudio
  42. NEKOPARA
  43. NEKOYOME
  44. Node.js
  45. npm
  46. NSFW
  47. Phat!
  48. PLUM
  49. plusone
  50. POP UP PARADE
  51. PSO
  52. quesQ
  53. RAW現像
  54. Re:ゼロから始める異世界生活
  55. React
  56. RSS
  57. SAO
  58. spiritale
  59. SSG
  60. Stable Diffusion
  61. Tailwind CSS
  62. Thermal MOD
  63. To LOVEる
  64. Tony
  65. Twitter
  66. TypeScript
  67. Vite
  68. VOCALOID
  69. VSCode
  70. WebP
  71. Wonderful Works
  72. zsh
  73. ご注文はうさぎですか?
  74. はじまるA列車
  75. はにかみ、彼女は恋をする
  76. ひげを剃る。そして女子高生を拾う。
  77. りゅうおうのおしごと
  78. アクアマリン
  79. アストルフォ
  80. アズキ
  81. アズールレーン
  82. アトリエシリーズ
  83. アリスグリント
  84. アルトリア オルタ
  85. イリヤスフィール・フォン・アインツベルン
  86. イージーエイト
  87. ウイング
  88. エリス・ボレアス・グレイラット
  89. エルドール
  90. オーキッドシード
  91. キャスター
  92. クドわふたー
  93. クロエ・フォン・アインツベルン
  94. グッドスマイルカンパニー
  95. グリザイア:ファントムトリガー
  96. ゲーム
  97. ココナツ
  98. コトブキヤ
  99. ゴールデンヘッドプラス
  100. サキちゃん
  101. ショコラ
  102. ジェネ
  103. ジャベリン
  104. ジャンヌ・ダルク
  105. ステファニー・ドーラ
  106. ストロンガー
  107. ソフィーのアトリエ
  108. ソードアート・オンライン
  109. ダイキ工業
  110. チノ
  111. チノちゃん
  112. チョコメロ
  113. ティアーユ・ルナティーク
  114. ディ・モールト ベネ
  115. デート・ア・ライブ
  116. ドール
  117. ドールグッズ紹介
  118. ナナ・アスタ・デビルーク
  119. ネコぱら
  120. ネロ・クラウディウス
  121. ノーゲーム・ノーライフ
  122. バニラ
  123. バニー
  124. フィギュア
  125. フィギュアレビュー
  126. ブログ
  127. プラスワン
  128. プラフタ
  129. プリズマ☆イリヤ
  130. プログラミング
  131. マシュ・キリエライト
  132. マックスファクトリー
  133. マヤ
  134. ミーア
  135. ミーシャ・ネクロン
  136. メグ
  137. メディコス・エンタテインメント
  138. モモ・ベリア・デビルーク
  139. モンスター娘のいる日常
  140. ユニオンクリエイティブ
  141. ライザのアトリエ
  142. ライザリン・シュタウト
  143. ラブライブ
  144. ララ・サタリン・デビルーク
  145. リューノス
  146. レム
  147. レーシング
  148. 五島潤
  149. 冴えない彼女の育てかた
  150. 初音ミク
  151. 加藤恵
  152. 喵屋
  153. 天使の3P!
  154. 巡音ルカ
  155. 時崎狂三
  156. 東京フィギュア
  157. 水澄華実
  158. 氷堂美智留
  159. 深見玲奈
  160. 渡辺曜
  161. 無職転生
  162. 玉藻の前
  163. 画像比較スライダー
  164. 白銀ノエル
  165. 百瀬くるみ
  166. 空銀子
  167. 結城明日奈
  168. 結城美柑
  169. 美咲詩絵
  170. 美遊・エーデルフェルト
  171. 能美クドリャフカ
  172. 花偶堂
  173. 荻原沙優
  174. 西連寺春菜
  175. 遠坂凛
  176. 雛鶴あい
  177. 霞ヶ丘詩羽
  178. 魔王学院の不適合者
  179. 黒咲芽亜