Seedance 2.5 is live — 30-second cinematic video with native audio & real-person references
상품 사진 API: 하나의 상품 사진을 판매 준비 완료 이미지로 변환하기
2026/09/03

상품 사진 API: 하나의 상품 사진을 판매 준비 완료 이미지로 변환하기

상품 아이덴티티를 보존하면서 1K에서 시작해 모든 생성 결과를 체계적으로 검증하고 승인된 이미지당 실제 비용을 정확히 추적하는 상품 사진 API 워크플로우를 구축하세요.

하나의 평범한 상품 사진이 제한된 정면 또는 사각형 스토어 이미지 세트에 충분할 수 있습니다. 다만 API에 제품을 변경하도록 요청하고, 제품을 재창작 하도록 하지 않아야 합니다. 실제 워크플로우는 간단합니다. 변경될 수 없는 세부 사항을 적어두고, 저렴한 1K 후보를 하나 생성한 후, 고정된 체크리스트에 대해 거부하고, 명명된 실패에 대해서만 품질을 높이거나 모델을 변경합니다.

마지막 부분이 중요합니다. 모델 호출이 성공적으로 완료되어도 여전히 캡이 다른 병, 로고가 희석된 병, 또는 항목이 떠 있게 하는 그림자를 줄 수 있습니다. 따라서 추적할 가치가 있는 수는 광고된 생성 가격이 아닙니다. 그것은 승인된 이미지당 비용이며, 거부한 모든 완료된 후보를 포함합니다.

이 가이드의 요율은 2026년 9월 3일에 확인했습니다. 이들은 변할 수 있으므로, 고객 견적이나 하드 예산 한계로 전환하기 전에 라이브 모델 페이지를 읽으세요.

TL;DR

  • 소유하고 있는 상품 사진부터 시작하세요. 판매하려는 각도에서 한 개의 방해받지 않는 항목을 보여줍니다.
  • 형태, 비율, 재료, 색상 구분, 하드웨어 및 기존 라벨 표시에 대한 아이덴티티 계약을 작성하세요. 장면이 변하도록 하되; 이러한 세부 사항을 변경하지 마세요.
  • 여기서 가장 저렴한 첫 번째 패스는 Nano Banana 2 Lite입니다. 2026년 9월 3일에 확인했을 때 하나의 완료된 1K 이미지에 대해 15 credits, 즉 $0.015입니다.[1]
  • 하나의 후보를 사용하여 프롬프트를 검증하세요. 상품이 검토를 통과할 때까지 배치를 주문하지 마세요.
  • 모든 종료 작업에서 정산된 usage.credits 를 읽으세요. 완료된 시도에 대해 청구된 총 credits를 사람이 승인한 이미지 수로 나누세요.
  • 생성된 픽셀에서 정확한 가격, 용량, 성분, 인증 표시 및 법적 복사본을 제외하세요. 확인된 아트워크를 보존하거나 합성하세요.

상품 사진이 광택나 보인다고 해서 판매 준비가 완료된 것은 아닙니다

사용자가 간단한 상품 사진을 업로드해 형태 변경, 손상된 라벨 문구, 부자연스러운 조명이나 일관성 없는 출력 없이 깔끔한 전자상거래 이미지를 얻을 수 있을까요? 거부된 결과마다 추가 생성이 필요할 수 있으므로 비용도 중요합니다.

그것은 "이 사진을 전문적으로 만들어라"보다 더 나은 문제 정의입니다. 판매 준비 완료 자산은 관찰 가능한 확인을 통과해야 합니다.

확인통과 조건거부할 때
상품 개수정확히 요청된 하나의 항목중복, 뚜껑 또는 느슨한 부품이 나타남
기하학실루엣 및 비율이 원본과 일치캡, 손잡이, 펌프, 모서리 또는 패키지 너비 변경
재료마감 및 질감이 인식 가능함매트가 광택으로, 투명이 불투명으로, 또는 그레인이 사라짐
색상상품 색상 블록이 같은 장소에 유지화이트 밸런스가 세트가 아닌 상품을 변경
라벨기존 표시가 제자리에 유지되고 새로운 클레임이 없음단어가 변형되거나 사라지거나 발명됨
자르기전체 항목이 유용한 안전 공간과 함께 보임밑바닥, 캡, 손잡이 또는 그림자가 잘림
그라운딩접촉 그림자가 표면 및 조명과 일치항목이 떠 있거나 불가능한 그림자를 드리움
전달측면 비율, 픽셀 크기 및 파일 형식이 대상에 맞음파일에 안전하지 않은 자르기가 필요하거나 사용할 수 없는 가장자리가 있음

아름다운 이미지가 이 표를 실패할 수 있습니다. 반대로, 모든 상품 사실을 보존하는 절제된 흰 색 청소가 더 가치 있는 자산일 수 있습니다.

해결해야 할 실패로 모델을 선택하세요

보편적인 "최고의 상품 사진 모델"은 없습니다. 편집을 표현할 수 있는 가장 저렴한 경로부터 시작한 다음, 검토에서 첫 번째 경로가 부족한 이유를 알려줄 때만 이동하세요.

단계모델 및 요청 계층라이브 생성 요금사용 시기
레이아웃 패스nano-banana-2-lite, 1K$0.015 / 15 credits하나의 소스, 하나의 간단한 배경 및 조명 변경
유연한 편집gpt-image-2, 1K$0.030 / 30 credits더 많은 종횡비 선택이나 대상 편집 워크플로우가 필요한 경우
프로덕션 스틸doubao-seedream-5-0-pro, 기본 1K$0.032 / 32 credits재료, 조명, 구성 또는 다중 참조 제어가 더 어려운 부분인 경우
복잡하거나 더 큰 자산gemini-3-pro-image-preview, 1K 또는 2K$0.030 / 30 credits요약이 밀집되어 있거나 참조가 많거나 나중에 4K 패스가 정당한 경우

이들은 현재 reAPI 요금입니다. 상류 공급업체 가격 목록이 아닙니다. Nano Banana 2 Lite는 하나의 1K 이미지를 반환하고 최대 10개의 공개 이미지 참조를 수락합니다. GPT Image 2는 1K, 2K 및 4K 계층을 제공합니다. Seedream 5.0 Pro는 기본 1K 및 고급 2K 출력을 제공하며, 최대 10개의 참조가 있습니다. Nano Banana Pro도 4K에 도달합니다. 같은 날짜에 정산된 4K 가격은 $0.033, 즉 33 credits였습니다.[1][2][3][4]

단계 레이블은 워크플로우 권장 사항이지, 공급업체 순위가 아닙니다. ByteDance는 Seedream 5.0 Pro를 구조적 일관성, 재료 및 조명 제어, 다중 이미지 융합 및 생산 지향적 편집 주변에 배치합니다. 소스 사진 및 수락 테스트는 여전히 이러한 기능이 이 특정 상품을 도움이 되는지 결정합니다.[8]

해상도는 잘못된 기하학을 위한 수리 도구가 아닙니다. 1K 초안이 캡을 변경하면, 4K 재실행이 더 선명한 잘못된 캡을 제공할 수 있습니다. 먼저 아이덴티티 지침을 수리하거나 유용한 참조를 추가하세요. 구성과 상품이 통과한 후에만 해상도를 높이세요.

더 광범위한 기능 트레이드오프의 경우, 전체 GPT Image 2 대 Nano Banana Pro 비교 또는 Seedream 5.0 Pro 대 GPT Image 2 비교를 사용하세요. 이 가이드의 나머지 부분은 상품 사진 작업에 머무릅니다.

비용을 소비하기 전에 소스 사진을 준비하세요

소스를 소유하고 있는지 또는 새로운 상업용 자산으로 변환할 수 있는 권한이 있는지 확인하세요. 마켓플레이스 목록, 다른 카탈로그 또는 고객 업로드가 새로운 상용 자산으로 클리어되었다고 가정하지 마세요. 적용 가능한 라이선스, 약관 및 고객 동의를 확인하세요.

소스는 스튜디오 배경이 필요하지 않습니다. 상품을 읽을 수 있도록 하는 것이 필요합니다.

  • 밑바닥 및 상단을 포함하여 한 개의 완전한 항목을 표시하세요.
  • 결과에서 원하는 것과 동일한 광각을 사용하세요.
  • 손가락, 테이프, 눈부심 및 소품을 중요한 가장자리에서 멀리 두세요.
  • 재료를 숨기는 검은 색 또는 불타는 하이라이트를 피하세요.
  • 캡, 손잡이, 펌프, 패스너 및 색상 경계를 검사하기 쉽게 만드세요.
  • 요청된 결과가 첫 번째 사진이 보여주지 않는 측면을 노출할 때 또 다른 소유한 각도를 제공하세요.

한 장의 사진은 3D 모델이 아닙니다. 숨겨진 뒷면에 무엇이 인쇄되어 있는지 또는 보이지 않는 메커니즘이 어떻게 형성되었는지 증명할 수 없습니다. 증거가 없을 때는 다른 참조를 캡처하거나 해당 표면을 보기에서 벗어나세요.

API는 미디어를 공개 HTTP(S) URL로 수락합니다. Base64 문자열 및 data: URL은 거부되므로 먼저 소스를 자신의 R2, S3 또는 동등한 객체 저장소에 업로드하세요.[1]

상품 아이덴티티 계약을 작성하세요

시각적 프롬프트를 작성하기 전에, 소스를 짧은 검사 기록으로 변환하세요. 이것은 아직 모델을 위한 산문이 아닙니다. 그것은 프롬프트와 검토자 모두가 사용할 사양입니다.

{
  "product": "250 ml skincare bottle",
  "must_keep": [
    "exactly one bottle",
    "tall rounded-rectangle silhouette",
    "short matte-white pump",
    "cobalt band at the lower quarter",
    "warm-white body with a satin finish",
    "front label position and all existing marks",
    "height-to-width ratio"
  ],
  "may_change": [
    "background",
    "surface",
    "lighting direction",
    "contact shadow",
    "crop room"
  ],
  "must_not_create": [
    "new words or logos",
    "price or discount badge",
    "ingredients or certification claim",
    "extra bottle, cap, pump, or packaging"
  ]
}

"일관성 유지"는 검토자에게 가리킬 것이 없습니다. "코발트 밴드는 하단 사분기에 머물러 있습니다"는 합니다.

첫 번째 상품 사진 프롬프트를 작성하세요

협상할 수 없는 아이덴티티를 먼저 넣고, 변경할 수 있는 것을 말한 다음, 샷을 설명하세요. 모델은 긴 사진 형용사 목록보다 구체적인 경계를 더 잘 따르는 경향이 있습니다.

Use Image 1 as the exact product identity.

Keep exactly one product. Preserve its silhouette, dimensions, pump position,
warm-white satin material, cobalt color boundary, surface texture, and every
existing label mark. Do not redesign, relabel, remove, or add branding.

Change only the setting: place the product centered on a warm-white seamless
studio sweep. Use a large soft key light from the upper left, even front detail,
and a natural contact shadow directly below the bottle. Keep the whole product
visible with at least 10% crop room on every side.

No hands, people, props, boxes, extra products, added text, badges, dramatic
reflections, clipped edges, or floating object.

프롬프트는 모델에 라벨을 개선하도록 요청하지 않습니다. 라벨 타이포그래피가 상업적으로 중요한 경우, "개선"은 다시 그리도록 초대입니다. 원본 판을 보존하거나 생성 후 확인된 아트워크를 추가하세요.

첫 번째 상품 사진 API 작업을 제출하세요

미디어 API 키를 만들고, 예제 URL을 공개 소스 이미지로 바꾸고, Nano Banana 2 Lite 작업을 하나 제출합니다. 이것은 유료 요청입니다. 배치가 아닌 하나의 후보입니다.

curl https://reapi.ai/api/v1/images/generations \
  -H "Authorization: Bearer $REAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nano-banana-2-lite",
    "prompt": "Use Image 1 as the exact product identity. Keep exactly one product. Preserve its silhouette, dimensions, pump position, material, color boundaries, surface texture, and every existing label mark. Do not redesign, relabel, remove, or add branding. Change only the setting: center it on a warm-white seamless studio sweep with a soft key light from upper left and a natural contact shadow. Keep the whole product visible with at least 10% crop room. No hands, people, props, extra products, added text, badges, clipped edges, or floating object.",
    "image_urls": ["https://assets.example.com/my-product.jpg"],
    "aspect_ratio": "1:1"
  }'

응답에는 idstatus: "processing" 이 포함됩니다. ID를 저장합니다. 그런 다음 completed 또는 failed 에 도달할 때까지 2~3초마다 작업 엔드포인트를 폴링합니다.

TASK_ID="task_replace_me"

curl "https://reapi.ai/api/v1/tasks/$TASK_ID" \
  -H "Authorization: Bearer $REAPI_API_KEY"

폴링은 credits를 소비하지 않습니다. 완료된 이미지 작업은 output.image_urls 의 파일 및 usage.credits 의 정산된 요금을 반환합니다.[5]

클라이언트가 응답을 읽기 전에 연결을 잃었을 때 POST를 무조건 반복하지 마세요. 첫 번째 요청이 이미 유료 작업을 만들었을 수 있습니다. 응답 및 작업 ID가 도착하는 즉시 기록합니다. GET을 안전하게 재시도할 수 있지만, 다른 생성을 만들기 전에 신중한 결정을 내리세요.

제한된 폴링이 있는 완전한 Node.js 러너

다음 스크립트는 SDK 없이 Node.js 20 이상에서 작동합니다. 이 가이드에서 사용되는 4가지 1K 요청 형태를 지원하고, 정확히 한 번 제출하고, 5분 로컬 폴링 마감을 사용하고, 정산된 credits를 인쇄하고, 성공한 파일을 현재 디렉토리로 복사합니다.

import { writeFile } from 'node:fs/promises';

const apiKey = process.env.REAPI_API_KEY;
const sourceUrl = process.env.SOURCE_IMAGE_URL;
const model = process.env.IMAGE_MODEL || 'nano-banana-2-lite';

if (!apiKey || !sourceUrl) {
  throw new Error('Set REAPI_API_KEY and SOURCE_IMAGE_URL first.');
}

const prompt = `Use Image 1 as the exact product identity.
Keep exactly one product. Preserve its silhouette, proportions, hardware,
material, color boundaries, surface texture, and every existing label mark.
Do not redesign, relabel, remove, or add branding.
Change only the setting: center it on a warm-white seamless studio sweep with
a soft key light from upper left and a natural contact shadow. Keep the whole
product visible with at least 10% crop room. No hands, people, props, added
text, badges, extra products, clipped edges, or floating object.`;

function requestBody(selectedModel) {
  const common = {
    model: selectedModel,
    prompt,
    image_urls: [sourceUrl],
  };

  if (selectedModel === 'nano-banana-2-lite') {
    return { ...common, aspect_ratio: '1:1' };
  }
  if (selectedModel === 'gpt-image-2') {
    return { ...common, size: '1:1', resolution: '1k' };
  }
  if (selectedModel === 'doubao-seedream-5-0-pro') {
    return { ...common, aspect_ratio: '1:1', quality: 'basic' };
  }
  if (selectedModel === 'gemini-3-pro-image-preview') {
    return { ...common, size: '1:1', resolution: '1k' };
  }
  throw new Error(`Unsupported IMAGE_MODEL: ${selectedModel}`);
}

const headers = {
  Authorization: `Bearer ${apiKey}`,
  'Content-Type': 'application/json',
};

async function readJson(response) {
  const body = await response.json();
  if (!response.ok) {
    const message = body.error?.message || JSON.stringify(body);
    throw new Error(`HTTP ${response.status}: ${message}`);
  }
  return body;
}

const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

async function getTask(taskId) {
  for (let attempt = 0; attempt < 4; attempt += 1) {
    let response;
    try {
      response = await fetch(`https://reapi.ai/api/v1/tasks/${taskId}`, {
        headers: { Authorization: `Bearer ${apiKey}` },
        signal: AbortSignal.timeout(15_000),
      });
    } catch (error) {
      if (attempt === 3) throw error;
      await sleep(1000 * 2 ** attempt);
      continue;
    }

    if (response.status === 429) {
      const seconds = Number(response.headers.get('retry-after'));
      await response.body?.cancel();
      await sleep(Number.isFinite(seconds) ? seconds * 1000 : 5000);
      continue;
    }

    if ([502, 503, 504].includes(response.status)) {
      await response.body?.cancel();
      await sleep(1000 * 2 ** attempt);
      continue;
    }

    return readJson(response);
  }

  throw new Error(`Task ${taskId} could not be read after transient errors`);
}

// Submit once. If this connection fails ambiguously, reconcile before
// re-running the script: the server may already have accepted the task.
const submission = await readJson(
  await fetch('https://reapi.ai/api/v1/images/generations', {
    method: 'POST',
    headers,
    body: JSON.stringify(requestBody(model)),
    signal: AbortSignal.timeout(30_000),
  }),
);

console.log(`submitted ${submission.id}`);

const deadline = Date.now() + 5 * 60 * 1000;
let task;

while (Date.now() < deadline) {
  await sleep(3000);
  task = await getTask(submission.id);
  if (task.status === 'completed' || task.status === 'failed') break;
}

if (!task || task.status === 'processing') {
  throw new Error(
    `Local polling deadline reached. Resume GET for ${submission.id}; do not POST again.`,
  );
}

console.log(`status=${task.status} credits=${task.usage.credits}`);

if (task.status === 'failed') {
  const credits = task.usage?.credits ?? 'unknown';
  throw new Error(
    `${task.error?.code || 'task_failed'}: ${task.error?.message || 'unknown error'}; task=${task.id}; settled_credits=${credits}`,
  );
}

const outputUrl = task.output?.image_urls?.[0];
if (!outputUrl) throw new Error('Task completed without an image URL.');

const imageResponse = await fetch(outputUrl, {
  signal: AbortSignal.timeout(30_000),
});
if (!imageResponse.ok) {
  throw new Error(`Image download failed: HTTP ${imageResponse.status}`);
}

const contentType = (imageResponse.headers.get('content-type') || '')
  .split(';')[0]
  .trim()
  .toLowerCase();
const extensionByType = {
  'image/jpeg': 'jpg',
  'image/png': 'png',
  'image/webp': 'webp',
};
const extension = extensionByType[contentType];
if (!extension) throw new Error(`Unexpected output type: ${contentType}`);
const outputPath = `product-candidate.${extension}`;

await writeFile(outputPath, Buffer.from(await imageResponse.arrayBuffer()));
console.log(`saved ${outputPath} from ${outputUrl}`);

다음과 같이 실행하세요.

export REAPI_API_KEY="rk_live_replace_me"
export SOURCE_IMAGE_URL="https://assets.example.com/my-product.jpg"
export IMAGE_MODEL="nano-banana-2-lite"
node product-photo.mjs

검토 후 GPT Image 2, Seedream 5.0 Pro 또는 Nano Banana Pro를 시도하려면 IMAGE_MODEL 만 변경하세요. 요청 빌더는 각 모델에 올바른 크기 필드를 제공합니다.

하나의 라이브 15-credit 테스트가 반환한 것

스타일화된 장면의 소스 세라믹 머그와 평면 따뜻한 흰색 스튜디오 배경의 1K API 출력

2026년 9월 3일에, 우리는 하나의 reAPI 호스팅 2,048 × 1,152 소스 PNG를 위의 정확한 Nano Banana 2 Lite 요청을 통해 정사각형 출력 비율로 보냈습니다. 작업 task_01a065bb951c735fab44b38c778e069e 가 완료되어 하나의 1,024 × 1,024 JPEG를 반환했고, 15 credits ($0.015) 에서 정산되었습니다. 이미지 URL은 우리가 확인했을 때 인증 없이 다운로드할 수 있었습니다.

결과는 첫 번째 패스가 테스트하려고 한 것을 수행했습니다. 하나의 머그를 유지하고, 전체 윤곽과 손잡이 개구부를 보여주고, 책과 식물을 제거했으며, 제품을 중립적인 청소와 접촉 그림자 위에 배치했습니다. 또한 작은 유약 반점과 반사를 변경했습니다. 그것은 유용한 레이아웃 후보를 만들지만, 고유한 수공예 SKU가 픽셀 동일하게 유지되었다는 증거는 아닙니다. 하나의 실행은 요청 형태, 출력 형태 및 요금을 검증합니다. 그것은 지연 시간, 수락률 또는 모델 우승자를 설정하지 않습니다.[1]

첫 번째 결과를 100% 크기로 검토하세요

썸네일에서 결정하지 마세요. 소스 및 후보를 나란히 열고, 100%로 확대하고, 다음과 같은 레코드를 작성하세요.

{
  "task_id": "task_replace_me",
  "decision": "reject",
  "passed": [
    "one product",
    "complete crop",
    "background",
    "contact shadow"
  ],
  "failed": [
    "pump became taller",
    "lower cobalt band moved upward"
  ],
  "usage_credits": 15,
  "reviewer": "initials",
  "prompt_revision": 1
}

먼저 윤곽을 확인하세요. 그런 다음 고정된 랜드마크를 비교합니다. 캡 높이, 손잡이 개구부, 모서리, 솔기, 버튼 개수, 색상 경계, 라벨 위치 및 표면 마감. 모든 보이는 단어를 읽으세요. 마지막으로 자르기 및 그림자를 검사합니다.

이 순서는 의도적입니다. 좋은 취향의 조명 설정이 다른 제품을 승인하도록 설득해서는 안 됩니다.

실패한 한 조건을 다시 시도합니다. 전체 요약은 아닙니다

"다시 시도"는 아무것도 가르치지 않습니다. 통과한 부분을 앞으로 옮기고 실패와 관련된 하나의 지침을 변경합니다.

실패더 나은 다음 이동
캡 또는 손잡이 변경위치 및 비율의 이름을 지으세요. 형태가 가려져 있으면 또 다른 소유한 보기를 추가하세요
상품이 너무 광택나게 됨관찰된 마감을 명시하고 "럭셔리 광택"과 같은 단어를 제거하세요
라벨 문자 변형라벨 픽셀을 거부합니다. 새 복사본을 프롬프트하는 대신 확인된 아트워크를 보존하거나 합성합니다
항목이 떠 있음그 아래에서 직접 접촉 그림자와 밑바닥의 표면 평면을 요청합니다
자르기가 상품을 자름전체 항목과 수치 안전 여유를 요청합니다
배경 잔여물 유지생성자에게 다시 요청하는 대신 자르기 및 결정론적 템플릿을 사용합니다
색상 이동상품 색상을 고정으로 설명하고 요청된 조명을 중립으로 만듭니다

거의 올바른 모델에 대상 재시도를 하나 제공합니다. 동일한 아이덴티티 조건이 다시 실패하면 방법을 변경합니다. 더 나은 참조를 제공하거나, 지역화된 편집을 사용하거나, 원본 상품 픽셀을 유지하고 배경만 다시 만들어집니다. 배경 제거 API 가격 책정 가이드 는 결정론적 경로의 가격을 책정하는 방법을 보여줍니다.

승인된 이미지가 실제로 비용이 얼마나 드는지 계산하세요

한 credit은 $0.001입니다. 유용한 공식은:

cost per approved image =
  sum of settled credits for completed creative attempts × $0.001
  ----------------------------------------------------------------
                    number of approved images

Nano Banana 2 Lite 작업 3개가 각각 15 credits에서 완료된다고 가정합니다. 상품 드리프트에 대해 2개를 거부하고 1개를 승인합니다.

(15 + 15 + 15) × $0.001 / 1 approved image = $0.045

API 단위 가격은 여전히 $0.015입니다. 승인된 이미지 비용은 $0.045입니다. 두 숫자 모두 참입니다. 그들은 다른 질문에 답합니다.

제공자 실패는 보통 예약이 환불된 후 0 credits에서 정산됩니다. 창의적으로 거부한 완료된 이미지는 유료로 유지됩니다. 모델 특정 생성 후 안전 확인도 출력을 숨길 때 요금을 보유할 수 있으므로, 모든 실패한 작업이 0 비용이라고 가정하는 대신 statususage.credits 와 함께 사용합니다.[5]

작은 교차 모델 연기 테스트를 원하면 Nano Banana 2 Lite, GPT Image 2 및 Seedream 5.0 Pro에서 각각 1K 시도는 현재 예산입니다.

15 + 30 + 32 = 77 credits = $0.077

그것은 실행되지 않은 계획 예산이고, 측정된 벤치마크, 수락률 또는 모델 순위가 아닙니다. 모델 당 하나의 출력은 이러한 주장을 지원하지 않을 것입니다. 더 저렴하고 더 유용한 첫 번째 이동은 여전히 단일 15 credit 레이아웃 후보이고, 그 다음 실패 관련 결정입니다.

감사 추적을 잃지 않고 워크플로우를 프로덕션에 넣으세요

각 생성을 위해, 지속합니다.

  • 소스 자산에 대한 해시 또는 내구성 ID;
  • 정확한 모델 ID, 출력 계층, 프롬프트 및 프롬프트 개정;
  • 제출 시간 및 반환된 작업 ID;
  • 터미널 status, usage.credits 및 오류 코드;
  • 반환된 URL 및 아카이브 복사본의 위치;
  • 승인 상태, 검토자 및 짧은 거부 이유.

제출과 폴링을 별도의 작업으로 유지합니다. 작업자는 한 번 제출하고, 작업 ID를 저장하고, 다시 시작한 후 다른 작업자가 GET 요청을 재개하도록 할 수 있습니다. 로컬 폴링 마감을 설정하되, 해당 마감을 API 실패와 혼동하지 마세요. 프로세스가 대기를 중지하면 나중에 동일한 작업을 재개합니다.

제어하는 저장소에 승인된 파일을 보관합니다. 작업 계약은 배포의 CDN 수명이 카탈로그의 수명과 일치한다는 것을 약속하지 않으며, 상품 페이지는 임시 생성 레코드에 의존해서는 안 됩니다.[5]

첫 번째 프롬프트가 통과한 후 no-code 배치의 경우, n8n 상품-광고 워크플로우 는 동일한 submit-and-poll 구조를 보여줍니다. 나중에 움직임을 원하면, 승인된 정지 및 아이덴티티 계약을 one-product-photo 비디오 워크플로우로 전달합니다.

생성이 잘못된 도구인 경우

원본 상품 픽셀을 유지하고 주변 캔버스만 변경하는 경우:

  • 정확한 라벨, 일련 번호 또는 규제 표시가 읽을 수 있어야 합니다.
  • 기하학은 큰 카탈로그 전체에서 픽셀 동일해야 합니다.
  • 상품이 투명하거나 반사되거나 미세한 반복 텍스트로 덮여 있습니다.
  • 대상이 하나의 고정 흰색 배경 템플릿을 사용합니다.
  • 잘못된 색상이나 패키지 세부 사항이 실질적인 고객 불만을 만들 수 있습니다.

이러한 경우에는, 배경을 제거하고, 마스크를 정리하고, 절단을 알려진 표면에 배치하고, 결정론적 설계 템플릿으로 그림자를 만듭니다. 생성 API는 여전히 배경 판을 만들 수 있지만, 상품을 다시 그릴 필요가 없습니다.

FAQ

먼저 시도할 가장 저렴한 API 경로는 무엇입니까?

이 가이드의 경로 중에서 Nano Banana 2 Lite는 2026년 9월 3일에 하나의 완료된 1K 이미지에 대해 $0.015, 즉 15 credits였습니다. 요금이 변할 수 있으므로 예산을 책정하기 전에 라이브 모델 페이지를 확인하세요.

하나의 사진이 상품의 뒤와 옆을 보존할 수 있습니까?

아닙니다. 보이는 형태, 재료 및 라벨 배치를 안내할 수 있습니다. 소스가 표시하지 않는 사실을 안정적으로 재구성할 수 없습니다. 또 다른 소유한 각도를 제공하거나 보이지 않는 표면을 노출하지 않도록 피하세요.

모델에 흐릿한 라벨을 다시 쓰도록 요청해야 합니까?

프로덕션 진실이 아닙니다. 확인된 라벨 아트워크 또는 원본 상품 판을 사용하세요. 그럴듯한 새로운 성분, 용량, 인증 또는 보증은 여전히 거짓 정보입니다.

2K 또는 4K에서 즉시 생성해야 합니까?

아이덴티티, 구성 및 자르기를 검증하기 위해 1K에서 시작합니다. 이미지가 이러한 확인을 통과하고 배달 채널이 실제로 더 많은 픽셀이 필요한 후에만 이동합니다. OpenAI와 Google 모두 현재 이미지 모델에 대해 여러 출력 크기를 문서화합니다. 모델별 가용성 및 청구가 다릅니다.[6][7]

상품 목록에 어느 종횡비를 사용해야 합니까?

대상에서 필요한 비율을 사용합니다. 교차 모델 시도의 경우 1:1은 안전한 공유 설정입니다. Seedream 5.0 Pro의 현재 공개 요청은 1:1, 4:3, 3:4, 16:9, 9:16, 2:3 및 3:2를 수락하지만 4:5는 아닙니다.[3]

API가 투명한 상품 이미지를 반환할 수 있습니까?

모델 및 요청 표면에 따라 다릅니다. Seedream 5.0 Pro는 투명 배경 옵션을 이미 알파 채널이 있는 하나의 참조 이미지에만 노출하며, 레이어 분해와 결합할 수 없습니다. 시작 사진에 일반 배경이 있으면, 전용 제거 워크플로우가 더 명확한 첫 번째 단계입니다.[3]

실패한 작업이 청구됩니까?

제공자 실패 및 시간 초과는 일반적으로 환불되지만, 최종 답변은 터미널 작업의 usage.credits 입니다. 일부 생성 후 안전 결정은 status: "failed" 일 때에도 모델 특정 요금을 보유할 수 있습니다. 상태만으로는 청구서를 계산하지 마세요.[5]

승인을 자동화할 수 있습니까?

차원, 파일 디코딩, 알파 및 상품 개수와 같은 기계적 확인을 자동화할 수 있습니다. 기하학, 미세한 라벨 정확성, 색상 및 청구 안전은 검증된 상품 특정 비교 시스템이 없는 한 여전히 인간 게이트가 필요합니다. 자동화는 불확실한 이미지를 검토로 경로하고, 조용히 게시하지 않아야 합니다.

1K에서 시작하고 명명된 실패에 대해서만 에스컬레이션

유용한 상품 사진 API 워크플로우는 보수적입니다. 소스를 증거로 시작하고, 상품 아이덴티티를 동결하고, 상품 자체가 올바를 때까지 1K에 머뭅니다. 완료된 거부를 기록합니다. 왜냐하면 그것들이 실제 비용의 일부이기 때문입니다. 그리고 그것은 또 다른 상상적인 생성보다 자르기 더하기 템플릿이 더 안전한 때를 알고 있습니다.

그것이 하나의 평범한 사진이 좋아 보이는 렌더링이 상품이 생존했다는 증거를 취급하지 않고 스토어 준비 완료 이미지가 되는 방법입니다.

참고

  1. reAPI. Nano Banana 2 Lite API: live pricing, request schema, and task lifecycle. Retrieved September 3, 2026 from the Nano Banana 2 Lite model page.
  2. reAPI. GPT Image 2 API: live pricing and request schema. Retrieved September 3, 2026 from the GPT Image 2 model page.
  3. reAPI. Seedream 5.0 Pro API reference. Retrieved September 3, 2026 from the Seedream 5.0 Pro documentation.
  4. reAPI. Gemini 3 Pro Image Preview API: live pricing and request schema. Retrieved September 3, 2026 from the Nano Banana Pro model page.
  5. reAPI. Tasks API: states, usage, polling, output, and refund semantics. Retrieved September 3, 2026 from the Tasks API reference.
  6. OpenAI. Image generation guide and GPT Image 2 model reference. Retrieved September 3, 2026 from the OpenAI developer documentation.
  7. Google. Gemini API image generation guide. Retrieved September 3, 2026 from the Google AI for Developers documentation.
  8. ByteDance Seed. Beyond Generation, It Understands Design: Introducing Seedream 5.0 Pro. Retrieved September 3, 2026 from the Seed product blog.

추가 읽기