한정 특가! 연간 플랜을 최대 27% 할인가로 만나고 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.
  • 다음으로 요청 하나를 미리 보기 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 이미지뿐 아니라 배치 영상 생성에도 사용됩니다. 웹 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

현실이 되는 곳 model cost 명령은 견적만 반환합니다. 이미지를 생성하거나 크레딧을 사용하지 않습니다. 플래그 없이 실행하면 모든 모델의 가격을 저렴한 순으로 나열하고, 위와 같이 하나의 모델과 모드로 범위를 좁힐 수도 있습니다. 견적으로 나온 이미지당 비용에 계획된 이미지 수를 곱하면 배치 비용을 추정할 수 있습니다. CSV가 행마다 다른 모델을 지정한다면, 각 모델의 견적을 요청하고 그룹별로 따로 계산하세요.

--dry-run으로 정확한 요청을 미리 확인하세요

배치에 계획한 것과 동일한 모델과 플래그로 대표 프롬프트 하나를 실행하세요.

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 모든 작업이 같은 모델과 파라미터를 공유할 때. 한 줄에 완전한 프롬프트 하나씩 저장하세요.

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

각 프롬프트는 한 물리적 줄에 유지하세요. 이후의 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 필드는 큰따옴표를 사용해야 합니다. 따옴표로 묶인 필드 안의 따옴표는 따옴표 두 개로 표현하세요. 다음을 기반으로 한 셸 루프 IFS=, 해당 케이스를 올바르게 파싱할 수 없으므로, CSV 변형에서는 Python 같은 CSV 인식 파서를 사용해야 합니다 csv 모듈. 이후 스크립트가 헤더를 직접 읽으므로 헤더 이름은 그대로 유지하세요.

while-read 루프로 배치 제출하기

다음 스크립트를 이렇게 저장하세요 submit.sh. 한 줄에 하나씩 프롬프트를 읽어 각 생성을 제출하고, 반환된 모든 작업 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가 다른 필드로 식별자를 반환하는 경우, 응답 하나를 검사해 다음을 조정하세요 .id 표현식.

현실이 되는 곳 --json 플래그는 표준 출력을 기계가 읽을 수 있는 상태로 유지합니다. OpenArt는 진행 상황과 페이지네이션 메시지를 표준 오류로 보내므로, 명령 치환은 다음과 같은 JSON만 캡처합니다 jq 이 필요합니다. 없이는 --json, 사람이 읽을 수 있는 출력이 다음에 들어갈 수 있습니다 response 변수, 그리고 ID 파싱이 실패하는 원인이 됩니다.

현실이 되는 곳 --async 플래그는 OpenArt가 작업을 수락하면 각 명령이 즉시 반환되도록 합니다. 이 플래그가 없으면 루프는 다음 이미지를 제출하기 전에 하나의 이미지를 기다리며, 프롬프트마다 기본 5분 타임아웃까지 대기할 수 있습니다. 비동기 제출을 사용하면 루프가 전체 배치를 먼저 큐에 넣을 수 있습니다.

제출이 성공할 때마다 식별자 하나가 다음에 추가됩니다 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 필드를 OpenArt 명령에 전달하기 전에 모듈이나 다른 CSV 지원 도구를 사용하세요.

모두 제출한 뒤 결과 수집하기

사용 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 차단 없이 상태를 한 번만 확인하고 싶을 때. 수동 확인이나 예약된 폴링 작업이 명령 하나만 바꿔 동일한 루프를 실행할 수 있습니다.

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

현실이 되는 곳 wait 루프는 각 ID마다 일시 정지하지만, 이미지 생성을 순차적으로 만들지는 않습니다. 모든 작업은 앞선 비동기 제출 이후에 시작되므로, 루프가 첫 번째 작업을 기다리는 동안에도 이후 작업들은 계속 실행됩니다. CI에서는, wait 명확한 완료 지점을 제공합니다. 수동 모니터링의 경우, get 현재 상태를 확인하고 즉시 반환할 수 있게 해줍니다.

OpenArt CLI로 할 수 있는 그 밖의 것들

이 튜토리얼은 한 가지 워크플로에 집중합니다. 텍스트 프롬프트 목록을 이미지 배치로 바꾸는 것입니다. CLI는 그보다 더 많은 영역을 다루므로, 별도의 도구를 만들기 전에 무엇이 있는지 알아두는 것이 좋습니다.

이미 가지고 있는 이미지를 변경할 수도 있습니다. 컴퓨터에 있는 사진이나 링크를 지정하고, 수정할 내용을 설명하면 처음부터 생성하는 대신 새 버전을 돌려받습니다. 영상 쪽에서는 설명을 바탕으로 영상을 만들거나 정지된 사진에 생명을 불어넣으며, 선택한 모델이 허용하는 한 길이, 형태, 해상도를 원하는 대로 조절할 수 있습니다.

생성 외에도 CLI는 작업을 정돈해 줍니다. 프로젝트와 워크스페이스를 전환하고, 참조 이미지를 한 번만 업로드해 매번 같은 파일을 다시 올리는 대신 이후 프롬프트에서 재사용할 수 있습니다. 모든 결과는 공유 가능한 링크로 보관하거나 폴더로 바로 다운로드할 수 있으며, 지금까지 만든 것을 되돌아보거나, 진행 중인 작업을 확인하거나, 완료될 때까지 기다릴 수 있습니다.

이 중 어느 것도 이 튜토리얼의 배치 패턴을 바꾸지 않습니다. 단지 동일한 터미널 우선 방식이 단순한 텍스트-이미지 작업을 넘어 확장된다는 뜻입니다. OpenArt의 CLI 개요 이 각각의 뒤에 있는 명령을 위한 것.

이 배치 워크플로가 실제로 사용되는 상황

몇 가지 구체적인 사례를 보면 팀이 웹 앱 대신 스크립트 배치를 선택하는 이유를 알 수 있습니다.

제품 카탈로그 변형. 500개 SKU 스프레드시트를 가진 이커머스 팀이 하나를 생성합니다 제품 이미지 행마다, 제품 설명을 CSV 변형을 통해 처리하며, 각 행의 모델과 크기를 이미지가 사용될 위치에 맞춥니다(제품 그리드에는 정사각형, 스토리 광고에는 세로형).

콘텐츠 에셋 월. 콘텐츠 팀이나 성장 팀에 50개가 필요합니다 썸네일 변형 A/B 테스트를 점심 전에 진행하려는 경우. 텍스트 파일 프롬프트 목록과 while-read 루프를 사용하면 웹 앱에서 50번 클릭하는 대신, 프롬프트를 작성하는 시간만에 50개를 모두 제출할 수 있습니다.

현지화된 크리에이티브 세트. 마케팅 팀은 동일한 기본 콘셉트를 다음과 같은 세트로 변환합니다 광고 크리에이티브 수십 개의 프롬프트에 걸친 변형으로, 각각 특정 시장이나 채널을 위한 다른 설정, 모델, 또는 화면비를 사용하며, CSV 변형으로 행마다 이러한 필드를 다르게 지정합니다.

CI 및 에이전트 파이프라인. 소스 데이터가 변경될 때마다 야간 작업이 고정된 미리보기 이미지 세트를 다시 생성하거나, 이미 셸 명령을 실행하는 에이전트가 더 큰 도구 호출 워크플로의 일부로 생성 작업을 제출합니다. 다음과 같은 동일한 패턴입니다 Claude로 제품 광고 생성하기. 둘 다 필요합니다 --json 브라우저 세션이 아니라 출력과 비대화형 종료 코드를 사용합니다.

웹 앱이나 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 없이 더 긴 타임아웃을 설정하려면 어떻게 하나요?

현실이 되는 곳 --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로 이미지, 영상, 캐릭터, 스토리를 하나의 플랫폼에서 만드는 수백만 크리에이터와 함께하세요.

무료로 시작하기 →