私的AI研究会 > ComfyUI15b
「ComfyUI」を使ってローカル環境でのAI画像生成を検証する
| JSONプロンプトを作成する手段として LLM が有効であることが分かったが、LLM をローカルで利用する方法を検証する |
| 以前のプロジェクトで構築した『ローカル PC で LLM を利用する』の環境で「Ideogram 4.0」に入力できる JSON プロンプトを作成する方法 参考URL → 生成AIグラビアをグラビアカメラマンが作るとどうなる?第68回:Ideogram 4.0用JSON Promptビルダーを作ってみた |
| このプロジェクトは「anaconda_win/workspace_3/」フォルダの下でで実行する |
📂anaconda_win └─📂workspace_3 └─📂PromptCanvas ← このプロジェクトの対象フォルダ・解凍してできるフォルダを同じ場所へ上書きコピーする
| nvidia-smi |
(base) PS > nvidia-smi Wed Jun 24 03:46:20 2026 +-----------------------------------------------------------------------------------------+ | NVIDIA-SMI 610.47 KMD Version: 610.47 CUDA UMD Version: 13.3 | +-----------------------------------------+------------------------+----------------------+ | GPU Name Driver-Model | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+========================+======================| | 0 NVIDIA GeForce RTX 4060 ... WDDM | 00000000:01:00.0 Off | N/A | | N/A 37C P3 590W / 45W | 0MiB / 8188MiB | 0% Default | | | | N/A | +-----------------------------------------+------------------------+----------------------+ +-----------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=========================================================================================| | No running processes found | +-----------------------------------------------------------------------------------------+
| nvcc -V |
(base) PS D:\anaconda_win> nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2025 NVIDIA Corporation Built on Wed_Jan_15_19:38:46_Pacific_Standard_Time_2025 Cuda compilation tools, release 12.8, V12.8.61 Build cuda_12.8.r12.8/compiler.35404655_0
| conda create -n PromptCanvas python=3.11 |
(base) PS D:\anaconda_win> conda create -n PromptCanvas python=3.11 Channels: done # # To activate this environment, use # # $ conda activate PromptCanvas # # To deactivate an active environment, use # # $ conda deactivate
$name = @" *** PromptCanvas environment *** "@ Write-Host $name conda activate PromptCanvas cd "D:\anaconda_win\workspace_3\PromptCanvas"
(base) PS D:\anaconda_win> .\PromptCanvas.ps1 (PromptCanvas) PS D:\anaconda_win\workspace_3\PromptCanvas>
| 以前のプロジェクト「大規模言語モデル(LLM)のローカルマシンでの検証」の実行環境でインストール済み「ollama」「Open WebUI」サーバーを使う |
| サーバー | URL アドレス | API アクセスキー |
| Ollama | http://localhost:11434 | なし |
| Open WebUI | http://localhost:8080 | 設定した API_KEY |
| PromptCanvas.ps1 |
(base) PS D:\anaconda_win> .\PromptCanvas.ps1 (PromptCanvas) PS D:\anaconda_win\workspace_3\PromptCanvas>
| python -m venv venv |
(PromptCanvas) PS D:\anaconda_win\workspace_3\PromptCanvas> python -m venv venv (PromptCanvas) PS D:\anaconda_win\workspace_3\PromptCanvas>
| ./venv/Scripts/activate |
(PromptCanvas) PS D:\anaconda_win\workspace_3\PromptCanvas> ./venv/Scripts/activate (venv) (PromptCanvas) PS D:\anaconda_win\workspace_3\PromptCanvas>
| pip install -r requirements.txt |
(venv) (PromptCanvas) PS D:\anaconda_win\workspace_3\PromptCanvas> pip install -r requirements.txt Collecting fastapi<1.0.0,>=0.115.0 (from -r requirements.txt (line 1)) Downloading fastapi-0.138.0-py3-none-any.whl.metadata (27 kB) : Successfully installed PyYAML-6.0.2 aiohappyeyeballs-2.6.2 aiohttp-3.14.1 aiosignal-1.4.0 aistudio-sdk-0.3.8 astor-0.8.1 attrs-26.1.0 bce-python-sdk-0.9.72 certifi-2026.6.17 chardet-7.4.3 charset_normalizer-3.4.7 colorlog-6.10.1 crc32c-2.8 decorator-5.3.1 filelock-3.29.4 frozenlist-1.8.0 fsspec-2026.6.0 future-1.0.0 hf-xet-1.5.1 httpcore-1.0.9 httpx-0.28.1 huggingface-hub-1.20.1 imagesize-2.0.0 markdown-it-py-4.2.0 mdurl-0.1.2 modelscope-1.37.1 multidict-6.7.1 numpy-2.3.5 opencv-contrib-python-4.10.0.84 opt-einsum-3.3.0 packaging-26.2 paddleocr-3.7.0 paddlepaddle-gpu-2.6.2 paddlex-3.7.1 pandas-3.0.3 prettytable-3.17.0 propcache-0.5.2 protobuf-3.20.2 psutil-7.2.2 py-cpuinfo-9.0.0 pyclipper-1.4.0 pycryptodome-3.23.0 pygments-2.20.0 pypdfium2-5.10.1 python-bidi-0.6.10 python-dateutil-2.9.0.post0 requests-2.34.2 rich-15.0.0 ruamel.yaml-0.19.1 shapely-2.1.2 shellingham-1.5.4 six-1.17.0 tqdm-4.68.3 typer-0.25.1 tzdata-2026.2 ujson-5.13.0 urllib3-2.7.0 wcwidth-0.8.1 yarl-1.24.2 (venv) (PromptCanvas) PS D:\anaconda_win\workspace_3\PromptCanvas>
| python -m pip install paddlepaddle-gpu==3.3.0 -i https://www.paddlepaddle.org.cn/packages/stable/cu126/ |
(venv) (PromptCanvas) PS D:\anaconda_win\workspace_3\PromptCanvas> python -m pip install paddlepaddle-gpu==3.3.0 -i https://www.paddlepaddle.org.cn/packages/stable/cu126/ Looking in indexes: https://www.paddlepaddle.org.cn/packages/stable/cu126/ Collecting paddlepaddle-gpu==3.3.0 Downloading paddlepaddle_gpu-3.3.0-cp311-cp311-win_amd64.whl (533.3 MB) : Successfully installed nvidia-cublas-cu12-12.6.4.1 nvidia-cuda-runtime-cu12-12.6.77 nvidia-cudnn-cu12-9.5.1.17 nvidia-cufft-cu12-11.3.0.4 nvidia-curand-cu12-10.3.7.77 nvidia-cusolver-cu12-11.7.1.2 nvidia-cusparse-cu12-12.5.4.2 nvidia-nvjitlink-cu12-12.9.86 paddlepaddle-gpu-3.3.0 (venv) (PromptCanvas) PS D:\anaconda_win\workspace_3\PromptCanvas>
# --- サーバー ---
HOST=127.0.0.1
PORT=7860
# --- PaddleOCR ---
IMAGE_TO_PROMPT_OCR_LANG=japan,en
# --- Vision LLM (OpenAI互換エンドポイント) ---
VISION_API_BASE=http://localhost:11434/v1
VISION_API_KEY='ollama'
# bbox精度の高いvision対応モデルを推奨(Gemma系で良好な結果)
#VISION_MODEL=gemma3:latest
VISION_MODEL=qwen3-vl:8b
#VISION_MODEL="tinyrick/gemma-4-31B-it-uncensored-heretic-vision-llmfan46:Q4_K_M"
# 画像リサイズ上限 (短辺px)
VISION_FULL_MAX_PX=1024
VISION_CROP_MAX_PX=512
# --- WOMAN タグ ---
# woman/girl/female/lady を "{WOMAN} woman" に統一(例: Japanese, Korean, Chinese)
WOMAN=Japanese
# --- 開発用 ---
# IMAGE_TO_PROMPT_MOCK=1
$name = @" *** PromptCanvas environment *** "@ Write-Host $name conda activate PromptCanvas cd "D:\anaconda_win\workspace_3\PromptCanvas" ./venv/Scripts/activate python app.py・以後、新規「Anaconda PowerShell Prompt」から PromptCanvas.ps1 コマンドでサーバー起動 終了は 'Ctrl' + 'c'
| PromptCanvas.ps1 |
(base) PS D:\anaconda_win> .\PromptCanvas.ps1 *** PromptCanvas environment *** Image to Prompt v3 running at http://127.0.0.1:7860 Vision LLM : http://localhost:11434/v1 / qwen3-vl:8b OCR : PaddleOCR (lang=japan,en) INFO: Started server process [10236] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://127.0.0.1:7860 (Press CTRL+C to quit)
| Model | Parameters | Size | 内容 |
| Gemma4:e4b | 実質4.5B | 9.6GB | Effective 4B(実質45億パラメータ)を意味しエッジデバイス上でオフラインかつ高速に動作する |
| Gemma3:latest | 4B | 3.3GB | 軽量かつ高性能で、マルチモーダル対応や長いコンテキスト処理が特徴(標準バージョン) |
| qwen3-vl:8b | 8B | 6.1GB | マルチモーダルAI「Qwen3-VL」シリーズの中で、約80億(8B)のパラメータを持つモデル |
| gemma-4-31B-it | 31B | 19GB | マルチモーダルAIモデル。テキストだけでなく画像・動画の処理にも対応 |
| モデル | 回答: gemma4:e4b | 回答: gemma3:latest |
| 質問 | なぜ空は青いのですか? | |
| Ollama | 空が青く見えるのは、**地球の大気を通して太陽の光(白色光)が散乱する現象**によるものです。 この現象を科学的に説明すると、「レイリー散乱(Rayleigh Scattering)」という原理が関係しています。 --- ### 🌟 分かりやすい解説(なぜ青なのか?) #### 1. 光は「色」と「波長」の集まりである 私たちが太陽から受け取る光は、実は純粋な白色ではなく、赤、橙、黄、緑、青、藍、紫といった全ての色の光が混ざり合ったものです。この色はそれぞれ異なる**「波長(はいちょう)」**を持っています。 * 波長の長い色:赤(長い) * 波長の短い色:紫・青(短い) #### 2. 大気の粒子による散乱 地球の大気は、主に窒素や酸素といった目に見えない微細なガスや塵の粒子の集まりです。太陽光がこの大気の粒子の層を通り抜けるとき、それぞれの波長の光が異なる形で「ぶつかり合い」「跳ね返り合って」いきます。(これを**散乱**と呼びます。) #### 3. 短い波長(青)だけが飛びやすい! 重要なポイントはここです。 大気中の微細な粒子は、**波長の短い光(つまり青や紫の光)を、波長の長い光(赤や黄色など)よりも圧倒的に強く、あらゆる方向に散らばらせてしまいます。** 空全体を見渡すと、そこから私たちの目に入ってくるのは、本来直進する太陽の光の「一部」ではなく、大気中に四方八方に跳ね返ってきて私たちに向かってくる「青い光の部分」が主であるため、「空は青い」と感じるのです。 --- ### 💡 付加的な補足知識(なぜ紫ではないのか?) 科学的には、波長が最も短い**紫色**も強く散乱されるはずです。しかし、空を観察すると「紫色ではなく青色だ」という理由がいくつかあります。 1. **大気の吸収:** 大気自体が紫外線を吸い込みすぎるため、紫色の光は完全に散乱されません。 2. **人間の目の特性:** 人間の目は、青の波長に最も敏感に反応するようにできています。そのため、同じ量の紫と青の光が混ざっていても、私たちは「青色」として強く認識するのです。 ### 🌅 おまけ:夕焼けや日の出が赤くなるのはなぜ? 空が青いのが「散乱によるもの」だと分かると、「夕方や夜明けに空が赤やオレンジに見える」現象も理解できます。 太陽が地平線近くにあるとき、光は私たちに向かってくるまでに**非常に長い距離(大気の層)**を通過しなければなりません。 この長い道のりの中で、前述の通り「青い光」は最初に強く散乱されてしまい、私たちの目には届く前に大気中に逃げてしまいます。結果的に、残って私たちの目に到達できるのは、散乱されにくい波長の長い光――赤やオレンジ色の光ばかりになるため、空全体が赤く見えるのです。 | 空が青く見えるのは、**レイリー散乱**という現象が主な原因です。詳しく説明しますね。 1. **太陽光の構成:** 太陽から届く光は、実際には様々な色の光が混ざり合っています。虹の色(赤、橙、黄、緑、青、藍、紫)を順番に並べると、この混合された光と同じになります。 2. **大気中の分子との衝突:** 太陽光が大気圏に突入すると、空気中の窒素や酸素などの小さな分子とぶつかり合います。この時、光はあらゆる方向に散らばります。これが散乱です。 3. **レイリー散乱:** 光の波長によって散乱のされ方が異なります。 * **波長の短い光(青色、紫色)** は、波長の長い光(赤色、橙色など)よりも強く散乱されます。これは、波長の短い光が空気分子と衝突する際のエネルギーが大きいためです。 4. **青色の優勢:** 太陽光に含まれるブルーやバイオレットの光は、他の色の光に比べて散乱されやすいので、私たちの目に届きやすくなります。そのため、空全体から見る場合、青い光がより多く見えてしまうのです。 5. **夕焼けが赤い理由:** 夕方になると、太陽光は大気中を通過する距離が長くなります。このため、青い光は散乱され尽くしてしまい、波長の長い赤色や橙色の光が私たちの目に届きやすくなります。これが、夕焼けが赤くなる理由です。 **まとめると:** 太陽光が大気中の分子と衝突し、特に短い波長の青い光が強く散乱されるため、空が青く見えるのです。 --- より詳しく知りたい場合は、以下のキーワードで検索してみてください。 * レイリー散乱 * 分散 * 大気光学& |
| processing time: 00:57.96 | processing time: 00:19.95 | |
| OpenWebU | これは、科学的な現象の中でもとても美しい「謎」の一つです。この青い空の秘密は、「**レイリー散乱(Rayleigh Scattering)**」という物理学の原理に基づいています。 簡単に言うと、「太陽の光が空気中の非常に小さな分子に当たると、そのうち特に短い波長の色(=青や紫)だけが効率よくあらゆる方向に跳ね返されるから」です。 --- ### 💡 1. なぜ「青」なのか? (科学的なメカニズム) #### ① 光は色と波長の集まり 太陽の光は単色ではなく、赤、橙、黄、緑、青、藍、紫といった様々な色の光が混ざり合ってできています。これらの色はそれぞれ固有の「**波長(なみちょう)**」を持っています。 * **長い波長:** 赤色 (ゆっくり進む波) * **短い波長:** 紫や青色 (速く、ギュッと密集した波) #### ② 大気中の分子の影響 地球の大気は、主に窒素(N₂)や酸素(O₂)といった非常に小さなガス分子で構成されています。これらの分子が「ミニサイズの鏡」のような役割を果たします。 この光の波長と空気分子の大きさを考えると、**短い波長である青色の光の方が、これらの小さな分子にぶつかって散乱(=あらゆる方向に跳ね返されること)する力が非常に強い**のです。 比喩的に言うなら、「長い棒状の色(赤)」は通り過ぎてしまいがちですが、「小さなボール状の色(青)」はどこにでもバシッと当たって飛び散ってしまうイメージです。これが「レイリー散乱」の原理です。 ### 💧 2. なぜ空全体が均等な「青」に見えるのか? (紫色の謎) 実は、散乱されやすいのは青色だけでなく、**紫色**も非常に強く散乱されます。しかし、空は純粋な紫ではなく、「青」に見えるのには理由があります。 1. **太陽光の出方:** そもそも地球に届く太陽光自体が、波長ごとに強度が均等ではないためです。 2. **人間の目の感度:** 人間の目は、紫色よりも青色の光に対して最も敏感に反応するようにできています。そのため、実際には紫色も散乱されていますが、視覚的な印象としては「青」として認識されるのです。 ### 🌅 3. おまけ:夕焼けや日の出が赤っぽく見えるのはなぜか? 空の様子は時間帯によって大きく変わります。これは「光が空気中を通過する距離」の違いによるものです。 * **真昼:** 光は比較的短く、真っすぐな経路を通るため、散乱された青い光が私たちの目に入り、「空全体が青い」と感じます。 * **日の出・日没時:** 太陽の光は、私たちに届くまで大気中の分子を非常に長い距離(空気層の下から上まで)通過しなければなりません。その長い道のりの間に、散乱しやすい青色や緑色の光は、すでに宇宙の彼方へ隅々まで飛び散ってしまいます。 * **結果:** 最後に目に入るのは、散乱しにくく、まっすぐ進みやすい波長(すなわち赤や橙といった長い波長)だけになるため、空が温かく「赤」っぽく見えるのです。 --- ### ✨ まとめ 時間帯 光の経路 何が起こるか 見える色 :---: :---: :---: :---: **真昼** 短い距離(分子の散乱) 青色が四方八方に飛び散り、私たちの目に届く。 📘 **青** **日出・日没** 長い距離(空全体を通過する) 青色などの短い波長が途中で完全に散逸してしまう。 🍎 **赤・橙** | 空が青く見える理由は、主に「レイリー散乱」という現象によるものです。詳しく説明しますね。 **1. 太陽光の構成:** * 太陽から地球に届く光は、実際には様々な色の光が混ざり合っています。赤、オレンジ、黄色、緑、青、紫などです。 * これらの色は波長で区別され、それぞれ異なる波長の光を表しています。 **2. レイリー散乱:** * 大気中の分子(窒素や酸素など)に太陽光が当たると、光はあらゆる方向に散らばります。これを「散乱」といいます。 * この散乱の度合いは、波長によって異なります。 * **短い波長の光 (青や紫)** は、長い波長の光 (赤やオレンジ) よりも強く散乱されます。これは、波長の短い光が分子に衝突しやすいためです。 * **長い波長の光 (赤やオレンジ)** は、あまり散乱されません。 **3. なぜ青色が見えるのか:** * 太陽光が地球の大気中に入射すると、青い光は特に強く散乱されます。この散乱された青い光が私たちの目に届くため、空は青く見えるのです。 * 紫色の光も青色の光と同様に強く散乱されますが、紫色の光は人間の目が青色よりも感度が高くないことと、太陽から届く光に含まれる紫色の成分が少ないことなどにより、青色が主に見えるようになります。 **4. 夕焼けや空が赤くなる理由:** * 夕方になると、太陽の高度が低くなり、太陽光は大気中をより長い距離を通ります。この間に、青い光は散乱されてしまい、散乱されにくい赤い光の方が目に届きやすくなります。そのため、空が赤く見えるのです。 **まとめると:** 太陽光に含まれる青い光が、大気中の分子によって強く散乱されるため、空は青く見えるという現象です。 --- この説明で理解できましたでしょうか?もし他に疑問点があれば、遠慮なく聞いてくださいね。 |
| processing time: 00:56.92 | processing time: 00:24.67 | |
| モデル | JSON Prompt 作成: gemma4:e4b | JSON Prompt 作成:: gemma3:latest |
| Prompt | 日本人女性、20代前半、縦長のファッション誌表紙デザイン、洗練されたスタジオライティング、余白を生かした構図、架空の英字誌名「ComfyUI」だけ英語で上部に配置、それ以外の見出し・特集名・小見出しは読みやすい自然な日本語、現実の雑誌名は使わない、上品で都会的、文字レイアウトまで完成度の高いビジュアル | |
| Ollama | ![]() | ![]() |
| JSON Prompt: | JSON Prompt: | |
| OpenWebUI | ![]() | ![]() |
| JSON Prompt: | JSON Prompt: | |
| モデル | JSON Prompt 作成: gemma4:e4b | |
| Prompt | 若い日本人美女、浴衣、夏、祭り、花火、缶ビール | |
| OpenWebUI | ![]() | ![]() |
| JSON Prompt: | ||
| モデル | JSON Prompt 作成: gemma4:e4b | JSON Prompt 作成:: gemma3:latest |
| Image | ![]() | |
| Ollama | ![]() | ![]() |
| JSON Prompt: | JSON Prompt: | |
| OpenWebUI | ![]() | ![]() |
| JSON Prompt: | JSON Prompt: | |
参照サイト → HTTPメッセージについて簡単なまとめ
| 名称 | 意味 |
| GET | 指定したURIの情報を取得する。最も利用頻度の高いメソッドで、Webページの取得や、画像、映像の取得などで使用される。 |
| POST | 3つの役割があるメソッド 1. 子リソースの作成 2. ソースへのデータの追加&br:3. 他のメソッドでは対応できない処理(何らかの理由で他のメソッドで対応できない処理をPOSTで行うことがある) |
| PUT | リソースの更新(対象リソースの現在の表現全体を変更) リソースの作成 |
| DELETE | リソースの削除に使用する |
| HEAD | リソースのヘッダだけを取得するメソッド GETと似ているが、HEADのレスポンスにはボディが含まれない。 |
| OPTIONS | 対象リソースがサポートしているメソッドの一覧を返す |
| TRACE | 対象リソースへのパスに沿ってメッセージのループバックテストを実行する |
| CONNECT | 対象リソースで識別されるサーバーとの間にトンネルを確立させる |
| PATCH | リソースを部分的に変更するために使用する |
| コード | 分類 | 意味 |
| 1xx | 処理中 | 処理が継続している |
| 2xx | 成功 | リクエストが成功した |
| 3xx | リダイレクト | 他のリソースへのリダイレクト |
| 4xx | クライアントエラー | クライアントのエラー 原因はクライアントのリクエストにある |
| 5xx | サーバエラー | サーバエラー 原因はサーバ側にある |
Pythonの venv 環境そのものには専用の設定ファイルはないが、環境変数(APIキーやDB接続情報など)を管理するために .env ファイルを作成するのが一般的
設定ファイルの作成と読み込み手順
pip install python-dotenv
API_KEY=your_secret_key_here DEBUG_MODE=True
import os
from dotenv import load_dotenv
# .env ファイルの環境変数を読み込む
load_dotenv()
# 設定値を取得
api_key = os.getenv("API_KEY")
print(api_key)