PR この記事には広告(アフィリエイトリンク)が含まれています。 詳細
グラボを替えたので画像生成をやってみたい
グラフィックボードを RTX 5060 Ti(16GB) に新調しました。買ったのはMSIの2連ファンのモデルです。

筆者が買ったときは 134,800円 でした。GPUもメモリもSSDも軒並み高い時期なので、なかなかの出費です。。。
それでも踏み切ったのは、VRAMが8GBから16GBになるのが大きかったからです。せっかくなので、AIの画像生成を試してみようと思い立ったわけですね♪
ただ、この手のツールはインストールした瞬間にCドライブをもりもり食うことで有名でして。筆者のCドライブは空きが47GBしかありません。ここにモデルやらキャッシュやらを放り込まれると、あっという間に詰みます。
というわけで今回は、
全部別のドライブに閉じ込めて、飽きたらフォルダごと削除で終わりにする
という構成で入れてみました。結論から言うと、Cドライブの空きは最後までほぼ変わりませんでした。
何が勝手にCドライブに溜まるのか
まず敵を知るところからです。
この手のツールを素直にインストールすると、インストール先とは別の場所に、こういうものが溜まっていきます。
| 溜まるもの | 既定の置き場 | 大きさの目安 |
|---|---|---|
| ダウンロードしたモデル | ユーザーフォルダ\.cache\huggingface | 数十GB |
| pip が落としてきたパッケージ | AppData\Local\pip\Cache | 数GB |
| Python 本体 | ツールによってまちまち | 数百MB |
| 一時ファイル | AppData\Local\Temp | 一時的に数GB |
一番やばいのはモデルです。 今回使う FLUX.1 というモデルは1つで12GBくらいあります。これが何も言わずにユーザーフォルダへ降ってくるわけですね。
そして地味に効くのが一時ファイルです。PyTorch のパッケージは1つ2〜3GBあって、インストール時に一度展開してから入ります。つまりインストール中だけCドライブが数GB膨らみます。
逃がし先を決める
対策はシンプルで、環境変数で全部の置き場を指定するだけです。
筆者はNVMeのGドライブ(空き920GB)に G:\AI\ を作って、そこに集約しました。
G:\AI\
├─ _cache\ 逃がしてきたキャッシュ置き場
│ ├─ uv\ pip\ hf\ torch\ xdg\ tmp\
├─ _tools\ uv などの道具
├─ _docs\ 作業ログ(記事用)
├─ Models\ モデル共通置き場
├─ ForgeNeo\ ← 今回入れるもの
├─ ComfyUI\ ← 次に入れるもの
└─ Output\ 生成した画像モデル置き場をツールの外に出しているのがポイントです。あとで ComfyUI を入れたときに、同じモデルを両方から参照できます。12GBのファイルを2つ持つのは馬鹿馬鹿しいですからね。笑
env.bat にまとめて書く
環境変数はシステムに登録しません。起動バッチの中だけで有効にします。
こうしておくと、普段使っているPowerShellや他のアプリには一切影響しません。AIツールを起動したときだけ、その中で効く形になります♪
set "AI_ROOT=G:\AI"
set "AI_CACHE=%AI_ROOT%\_cache"
rem uv : its own Python builds and package cache
set "UV_PYTHON_INSTALL_DIR=%AI_ROOT%\_tools\uv\python"
set "UV_CACHE_DIR=%AI_CACHE%\uv"
rem pip : downloaded wheels
set "PIP_CACHE_DIR=%AI_CACHE%\pip"
rem HuggingFace : model downloads (the biggest one)
set "HF_HOME=%AI_CACHE%\hf"
set "HF_HUB_CACHE=%AI_CACHE%\hf\hub"
rem torch hub
set "TORCH_HOME=%AI_CACHE%\torch"
rem catch-all used by assorted libraries
set "XDG_CACHE_HOME=%AI_CACHE%\xdg"
rem temp : pip extracts multi-GB wheels here before installing
set "TMP=%AI_CACHE%\tmp"
set "TEMP=%AI_CACHE%\tmp"各ツールの起動バッチは、先頭でこれを呼ぶだけです。
HF_HUB_CACHE を HF_HOME と別に書いているのは、古いライブラリが前者を直接見にいくことがあるためです。両方指定しておけば取りこぼしません。
順番がとても大事です
一度でも素の状態で起動してしまうと手遅れになります。
その瞬間にCドライブへキャッシュが作られてしまい、あとから環境変数を変えてもすでに置かれたものは消えません。
なので、
- フォルダを作る
env.batを書く- それから初めてインストールを始める
という順番を守ります。ここだけは面倒がらずに先にやっておくのがおすすめです♪
基準値を記録しておく
「汚れていない」と言うからには、数字で示せないと意味がありません。
というわけで、インストール前のCドライブの状態を記録しておきます。あとで同じものを測って比べる作戦です。
時刻: 2026-10-23T18:14:22
C:\ 空き 47.20 GB / 合計 232.12 GB
G:\ 空き 920.58 GB / 合計 953.85 GB
フォルダ サイズ 説明
%LOCALAPPDATA%\pip\Cache 0.70 GB pip のホイールキャッシュ
%LOCALAPPDATA%\uv - uv のキャッシュ
%USERPROFILE%\.cache\huggingface 0.53 GB HuggingFace のモデル
%USERPROFILE%\.cache\torch - torch hub
%USERPROFILE%\.cache 2.12 GB キャッシュ全般
%USERPROFILE%\.local - uv 公式インストーラの既定の置き場
%APPDATA%\Ultralytics 0.00 GB ADetailer などが使う YOLO
%USERPROFILE%\Downloads 1.16 GB ブラウザの保存先
%LOCALAPPDATA%\Temp 0.98 GB 一時ファイルC: の空きは 47.20GB からのスタートです。この数字を覚えておいてください。
uv を用意する
Forge Neo の公式手順では、Python環境の構築に uv というツールを使うことが推奨されています。
これが今回の目的にぴったりで、uv は自分でPythonをダウンロードしてきて、プロジェクト専用の環境に閉じ込めてくれます。システムのPythonを一切汚しません♪
ただし公式のインストールスクリプトを使うと、ユーザーフォルダに入ってPATHも書き換えられます。それは避けたいので、実行ファイルだけ落としてGドライブに置きます。
$dst = "G:\AI\_tools\uv"
$url = "https://github.com/astral-sh/uv/releases/latest/download/uv-x86_64-pc-windows-msvc.zip"
Invoke-WebRequest -Uri $url -OutFile "$dst\uv.zip" -UseBasicParsing
Expand-Archive -Path "$dst\uv.zip" -DestinationPath $dst -Force
Remove-Item "$dst\uv.zip"14.6 MB 取得
=== 配置 ===
uv.exe 30.4 MB
uvw.exe 0.3 MB
uvx.exe 0.3 MB
=== バージョン ===
uv 0.13.5 (46776a95d 2026-10-21 x86_64-pc-windows-msvc)あとはこの uv.exe をフルパスで呼ぶだけです。PATHに登録しないので、他の環境に影響しません。
Forge Neo を取ってくる
公式リポジトリの neo ブランチをクローンします。
cd G:\AI
git clone https://github.com/Haoming02/sd-webui-forge-classic ForgeNeo --branch neoブランチ : neo
コミット : a83c1c82 2026-10-23 unpatch
サイズ : 92 MBこの時点ではただのソースコードなので92MBしかありません。重いものはこれから入ります。
Python環境を作る
ここで uv の出番です。公式手順どおり、Python 3.13 の仮想環境を作ります。
cd G:\AI\ForgeNeo
G:\AI\_tools\uv\uv.exe venv venv --python 3.13 --seedセキュリティソフトに邪魔されました
ところがこれ、最初は失敗しました。
error: Failed to download `https://github.com/astral-sh/python-build-standalone/releases/
download/20261021/cpython-3.13.17+20261021-x86_64-pc-windows-msvc-install_only_stripped.tar.gz`
cause: error sending request for url (...)
cause: client error (Connect)
cause: invalid peer certificate: UnknownIssuer証明書の発行元が信頼できないと怒られています。
原因はセキュリティソフトでした。この手のソフトは通信を検査するためにHTTPSを一度復号して、自前の証明書で包み直します。ブラウザやgitはその証明書をWindowsの証明書ストアから見つけられるのですが、uvは自前の証明書ストアを持っているため、見つけられずに弾いてしまうわけですね。
解決策は「Windowsの証明書ストアを使え」と指示することです。
rem uv ships its own certificate store, which fails when security
rem software intercepts TLS ("invalid peer certificate: UnknownIssuer").
rem Tell uv to use the Windows certificate store instead.
set "UV_SYSTEM_CERTS=1"これで通りました。
Downloading cpython-3.13.17-windows-x86_64-none (download) (21.0MiB)
Downloaded cpython-3.13.17-windows-x86_64-none (download)
Using CPython 3.13.17
Creating virtual environment with seed packages at: venv
+ pip==26.2.2ちなみに UV_NATIVE_TLS という変数でも同じことができますが、こちらは非推奨になっていて警告が出ます。新しい UV_SYSTEM_CERTS を使いましょう。
ちゃんとGドライブに入ったか確認
言いっぱなしは良くないので、実際にどこに置かれたか見てみます。
=== uv が入れた Python の場所 ===
cpython-3.13-windows-x86_64-none 60 MB
cpython-3.13.17-windows-x86_64-none 60 MB
=== venv ===
Python 3.13.17
実体: G:\AI\ForgeNeo\venv\Scripts\python.exe
base: G:\AI\_tools\uv\python\cpython-3.13-windows-x86_64-none
=== G:\AI\_cache の使用量 ===
uv 5.5 MBPython本体もvenvも、すべてGドライブの中に収まっています。Cドライブには何も置かれていません♪
起動バッチを書く
Forge Neo には webui-user.bat という設定用のバッチが付いてきますが、これは触りません。
リポジトリで管理されているファイルなので、書き換えると git pull のたびに衝突します。代わりに start-forge.bat を自分で用意して、そこに全部書く方針にしました。
@echo off
rem always work from this script's own folder
cd /d "%~dp0"
rem send every cache to G: BEFORE anything else runs
call "G:\AI\env.bat"
rem webui.bat looks for `uv` on PATH. Add it for this session only.
set "PATH=G:\AI\_tools\uv;%PATH%"
rem pin the interpreter
set "PYTHON=%~dp0venv\Scripts\Python.exe"
set "VENV_DIR=%~dp0venv"
set COMMANDLINE_ARGS=--uv --cuda-malloc --cuda-stream --pin-shared-memory ^
--ckpt-dirs G:/AI/Models/checkpoints ^
--lora-dirs G:/AI/Models/loras ^
--vae-dirs G:/AI/Models/vae ^
--embeddings-dir G:/AI/Models/embeddings ^
--esrgan-models-path G:/AI/Models/upscale_models
call "%~dp0webui.bat"ポイントが4つあります。
PATHに uv を足しています。 webui.bat の中身を読むと、uv help python というコマンドで uv を探していました。PATHに無いと見つけられないので、このバッチの中でだけ通しています。システムのPATHは触りません。
PYTHON を明示しています。 指定しないと webui.bat はPATHの python を使います。筆者の環境ではこれがpyenvのシム(3.10系)を指していて、Forge Neo が欲しい3.13とは違うものでした。事故のもとなので固定します。
--xformers は使いません。 公式に「xformers は RTX 50シリーズをサポートしていない」と明記されています。
ディレクトリ指定は複数形です。 Forge Neo は --ckpt-dirs --lora-dirs --vae-dirs と複数形になっています。本家A1111の記事を見ながら単数形で書くと弾かれるので要注意です。
初回起動
あとは start-forge.bat を叩くだけ。初回は依存関係を全部取りにいくので時間がかかります。
venv "G:\AI\ForgeNeo\venv\Scripts\Python.exe"
Using Python 3.13.17 environment at: venv
Resolved 13 packages in 2.38s
Downloading torch (1.9GiB)
...
Prepared 13 packages in 6m 51s
Installed 13 packages in 2.81s
+ torch==2.14.0+cu130
+ torchvision==0.29.0+cu130
+ numpy==2.5.2
+ pillow==12.3.0PyTorch 2.14.0 + CUDA 13.0 が入りました。RTX 50シリーズ(Blackwell)はここが新しくないと動かないので、重要なところです。
そして無事に起動。
Total VRAM 16284 MB, total RAM 65457 MB
PyTorch Version: 2.14.0+cu130
VRAM State: NORMAL_VRAM
Device: NVIDIA GeForce RTX 5060 Ti (cuda:0) - cudaMallocAsync
Using async weight offloading with 2 streams
Pinned Memory: 29456 MB
Using PyTorch Cross Attention
Running on local URL: http://127.0.0.1:7860
Startup time: 597.8s (prepare environment: 549.2s, ...)GPUがちゃんと認識されています。約10分かかりましたが、そのうち9分は依存関係のダウンロードなので、2回目からは一瞬です♪
バックスラッシュが消える罠
ところが起動ログをよく見たら、引数がおかしなことになっていました。
Launching Web UI with arguments: --uv --cuda-malloc --cuda-stream
--pin-shared-memory --ckpt-dirs G:AIModelscheckpoints --lora-dirs G:AIModelslorasG:\AI\Models\checkpoints が G:AIModelscheckpoints になっています。バックスラッシュが全部消えたわけですね。
原因はソースを読んで分かりました。
commandline_args = os.environ.get("COMMANDLINE_ARGS", "")
sys.argv += shlex.split(commandline_args)shlex.split() はUNIX系のシェルの文法で文字列を分解する関数です。そしてUNIX系では、バックスラッシュはエスケープ文字という扱いになります。\A は「Aという文字そのもの」と解釈され、バックスラッシュ自体は消えてしまうのです。
Windowsのパスを素直に書くと全滅するという、なかなか厄介な仕様でした。笑
対策はスラッシュ区切りにすることです。
--ckpt-dirs G:/AI/Models/checkpointsWindowsでもスラッシュ区切りのパスはちゃんと通るので、これで解決します。エラーも警告も出ずに黙って壊れるタイプなので、起動ログの引数表示は毎回確認したほうが良さそうです。
モデルを選ぶ
ここは少し慎重になりました。ブログに載せる以上、ライセンスがはっきりしているモデルを選びたいからです。
今回選んだのは FLUX.1 [schnell]。理由はシンプルで、Apache 2.0 だからです。
| モデル | ライセンス | 商用利用 |
|---|---|---|
| FLUX.1 [schnell] | Apache 2.0 | できる |
| FLUX.1 [dev] | 独自の非商用ライセンス | できない |
| SDXL Base 1.0 | CreativeML Open RAIL++-M | できる(用途制限あり) |
同じFLUXでも dev は非商用なので、うっかり使うと面倒なことになります。名前が似ているので注意が必要ですね。
ひとつ正直に書いておくと、Apache 2.0 が保証しているのは「モデルの重みをどう使っていいか」であって、学習に使われた画像の権利処理までは保証されていません。ここまで厳密に追いかけるなら、CC0やオプトインのデータだけで学習したモデルを選ぶことになりますが、品質はかなり落ちます。今回は「ライセンス上クリアなものを選んだ」という線で進めます。
ダウンロード
本家のリポジトリは利用規約への同意が必要で、トークン無しだと401が返ってきます。
Comfy-Org fp8 全部入り HTTP 200 16.05 GB
公式 bf16(拡散モデルのみ) 取得失敗: HTTP Error 401: Unauthorized一方、Comfy-Org が再配布している fp8 版は認証なしで落とせます。しかもこちらは拡散モデル・テキストエンコーダ・VAEが1ファイルに入った全部入りなので、置くだけで動きます。ライセンスはschnellのままApache 2.0です。
ブラウザで落とすとCドライブの「ダウンロード」フォルダに入ってしまうので、コマンドで直接Gドライブに落とします。
curl.exe -L --retry 3 --continue-at - `
-o "G:\AI\Models\checkpoints\flux1-schnell-fp8.safetensors" `
"https://huggingface.co/Comfy-Org/flux1-schnell/resolve/main/flux1-schnell-fp8.safetensors"100 16.0G 100 16.0G 0 0 4200k 0 1:06:47 1:06:47 --:--:-- 5380k16GBで1時間7分かかりました。気長に待ちましょう。笑
--continue-at - を付けているので、途中で切れても同じコマンドで再開できます。
起動してみる
もう一度 start-forge.bat を叩きます。
Model Selected:
{
"checkpoint": "flux1-schnell-fp8.safetensors",
"modules": [],
"dtype": "[torch.float16, torch.bfloat16]"
}
Running on local URL: http://127.0.0.1:7860
Startup time: 38.7sモデルを認識しました。しかも起動時間が597秒から38.7秒に短縮されています。初回が遅いのは依存関係のダウンロードのせいだったので、2回目からは快適です♪

http://127.0.0.1:7860 を開くとこの画面になります。使ったことがある方なら迷わないはずです。
画像を出してみる
画面から操作してもいいのですが、設定を正確に残したかったのでAPIから叩くことにしました。起動オプションに --api を足すと /sdapi/v1/ が開きます。
FLUX.1 schnell を使ううえでここだけは押さえておきたい設定があります。
| 設定 | 値 | 理由 |
|---|---|---|
| Steps | 4 | schnellは4ステップで完成するよう蒸留されている。増やしても良くならない |
| CFG Scale | 1.0 | schnellはCFGを使わない設計 |
| Sampler | Euler | |
| Schedule | Simple |
普通のモデルの感覚で「Steps 30、CFG 7」などとやると、遅いうえに結果も良くなりません。ここは割り切りが必要です。
PAYLOAD = {
"prompt": "a cozy desk at night, a small white PC case with softly glowing fans, "
"a cup of coffee, a mechanical keyboard, warm desk lamp light, "
"shallow depth of field, photorealistic",
"steps": 4, # schnell は 4 ステップで完成する
"cfg_scale": 1.0, # schnell は CFG を使わない
"width": 1024,
"height": 1024,
"sampler_name": "Euler",
"scheduler": "Simple",
"seed": 20261023,
}結果がこちらです。

いい感じです♪ 光の回り方とか、手前のキーボードのボケ具合とか、ちゃんと写真っぽくなっています。
速度
1回目: 57.9 秒 (モデルをVRAMに読み込む時間を含む)
2回目: 10.7 秒 (読み込み済み)1024×1024が約10秒。4ステップのモデルなので速いです。
VRAMの使用量も見ておきます。
11116 MiB / 16311 MiB16GBのうち11GBほどでした。余裕があります。8GBのカードだとここが厳しくなるので、16GBにした甲斐がありました。
本題:Cドライブは汚れたのか
さて、ここからが今回の本題です。最初に記録した数字と比べてみます。
=== 差分 ===
C:\ 空きが 0.21 GB 減った
G:\ 空きが 20.83 GB 減ったCドライブの減りは 0.21GB。しかも監視していたキャッシュフォルダは、すべて1バイトも増えていませんでした。
| フォルダ | 前 | 後 |
|---|---|---|
%LOCALAPPDATA%\pip\Cache | 0.70 GB | 0.70 GB |
%USERPROFILE%\.cache\huggingface | 0.53 GB | 0.53 GB |
%USERPROFILE%\.cache | 2.12 GB | 2.12 GB |
%LOCALAPPDATA%\Temp | 0.98 GB | 0.98 GB |
0.21GBのほうは、Windowsのログなど普段の動作による変動です。AI環境が食った分はゼロと言っていいと思います。
念のため、Cドライブで最近更新された重いフォルダも探してみました。
=== 直近24時間に更新された C: 配下のフォルダ(100MB以上)===
70.45 GB C:\Users\username
1.57 GB C:\Users\username\.cache\codex-runtimes
1.09 GB C:\Users\username\.codex
0.12 GB C:\Users\username\.codex\.tmp
0.47 GB C:\Users\username\.codex\plugins引っかかったのは全部別のツールのものでした。Forge Neo 由来のものはひとつもありません♪
そして、本来Cドライブに行くはずだった20.83GBはこうなっています。
_cache 4.24 GB pip/uv が落としてきたもの
_tools 0.09 GB uv本体とPython
ForgeNeo 4.25 GB リポジトリ + venv
Models 16.05 GB FLUX.1 schnell
Output 0.00 GB 生成画像消すときはフォルダごと
この構成の良いところは、飽きたときの後始末が一瞬なことです。
G:\AI\ を削除 → 終わりレジストリもPATHもシステム環境変数も触っていないので、これで元通りです。Pythonもuvもこの中にしか居ません。
「とりあえず試してみたいけど、合わなかったときに環境が汚れるのが嫌だな」という方には、特におすすめしたいやり方です♪
