<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Stable Diffusion on AIによる技術記事 備忘録</title><link>https://ai.hack-le.com/tags/stable-diffusion/</link><description>Recent content in Stable Diffusion on AIによる技術記事 備忘録</description><generator>Hugo -- gohugo.io</generator><language>ja</language><lastBuildDate>Mon, 02 Nov 2026 12:45:23 +0900</lastBuildDate><atom:link href="https://ai.hack-le.com/tags/stable-diffusion/index.xml" rel="self" type="application/rss+xml"/><item><title>Stable Diffusionにおけるアップスケーラー倍率とHires.fix設定の備忘録</title><link>https://ai.hack-le.com/stable-diffusion%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%82%A2%E3%83%83%E3%83%97%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%A9%E3%83%BC%E5%80%8D%E7%8E%87%E3%81%A8hires-fix%E8%A8%AD%E5%AE%9A%E3%81%AE%E5%82%99/</link><pubDate>Sun, 30 Aug 2026 10:56:51 +0900</pubDate><guid>https://ai.hack-le.com/stable-diffusion%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%82%A2%E3%83%83%E3%83%97%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%A9%E3%83%BC%E5%80%8D%E7%8E%87%E3%81%A8hires-fix%E8%A8%AD%E5%AE%9A%E3%81%AE%E5%82%99/</guid><description>&lt;h2 id="アップスケーラーの倍率と解像度に潜む2つのルール"&gt;アップスケーラーの倍率と解像度に潜む2つのルール&#10;&lt;/h2&gt;&lt;p&gt;Stable Diffusionにおいてベース解像度を64の倍数に設定することは基本ですが、アップスケールを行う際にも考慮すべき2つの倍数ルールが存在します。&lt;/p&gt;&#10;&lt;p&gt;1つ目は、最終的に出力される縦横ピクセル数が&lt;strong&gt;64の倍数&lt;/strong&gt;（最低でも8の倍数）である必要がある点です。Hires.fixのように「アップスケール後に再度潜在空間（Latent Space）とピクセル空間を行き来させる手法」では、UNetおよびVAEの制約を直接受けます。端数が生じる解像度を指定すると、境界部分の歪みやブロックノイズの原因となります。&lt;/p&gt;&#10;&lt;p&gt;2つ目は、AIアップスケーラーモデルが内部的に持っている「&lt;strong&gt;ネイティブ倍率&lt;/strong&gt;」の存在です。ESRGANやSwinIRなどの主要なアップスケーラーモデルは、ネットワーク構造自体が2倍（$\times 2$）または4倍（$\times 4$）固定で学習されています。ここで倍率に &lt;code&gt;1.5&lt;/code&gt; などを指定した場合、ツール内部では「一度モデルのネイティブ倍率で拡大した後に、バイキュービック等の画像補間処理で1.5倍に縮小する」という2段階の処理が行われます。この縮小処理に伴い、モデルが描き出した細かなディテールがわずかにボケてしまったり、余分な計算コストが発生したりします。&lt;/p&gt;&#10;&lt;p&gt;これまで &lt;code&gt;1.5倍&lt;/code&gt; を指定しても問題が生じにくかったのは、ベース解像度として使われる &lt;code&gt;512 × 512&lt;/code&gt; や &lt;code&gt;512 × 768&lt;/code&gt; を1.5倍した結果がそれぞれ &lt;code&gt;768 × 768&lt;/code&gt; や &lt;code&gt;768 × 1152&lt;/code&gt; となり、偶然にも64の倍数に合致していたためです。アップスケーラー本来の描写性能を最大限に引き出すのであれば、拡大倍率は &lt;strong&gt;&lt;code&gt;2.0倍&lt;/code&gt;&lt;/strong&gt; などの整数倍を基準にするのが合理的です。&lt;/p&gt;&#10;&lt;h2 id="hiresfixにおけるhr-stepsとノイズ除去強度の考え方"&gt;Hires.fixにおけるHR Stepsとノイズ除去強度の考え方&#10;&lt;/h2&gt;&lt;p&gt;ベース生成のステップ数が &lt;code&gt;25&lt;/code&gt; 前後の場合、Illustrious系を含む多くのモデルにおいて &lt;code&gt;HR Steps&lt;/code&gt; は &lt;strong&gt;10〜15&lt;/strong&gt; 程度で十分な品質が得られます。&lt;/p&gt;&#10;&lt;p&gt;Hires.fixで実際に処理される計算回数は、設定したステップ数そのものではなく、ノイズ除去強度（Denoising Strength）との積によって決まります。&lt;/p&gt;&#10;&lt;p&gt;$$\text{実効ステップ数} = \text{HR Steps} \times \text{Denoising Strength}$$&lt;/p&gt;&#10;&lt;p&gt;構図やキャラクターデザインの崩れを防ぐために Denoising Strength を &lt;code&gt;0.40&lt;/code&gt; 付近に設定した場合、&lt;code&gt;HR Steps&lt;/code&gt; を &lt;code&gt;15&lt;/code&gt; とすると実効ステップ数は $15 \times 0.40 = 6$ ステップとなります。この状態から &lt;code&gt;HR Steps&lt;/code&gt; を30などに倍増させても、実際に増える処理は数ステップ程度に過ぎず、生成時間が大幅に延びる割にクオリティの向上は限定的です。&lt;/p&gt;&#10;&lt;p&gt;とりわけIllustrious系（SDXL派生）はベース生成の段階で細部の描き込み性能が非常に高いため、Hires.fix側で過剰にステップを回すと線の多重化やテクスチャの破綻を招きやすくなります。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;推奨HR Steps:&lt;/strong&gt; &lt;strong&gt;10 〜 15&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;推奨Denoising Strength:&lt;/strong&gt; &lt;strong&gt;0.35 〜 0.45&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;推奨アップスケーラー:&lt;/strong&gt; &lt;code&gt;4x-Anime6B&lt;/code&gt;、&lt;code&gt;R-ESRGAN4x+ Anime6B&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;ディテールを増やしたい場合は &lt;code&gt;HR Steps&lt;/code&gt; を増やすのではなく、&lt;code&gt;Denoising Strength&lt;/code&gt; を &lt;code&gt;0.45〜0.50&lt;/code&gt; 付近まで少し引き上げる方が直接的な効果を得られます。逆に生成速度を優先したい場合は、&lt;code&gt;HR Steps&lt;/code&gt; を &lt;code&gt;10&lt;/code&gt; まで下げても仕上がりに大きな差は生じません。&lt;/p&gt;&#10;</description></item><item><title>【Stable Diffusion】単なる前かがみから脱却する！あざとさとドキッと感を演出するプロンプト設計ガイド</title><link>https://ai.hack-le.com/%E3%80%90stable-diffusion%E3%80%91%E5%8D%98%E3%81%AA%E3%82%8B%E5%89%8D%E3%81%8B%E3%81%8C%E3%81%BF%E3%81%8B%E3%82%89%E8%84%B1%E5%8D%B4%E3%81%99%E3%82%8B%EF%BC%81%E3%81%82%E3%81%96%E3%81%A8%E3%81%95/</link><pubDate>Sat, 29 Aug 2026 15:13:29 +0900</pubDate><guid>https://ai.hack-le.com/%E3%80%90stable-diffusion%E3%80%91%E5%8D%98%E3%81%AA%E3%82%8B%E5%89%8D%E3%81%8B%E3%81%8C%E3%81%BF%E3%81%8B%E3%82%89%E8%84%B1%E5%8D%B4%E3%81%99%E3%82%8B%EF%BC%81%E3%81%82%E3%81%96%E3%81%A8%E3%81%95/</guid><description>&lt;p&gt;Stable Diffusionなどの画像生成AIで人物を描く際、前かがみの姿勢は視線誘導や距離感を縮めるための非常に強力なポーズです。しかし、単に &lt;code&gt;leaning forward&lt;/code&gt; と入力するだけでは、どこか平板で意図したあざとさやドキッとする緊張感が生まれにくい傾向があります。&lt;/p&gt;&#10;&lt;p&gt;魅力的な前傾姿勢を表現するためには、身体の傾きそのものに加えて&lt;strong&gt;顔や視線の距離感&lt;/strong&gt;、&lt;strong&gt;手や腕の細かな仕草&lt;/strong&gt;、そして&lt;strong&gt;カメラアングルと被写界深度&lt;/strong&gt;を論理的に組み合わせることが重要です。本記事では、思わず目を奪われるようなあざとい前かがみ構図を作るための要素とプロンプト設計について解説します。&lt;/p&gt;&#10;&lt;h2 id="身体の傾きと距離感を明確にするアプローチ"&gt;身体の傾きと距離感を明確にするアプローチ&#10;&lt;/h2&gt;&lt;p&gt;前かがみの動作は、どこを支点にしてどのように傾いているかによって印象が大きく変わります。単純な前傾ではなく、相手に向かって踏み込むような動作や、何かに寄りかかるシチュエーションを具体的に指定することで構図に説得力が生まれます。&lt;/p&gt;&#10;&lt;p&gt;身体の倒し方や距離感をコントロールする代表的な指定は以下の通りです。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;leaning close&lt;/code&gt;: 鑑賞者（画面手前）に向かってグッと顔や体を近づけてくる動作&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;bending over&lt;/code&gt;: 腰を明確に折って前屈みになるポーズ&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;hands on knees&lt;/code&gt;: 膝に手を置いて前かがみになり、こちらを覗き込む仕草&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;leaning on table&lt;/code&gt; / &lt;code&gt;leaning on elbows&lt;/code&gt;: テーブルに肘をついて身を乗り出す構図&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;arms behind back&lt;/code&gt;: 手を後ろに組んで胸を張りつつ前傾するポーズ&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;手を後ろに回す &lt;code&gt;arms behind back&lt;/code&gt; を前傾と組み合わせると、上半身のラインが自然と強調され、無防備さと小悪魔的な雰囲気を同時に演出できます。また、テーブルや手すりなどのオブジェクトを介在させることで、日常のワンシーンのような自然な距離の近さを表現しやすくなります。&lt;/p&gt;&#10;&lt;h2 id="視線表情手元の仕草で生み出すあざとさ"&gt;視線・表情・手元の仕草で生み出すあざとさ&#10;&lt;/h2&gt;&lt;p&gt;前かがみのポーズが持つ魅力を最大限に引き出すのは、手元の仕草と視線、そして表情のニュアンスです。顔の近くに手を配置したり、視線に感情を乗せたりすることで、イラスト全体のドラマ性が跳ね上がります。&lt;/p&gt;&#10;&lt;p&gt;顔周りの仕草としては、顎を乗せる &lt;code&gt;chin rest&lt;/code&gt; や、唇に指を添える &lt;code&gt;finger to lips&lt;/code&gt;、髪を耳にかける &lt;code&gt;tucking hair behind ear&lt;/code&gt; などが効果的です。また、服の襟元を少し引っ張る &lt;code&gt;tugging own collar&lt;/code&gt; やメガネを押し上げる &lt;code&gt;adjusting glasses&lt;/code&gt; などの無意識に見える動作も、強いフックになります。&lt;/p&gt;&#10;&lt;p&gt;表情と視線においては、上目遣いを作る &lt;code&gt;looking up at viewer&lt;/code&gt; や強い視線を生む &lt;code&gt;intense eye contact&lt;/code&gt; をベースに、頬の赤み &lt;code&gt;blushing&lt;/code&gt; やわずかに開いた唇 &lt;code&gt;parted lips&lt;/code&gt; を加えることで、&lt;strong&gt;無自覚な近さへの照れ&lt;/strong&gt;や&lt;strong&gt;からかうような小悪魔感&lt;/strong&gt;といった情緒を付与できます。&lt;/p&gt;&#10;&lt;h2 id="カメラワークとライティングによる緊張感の強化"&gt;カメラワークとライティングによる緊張感の強化&#10;&lt;/h2&gt;&lt;p&gt;ポーズと表情が決まったら、それをどのように切り取るかをプロンプトで指定します。距離の近さを際立たせるには、構図と光のコントロールが欠かせません。&lt;/p&gt;&#10;&lt;p&gt;主観視点を強調する &lt;code&gt;pov&lt;/code&gt; や少し高めの位置から捉える &lt;code&gt;from above&lt;/code&gt; は、自然な上目遣いを引き出すのに最適です。また、画面をわずかに斜めに傾ける &lt;code&gt;dutch angle&lt;/code&gt; を導入すると、日常のバランスが崩れたようなドキドキ感や動的な緊張感が生まれます。さらに、手前や背景をぼかす &lt;code&gt;shallow depth of field&lt;/code&gt; や &lt;code&gt;bokeh&lt;/code&gt; を併用することで、視線を中心となる人物の瞳や口元へ一気に集中させることが可能です。&lt;/p&gt;&#10;&lt;h2 id="実践で使えるプロンプトの組み合わせ例"&gt;実践で使えるプロンプトの組み合わせ例&#10;&lt;/h2&gt;&lt;p&gt;前述の要素をシチュエーションごとに統合したプロンプトの構成例です。モデルの特性に合わせて適宜ウェイトを調整しながら活用してください。&lt;/p&gt;&#10;&lt;h3 id="放課後の教室で覗き込まれるシチュエーション"&gt;放課後の教室で覗き込まれるシチュエーション&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;masterpiece, best quality, 1girl, solo, school uniform, leaning close, hands on desk, looking up at viewer, looking through bangs, soft blush, mischievous smile, classroom background, sunset lighting, depth of field, cinematic angle&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://ai.hack-le.com/images/uploads/2026/08/20260829150220_2_1_QuickGen-1024x701.webp"&gt;&lt;/p&gt;&#10;&lt;h3 id="カフェで身を乗り出して見つめてくる構図"&gt;カフェで身を乗り出して見つめてくる構図&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;masterpiece, best quality, 1girl, solo, casual knit sweater, leaning on elbows, chin rest, head tilt, intense eye contact, parted lips, light blush, cafe interior, shallow depth of field, bokeh, soft lighting&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://ai.hack-le.com/images/uploads/2026/08/20260829150256_1_1_QuickGen-1024x701.webp"&gt;&lt;/p&gt;&#10;&lt;h3 id="小悪魔的な距離の詰め方後ろ手ダッチアングル"&gt;小悪魔的な距離の詰め方（後ろ手×ダッチアングル）&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;masterpiece, best quality, 1girl, solo, arms behind back, leaning forward, cowboy shot, looking at viewer, smug smile, wink, dutch angle, close-up, dynamic pose, rim lighting&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://ai.hack-le.com/images/uploads/2026/08/310ab043fde97e72771f9af5582abf34-1024x701.webp"&gt;&lt;/p&gt;&#10;&lt;h3 id="近づきすぎて動揺している主観アングル"&gt;近づきすぎて動揺している主観アングル&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;masterpiece, best quality, 1girl, solo, pov, leaning close, hands on knees, looking up at viewer, heavily blushing, embarrassed, wide eyes, flustered, extreme close-up, soft rim lighting&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://ai.hack-le.com/images/uploads/2026/08/20260829150555_2_1_QuickGen-1024x701.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;前かがみのポーズは単体で完結させるのではなく、&lt;strong&gt;距離・視線・手の配置・画角の4要素を連動させる&lt;/strong&gt;ことで、完成度が大きく向上します。表現したいキャラクターの性格や関係性に合わせて各パーツを組み替えてみてください。&lt;/p&gt;&#10;</description></item><item><title>画像生成AIで「罠による逆さ吊り」を表現するプロンプト設計とシチュエーション考察</title><link>https://ai.hack-le.com/%E7%94%BB%E5%83%8F%E7%94%9F%E6%88%90ai%E3%81%A7%E3%80%8C%E7%BD%A0%E3%81%AB%E3%82%88%E3%82%8B%E9%80%86%E3%81%95%E5%90%8A%E3%82%8A%E3%80%8D%E3%82%92%E8%A1%A8%E7%8F%BE%E3%81%99%E3%82%8B%E3%83%97%E3%83%AD/</link><pubDate>Sat, 29 Aug 2026 09:55:33 +0900</pubDate><guid>https://ai.hack-le.com/%E7%94%BB%E5%83%8F%E7%94%9F%E6%88%90ai%E3%81%A7%E3%80%8C%E7%BD%A0%E3%81%AB%E3%82%88%E3%82%8B%E9%80%86%E3%81%95%E5%90%8A%E3%82%8A%E3%80%8D%E3%82%92%E8%A1%A8%E7%8F%BE%E3%81%99%E3%82%8B%E3%83%97%E3%83%AD/</guid><description>&lt;p&gt;キャラクターが足元のトラップに引っかかり、一気に空中に逆さ吊りにされる構図は、ファンタジーやアドベンチャー作品における定番のピンチ演出です。しかし、画像生成AIでこのシチュエーションを描こうとすると、空中に吊り上がらずに床の上で前転（でんぐり返し）したような不自然な姿勢になったり、足が地面についたまま転倒したような構図になってしまうケースが多々あります。&lt;/p&gt;&#10;&lt;p&gt;本記事では、逆さ吊りというシチュエーションのバリエーションを整理した上で、なぜ画像生成AIで失敗が起きるのかという構造的な原因と、宙に浮いた迫力ある逆さ吊りを安定して出力するためのプロンプトの改善テクニックをまとめます。&lt;/p&gt;&#10;&lt;h2 id="逆さ吊りシチュエーションの広がりと演出の特性"&gt;逆さ吊りシチュエーションの広がりと演出の特性&#10;&lt;/h2&gt;&lt;p&gt;逆さ吊りや頭部が下になる体勢は、日常から非日常まで多彩な文脈で登場します。演出意図によって求められる身体のテンションや背景設定が大きく変化するため、まずはどのようなシチュエーションが存在するかを整理しておくとプロンプトの解像度が上がります。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;アクティビティ・スポーツ:&lt;/strong&gt; バンジージャンプの跳下後やループコースターの頂点、サーカスにおけるエアリアルシルクや空中ブランコなど、重力に逆らう躍動感やスリルを表現する場面。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;フィットネス・健康法・医療:&lt;/strong&gt; 反転テーブル（インバージョンテーブル）を用いた牽引治療や、ハンモックを用いるエアリアルヨガ、グラビティブーツを使った特殊なトレーニングなど、器具に固定されて静止している状態。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;アウトドア・事故:&lt;/strong&gt; 登山やロッククライミングでの前傾壁からの滑落、洞窟探検（ケイビング）での狭小部での宙吊り、パラグライダーの木への引っかかりなど、危機的状況や救助を要するシチュエーション。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;フィクション・物語の定番:&lt;/strong&gt; 密林や遺跡でワイヤーを踏み抜いて足首を跳ね上げられるスネアトラップ、敵アジトでの尋問シーン、あるいは天井ダクトからワイヤー1本で静かに降下する潜入工作。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;今回の主眼となるダンジョンのトラップは、&lt;strong&gt;突発的なパニック&lt;/strong&gt;と&lt;strong&gt;重力によって完全に浮遊している状態&lt;/strong&gt;を両立させて描く必要があります。&lt;/p&gt;&#10;&lt;h2 id="なぜaiはでんぐり返しにしてしまうのか"&gt;なぜAIは「でんぐり返し」にしてしまうのか&#10;&lt;/h2&gt;&lt;p&gt;逆さ吊りを指定したにもかかわらず、地面に足がついたり床で転がっているように描写されてしまう最大の原因は、&lt;strong&gt;地面との接触を示す単語の混入&lt;/strong&gt;と&lt;strong&gt;空中浮遊状態の明示不足&lt;/strong&gt;にあります。&lt;/p&gt;&#10;&lt;p&gt;プロンプト内に &lt;code&gt;head on ground&lt;/code&gt;（頭が地面にある・地面に近い）のような単語が含まれていると、AIはそれを「頭が床に接地しているポーズ（仰向け、前転、倒れている状態）」と強く解釈してしまいます。AIの学習データにおいて、人間の頭部が地面に近い写真やイラストの大半は「床に横たわっている」か「前転や倒立をしている」場面であるためです。&lt;/p&gt;&#10;&lt;p&gt;また、単に &lt;code&gt;suspended by rope&lt;/code&gt;（ロープで吊るされている）や &lt;code&gt;upside-down&lt;/code&gt;（逆さま）と指示するだけでは、AIがロープの張り具合や高さ関係を曖昧に処理し、足や膝が床についた不完全な姿勢を生成しやすくなります。この問題を回避するには、&lt;strong&gt;頭部が地面から完全に離れて空中に浮いていること&lt;/strong&gt;を明確に定義し直す必要があります。&lt;/p&gt;&#10;&lt;h2 id="空中に浮いた逆さ吊りを実現するプロンプト設計"&gt;空中に浮いた逆さ吊りを実現するプロンプト設計&#10;&lt;/h2&gt;&lt;p&gt;安定して宙吊りのポーズを出力するためには、ポジティブプロンプトで「単一の足首で吊り上げられていること」と「空間に浮いていること」を強調しつつ、ネガティブプロンプトで「接地の要素」を徹底的に排除します。&lt;/p&gt;&#10;&lt;h3 id="推奨ポジティブプロンプト"&gt;推奨ポジティブプロンプト&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-plaintext" data-lang="plaintext"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;masterpiece, best quality, ultra-detailed, extremely detailed, overgrown ancient ruins, dark dungeon, (suspended upside-down by a single ankle:1.3), dangling in mid-air, caught in snare trap, rope tied to one leg, hanging from ceiling, feet high up, head dangling downward, inverted pose, flailing arms, panicked, surprised, wide eyes, open mouth, dynamic low angle, dutch angle, looking up from below, motion blur, dust particles&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;(suspended upside-down by a single ankle:1.3)&lt;/code&gt; で片足固定の逆さ吊り状態に強い重み付けを行います。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;dangling in mid-air&lt;/code&gt;（宙にぶら下がっている）および feet high up（足が高所にある）を追加し、身体が完全に浮遊している空間配置を指示します。&lt;/li&gt;&#10;&lt;li&gt;視点は &lt;code&gt;looking up from below&lt;/code&gt;（下から見上げるローアングル）を指定することで、吊り上げられたキャラクターの高度感を強調できます。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="推奨ネガティブプロンプト"&gt;推奨ネガティブプロンプト&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-plaintext" data-lang="plaintext"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;standing, touching ground, feet on ground, lying on floor, sitting, kneeling, ground contact, rolling&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ネガティブプロンプトには、立ち姿（&lt;code&gt;standing&lt;/code&gt;）や床への接触（&lt;code&gt;touching ground&lt;/code&gt;, &lt;code&gt;ground contact&lt;/code&gt;）、寝そべり（&lt;code&gt;lying on floor&lt;/code&gt;）などを指定します。これにより、AIが「足が床についているポーズ」や「でんぐり返しのように床に転がっているポーズ」を選択する確率を大幅に低減させることが可能です。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://ai.hack-le.com/images/uploads/2026/08/image-4-701x1024.png"&gt;&lt;/p&gt;&#10;</description></item><item><title>英語のニュアンスから広がるダークファンタジーの世界：小太りゴブリンの英語表現と画像生成AIプロンプトへの応用</title><link>https://ai.hack-le.com/%E8%8B%B1%E8%AA%9E%E3%81%AE%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%B3%E3%82%B9%E3%81%8B%E3%82%89%E5%BA%83%E3%81%8C%E3%82%8B%E3%83%80%E3%83%BC%E3%82%AF%E3%83%95%E3%82%A1%E3%83%B3%E3%82%BF%E3%82%B8%E3%83%BC/</link><pubDate>Thu, 27 Aug 2026 11:08:07 +0900</pubDate><guid>https://ai.hack-le.com/%E8%8B%B1%E8%AA%9E%E3%81%AE%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%B3%E3%82%B9%E3%81%8B%E3%82%89%E5%BA%83%E3%81%8C%E3%82%8B%E3%83%80%E3%83%BC%E3%82%AF%E3%83%95%E3%82%A1%E3%83%B3%E3%82%BF%E3%82%B8%E3%83%BC/</guid><description>&lt;h2 id="人間とファンタジー生物で異なる小太りの英語表現"&gt;人間とファンタジー生物で異なる「小太り」の英語表現&#10;&lt;/h2&gt;&lt;p&gt;日本語の「小さくて太っている人」を直訳しようとすると &lt;strong&gt;small fat man&lt;/strong&gt; を思い浮かべがちですが、実際の人間の背の低さを表す際には、全体的な小ささを意味する small よりも &lt;strong&gt;short&lt;/strong&gt; を用いるのが一般的です。さらに、fat という単語は非常に直接的で強いニュアンスを持つため、日常会話では愛嬌のある &lt;strong&gt;chubby&lt;/strong&gt; や、体格がしっかりしていることを示す &lt;strong&gt;stocky&lt;/strong&gt;、丁寧な婉曲表現である &lt;strong&gt;heavy-set&lt;/strong&gt; などが場面に応じて選ばれます。&lt;/p&gt;&#10;&lt;p&gt;一方で、人間ではなくファンタジー世界に登場するクリーチャーを描写する場合は基準が変わります。人間より本質的に小柄な種族であるゴブリンなどに対しては、体格全体の小ささを表す &lt;strong&gt;small, fat goblin&lt;/strong&gt; という表現が自然に通じます。また、キャラクターの造形に合わせて、ずんぐりした体型を指す &lt;strong&gt;squat&lt;/strong&gt; や、寸胴を意味する &lt;strong&gt;tubby&lt;/strong&gt; を組み合わせることで、意図した外見のニュアンスを的確に伝えることができます。&lt;/p&gt;&#10;&lt;h2 id="grossとbloatedが醸し出すダークな質感"&gt;「gross」と「bloated」が醸し出すダークな質感&#10;&lt;/h2&gt;&lt;p&gt;ファンタジー表現において、さらに不気味さやえげつなさを強調したい場合に効果的なのが &lt;strong&gt;gross&lt;/strong&gt; と &lt;strong&gt;bloated&lt;/strong&gt; という形容詞です。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;gross&lt;/strong&gt;: 見た目や匂いなどが生理的な嫌悪感を引き起こす「気持ち悪さ」や「不快感」を表します。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;bloated&lt;/strong&gt;: 単に脂肪がついて太っている状態とは異なり、ガス、体液、過度な暴食などによって内側から「パンパンに膨れ上がった」「水ぶくれした」状態を指します。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;この2つを組み合わせた &lt;strong&gt;gross, bloated goblin&lt;/strong&gt; という描写は、薄く引っ張られた皮膚に血管が浮き出ている様子や、毒素や腐敗によってブヨブヨに膨張した醜悪な姿を想起させ、ダークファンタジー特有のおぞましいビジュアルを的確に言語化できます。&lt;/p&gt;&#10;&lt;h2 id="えげつない質感を再現するstable-diffusion用プロンプト"&gt;えげつない質感を再現するStable Diffusion用プロンプト&#10;&lt;/h2&gt;&lt;p&gt;「gross, bloated goblin」のイメージを画像生成AIで具現化する際は、単語を単に並べるだけでなく、質感、環境光、世界観を補強するキーワードを論理的に組み立てることが重要です。可愛いマスコットのような造形を排除し、生理的な不快感や重厚なホラー感を際立たせるためのプロンプト構成例を以下にまとめます。&lt;/p&gt;&#10;&lt;h3 id="リアル実写ホラー風の構成"&gt;リアル・実写ホラー風の構成&#10;&lt;/h3&gt;&lt;p&gt;映画の特殊造形のような生々しい質感を追求した構成です。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Prompt:&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;a hideous small goblin with an extremely bloated belly, stretched pale skin covered in slimy veins and weeping sores, repulsive and gross, standing in a dark decaying swamp, toxic green mist, photorealistic, cinematic lighting, dramatic shadows, highly detailed, 8k, masterpiece, horror, dark fantasy art, unsettling, grim dark&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Negative Prompt:&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cartoon, illustration, painting, cute, baby, smooth skin, beautiful, bright, friendly, low quality, worst quality&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="重厚なダーク絵画風の構成"&gt;重厚なダーク絵画風の構成&#10;&lt;/h3&gt;&lt;p&gt;古典的なダークファンタジーの油彩画やコンセプトアートのような、陰影の深いタッチを狙う構成です。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Prompt:&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;concept art of a grotesque stout goblin, morbidly obese and bloated, disgusting sagging skin with pustules and scars, ugly creature, deep in a dungeon, oil painting style, brush strokes, chiaroscuro, dark atmospheric, Eldritch horror, unsettling, medieval fantasy, detailed background, master work&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Negative Prompt:&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;photorealistic, anime, cartoon, happy, colorful, bright, flat lighting, clean, smooth&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="えげつなさを強化するためのキーワード群"&gt;えげつなさを強化するためのキーワード群&#10;&lt;/h2&gt;&lt;p&gt;プロンプトを細かく調整する際は、強調したい要素に応じて以下の英単語を組み込むことで、意図通りのダークな質感を制御しやすくなります。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;体型の肥満・膨張感を強調する語&lt;/strong&gt;: morbidly obese（病的な肥満）、distended（内側から張り裂けそうな）、pot-bellied（太鼓腹の）&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;不快感・皮膚の生々しさを強調する語&lt;/strong&gt;: repulsive（胸が悪くなるような）、slimy（粘液に覆われた）、veiny（血管が浮き出た）、decaying（腐敗しかけた）&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;世界観・陰鬱な空気感を強調する語&lt;/strong&gt;: grimdark（救いのない暗黒世界）、Eldritch horror（冒涜的で不可解な恐怖）、decaying swamp（腐敗した沼地）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://ai.hack-le.com/images/uploads/2026/08/image-2-1024x701.png"&gt;&lt;/p&gt;&#10;</description></item><item><title>「マウントする」の英語表現と画像生成AIで上下関係を正しく描くプロンプト技術</title><link>https://ai.hack-le.com/%E3%80%8C%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%88%E3%81%99%E3%82%8B%E3%80%8D%E3%81%AE%E8%8B%B1%E8%AA%9E%E8%A1%A8%E7%8F%BE%E3%81%A8%E7%94%BB%E5%83%8F%E7%94%9F%E6%88%90ai%E3%81%A7%E4%B8%8A%E4%B8%8B%E9%96%A2/</link><pubDate>Thu, 27 Aug 2026 11:03:04 +0900</pubDate><guid>https://ai.hack-le.com/%E3%80%8C%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%88%E3%81%99%E3%82%8B%E3%80%8D%E3%81%AE%E8%8B%B1%E8%AA%9E%E8%A1%A8%E7%8F%BE%E3%81%A8%E7%94%BB%E5%83%8F%E7%94%9F%E6%88%90ai%E3%81%A7%E4%B8%8A%E4%B8%8B%E9%96%A2/</guid><description>&lt;p&gt;日常生活や格闘技で頻繁に使われる「マウント」という言葉は、英語表現や画像生成AIのプロンプトにおいて、主客の関係性や物理的な上下関係を正確に伝えるための工夫が求められます。本稿では、語源となる英語表現の整理から、AIで意図した通りのマウント構図を出力するためのプロンプト設計までを備忘録としてまとめます。&lt;/p&gt;&#10;&lt;h2 id="マウントをとるの英語表現と主客関係"&gt;「マウントをとる」の英語表現と主客関係&#10;&lt;/h2&gt;&lt;p&gt;格闘技における「AがBにマウントした」という状況では、Aが上（攻め側・優位）であり、Bが下（抑え込まれている側・劣勢）となります。&lt;/p&gt;&#10;&lt;p&gt;物理的に馬乗りになる動作を表す標準的な英語は &lt;strong&gt;mount&lt;/strong&gt; です。「馬にまたがる」を意味する &lt;strong&gt;mount a horse&lt;/strong&gt; や、両脚で挟み込む動作を強調する &lt;strong&gt;straddle a horse&lt;/strong&gt; と同じ語源を持ちます。格闘技の技法として表現する場合は、動詞として &lt;code&gt;A mounted B.&lt;/code&gt; と表現するほか、名詞を用いて &lt;code&gt;A got the mount on B.&lt;/code&gt; と記述します。&lt;/p&gt;&#10;&lt;p&gt;一方、日常会話や比喩として用いられる精神的なマウント（相手より優位に立とうとする行為）を表現する場合は、異なる語彙を用います。自慢話などで相手を上回ろうとする場合は &lt;strong&gt;one-up&lt;/strong&gt;、上から目線で見下す場合は &lt;strong&gt;talk down to&lt;/strong&gt; や &lt;strong&gt;patronize&lt;/strong&gt;、支配的な態度を示す場合は &lt;strong&gt;assert dominance over&lt;/strong&gt; などが適切です。&lt;/p&gt;&#10;&lt;h2 id="画像生成aiにおける上下関係描写の課題"&gt;画像生成AIにおける上下関係描写の課題&#10;&lt;/h2&gt;&lt;p&gt;画像生成AI（Stable DiffusionやMidjourneyなど）において、2人の人物の組み技やマウント状態を描く際、上下関係が意図と逆転してしまう現象が頻繁に発生します。これは、AIが「A mounted B」のような主語と目的語の統語的な関係性よりも、プロンプト内に含まれる個別の名詞や概念を優先して解釈する傾向があるためです。&lt;/p&gt;&#10;&lt;p&gt;この問題を解決するためには、単に動作を指定するだけでなく、物理的な位置関係や状態を補強する記述が必要になります。&lt;/p&gt;&#10;&lt;p&gt;文章ベースのプロンプト（センテンス系）では、動作と位置関係を組み合わせて詳細に描写します。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;A close-up photograph of a martial arts match. A powerful male fighter is in the full mount position, sitting straddled on top of the torso of an opponent who is lying flat on the mat. The fighter is pressing down with his weight, and the opponent is pinned underneath him, looking up.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このように、&lt;code&gt;sitting straddled on top of&lt;/code&gt;（の上に跨がって座っている）や &lt;code&gt;pinned underneath&lt;/code&gt;（下に押さえつけられている）といった状態を明記することで、AIに対する指示の曖昧さを排除します。&lt;/p&gt;&#10;&lt;h2 id="pov主観視点を活用した単語ベースのプロンプト設計"&gt;POV（主観視点）を活用した単語ベースのプロンプト設計&#10;&lt;/h2&gt;&lt;p&gt;タグや単語ベースで指示を与える環境（Stable Diffusion v1.5系など）では、2人の属性を個別に指定して関係性を結びつける処理が難しくなります。そこで極めて有効な手法となるのが、マウントをとられている側（下側）の主観視点（POV）としてプロンプトを構築するアプローチです。&lt;/p&gt;&#10;&lt;p&gt;視点そのものを「下から見上げている状態」に固定することで、AIはカメラの前にいる対象を必然的に「上から見下ろしている人物」として配置します。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;(masterpiece, top quality:1.2),&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;POV, from below, looking up,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1girl,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;straddling, full mount position,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sitting straddle, holding down,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;on top, above,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;smirk, smirk_on_face, gloating_expression, arrogant, superior,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sweat, panting, dynamic_angle, grappling,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;(eye contact, staring down:1.4)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この設計における重要な要素は以下の3点に集約されます。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;視点とアングルの固定&lt;/strong&gt;: &lt;code&gt;POV&lt;/code&gt;、&lt;code&gt;from below&lt;/code&gt;、&lt;code&gt;looking up&lt;/code&gt; を指定することで、生成される画像の視点主（画面の手前＝下）が自動的に決定されます。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;位置関係の補強&lt;/strong&gt;: &lt;code&gt;straddling&lt;/code&gt; や &lt;code&gt;full mount position&lt;/code&gt;、&lt;code&gt;above&lt;/code&gt; を組み合わせ、相手が自身の上に跨がっている構図を強化します。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;見下ろす表情の具体化&lt;/strong&gt;: 単に笑顔を指定するのではなく、&lt;code&gt;smirk&lt;/code&gt;（薄笑い）、&lt;code&gt;gloating_expression&lt;/code&gt;（勝ち誇った表情）、&lt;code&gt;staring down&lt;/code&gt;（見下ろす視線）などを指定し、優位性を視覚的に際立たせます。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;関係性の記述が破綻しやすい単語ベースのプロンプトにおいては、構図（カメラワーク）側から上下関係を縛るアプローチが最も再現性の高い出力をもたらします。&lt;/p&gt;&#10;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://ai.hack-le.com/images/uploads/2026/08/image-1-1024x701.png"&gt;&lt;/p&gt;&#10;</description></item><item><title>Stable Diffusionで「整っていないリアルな顔」を生成するプロンプト設計の備忘録</title><link>https://ai.hack-le.com/stable-diffusion%E3%81%A7%E3%80%8C%E6%95%B4%E3%81%A3%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E3%83%AA%E3%82%A2%E3%83%AB%E3%81%AA%E9%A1%94%E3%80%8D%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E3%83%97/</link><pubDate>Thu, 27 Aug 2026 10:59:03 +0900</pubDate><guid>https://ai.hack-le.com/stable-diffusion%E3%81%A7%E3%80%8C%E6%95%B4%E3%81%A3%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E3%83%AA%E3%82%A2%E3%83%AB%E3%81%AA%E9%A1%94%E3%80%8D%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E3%83%97/</guid><description>&lt;p&gt;画像生成AI（Stable Diffusion）で意図的に整っていない顔立ちや不細工な子どもを生成しようとしても、出力結果がどうしても可愛らしく整ってしまうことがあります。本記事では、AIが持つ強い美化バイアスを崩し、意図した不揃いさを表現するためのプロンプト設計アプローチをまとめます。&lt;/p&gt;&#10;&lt;h2 id="なぜuglyだけでは顔が崩れないのか"&gt;なぜ「ugly」だけでは顔が崩れないのか&#10;&lt;/h2&gt;&lt;p&gt;多くの学習モデル（特に実写系やアニメ系の派生モデル）には、整った顔立ちや美しいライティングを好む&lt;strong&gt;強力な美化バイアス&lt;/strong&gt;が存在します。そのため、単に &lt;code&gt;ugly&lt;/code&gt; や &lt;code&gt;bad looking&lt;/code&gt; といった抽象的な形容詞を入力しても、AIが自動的に補正をかけて「愛嬌のある顔」や「雰囲気のあるブサ可愛い顔」へと寄せてしまいます。&lt;/p&gt;&#10;&lt;p&gt;このバイアスを打破するためには、抽象表現を排して&lt;strong&gt;物理的・構造的に顔のパーツを崩す具体的な指定&lt;/strong&gt;を行う必要があります。また、同時にモデルが無意識に適用しようとする「整った要素」をネガティブプロンプトで徹底的に削ぎ落とす工程が欠かせません。&lt;/p&gt;&#10;&lt;h2 id="具体的なパーツの崩し方と構図の崩し"&gt;具体的なパーツの崩し方と構図の崩し&#10;&lt;/h2&gt;&lt;p&gt;顔の整った印象をなくすには、対称性の破壊、特徴的なパーツの付加、そして写りの悪さを意図的に作り出すことが有効です。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;骨格・対称性の破壊:&lt;/strong&gt; &lt;code&gt;asymmetrical face&lt;/code&gt;（非対称な顔）、&lt;code&gt;crooked nose&lt;/code&gt;（曲がった鼻）、&lt;code&gt;misaligned eyes&lt;/code&gt;（斜視・視線のズレ）&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;特徴的なパーツ・肌質:&lt;/strong&gt; &lt;code&gt;uneven teeth&lt;/code&gt;（歯並びの乱れ）、&lt;code&gt;receding chin&lt;/code&gt;（引っ込んだ顎）、&lt;code&gt;double chin&lt;/code&gt;（二重顎）、&lt;code&gt;blotchy skin&lt;/code&gt;（色ムラのある肌）&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;瞬間的な表情の崩れ:&lt;/strong&gt; &lt;code&gt;awkward expression&lt;/code&gt;（ぎこちない表情）、&lt;code&gt;grimacing&lt;/code&gt;（顔をしかめる）、&lt;code&gt;mid-blink&lt;/code&gt;（半目）&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;撮影環境の劣化:&lt;/strong&gt; &lt;code&gt;harsh flash photography&lt;/code&gt;（強烈な直焚きフラッシュ）、&lt;code&gt;amateur snapshot&lt;/code&gt;（素人のスナップ写真）、&lt;code&gt;unflattering lighting&lt;/code&gt;（粗の目立つ照明）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;加えて、普段常用しがちな &lt;code&gt;masterpiece&lt;/code&gt; や &lt;code&gt;best quality&lt;/code&gt; といった品質強調プロンプトをあえて外すことも重要です。これらのワードは画質を上げるだけでなく、被写体の造形を美形化する副作用を持つためです。&lt;/p&gt;&#10;&lt;h2 id="プロンプトとネガティブプロンプトの実装例"&gt;プロンプトとネガティブプロンプトの実装例&#10;&lt;/h2&gt;&lt;p&gt;具体的な崩し要素には重み付け構文 &lt;code&gt;(word:weight)&lt;/code&gt; を適用し、モデルの美化傾向よりも強い影響力を与えます。ネガティブプロンプト側には、可愛さや対称性、滑らかな肌を定義する単語を網羅してブロックします。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;ポジティブプロンプト:&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;a candid photo of a kid, (asymmetrical face:1.3), crooked nose, uneven teeth, awkward expression, blotchy skin, harsh flash photography, amateur snapshot&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;ネガティブプロンプト:&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cute, adorable, beautiful face, symmetrical features, smooth skin, doll, studio lighting, masterpiece, best quality&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://ai.hack-le.com/images/uploads/2026/08/image.png"&gt;&lt;/p&gt;&#10;</description></item><item><title>【Stable Diffusion】弓やナックル系武器を意図通りに出すプロンプト指定法</title><link>https://ai.hack-le.com/%E3%80%90stable-diffusion%E3%80%91%E5%BC%93%E3%82%84%E3%83%8A%E3%83%83%E3%82%AF%E3%83%AB%E7%B3%BB%E6%AD%A6%E5%99%A8%E3%82%92%E6%84%8F%E5%9B%B3%E9%80%9A%E3%82%8A%E3%81%AB%E5%87%BA%E3%81%99%E3%83%97/</link><pubDate>Thu, 20 Aug 2026 23:27:07 +0900</pubDate><guid>https://ai.hack-le.com/%E3%80%90stable-diffusion%E3%80%91%E5%BC%93%E3%82%84%E3%83%8A%E3%83%83%E3%82%AF%E3%83%AB%E7%B3%BB%E6%AD%A6%E5%99%A8%E3%82%92%E6%84%8F%E5%9B%B3%E9%80%9A%E3%82%8A%E3%81%AB%E5%87%BA%E3%81%99%E3%83%97/</guid><description>&lt;p&gt;Stable Diffusionをはじめとする画像生成AIにおいて、特定の武器や装備を思い通りに出力させるには、単語の多義性や学習データの傾向を考慮したプロンプトの構築が重要となります。単一の名詞を指定するだけでは意図しないアイテムへ誤認されやすいため、文脈を補強するポーズや関連アイテム、さらには不要な概念を除外するネガティブプロンプトを組み合わせることが求められます。&lt;/p&gt;&#10;&lt;h2 id="武器としての弓を的確に描写するアプローチ"&gt;武器としての弓を的確に描写するアプローチ&#10;&lt;/h2&gt;&lt;p&gt;英語の&lt;code&gt;bow&lt;/code&gt;という単語は武器の弓だけでなく、衣服や髪飾りのリボンも指します。特にアニメ系モデルのベースとなる学習データではリボンの頻度が非常に高いため、単に&lt;code&gt;bow&lt;/code&gt;とだけ入力すると高確率でリボンが出力されてしまいます。この誤認を回避するためには、まずタグ自体を&lt;strong&gt;Danbooru準拠の曖昧さ回避タグ&lt;/strong&gt;である&lt;code&gt;bow (weapon)&lt;/code&gt;に置き換えるか、あるいは&lt;code&gt;longbow&lt;/code&gt;や&lt;code&gt;shortbow&lt;/code&gt;、&lt;code&gt;recurve bow&lt;/code&gt;のように具体的な弓の種類を指定するのが確実です。&lt;/p&gt;&#10;&lt;p&gt;さらに、キャラクターの動作や付随する装備を併記して文脈を強化することも有効です。&lt;code&gt;holding bow&lt;/code&gt;や&lt;code&gt;aiming bow&lt;/code&gt;といった構えの指定に加え、&lt;code&gt;arrow&lt;/code&gt;（矢）や&lt;code&gt;quiver on back&lt;/code&gt;（背中の矢筒）などの関連アイテムをプロンプトへ組み込むことで、AIに対して弓矢を扱う状況であることを強く認識させられます。あわせて、ネガティブプロンプト側に&lt;code&gt;ribbon&lt;/code&gt;や&lt;code&gt;hair bow&lt;/code&gt;、&lt;code&gt;bowtie&lt;/code&gt;などの装飾タグを指定しておくことで、不要な装飾の発生を効果的に遮断できます。&lt;/p&gt;&#10;&lt;h2 id="ナックル系武器と格闘ポーズの指定方法"&gt;ナックル系武器と格闘ポーズの指定方法&#10;&lt;/h2&gt;&lt;p&gt;メリケンサックやナックルダスターといった近接格闘用の武器も、単体では手の一部や単なるアクセサリーとして埋もれてしまいやすいジャンルです。的確に装備させるためには、&lt;code&gt;brass knuckles&lt;/code&gt;や&lt;code&gt;knuckle dusters&lt;/code&gt;、鋭利な装飾を施したい場合は&lt;code&gt;spiked knuckles&lt;/code&gt;といった固有の装備タグを用います。より重厚な打撃装備を目指すのであれば、手甲全体を覆う&lt;code&gt;gauntlets&lt;/code&gt;や&lt;code&gt;arm guards&lt;/code&gt;を併用するのも適しています。&lt;/p&gt;&#10;&lt;p&gt;ナックル系武器は手元の細部であるため、手のポーズやキャラクターの姿勢と密接に連動させる必要があります。&lt;code&gt;fighting stance&lt;/code&gt;や&lt;code&gt;ready to fight&lt;/code&gt;といった戦闘態勢のタグに加えて、&lt;code&gt;clenched fist&lt;/code&gt;（握り拳）や&lt;code&gt;raised fist&lt;/code&gt;、攻撃モーションである&lt;code&gt;punching&lt;/code&gt;などを指定すると、拳に武器を装着した状態が破綻なく描かれやすくなります。また、職業タグとして&lt;code&gt;martial artist&lt;/code&gt;や&lt;code&gt;brawler&lt;/code&gt;、手袋系の&lt;code&gt;fingerless gloves&lt;/code&gt;などを組み合わせると、格闘家としての全体的なデザインの一貫性を高めることが可能です。&lt;/p&gt;&#10;&lt;h2 id="誤認を防ぎ意図通りの装備を描くプロンプトのまとめ"&gt;誤認を防ぎ意図通りの装備を描くプロンプトのまとめ&#10;&lt;/h2&gt;&lt;p&gt;武器を描写する際は、装備名そのものを具体化するだけでなく、構えのポーズ、関連する装飾や消耗品、そしてネガティブプロンプトによるノイズ除去の三要素を揃えることが確実性を高めます。以下はそれぞれの武器を意図通りに出力するための記述例です。&lt;/p&gt;&#10;&lt;p&gt;弓矢を構えるシーンの記述例：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;(bow (weapon):1.2), holding bow, drawing bow, arrow, quiver on back, aiming, archer&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Negative: ribbon, hair bow, bowtie, hair ornament&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ナックル系武器を装備して構えるシーンの記述例：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;(brass knuckles:1.2), clenched fist, fighting stance, fingerless gloves, brawler, dynamic angle&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Negative: open hands, holding weapon, sword, gun&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>武器の種類に応じたプロンプトタグの選定</title><link>https://ai.hack-le.com/%E6%AD%A6%E5%99%A8%E3%81%AE%E7%A8%AE%E9%A1%9E%E3%81%AB%E5%BF%9C%E3%81%98%E3%81%9F%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%82%BF%E3%82%B0%E3%81%AE%E9%81%B8%E5%AE%9A/</link><pubDate>Thu, 20 Aug 2026 23:24:22 +0900</pubDate><guid>https://ai.hack-le.com/%E6%AD%A6%E5%99%A8%E3%81%AE%E7%A8%AE%E9%A1%9E%E3%81%AB%E5%BF%9C%E3%81%98%E3%81%9F%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%82%BF%E3%82%B0%E3%81%AE%E9%81%B8%E5%AE%9A/</guid><description>&lt;p&gt;Stable Diffusionでナックル系の近接武器を装備したキャラクターを描画する際は、表現したい武器の形状や世界観に合わせて的確な英語タグを選択することが重要になります。最も標準的でモデルの認識率が高い指定は&lt;code&gt;brass knuckles&lt;/code&gt;であり、一般的なメリケンサックやナックルダスターを描写する際のベースとして機能します。素材や色合いを固定したい場合には&lt;code&gt;golden brass knuckles&lt;/code&gt;や&lt;code&gt;silver brass knuckles&lt;/code&gt;のように材質を表す形容詞を付与します。さらに、攻撃的なデザインやトゲを追加したいときは&lt;code&gt;spiked brass knuckles&lt;/code&gt;や古代の格闘具を意味する&lt;code&gt;cestus&lt;/code&gt;を用いることで質感や形状に変化を付けられます。また、SFやファンタジーの世界観で重厚な大型装備を描く際には、&lt;code&gt;mechanical power gauntlets&lt;/code&gt;や&lt;code&gt;armored gauntlets&lt;/code&gt;といった籠手・ガントレット系のタグを指定することで、機械的な迫力や装甲の重厚感を表現できます。&lt;/p&gt;&#10;&lt;h2 id="ポーズや構図の制御と手元の破綻防止"&gt;ポーズや構図の制御と手元の破綻防止&#10;&lt;/h2&gt;&lt;p&gt;ナックル系武器はキャラクターの手元に装着されるため、構図が引き気味になると武器自体が小さくなり、指や拳の形状が潰れてしまう傾向があります。これを回避するためには、キャラクターのポーズとカメラアングルを同時に指定して手元を強調する構成が求められます。構えのポーズとして&lt;code&gt;fighting stance&lt;/code&gt;や&lt;code&gt;ready to fight&lt;/code&gt;、拳を握る&lt;code&gt;clenched fists&lt;/code&gt;などを指定し、構図タグには&lt;code&gt;upper body&lt;/code&gt;や&lt;code&gt;focus on hands&lt;/code&gt;を取り入れることで、モデルが手元周辺のディテールを優先して描き込むよう誘導できます。また、画像生成AIにおいて手や指の描写は乱れやすいため、ネガティブプロンプト側に手の破綻を抑制するタグを配置しておくことも安定した出力を得るために&lt;strong&gt;不可欠な要素&lt;/strong&gt;となります。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bad hands, missing fingers, extra fingers, mutated hands, poorly drawn hands, fused fingers, malformed limbs, bad anatomy&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="実践的なプロンプトの組み立てと調整"&gt;実践的なプロンプトの組み立てと調整&#10;&lt;/h2&gt;&lt;p&gt;プロンプトを構築する際は、全体のクオリティ指定やキャラクター定義に続いて、構えやポーズ、そして武器タグの順に配置して論理的に繋げます。ストリート風の近接格闘シーンであれば、構えのポーズと武器の強調指定を主軸にしつつ、ダークな路地裏などの背景とライティングを組み合わせることで臨場感のある仕上がりになります。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;(masterpiece, best quality:1.2), 1boy, solo, fighting stance, clenched fists, wearing (brass knuckles:1.3), leather jacket, detailed hands, dynamic angle, upper body, intense gaze, dark alley background&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://ai.hack-le.com/images/uploads/2026/08/20260830122142_1_1_QuickGen-1024x701.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;重装甲のガントレットであれば、金属の質感や発光エフェクトのタグを併記することでSF感を強調できます。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;(masterpiece, best quality:1.2), 1girl, solo, combat pose, ready to fight, raised fists, wearing glowing (mechanical power gauntlets:1.3), spiked knuckles, detailed metal texture, sci-fi armor, sparks, dynamic lighting, cinematic&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://ai.hack-le.com/images/uploads/2026/08/20260830123839_1_1_QuickGen-1024x701.webp"&gt;&lt;/p&gt;&#10;&lt;p&gt;生成された画像で武器の形状や指の描写が十分に整わない場合は、最初から全体を再生成するよりも、生成後の画像に対して&lt;strong&gt;Inpaint&lt;/strong&gt;を活用し、手元周辺のみを部分的に描き直して修正していくアプローチが&lt;strong&gt;高い精度を得るための確実な方法&lt;/strong&gt;です。&lt;/p&gt;&#10;</description></item><item><title>Stable Diffusion WebUI ForgeにおけるClassicとNeoの関係性</title><link>https://ai.hack-le.com/stable-diffusion-webui-forge%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8Bclassic%E3%81%A8neo%E3%81%AE%E9%96%A2%E4%BF%82%E6%80%A7/</link><pubDate>Thu, 20 Aug 2026 23:22:08 +0900</pubDate><guid>https://ai.hack-le.com/stable-diffusion-webui-forge%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8Bclassic%E3%81%A8neo%E3%81%AE%E9%96%A2%E4%BF%82%E6%80%A7/</guid><description>&lt;p&gt;画像生成AIの環境として広く使われているStable Diffusion WebUI Forgeですが、検索時にClassicばかりが表示されてNeoが見当たらないという混乱がよく見られます。この2つの関係性は、旧来の設計を維持した&lt;strong&gt;旧バージョン（Classic）&lt;/strong&gt; と、バックエンド刷新後の&lt;strong&gt;現行メイン版（Neo）&lt;/strong&gt; という位置づけに基づいています。&lt;/p&gt;&#10;&lt;p&gt;開発者のlllyasviel氏がComfyUIのアーキテクチャを取り込み、FLUXなどの最新モデルへの最適化を進める大規模なリニューアルを行った際、開発段階の通称として「Forge Neo」や「New Forge」という呼称が使われていました。正式統合の際、この新設計版は単なる最新のメイン環境（mainブランチ）として配信されるようになり、一方で従来のAUTOMATIC1111準拠の旧環境が区別のためにForge Classicと改名されました。そのため、現在「Forge」として配布されている最新版そのものが、当時のNeoに該当します。&lt;/p&gt;&#10;&lt;h2 id="animaモデルの利用可否とアーキテクチャの対応"&gt;Animaモデルの利用可否とアーキテクチャの対応&#10;&lt;/h2&gt;&lt;p&gt;Animaなどの最新モデルをWebUI系の環境で利用する場合、旧版であるForge Classicではなく、&lt;strong&gt;現行のForge（Neo環境）が必須&lt;/strong&gt;となります。&lt;/p&gt;&#10;&lt;p&gt;Animaは従来のSD1.5やSDXLとは異なるテキストエンコーダーやアーキテクチャを採用しており、内部構造が大幅に異なります。開発が凍結されているForge Classicではこの新しい構造を読み込むことができませんが、バックエンドが刷新された現行のForgeでは対応が進められており、使い慣れたWebUIの操作感のままAnimaを動かすことができます。&lt;/p&gt;&#10;&lt;h2 id="apiの互換性と移行時の注意点"&gt;APIの互換性と移行時の注意点&#10;&lt;/h2&gt;&lt;p&gt;バックエンドのエンジンは大規模に刷新されたものの、&lt;strong&gt;API設計自体はAUTOMATIC1111やClassicの体系を基本的に踏襲&lt;/strong&gt;しています。&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;/sdapi/v1/txt2img&lt;/code&gt; などの主要なエンドポイントや、プロンプト・解像度・ステップ数といった基本的なパラメータ構造は共通しているため、既存の外部連携スクリプトやツールは起動引数に &lt;code&gt;--api&lt;/code&gt; を付与するだけで多くがそのまま動作します。ただし、選択可能なサンプラーやスケジューラーの内部キーが増加している点や、統合されたControlNetや新モデル固有のパラメータ指定など、高度な拡張連携部分においては一部調整が必要になるケースがあります。&lt;/p&gt;&#10;&lt;h2 id="classic環境を残したまま共存導入する方法"&gt;Classic環境を残したまま共存導入する方法&#10;&lt;/h2&gt;&lt;p&gt;既存のForge Classic環境を壊すことなく、安全に新しいForge（Neo）を導入して&lt;strong&gt;両環境を併用することは完全に可能&lt;/strong&gt;です。&lt;/p&gt;&#10;&lt;p&gt;導入時はClassicとは別のフォルダを用意し、公式のワンクリックパッケージを展開するか別ディレクトリにリポジトリをクローンして構築します。Pythonの仮想環境や設定ファイルがディレクトリごとに独立するため、既存の動作環境に影響を与えません。また、2つの環境を同時に起動したい場合は、起動スクリプトの引数で &lt;code&gt;--port 7861&lt;/code&gt; などを指定してポートの競合を防ぐ必要があります。さらに、大容量のモデルファイルについては、起動引数の &lt;code&gt;--ckpt-dir&lt;/code&gt; などでClassic側のフォルダを指定して共有することで、ストレージ容量の無駄を防ぎながらスムーズに移行できます。&lt;/p&gt;&#10;</description></item><item><title>stable-diffusion-webui-reForge(または1111)のAPIを使った画像生成スクリプト</title><link>https://ai.hack-le.com/stable-diffusion-webui-reforge-txt2img/</link><pubDate>Sat, 04 Jan 2025 15:11:21 +0900</pubDate><guid>https://ai.hack-le.com/stable-diffusion-webui-reforge-txt2img/</guid><description>&lt;p&gt;以下のスクリプトは、stable-diffusion-webui-reForegeまたは1111のAPIを使用して、画像を生成しローカルに保存するものです。&lt;/p&gt;&#10;&lt;h2 id="全体のコード"&gt;全体のコード&#10;&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;requests&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;json&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;base64&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;pydantic&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BaseModel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Field&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;PIL&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Image&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PngImagePlugin&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timezone&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timedelta&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 日本標準時&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;JST&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;timezone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timedelta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hours&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# APIエンドポイント&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;SD_SERVER_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;http://127.0.0.1:7860&amp;#34;&lt;/span&gt; &lt;span class="c1"&gt;# LAN内のサーバーURLに変更してください&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 入力データを管理するクラス&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ImageGenerationParams&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BaseModel&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;1girl&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;生成したい画像のプロンプト&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;negative_prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;worst quality&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;worst quality&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;否定プロンプト&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;生成ステップ数&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;cfg_scale&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;7.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;7.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;CFGスケールの値&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;生成画像の幅&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;生成画像の高さ&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sampler_index&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Euler a&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Euler a&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;サンプラーの種類&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;batch_count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;バッチ生成の数&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;batch_size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;1バッチあたりの画像数&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;enable_hr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;高解像度リサイズモードを有効にするかどうか&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;denoising_strength&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="mf"&gt;0.4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;高解像度リサイズ時のノイズ低減強度&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;hr_scale&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;1.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;高解像度リサイズのスケール&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;hr_steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;高解像度リサイズ時の追加ステップ数&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;hr_upscaler&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;R-ESRGAN 4x+ Anime6B&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;R-ESRGAN 4x+ Anime6B&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;高解像度リサイズのアップスケーラー&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;text_to_image&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ImageGenerationParams&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;output_dir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;unique_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; Stable Diffusion API (txt2img) を使用して画像を生成し、PNGとして保存する。&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; Args:&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; params: ImageGenerationParamsオブジェクト（画像生成パラメータを含む）&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; output_dir: 出力先ディレクトリ&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; unique_id: ファイル名に使用する一意の識別子&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# APIへのリクエストペイロード&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;prompt&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;negative_prompt&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;negative_prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;steps&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;cfg_scale&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cfg_scale&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;width&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;height&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;sampler_index&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sampler_index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;batch_count&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;batch_count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;batch_size&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;batch_size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;enable_hr&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;enable_hr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;denoising_strength&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;denoising_strength&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;hr_scale&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hr_scale&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;hr_upscaler&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hr_upscaler&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;hr_second_pass_steps&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hr_steps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Content-type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;application/json&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;SD_SERVER_URL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/sdapi/v1/txt2img&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# APIリクエスト送信&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# レスポンス処理&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;meta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;info&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;])[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;infotexts&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 出力ディレクトリの作成&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;makedirs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output_dir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;exist_ok&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 画像の保存&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;image_data&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;enumerate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;images&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;image&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Image&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;io&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BytesIO&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base64&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;b64decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image_data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;,&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;pnginfo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PngImagePlugin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PngInfo&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;pnginfo&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;parameters&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;now&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;JST&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;%Y%m&lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s2"&gt;%H%M%S&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;file_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output_dir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;_&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;unique_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;_&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.png&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Saving image to &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;file_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pnginfo&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;pnginfo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#10;&lt;h2 id="使用例"&gt;使用例&#10;&lt;/h2&gt;&lt;p&gt;以下は、このスクリプトを使った画像生成の例です。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 生成パラメータの設定&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ImageGenerationParams&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;a futuristic cityscape&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;negative_prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;low quality, blurry&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;steps&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;cfg_scale&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;7.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sampler_index&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Euler a&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;batch_count&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;batch_size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;enable_hr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;denoising_strength&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;hr_scale&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;hr_steps&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;hr_upscaler&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;R-ESRGAN 4x+ Anime6B&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 出力ディレクトリと一意の識別子&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;output_dir&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;./generated_images&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;unique_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;cityscape&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 画像生成&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;text_to_image&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;output_dir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;unique_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;p&gt;このスクリプトは、Stable Diffusion APIを利用して画像を生成し、保存するためのシンプルで実用的なスニペットです。&lt;code&gt;ImageGenerationParams&lt;/code&gt;クラスでパラメータを管理し、柔軟性を持たせています。&lt;/p&gt;&#10;&lt;p&gt;カスタマイズ可能な部分が明確で、さまざまな利用シーンに対応できるよう設計されています。ぜひ活用してみてください！&lt;/p&gt;&#10;</description></item></channel></rss>