目次
Bashスクリプトで画像生成
本稿では、Bashスクリプトで画像生成AI用のプロンプトを作成してみます。各種AIエンジンの制御に使われる言語はPythonが主流です。PCをはじめとするハードウェア、ソフトウェア、アプリケーションとの連携に不可欠なライブラリが豊富だからです。
そういったことが得意な言語が、もう一つあります。それはBashスクリプトです。しかも、普段のコマンド操作と同じ操作で、応用できます。

生成した画像の一例
まずは、Raspberry Pi で生成した画像の一例から紹介します。
下図は Stable Diffusion の基本モデル SD1.5 による9枚の生成例です。解像度512×256の画像1枚につき約6分の生成時間を要しました。基本モデルなので見劣りします。とはいえ、フォトフレームに表示する風景画であれば、利用可能な範囲でしょう。

また、学習を追加したモデルに変更すると、同じ生成条件であっても、より自然な画像を生成することも可能です。

とくに人物については、モデルの利用で実写と見間違うような自然な画像を生成することができます。

画像生成実験システムの構成
本例では Raspberry Pi で画像生成を行います。クラウド側のAIを使用しないので、画像生成するときのインターネット接続が不要です。フォトフレームとして単体で動かせるほか、完全にローカルな環境でシステムを構築することができます。ただし、システムのインストールにはインターネットが必要です。

必要な機材
Raspberry Pi 4 以上で動作します。ただし、本稿で紹介する画像の生成には 5GB ~ 9GB を使用します。このため、RAM 4GB モデルや 8GB モデルだとメモリの節約が必要です(後述)。

マイクロSDカードは、ソフトウェアのインストール用に8.8GB、Swap領域8GB、モデル追加1件につき5GBほどの容量が必要です。したがって、32GB以上の高耐久(ドライブレコーダー用)を用意してください。
- Raspberry Pi 5 model B(RAM 8GB か 16GB を推奨)
- マイクロSDカード 32GB以上(高耐久品)
- 周辺機器(ACアダプタ、モニタ、キーボード、LAN環境など)

メンディングテープを貼っておくとカードを取り出しやすい
Stable Diffusionのインストール方法

本稿では、AUTOMATIC1111 のStable Diffusion web UI を使用します。Stable Diffusion に GUI や拡張性を追加して一般のユーザーが使える形にした標準的なソフトウェアです。
インストールも、ほぼ自動で実行できます。ただし、Pythonのバージョンや、メモリの制限、Raspberry Piが NVIDIA の GPU を搭載していないなどの部分に留意する必要があります。
以下、インストール手順の説明です。
Python3.11をインストールする

Python のバージョンは 3.11 を使用します。筆者が知る限り、最も手軽な方法は Raspberry Pi OS Bookworm の 2025/11/24版を使用することです。
Bookwarm 2025-11-24 Lite版:https://downloads.raspberrypi.com/raspios_oldstable_lite_arm64/images/raspios_oldstable_lite_arm64-2025-11-24
Bookwarm 2025-11-24 デスクトップ版:
https://downloads.raspberrypi.com/raspios_oldstable_arm64/images/raspios_oldstable_arm64-2025-11-24
Lite版はデスクトップ環境が含まれません。起動後、CLI(コマンド・ライン・インターフェース)で操作します。RAM 16GB モデルの場合はデスクトップ版で大丈夫です。しかし、RAM 8GB モデルの場合は、生成時間が長くなることがあるので、CLIに慣れている方はLite版を使ってください。RAM 4GB モデルではLite版が必須で、Lite版でも生成時間が長くなります。
末尾が「img.xz」のファイルをダウンロード後、Raspberry Pi Imager を使って、そのファイルをマイクロSDカード(32GB以上)に書き込み、作成したマイクロSDカードを Raspberry Pi 5 model B に差し込んでください。
ソフトウェアのインストール(1)

複雑なインストールは全て AUTOMATIC1111 が実行してくれます。とはいえ、AUTOMATIC1111 を始動するためのインストールが必要です(jqは筆者のスクリプトで使用)。
下記を実行してください。
$ sudo apt update
$ sudo apt install wget git python3-pip libgl1 jq
$ cd
$ git clone http://github.com/AUTOMATIC1111/stable-diffusion-webui
次に、Stable Diffusionの起動オプションを設定します。設定ファイルは Bashスクリプトです。下記のファイルをエディタで開き、環境変数 COMMANDLINE_ARGS を定義してください。
Stable Diffusionの起動設定ファイル:
~/stable-diffusion-webui/webui-user.sh
export COMMANDLINE_ARGS="--skip-torch-cuda-test --no-half --listen --api"
Raspberry Pi で使用する可能性のある主なオプションを下表に示します。必要に応じて、上記のダブルクォート内に追加してください。先頭のハイフン(-)は2つ連続で記入します。
| – -skip-torch-cuda-test | GPUのテストを省略 (CPU処理なので必須) |
| – -no-half | FP16演算を使用しない (ARM CPUで必須) |
| – -listen | LANからWeb UIへのアクセス許可 |
| – -api | 本稿で利用するAPIの有効化 |
| – –nowebui | Web UIの無効化(RAM節約) |
| – –lowram | RAM消費を抑えるオプション (8GB以下のモデルに必要) |
| – –opt-sub-quad-attention | RAM消費を抑えつつ速度改善 |
メモリー(RAM)不足対策

Raspberry Pi 4 や 5 の 4GB モデルや 8GB モデルの場合、メモリ不足対策が必要です。一例として、オプション設定lowram、RAM圧縮、SDカードへのスワップ機能を使用します。
- オプション設定
設定 = webui-user.sh のCOMMANDLINE_ARGSに lowram、opt-sub-quad-attention を追加(先頭にマイナス2つ付与する) - RAM圧縮
インストール = sudo apt install zram-tools
設定 = /etc/default/zramswap に ALGO=lz4、PERCENT=75
反映 = Raspberry Pi OSの再起動 sudo reboot - RAMスワップ機能
設定 = CONF_SWAPSIZE=4096、CONF_MAXSWAP=8192
反映 = sudo systemctl restart dphys-swapfile
使用制限 = echo 10 | sudo tee /proc/sys/vm/swappiness
下記は、4GB モデルの Raspberry Pi を使った画像生成中のRAMの圧縮・スワップ状態の一例です。
$ swapon --show
NAME TYPE SIZE USED PRIO
/dev/zram0 partition 3G 2.9G 100
/var/swap file 4G 1.3G -2
8GBモデルの場合は、かえって生成速度が低下することもあるので、必要に応じて加減してください(生成画像による)。
ソフトウェアのインストール(2)

ここからは、AUTOMATIC1111 による自動インストールです。環境にもよりますが、全てのインストールを行うのに数時間を要します(Raspberry Pi 5 16GB 使用時)。
下記のBashスクリプトを実行してください。
$ cd ~/stable-diffusion-webui
$ ./webui.sh
自動的に設定ファイルの webui-user.sh を実行し、Pythonの仮想環境を生成し、仮想環境上で launch.py を実行します。
また、 launch.py は、必要なソフトウェアのダウンロードとインストールを自動的に行います。なお、最も時間がかかるのは、約5GBの標準モデルSD 1.5「v1-5-pruned-emaonly.safetensors」のダウンロードです。

ダウンロードが終わると、下記のメッセージが表示されます。ここでポート番号7860を確認してください(7861になることもあります)。
Running on local URL: http://0.0.0.0:7860
インターネット・ブラウザで「http://(IPアドレス):7860/」にアクセスすると、下図のような画面が表示され、Stable Diffusion web UI が利用できるようになります。OSがLite版の場合は、PCなどからアクセスしてみてください。

「Prompt」欄にプロンプトを入力し、[Generate]ボタンで画像生成を実行できます。
終了するときは、Raspberry Pi のCLIで[Ctrl]+[C]を押下後、[Y][Enter]を入力します。
再度、起動する場合は「./webui.sh」を実行し、再度、数時間ほど、待ってください。失礼しました。嘘です。すでにインストールが完了していた場合は、約10秒くらいで起動します。
また、設定変更などによって、必要なソフトウェアが生じた場合は、自動で追加のインストールが行われます。
自動生成用Bashスクリプト
筆者が本稿用に作成した画像生成用のBashスクリプトについて説明します。
ダウンロード方法と実行方法
下記のコマンドでダウンロードできます。また、JSONから画像を抽出するのに jq コマンドを使用するので、インストールします。
$ cd
$ git clone https://bokunimo.net/git/bash/
$ sudo apt install jq
下記のコマンドで、Stable Diffusion web UI をバックグラウンドで起動し、筆者作成の Bashスクリプト を実行すると、画像生成を開始します。生成には約6分を要します(16 GBモデル時)。
$ cd ~/stable-diffusion-webui
$ ./webui.sh &
$ cd ~/bash/practical/stable_diffusion/
$ ./ex01_sd_basic.sh
生成が完了したら、同じフォルダ内に「ex01_sd_basic.png」が作成されます。下図は生成した画像の一例です(低品質です)。

webui.shを停止するには、「fg⏎」を入力してから[Ctrl]+[C]を入力します。
画像生成用プロンプトを確認する
生成した画像をSrable Diffusion web UI の「PNG Info」にドラッグ&ドロップすると、生成プロンプトやモデル名などが表示されます。

本例では、以下の情報が得られました。
A professional landscape photograph of European scenery.
Steps: 10, Sampler: DPM++ 2M, Schedule type: Karras, CFG scale: 7.0, Seed: 1683735652, Size: 512x256, Model hash: 6ce0161689, Model: v1-5-pruned-emaonly, Version: v1.10.1
この情報には、プロンプト「A professional landscape photograph of European scenery.」や、「Steps: 10」、「Model: v1-5-pruned-emaonly」などが含まれます。
プロンプトとStepsは、ex01_sd_basic.sh 内で設定しました。Stepsを大きくすると品質が上がります。ただし、数値に比例して生成時間も増えます。
sampler="DPM++ 2M"
scheduler="Karras"
width=512
height=256
steps=10 # 生成ステップ数(多いほど高品質)
cfg_scale=7
seed=-1
api_url="127.0.0.1:7860"
output_file="ex01_sd_basic.png"
# 画像生成用プロンプト
prompt="A professional landscape photograph of European scenery."
画像生成APIの制御方法
本スクリプトでは、curlコマンドで Srable Diffusion web UI のAPIにアクセスします。
下記のように、JSON形式の生成用パラメータをHTTP POST送信し、受信データ・ファイルresponse.jsonに保存します。
curl -o response.json \
-X POST "http://"${api_url}"/sdapi/v1/txt2img" \
-H "Content-Type: application/json" \
-d "{
\"prompt\": \"$prompt\",
\"sampler_name\": \"$sampler\",
\"scheduler\": \"$scheduler\",
\"width\": $width,
\"height\": $height,
\"steps\": $steps,
\"cfg_scale\": $cfg_scale,
\"seed\": $seed
}"
受信完了後、response.jsonに含まれる画像データをjqコマンドで抽出し、base64 –decode で復号化した画像ファイルを保存します。
image_base64=$(jq -r '.images[0]' response.json)
echo "$image_base64" | base64 --decode > "$output_file"
生成画像の画質を改善する
画質を改善する方法はいくつかありますが、最も手軽なのは学習モデルの変更です。下図は、風景用モデルを使用した一例です。

上図は、architecture_Urban_SDlife_Chiasedamme_V6.0を使用して生成しました。使用するには、下記からモデルをダウンロードします。
風景用(architecture_Urban_SDlife_Chiasedamme_V6.0):
https://civitai.com/models/128280/architectureurbansdlifechiasedammev60
ダウンロードした拡張子safetensorのモデルは、モデル保存用のフォルダに保存してください。Web UI の「Stable Diffusion checkpoint」のプルダウンメニューから選択できるようになります。プルダウンメニューに表示されないときは、すぐ右にあるRefreshボタンを押してください。
モデル保存用フォルダ:
~/stable-diffusion-webui/models/Stable-diffusion/

architecture_Urban_SDlife_Chiasedamme_V6.0は、事前な風景だけでなく、人工的な建物の描写能力に長けたモデルです。風景全般の生成に役立つでしょう。

建物のディテールを高めたいときは、ex01_sd_basic.sh 内のsteps=15以上に変更します。概ね比例して、生成時間も増加します。steps=15で10分、steps=40で25分くらいです(RAM 16 GBの場合)。

ただし、stepsを増やしすぎると、余計な処理を行うことがあるので、大きければ良いというものでもありません。

Promptを自動生成する
Srable Diffusion web UI の制御方法が分かれば、プロンプトの自動生成は簡単です。
風景画像用プロンプトの自動生成
ex02_sd_scenery.sh は、風景を示すプロンプトと、現在の月、現在時刻の時を組み合わせてプロンプトを自動生成し、Srable Diffusion web UI に渡すサンプル・プログラムです。
webui.sh を実行した状態で、下記を実行してください。
$ cd ~/bash/practical/stable_diffusion/
$ ./ex02_sd_scenery.sh
現在の季節や時刻に応じた風景画像を連続生成します。停止は、[Ctrl]+[C]です。

下記はプロンプト生成部です。変数sceneries、month_unit、hour_unit内に、それぞれ風景、月、時間を代入しておき、プロンプトに組み込みます。
prompt=""
prompt+="A professional landscape photograph of scenery, "
prompt+="realistic DSLR quality, suitable for a calendar. "
prompt+="(A European "${sceneries[$(( $RANDOM % sceneries_num ))]}" "
prompt+=${month_unit}" "${hour_unit}"), "
prompt+="balanced cinematic composition with depth of field, natural colors, "
prompt+="wide-angle view, high resolution, realistic photo style. "
学習モデルの変更で画質向上する
もちろん、学習モデルの変更で画質の向上も可能です。下図は、 architecture_Urban_SDlife_Chiasedamme_V6.0 に変更した場合の一例です。

次は人物の描画に長けた japaneseStyleRealistic_v20 に変更した場合の一例です。人物だけでなく、風景の生成も向上します。

人物画像の生成
次は、人物画像です。標準モデルv1-5-pruned-emaonlyで生成した画像の一例を下図に示します。一部の画像に、自然さを感じにくい部分があると思います。

※ご注意:
本稿で示す「人物」とは全てAIによる生成画像であり、実在する人物を示すものではありません。また、上図の一例はAI生成能力を比較するためのものです。実在する人物に対する偏見や差別を意図したものではありません。「自然な人物」とは、あくまで平均的な人物像との比較表現であり、個性を否定する意図は一切ありません。もし、特定の人物画像や表現に対して不快な印象を持たれた方がいましたら、遠慮なく匿名にて連絡ください(ゲストブック ※匿名と明記ください)。
人物用の学習モデルで画質を向上する
モデルを変更することで、下図のような人物の自然な画像(個性に傾きが少ない画像)を生成できるようになります。

学習モデル japaneseStyleRealistic_v20 は、下記からダウンロードし、フォルダ models → Stable-diffusion 内に保存します。
風景+人物用(japaneseStyleRealistic_v20):
https://civitai.com/models/56287/japanese-style-realistic-jsr
このモデルの特長は自然な日本人女性の画像生成です。このため、男性を指示しても女性が表示されることがあります。

日本人男性を画像生成したい場合は、 beautifulRealistic_v7 が良いでしょう。
人物用(beautifulRealistic_v7):
https://civitai.com/models/25494/beautiful-realistic-asians

どちらのモデルであっても西洋人の生成も可能です。やや東洋系の雰囲気が出ますが、私にとっては、むしろ自然な西洋人に見えます(筆者主観・偏見や差別を意図したものではありません)。

人物画像用プロンプトの自動生成
スクリプトは、ex10_sd_practical.sh です。webui.sh を実行した状態で、下記を実行してください。
$ cd ~/bash/practical/stable_diffusion/
$ ./ex10_sd_practical.sh
生成には約22分の時間を要します(RAM 16GBモデル)。RAMの使用量が8GBを超えることがあります。RAM 8GBモデルの場合は、メモリーの節約と生成解像度を下げるといった対策が必要です。
[PR]書籍 Linux コマンド & シェルスクリプト入門
Linuxコマンドや Bashスクリプトの入門書を書かせていただきました。画像生成AIの応用記事はありませんが、少ない学習量でLinuxコマンドやBashスクリプトを使いこなすことを目標にした一冊です。興味がありましたら、下記から目次をご覧いただければと思います。
Raspberry Pi 5 4GB RAM モデルでの実行結果
本稿で紹介した画像生成には、5GB 以上のRAMを使用します。このため、RAM 4GB モデルの場合は RAM圧縮 とSDカードへのスワップが必須です。また、生成時間も長くなります。
解像度を384×256に下げる
下図は、RAM容量 4GB のモデルでの実行結果の一例です。生成時間短縮のため、解像度は384×256にしました。

生成時間は 16GB モデルの60倍
OSにLite版を使用し、Stable Diffusion のオプションでメモリー節約を設定し、RAM圧縮を設定し、swappinessを10%まで下げたとしても、画像生成中にSDメモリーカードへのスワップが発生します。下記はの画像を Raspberry Pi 5 4GB RAM モデルで生成した時の生成時間です。16 GB モデルの約60倍の時間がかかりました。
| 生成回数 | 生成時間 | 16GB 比較 |
| 1回目 | 6時間 53分 | 83 倍 |
| 2回目 | 5時間 22分 | 64 倍 |
| 3回目 | 4時間 31分 | 54 倍 |
| 4回目 | 5時間 04分 | 61 倍 |
動作の様子はLEDで確認する
4GB RAMモデルでの画像生成中は、コマンドの実行も難しくなります。そこで、LEDの点滅具合で負荷を確認します。

生成中は、0.数秒~数秒の間隔でLEDが瞬時的に点灯し、消灯するような動作となります。
消灯しっぱなしの場合や、消灯している秒数が長い場合は、スワップのIO待ち時間の発生で、画像生成の方は進んでいないことを示しています。この場合、丸1日、かけても終了しません。解像度を下げてSDカードへのメモリスワップを低減してください。
なお、SDカードへの書き込み頻度が高いので、すぐにSDカードの書き換え寿命に至ってしまう場合もあります。スワップ先としては、ドライブレコーダー用の高耐久SDカードや、SSDなど、書き換え耐性の高いドライブの使用を推奨します。もしくは、より少ないメモリーで動作する Stable Diffusion を使用してください。
注意事項
画像生成AIは、実在する写真のような画像を生成することができます。このため、利用には社会のルールや規則を守ることはもちろんのこと、未だ規則化されていない部分の配慮も必要です。
とくに、偶発的に倫理性を損なう画像が生成される懸念や、偶発的に実在する人物に似た画像が生成される懸念、性別や容姿などに偏見や差別を含んでしまう懸念などがあります。筆者が作成したスクリプトにおいても、そういった画像が生成される場合がありますので、生成した画像の取り扱いには十分に注意してください。
また、自分自身の倫理観が社会とずれている部分や、時代とともに変わっている部分、配慮不足といったことも発生し得ます。
本稿の執筆時には、これらについて注意しながら作成しましたが、そのような点が残存する可能性がある点に、ご理解をいただけるよう、お願いいたします。もちろん、ご指摘いただければ、本稿の趣旨を損なわない範囲で修正いたします。
by bokunimo.net

