期間限定オファー!年間プランが最大27%OFF、1年間の無限のクリエイティビティを解き放とう。

プランを見る ›
機能ガイド

OpenArt CLIで画像の一括生成を設定する方法

O
Evelyn
Sep 8, 2026 · 6分で読めます
How to Set Up Bulk Image Generation With OpenArt CLI

OpenArt MCP & CLI - AIエージェント内で画像・動画を生成

要約

  • 実行 openart model list、次に料金を見積もる openart model cost --model <id> --mode text2image.
  • 次で1つのリクエストをプレビューします: openart generate image "<prompt>" --model <id> --dry-run.
  • bash ループを使って次を呼び出します openart generate image "$prompt" --model <id> --json --async をすべてのプロンプトに対して。
  • 各JSONレスポンスを解析してジョブIDを保存し、後で次のコマンドで結果を収集します openart creation wait <job-id> または一度確認する openart creation get <job-id>.
  • 繰り返し実行するバルクジョブ、CIパイプライン、シェルベースのエージェントには、このワークフローを選びましょう。同じパターンは次にも応用できます: openart generate video 画像だけでなくバッチ動画生成にも。Web UIは探索的な作業に、OpenArt MCPは対話的な生成に適しています。

何かをスクリプト化する前に

このチュートリアルは、バイナリがインストール済みで認証も完了していることを前提としています。まだの場合は、コマンド一つでインストールし、ブラウザからサインインしてください。

curl -fsSL https://raw.githubusercontent.com/OpenArt-AI/cli/main/install.sh | sh
openart login

実際のクレジットを消費するバッチをキューに入れる前に、アカウント、プラン、クレジット残高を確認してください。

openart account

Windowsでのインストール手順、特定バージョンの固定、コマンドリファレンスの全文については、以下をご覧ください: CLI GitHub リポジトリ ここでセットアップを繰り返すのではなく。

支出前にモデルの適合性とコストを確認する

バッチループを組む前に、テキストから画像を生成できるモデルを選びましょう。OpenArtは新しい選択肢を追加していくため、モデルの提供状況や機能は変わる可能性があります。記憶に頼った名前や暗黙のデフォルトに依存しないようにしましょう。

openart model list

利用可能なモデルを確認し、テキストから画像への対応をチェックして、使いたいモデルIDをコピーします。IDを変数に保存しておくと、後続コマンドでの編集ミスを減らせます。

幅、高さ、スタイルフィールドなど、モデルが受け付けるパラメータをバッチに追加する前に正確に確認する必要がある場合は、そのフォームを確認してください。

openart model form "$MODEL_ID" text2image
MODEL_ID="<model-id>"

ジョブを送信する前に、モデルの画像単価を確認してください。

openart model cost \
  --model "$MODEL_ID" \
  --mode text2image

the model cost コマンドは見積もりを返すだけです。画像は生成されず、クレジットも消費されません。フラグを付けずに実行すると、全モデルの価格を安い順に一覧表示します。上記のように1つのモデルとモードに絞ることもできます。1画像あたりの見積もりコストに予定枚数を掛けると、バッチ全体のコストを見積もれます。CSVで行ごとに異なるモデルを割り当てている場合は、各モデルの見積もりを取得し、グループごとに別々に計算してください。

--dry-run で正確なリクエストをプレビュー

バッチで予定しているのと同じモデルとフラグで、代表的なプロンプトを1つ実行します。

MODEL_ID="your-model-id"
openart generate image \
  "A red bicycle leaning against a brick wall at sunset" \
  --model "$MODEL_ID" \
  --json \
  --async \
  --dry-run

このコマンドは、OpenArtが送信するリクエスト(プロンプト、モデル、生成パラメータを含む)を表示します。ドライラン中、OpenArtはジョブを送信せず、クレジットも消費しません。

コスト見積もりは各画像の価格を推定します。ドライランはリクエスト自体を検証します。バッチに使う予定のパラメータをこのコマンドに追加し、出力を確認して、実際のプロンプトファイルを読み込む前に予期しないデフォルトやクォートの問題を修正してください。

プロンプトリストを整形する

使用 prompts.txt すべてのジョブが同じモデルとパラメータを共有する場合。1行に完全なプロンプトを1つずつ記載します。

A watercolor cabin beside a frozen lake
A studio photo of a red ceramic teapot
An isometric library with warm lighting

各プロンプトは1つの物理行に収めてください。後続の read -r ループはバックスラッシュを保持し、クオートは "$prompt" スペースや引用符もプロンプトの一部として渡します。空のプロンプトを送信する意図がない限り、空行はスキップしてください。

使用 prompts.csv 行ごとに異なるモデルやサイズが必要な場合。

prompt,model,width,height
"A cabin beside a lake","model-id-a",1024,1024
"A teapot, red ceramic","model-id-b",768,1024
"A sign reading ""OPEN""","model-id-a",1024,768

カンマを含むCSVフィールドはダブルクォートで囲む必要があります。引用符付きフィールド内の引用符は、引用符2つで表します。次に基づくシェルループ IFS=, こうしたケースを正しく解析できないため、CSVバリアントではPythonのようなCSV対応パーサーを使用する必要があります csv モジュール。後のスクリプトが直接読み取るため、ヘッダー名は変更しないでください。

while-read ループでバッチを送信

次のスクリプトを次の名前で保存します submit.sh。1行につき1プロンプトを読み込み、各生成を送信し、返されたジョブIDをすべて次に追記します job-ids.txt.

#!/usr/bin/env bash
set -uo pipefail
MODEL_ID="replace-with-model-id"
PROMPT_FILE="${1:-prompts.txt}"
JOB_FILE="${2:-job-ids.txt}"
printf '' > "$JOB_FILE"
while IFS= read -r prompt || [[ -n "$prompt" ]]; do
  [[ -z "$prompt" ]] && continue
  if ! response=$(openart generate image "$prompt" \
    --model "$MODEL_ID" \
    --json \
    --async); then
    printf 'Submission failed for prompt %s\n' "$prompt" >&2
    continue
  fi
  if ! job_id=$(jq -er '.id' <<&2
    continue
  fi
  printf '%s\n' "$job_id" >> "$JOB_FILE"
  printf 'Submitted %s\n' "$job_id" >&2
done &2

置き換え replace-with-model-idスクリプトを実行可能にし、必要に応じて別のプロンプトファイルを渡します。

chmod +x submit.sh
./submit.sh prompts.txt

スクリプトには次が必要です jq で各JSONレスポンスからIDを抽出します。インストール済みのCLIが別のフィールドで識別子を返す場合は、レスポンスを1つ確認して調整してください .id 式。

the --json フラグは標準出力を機械可読に保ちます。OpenArt は進捗やページネーションのメッセージを標準エラーに送るため、コマンド置換は次のJSONだけをキャプチャします jq 必要です。次がないと --json、人間が読める出力が入り込む可能性があります response 変数となり、ID解析が失敗する原因になります。

the --async フラグを付けると、OpenArtがジョブを受け付けた時点で各コマンドが返ります。付けないと、ループは次を送信する前に1枚の画像を待ち、プロンプトごとにデフォルトの5分タイムアウトまで待つ場合があります。非同期送信を使えば、ループはまずバッチ全体をキューに入れられます。

送信が成功するたびに、識別子が1つ追加されます: job-ids.txt.

job_abc123
job_def456
job_ghi789

収集ループはそのファイルを直接読み込めます。送信に失敗した場合は標準エラーにエラーが出力され、無効なエントリはファイルに追加されません。

CSVバリアントを実行

CSVループは各行をフィールドに分割し、その行のモデルを生成コマンドに渡します。

#!/usr/bin/env bash
> job-ids.txt
tail -n +2 prompts.csv |
while IFS=, read -r prompt model
do
  model=${model%$'\r'}
  [ -z "$prompt" ] && continue
  response=$(
    openart generate image "$prompt" \
      --model "$model" \
      --json \
      --async
  ) || continue
  printf '%s\n' "$response" |
    jq -r '.id' >> job-ids.txt
done

プレーンテキストのループと比較して、 IFS=, read -r prompt model は各行を分割し、 --model "$model" が固定のモデルIDを置き換えます。次の tail コマンドは、次のようなヘッダー行をスキップします prompt,model.

Bashのフィールド分割は完全なCSVクオートルールを実装していません。プロンプトにカンマやエスケープされた引用符が含まれる場合は、Pythonの csv モジュールや、CSVに対応した別のツールでフィールドを処理してから、OpenArtコマンドに渡してください。

すべて送信できたら結果を収集する

使用 openart creation wait は、送信したすべてのジョブが終了状態に達してからスクリプトを終了させたい場合に使います。ループは完了した各作成レコードをJSONとして保存し、エラーを返したジョブを記録します。

mkdir -p results
: > failed_job_ids.txt
while IFS= read -r job_id; do
  [ -z "$job_id" ] && continue
  if openart creation wait "$job_id" --json \
    > "results/${job_id}.json"; then
    printf 'Completed %s\n' "$job_id"
  else
    printf '%s\n' "$job_id" >> failed_job_ids.txt
    printf 'Failed %s\n' "$job_id" >&2
  fi
done < job_ids.txt

各JSONファイルには、返されたアセット情報を含む最終的な作成データが格納されています。次の処理ステップでこれらのファイルを読み込み、必要に応じて生成された画像をダウンロードまたは移動できます。

使用 openart creation get は、ブロックせずに1回だけステータスを確認したい場合に使います。手動での確認や定期的なポーリングジョブでも、コマンドを1つ変えるだけで同じループを実行できます。

mkdir -p status
while IFS= read -r job_id; do
  [ -z "$job_id" ] && continue
  openart creation get "$job_id" --json \
    > "status/${job_id}.json"
done < job_ids.txt

the wait ループは各IDで一時停止しますが、画像生成を直列にするわけではありません。すべてのジョブは前の非同期送信の後に開始されているため、ループが最初のジョブを待つ間も後続のジョブは実行を続けます。CIでは、 wait は明確な完了ポイントを提供します。手動でモニタリングする場合は、 get を使えば、現在の状態を確認してすぐに結果を返せます。

OpenArt CLIでできるその他のこと

このチュートリアルは1つのワークフロー、つまりテキストプロンプトのリストを画像のバッチに変えることに焦点を当てています。CLIはそれ以上の機能を備えており、専用のツールを別途構築する前に、何ができるかを知っておく価値があります。

すでにお持ちの画像を変更することもできます。パソコン上の写真やリンクを指定し、編集内容を説明すれば、ゼロから生成するのではなく、新しいバージョンが返ってきます。動画では、説明文から動画を作成したり、静止画に命を吹き込んだりでき、選んだモデルが対応している範囲で長さ・形・解像度を自由にコントロールできます。

生成だけでなく、CLIは作業を整理された状態に保ちます。プロジェクトやワークスペースを切り替えたり、参照画像を一度アップロードすれば、毎回同じファイルを上げ直すことなく後続のプロンプトで再利用できます。生成結果はすべて共有リンクとして保存したり、フォルダへ直接ダウンロードしたりでき、これまで作ったものを振り返ったり、実行中のジョブを確認したり、完了を待ったりすることもできます。

これらはいずれもこのチュートリアルのバッチパターンを変えるものではありません。つまり、同じターミナル優先のアプローチが、単純なテキストから画像へのジョブを超えて応用できるということです。OpenArtの CLIの概要 これらそれぞれの背後にあるコマンドについて。

このバッチワークフローが実際に活躍する場面

いくつかの具体例から、チームがWebアプリではなくスクリプト化したバッチに頼る理由がわかります。

生成にとどまらず、CLIは作業の整理にも役立ちます。プロジェクトやワークスペースを切り替えたり、参照画像を一度アップロードすれば、同じファイルを毎回アップロードし直すことなく、後続のプロンプトで再利用できます。すべての結果は共有可能なリンクとして保持したり、フォルダーに直接ダウンロードしたりできます。また、これまでに作成したものを振り返ったり、実行中のジョブを確認したり、完了を待ったりすることもできます。 500 SKUのスプレッドシートを持つEコマースチームが1つを生成する 製品画像 製品説明をCSVバリアントに通すことで行ごとに生成し、各行のモデルとサイズを画像の掲載先に合わせられます(製品グリッドなら正方形、ストーリー広告なら縦型)。

コンテンツアセットウォール。 コンテンツチームやグロースチームが50個を必要とする サムネイルのバリエーション 昼食前のA/Bテスト用に。テキストファイルのプロンプトリストと while-read ループを使えば、Webアプリで50回クリックする代わりに、プロンプトを書くのと同じ時間で50件すべてを送信できます。

ローカライズされたクリエイティブセット。 マーケティングチームは、同じ基本コンセプトを一連の 広告クリエイティブ バリアントに変換し、それぞれ特定の市場やチャネル向けに異なる設定・モデル・アスペクト比を用意します。CSVバリアントを使えば、これらのフィールドを行ごとに変えられます。

CIおよびエージェントパイプライン。 ソースデータが変更されるたびに一定数のプレビュー画像を再生成する夜間ジョブや、すでにシェルコマンドを実行しているエージェントが、より大きなツール呼び出しワークフローの一部として生成を送信するケース——その背後にあるのも同じパターンです Claudeから商品広告を生成する。どちらも必要とします --json ブラウザセッションではなく、出力と非対話型の終了コードを使います。

Webアプリや MCP ではなく CLI バッチワークフローを使うべきタイミング

スクリプトで繰り返しジョブを送信し、ジョブIDを保持し、手動入力なしで結果を収集する必要がある場合は、CLIのバッチワークフローを使います。定期的なCI実行、シェルパイプライン、大量のプロンプト処理、ターミナルコマンドを実行するエージェントのツール呼び出しに適しています。

使用 OpenArt 各結果を確認しながらプロンプトや設定を調整したい、一度きりのクリエイティブなセッションに最適です。OpenArtの MCP は、ClaudeやChatGPTのようなエージェント内で会話型の生成を実現します。ここでは、シェルスクリプトの代わりに会話がリクエストを制御します。

If the goal is not just generating images but also routing each result somewhere else automatically, such as posting a finished image to Telegram, Slack, or Discord, that behavior belongs to an agent, not to this batch script. An agent framework that already supports tool calling can call OpenArt MCP to generate the image, then call a separate messaging tool to deliver it. The while-read loop in this tutorial submits jobs and writes results to disk. It does not send anything anywhere, so a delivery step still needs its own script or agent on top of it.

あなたの作業スタイルに合ったインターフェースを選びましょう。CLIのGitHubリポジトリには、インストール方法と全コマンドのリファレンスがあります。上記のMCP概要では、ファイル駆動のバッチ処理よりもチャットベースの生成がワークフローに合う場合について説明しています。

よくある質問

バッチの途中でジョブが失敗するとどうなりますか?

失敗したジョブは、すでに送信済みのジョブをキャンセルしません。収集ループでは失敗したジョブIDを記録し、スクリプトがエラーで終了しない限り処理を続行してください。失敗したジョブは次のコマンドで確認できます: openart creation get <job-id>.

--async を使わずにタイムアウトを長く設定するには?

the --timeout <seconds> オプションは、同期生成コマンドの待機時間を延長します。例えば次を追加します --timeout 900 を使うと最大15分待機します。サポートされる値は次で確認してください: openart generate image --help.

--asyncを-oや--outputと一緒に使えますか?

非同期送信は画像が存在する前にジョブIDを返すため、generate コマンドは完成した画像をすぐに保存できません。代わりに送信時にジョブIDを保存してください。次を使用します openart creation wait <job-id> その後に結果を収集し、出力を処理します。

失敗したプロンプトだけを再実行するには?

再実行には、各プロンプトと送信済みジョブIDを対応付けたレコードが必要です。収集時に、失敗したIDとそのプロンプトを別ファイルに書き出します。無効なプロンプトやパラメータを修正した後、そのファイルを送信ループに再度読み込ませてください。

何百ものジョブを一度に送信すると、レート制限に達しますか?

このループはシェルが繰り返せる速さで送信するため、大きなバッチではレート制限を超えてしまうことがあります。短い待機を追加しましょう sleep 0.5 を各送信後にループ内で実行するか、カウンターを追跡して20〜50プロンプトごとに数秒停止することで、一気に送信するのではなくリクエストレートを一定に保てます。

--dry-run は --async と併用できますか?

はい。両者を組み合わせると、本来は非同期で実行されるジョブの正確なリクエストを、送信せずクレジットも消費せずにプレビューできます。テスト中はサンプルコマンドで両方のフラグをオンにしておき、その後は片方だけを外します --dry-run を、実際のバッチに移行する際に。

どの画像がどのプロンプトから生成されたかを管理するには?

ジョブIDだけでは元のプロンプトテキストが分かりません。送信時に、プロンプトとそのジョブIDをログファイルの同じ行に書き込みます。例えば: printf '%s\t%s\n' "$job_id" "$prompt" >> submissions.tsv、こうすることで後続のステップで完成した画像を、それを生成したプロンプトに紐付けられます。

完成した画像はどこに保存されますか?

openart creation waitopenart creation get は画像ファイルそのものではなく、ジョブのメタデータとアセットURLをJSONで返します。次のようなダウンロード手順を追加してください: curl -o "results/${job_id}.png" "$url" ワークフローがリンクではなくディスク上のファイルを必要とする場合は、そのJSONのURLを使用します。

このバッチワークフローは動画生成でも使えますか?

はい。CLIは画像コマンドを動画向けにも反映しています: openart generate video "<prompt>" --model kling-3-omni 同じ方法でビデオジョブを送信します openart generate image は画像ジョブを送信します。次を差し替えてください: generate image 対象 generate video 送信ループ内で、同じ --json/--async フラグに加えて openart creation wait/openart creation get 収集パターンを適用してください。次を実行します: openart generate video --help を実行して、動画特有のフラグ(尺など)を確認してから大量のバッチをスクリプト化してください。このチュートリアルの例とテストは特に画像生成を対象としているためです。

制限なく、思いのままに

OpenArtで画像・動画・キャラクター・ストーリーを生成する、数百万人のクリエイターに仲間入りしましょう。すべてが1つのプラットフォームに。

無料で始める →