この記事は、以下のような方を想定しています。
- Upscaylを毎回手動で起動するのが面倒に感じている方
- 処理後のファイルリネームを手作業で行っている方
- Windowsバッチファイル(.bat)を使った自動化に興味がある方
- ストックフォト制作の工数を少しでも減らしたい方
- 設定ファイルを使ったスクリプト管理に興味がある方
前回の記事では、AI画像生成から高解像度化・品質チェックまでのフロー全体を紹介しました。 そのなかで「2-2 Upscaylによる高解像度化処理(人時間1分、処理時間30分)」と「2-3 ファイルの一括リネーム(人時間1分、処理時間1分)」は 手動での作業が残っていた部分です。
今回はこの2工程を run_upscayl_filerename.bat というバッチファイルにまとめ、
ダブルクリック1回で完結するように自動化した内容を紹介します。
本記事の位置づけ(フロー②補足)
全体フローの中で、本記事が担当するのは以下の部分です。
| 連番 | 作業概要 | 自動化前(人時間) | 自動化後(人時間) | 本記事 |
|---|---|---|---|---|
| 2-1 | 目視チェックによる明らかなNG画像の除外 | 5分 | 5分 | — |
| 2-2 | Upscaylによる高解像度化処理 | 1分 | 0分 | ★本記事 |
| 2-3 | ファイルの一括リネーム(日付+連番) | 1分 | 0分 | ★本記事 |
| 2-4 | 品質チェック(Colab / ローカル実行) | 10分 | 1分 | — |
元々それぞれ「大した作業ではない」と感じていたのですが、毎日繰り返す作業であるため、 自動化によってバッチ起動のみで完結する流れにしました。
自動化のゴール
バッチファイルをダブルクリックするだけで、①Upscayl高解像度化 → ②処理済み入力ファイルの移動 → ③出力ファイルの日付+連番リネーム、の3ステップが順番に実行される状態を目指しました。
何を自動化したのか
自動化前の手順を整理すると、以下のような流れでした。
- Upscaylアプリを起動する
- 入力フォルダ・出力フォルダ・モデル・倍率・フォーマットを毎回設定する
- 処理完了を待つ
- 処理済みの入力ファイルを別フォルダへ手動で移動する
- 出力されたファイルを日付+連番形式に手動でリネームする
これらをバッチファイルひとつに集約しました。設定値は stockphoto.json から自動読み込みするため、
バッチファイル自体を修正する必要はありません。
upscayl-bin.exeとは?
Upscaylのデスクトップアプリは内部で upscayl-bin.exe というCLI(コマンドラインインターフェース)ツールを使っています。
このexeを直接呼び出すことで、GUIを開かずにバッチ処理が可能になります。
通常は C:\Program Files\Upscayl\resources\bin\upscayl-bin.exe に存在します。
バッチファイルの全体構成
run_upscayl_filerename.bat は大きく分けて4つのブロックで構成されています。
| ブロック | 内容 |
|---|---|
| 設定読み込み | stockphoto.jsonからパス・モデル・スケール・フォーマットを取得 |
| バリデーション | exeや入力フォルダの存在確認。なければエラー停止 |
| STEP1 | upscayl-bin.exeを呼び出してバッチ高解像度化を実行 |
| STEP2 | 処理済みの入力ファイルをDONEフォルダへ移動 |
| STEP3 | 出力ファイルをYYYYMMDD_NNN形式にリネーム(PowerShell) |
バッチファイル冒頭のコメントブロックを見ると、必要な設定項目がまとめて確認できます。
REM [Settings] -> stockphoto.json > "upscayl"
REM bin_path / models_dir / input_dir / output_dir / done_dir
REM model / scale / format
STEP1:upscayl-bin.exeの呼び出し
Upscaylの本体処理はコマンド1行で実行できます。
"%UPSCAYL_BIN%" -i "%INPUT_DIR%" -o "%OUTPUT_DIR%" ^
-n "%MODEL%" -m "%MODELS_DIR%" -z %SCALE% -f %FORMAT%
| オプション | 意味 | 設定箇所(JSON) |
|---|---|---|
-i | 入力フォルダ | input_dir |
-o | 出力フォルダ | output_dir |
-n | 使用モデル名 | model |
-m | モデルファイルの格納ディレクトリ | models_dir |
-z | 拡大倍率(2/3/4) | scale |
-f | 出力フォーマット(jpg/png/webp) | format |
処理完了後は %ERRORLEVEL% を確認し、異常終了した場合はそこで処理を中断します。
Upscaylがエラーを出したままSTEP2・STEP3に進んでしまうと、
中途半端な状態でファイルが移動・リネームされるリスクがあるためです。
使用しているモデル設定
現在は upscayl-standard-4x モデルを4倍スケールのJPEG出力で運用しています。
ストックフォト向けには、ノイズが少なくシャープに仕上がるこのモデルが相性良く感じています。
モデルの選択肢は _model_options にコメントとして列挙してあります。
STEP2:処理済み画像の移動
Upscayl処理が正常完了した後、入力フォルダの画像を done_dir へ移動します。
for %%F in ("%INPUT_DIR%\*.*") do (
move "%%F" "%DONE_DIR%\" >nul 2>&1
set /a MOVE_COUNT+=1
)
この工程を入れた理由は2つあります。
- 次回バッチ実行時に同じ画像を再処理しないため
- 処理前の原本ファイルを誤って削除しないよう別フォルダに退避しておくため
done_dir は一種のアーカイブフォルダとして機能しており、問題が発生したときに元のファイルを確認できる安全網にもなっています。
STEP3:日付+連番リネーム
出力フォルダに生成された画像ファイルを YYYYMMDD_NNN.jpg 形式にリネームします。
この処理はPowerShellに委ねています。バッチ単体では文字列操作やファイル列挙の柔軟性に限界があるためです。
リネームのロジックは以下のような考え方で設計しています。
- 今日の日付(
%DATE_STR%)をプレフィックスとして取得 - 出力フォルダ内に同じ日付のファイルがすでに存在するかを確認
- 存在する場合は最大連番の続き番号から開始する(重複しない)
- 存在しない場合は
001から開始 - 対象はまだ
YYYYMMDD_NNN.形式になっていないファイルのみ
$pat='^'+$date+'_(\d{3})\.';
$ex=Get-ChildItem $dir -Filter ($date+'_*.'+$fmt) | ...
$start=if($ex){($ex|Measure-Object -Maximum).Maximum+1}else{1};
連番が重複しない設計のポイント
同じ日に複数回バッチを実行しても、既存の連番を拾って続きから採番します。
たとえば当日すでに 20260531_001.jpg 〜 20260531_005.jpg がある場合、
次の実行では 20260531_006.jpg から始まります。
設定ファイル(stockphoto.json)の役割
stockphoto.json はストックフォト関連バッチ全体の設定を一元管理するファイルです。
"upscayl" セクションに本バッチ用の設定をまとめています。
| キー | 内容 | 例 |
|---|---|---|
| bin_path | upscayl-bin.exeのフルパス | C:\Program Files\Upscayl\...\upscayl-bin.exe |
| models_dir | モデルファイルの格納フォルダ | C:\Program Files\Upscayl\...\models |
| input_dir | Upscayl処理前画像の入力フォルダ | E:\temp\ai_stockphoto\image_stockphoto_upbefore_in |
| output_dir | Upscayl処理後画像の出力フォルダ | E:\temp\ai_stockphoto\image_stockphoto_upbefore_out |
| done_dir | 処理済み入力ファイルの退避フォルダ | E:\temp\ai_stockphoto\image_stockphoto_upbefore_upskayldone |
| model | 使用するUpscaylモデル名 | upscayl-standard-4x |
| scale | 拡大倍率 | 4 |
| format | 出力フォーマット | jpg |
JSONの読み込みにはPowerShellの ConvertFrom-Json を利用しています。
バッチファイル内で直接パスをハードコードする方式と比べ、設定変更が1ファイルで完結するメリットがあります。
将来的に別のバッチスクリプトが増えた場合も、同じ stockphoto.json を参照させることで設定を統一できます。
発生しやすいエラーと対処法
実際に運用する中で遭遇しやすいエラーパターンと対処法をまとめます。
| エラー内容 | 原因 | 対処法 |
|---|---|---|
[ERROR] upscayl-bin.exe not found |
bin_pathのパスが誤っている、またはUpscaylのバージョンアップでexeの場所が変わった | Upscaylのインストールフォルダを確認し、stockphoto.jsonのbin_pathを修正する |
[ERROR] Input folder not found |
input_dirに指定したフォルダが存在しない | フォルダを作成するか、stockphoto.jsonのinput_dirパスを修正する |
[ERROR] Failed to load settings |
stockphoto.jsonが見つからない、またはJSONの構文エラー | batファイルと同じフォルダにstockphoto.jsonが存在するか確認。JSONの構文をチェックする |
| PowerShellがJSON読み込みでエラー | システムのExecutionPolicyがRestrictedになっている |
バッチ内では-ExecutionPolicy Bypassを指定しているため通常は問題ないが、企業PCのポリシーによっては管理者への確認が必要 |
リネームが実行されず[WARNING] No files to rename. |
出力フォルダに対象ファイルが存在しない、またはすでにリネーム済み | Upscayl処理が正常に完了しているか確認する。フォーマット(format設定)と実際の出力形式が一致しているかも確認 |
| 日本語パスで処理が失敗する | バッチファイルの文字コードやコマンドプロンプトのコードページが原因 | フォルダパスにはなるべく半角英数字のみを使用する。日本語フォルダ名は避けることを推奨 |
| upscayl-binがエラー終了(ERRORLEVEL ≠ 0) | 入力フォルダが空、または対応外のファイル形式が混入している | 入力フォルダに処理対象の画像(jpg/png/webp等)が存在するか確認する。対応外の拡張子ファイルは事前に除外する |
トラブル時の確認手順
エラーが出た場合はまず以下の順で確認してください。
- stockphoto.jsonの各パスが実際のフォルダ・ファイルと一致しているか
- input_dirに画像ファイルが入っているか
- Upscaylアプリを手動で起動し、同じ設定で正常動作するか試す
- コマンドプロンプトでバッチを実行し、エラーメッセージを全文確認する(ダブルクリックではウィンドウが閉じる場合がある)
upscayl-bin.exeのパスはバージョンアップ後に変わることがある
Upscaylをアップデートすると、resources\bin\ 以下のexeパスや内部構造が変わる場合があります。
バッチが突然動かなくなったときは、まずUpscaylのインストールフォルダを確認し、
stockphoto.json の bin_path を更新してください。
FAQ
upscayl-bin.exeとUpscaylアプリは何が違いますか?
Upscaylアプリはユーザー向けのGUIアプリですが、内部では upscayl-bin.exe というCLIツールが実際の処理を担っています。
バッチファイルからはこのCLI部分を直接呼び出すことで、GUIなしにバッチ処理が可能になります。
stockphoto.jsonで設定を管理するメリットは何ですか?
設定をJSONファイルに集約することで、バッチファイルを直接編集する必要がなくなります。 複数のバッチスクリプトが同じ設定ファイルを参照できるため、パスやモデル変更時も一箇所の修正で済みます。
日付+連番リネームの仕組みはなぜ必要ですか?
AIで大量生成した画像は元のファイル名に意味がなく、いつ処理したか追跡しにくい状態です。
YYYYMMDD_NNN という形式でリネームすることで、処理日と連番が一目で分かり、
Adobe Stockアップロード後の管理Excelとの照合も容易になります。
バッチファイル実行時によくあるエラーは何ですか?
主なエラーは4つです。①upscayl-bin.exeのパス誤り、②入力フォルダが空、
③PowerShellのExecutionPolicyによるJSON読み込み失敗、④日本語パスによる文字化けです。
いずれも stockphoto.json の設定値とフォルダの存在を確認することで解決できます。
続きの記事
- ① AIストックフォト自動化の実践記録(フロー全体)
- ② PythonとCLIPで品質スコアを自動算出・Excel記録
- ③ OllamaでタイトルとキーワードをAI自動生成(近日公開)