New: Nano Banana 2.1Try the model
API Stock

API Stock와 WaveSpeedAI

WaveSpeedAI 대안

API Stock는 하나의 선불 잔액으로 이미지와 영상을 만드는 WaveSpeedAI 대안입니다. 공통 이미지 모델 가격과 모델별 엔드포인트를 작업 API로 옮기는 방법을 비교하세요.

API Stock와 WaveSpeedAI 비교

API Stock를 선택할 때

WaveSpeedAI의 모델별 경로와 동기 옵션보다 단일 미디어 엔드포인트가 중요하다면 API Stock를 선택하세요.

WaveSpeedAI를 계속 사용할 때

전용 엔드포인트나 동기식 처리에 의존한다면 WaveSpeedAI를 유지하세요. 경로별로 모델과 입력 옵션을 확인한 후 이전하세요.

WaveSpeedAI API 문서

가로로 스크롤하여 표의 모든 열을 확인하세요.

API 이전: WaveSpeedAI에서 API Stock로
연동 항목WaveSpeedAIAPI Stock
요청POST /api/v3/bytedance/seedream-v4.5POST /api/v1/generation/create
인증Authorization: BearerAuthorization: Bearer
모델 idbytedance/seedream-v4.5seedream-4-5

아래 예제 모델을 비교하며 공급자의 모든 엔드포인트를 비교하지는 않습니다. 모델 이름이 같아도 매개변수, 검토 정책 및 결과가 같다는 보장은 없습니다.

가격 비교: WaveSpeedAI와 API Stock

공통 모델 일부를 같은 과금 단위로 비교합니다. 당사 가격은 현재 카탈로그에서 가져오며, 공급자 가격은 확인 날짜와 출처 링크를 포함한 기록입니다.

가격 비교: WaveSpeedAI와 API Stock
Seedream 4.52K · 이미지당 · 텍스트로 생성API Stock$0.036WaveSpeedAI$0.0410% 저렴
Nano Banana이미지당 · 텍스트로 생성API Stock$0.015WaveSpeedAI$0.03860.5% 저렴

참조 이미지 없이 텍스트로 이미지 한 장을 생성하는 공개 기본 요금입니다. 요금제, 대량 할인, 다른 해상도 및 편집에 따라 최종 가격이 달라질 수 있습니다.

작업량별 비용

Seedream 4.5 · 2K

위 설정으로 이미지 1,000장

API Stock
$36
WaveSpeedAI
$40

Nano Banana

위 설정으로 이미지 1,000장

API Stock
$15
WaveSpeedAI
$38

위 요금으로 계산한 예시이며 대량 할인, 구독 또는 유료 추가 옵션은 제외합니다. 지연 시간이나 동일한 결과를 보장하지 않습니다.

요금제

WaveSpeedAI에서 이전

모델별 /api/v3를 /api/v1/generation/create로 바꾸고 JSON에 공개 모델 id를 지정하세요. size를 문서의 size와 resolution에 맞추고 작업 상태 폴링으로 전환하세요.

  1. 1

    계정을 만들고 선불 잔액을 충전한 후 API 키를 발급하세요.

  2. 2

    공개 모델 id와 문서의 매개변수로 POST /api/v1/generation/create를 전송하세요. 작업 하나당 결과 하나를 생성합니다.

  3. 3

    taskId를 읽고 GET /api/v1/task/status/TASK_ID를 폴링하거나 생성 시 webhook을 설정하세요.

WaveSpeedAI

bash
curl --fail-with-body 'https://api.wavespeed.ai/api/v3/bytedance/seedream-v4.5' \
-H "Authorization: Bearer $WAVESPEED_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"prompt": "A ceramic mug on a wooden table, soft morning light",
"size": "2048*2048"
}'

API Stock

bash
curl --fail-with-body 'https://api.api-stock.com/api/v1/generation/create' \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "seedream-4-5",
"prompt": "A ceramic mug on a wooden table, soft morning light",
"resolution": "2K",
"size": "1:1"
}'
전체 예제: 작업 생성부터 파일 가져오기까지

서버에서 Node 22+ 또는 Bun과 API_KEY로 실행하세요. 유료 작업 하나를 생성하고 다시 만들지 않고 폴링합니다. URL은 임시이므로 파일을 자체 저장소에 보관하세요.

javascript
import { writeFile } from "node:fs/promises";
const baseURL = "https://api.api-stock.com/api/v1";
const apiKey = process.env.API_KEY;
if (!apiKey) throw new Error("Set API_KEY on the server");
async function request(path, options = {}) {
const response = await fetch(baseURL + path, {
...options,
headers: {
Authorization: `Bearer ${apiKey}`,
"Content-Type": "application/json",
},
signal: AbortSignal.timeout(30_000),
});
if (!response.ok) throw new Error(await response.text());
return response.json();
}
const { taskId } = await request("/generation/create", {
method: "POST",
body: JSON.stringify({
"model": "seedream-4-5",
"prompt": "A ceramic mug on a wooden table, soft morning light",
"resolution": "2K",
"size": "1:1"
}),
});
if (!taskId) throw new Error("Missing taskId");
const deadline = Date.now() + 10 * 60_000;
let fileUrl;
while (Date.now() < deadline) {
const { data } = await request(`/task/status/${encodeURIComponent(taskId)}`);
if (data.status === "finished") {
fileUrl = data.files?.[0]?.fileUrl;
if (!fileUrl) throw new Error("Task finished without a file");
break;
}
if (data.status === "failed" || data.status === "expired") {
throw new Error(data.errorMessage || data.status);
}
await new Promise((resolve) => setTimeout(resolve, 2000));
}
if (!fileUrl) throw new Error(`Still processing: save taskId ${taskId} and resume polling`);
const file = await fetch(fileUrl, { signal: AbortSignal.timeout(60_000) });
if (!file.ok) throw new Error(`Download failed: ${file.status}`);
const mime = file.headers.get("content-type")?.split(";")[0];
const extension = { "image/png": "png", "image/jpeg": "jpg", "image/webp": "webp" }[mime] || "bin";
await writeFile(`generated-image.${extension}`, new Uint8Array(await file.arrayBuffer()));

API 키는 서버에 보관하세요. 운영 트래픽을 이전하기 전에 요청 하나의 매개변수, 상태 처리 및 결과를 확인하세요.

자주 묻는 질문

WaveSpeedAI에서 어떻게 이전하나요?

모델별 /api/v3를 /api/v1/generation/create로 바꾸고 JSON에 공개 모델 id를 지정하세요. size를 문서의 size와 resolution에 맞추고 작업 상태 폴링으로 전환하세요.

API Stock가 항상 WaveSpeedAI보다 저렴한가요?

아닙니다. 표에서 정확한 모델, 설정 및 과금 단위를 비교하세요. 가격은 오르거나 내릴 수 있으므로 운영 트래픽을 이전하기 전에 두 카탈로그를 확인하세요.

모든 WaveSpeedAI 워크플로를 이전할 수 있나요?

전용 엔드포인트나 동기식 처리에 의존한다면 WaveSpeedAI를 유지하세요. 경로별로 모델과 입력 옵션을 확인한 후 이전하세요.

실패하거나 끝나지 않은 요청은 어떻게 되나요?

미디어 작업은 설정된 경로로 재시도하며 사용 가능한 경우에만 예비 공급자를 사용합니다. 생성이 최종 실패하면 환불됩니다. 처리 중인 작업을 중복 생성하지 말고 폴링하세요. 파일 URL 만료는 생성 실패가 아닙니다.

잔액은 어떻게 충전하나요?

사용 가능한 결제 수단, 통화 및 최소 충전 금액은 결제 전에 계정에 표시됩니다. 구독 없이 모델 사용료가 선불 잔액에서 차감됩니다.

API Stock에서 첫 요청 테스트

모델을 선택하고 매개변수와 가격을 확인한 후 API 키를 만드세요. 트래픽을 이전하기 전에 요청 하나를 테스트하세요.