fal, Replicate 또는WaveSpeed에서 옮겨 오기
Seedance 2.0과 Qwen-Image 호출을 /v1로 옮기는 데 필요한 것: 인증, 모델 ID, 모든 필드, 비동기 작업과 웹훅, 그리고 그대로 옮겨지지 않는 것.
기본 URL만 바꾸면 끝나지 않습니다
세 곳 모두 기본 URL과 키만 바꿔서는 충분하지 않습니다. 모든 요청에서 다음 사항도 바뀝니다:
- 키:
sk_test_또는sk_live_로 시작하는 키를Authorization: Bearer로 보냅니다. - 모델 ID는 본문의
model에 넣으며, ID 하나로 텍스트, 첫 프레임, 참조를 모두 처리합니다. - 모든 생성 요청에
Idempotency-Key헤더를 넣습니다. - 가격 상한:
max_credits또는POST /v1/quotes에서 받은quote_id. - 결과는 작업으로 받습니다:
GET /v1/jobs/{id}를 폴링하거나 당사의 서명된 웹훅을 받으세요.
- fal
- 당사와 가장 비슷합니다. Seedance 필드 이름 대부분이 fal의 이름과 같습니다. 그 밖에
image_urls를reference_image_urls로 바꾸고,duration을 숫자로 보내고,fal_webhook을 본문의webhook_url로 옮기세요. - Replicate
- 필드를
input밖으로 꺼내세요. 그 밖에image는image_url로,reference_images는reference_image_urls로,webhook은webhook_url로 이름을 바꾸세요. - WaveSpeed
- 그 밖에
image는image_url로,reference_images는reference_image_urls로 이름을 바꾸고,standard_webhook은 본문의webhook_url로 옮기세요. 결과는GET /v1/jobs/{id}에서 읽습니다.
인증
요청을 보내는 곳과 인증하는 방법.
| 플랫폼 | 기본 URL | 인증 헤더 |
|---|---|---|
| Pershot | https://api.pershot.app/v1 | Authorization: Bearer $API_KEY |
| fal | https://queue.fal.run | Authorization: Key $FAL_KEY |
| Replicate | https://api.replicate.com/v1 | Authorization: Bearer $REPLICATE_API_TOKEN |
| WaveSpeed | https://api.wavespeed.ai/api/v3 | Authorization: Bearer $WAVESPEED_API_KEY |
개발자 API는 신청제입니다. 스튜디오의 API 키 메뉴에서 신청하세요. 키는 한 번만 표시됩니다. 개발자 키는 개발자 API 잔액을 쓰며, 같은 키를 MCP 서버에서 Bearer 헤더로 사용할 수도 있습니다.
모델 ID
다른 플랫폼은 모델 ID를 URL에 넣고, 당사는 본문의 model에 넣습니다. 당사 ID 하나로 텍스트, 첫 프레임, 참조를 모두 처리하며, 보내는 필드에 따라 동작이 정해집니다.
| 당사 | fal | Replicate | WaveSpeed | 참고 |
|---|---|---|---|---|
seedance-2.0-fast | bytedance/seedance-2.0/fast/text-to-videobytedance/seedance-2.0/fast/image-to-videobytedance/seedance-2.0/fast/reference-to-video | bytedance/seedance-2.0-fast | bytedance/seedance-2.0-fast/text-to-videobytedance/seedance-2.0-fast/image-to-video | 텍스트, 첫 프레임, 참조 이미지에 모두 쓰는 ID 하나. |
seedance-2.0-mini | bytedance/seedance-2.0/mini/text-to-videobytedance/seedance-2.0/mini/image-to-videobytedance/seedance-2.0/mini/reference-to-video | bytedance/seedance-2.0-mini | bytedance/seedance-2.0-mini/text-to-video | 텍스트, 첫 프레임, 참조 이미지에 모두 쓰는 ID 하나. |
qwen-image-2512 | fal-ai/qwen-image-2512 | qwen/qwen-image-2512 | wavespeed-ai/qwen-image/text-to-image-2512 | 같은 오픈 가중치입니다. |
qwen-image-2512-lightning | fal-ai/qwen-image-2512/lora | 없음 | 없음 | 당사의 4단계 Lightning 등급. fal은 /lora 엔드포인트에서 LoRA로 실행합니다. Replicate와 WaveSpeed에서는 바로 쓸 수 있는 Lightning 모델을 찾지 못했습니다. |
qwen-image-edit-2511 | fal-ai/qwen-image-edit-2511 | qwen/qwen-image-edit-2511 | wavespeed-ai/qwen-image/edit-2511 | 같은 오픈 가중치입니다. |
qwen-image-edit-2511-lightning | fal-ai/qwen-image-edit-2511/lora | 없음 | 없음 | 당사의 4단계 Lightning 등급. fal은 /lora 엔드포인트에서 LoRA로 실행합니다. Replicate와 WaveSpeed에서는 바로 쓸 수 있는 Lightning 모델을 찾지 못했습니다. |
- AI 에이전트용
- AI 에이전트용 텍스트: 입력, 허용 값, 설정별 가격, 요청 예시
seedance-2.0-fastseedance-2.0-miniqwen-image-2512-lightningqwen-image-2512qwen-image-edit-2511-lightningqwen-image-edit-2511
Seedance 2.0, 필드별 비교
fal에 있는 필드는 이름도 fal을 따르며, 다른 부분은 참고에 적었습니다. 필드는 JSON 본문의 최상위에 두며, Replicate는 input으로 감쌉니다.
| 당사 | fal | Replicate | WaveSpeed | 참고 |
|---|---|---|---|---|
model | URL에 포함 | URL에 포함 | URL에 포함 | 텍스트, 첫 프레임, 참조에 쓰는 ID 하나를 본문에 넣습니다. 다른 플랫폼은 URL에 넣습니다. |
prompt | prompt | prompt | prompt | 같은 텍스트를 그대로 쓸 수 있습니다. |
duration | duration | duration | duration | 4~15의 정수, 기본값 5. fal은 문자열로 보내며 auto를 제공하고, Replicate는 자동에 -1을 씁니다. 당사에는 자동 길이가 없습니다. |
resolution | resolution | resolution | resolution | 480p 또는 720p, 기본값 720p. WaveSpeed는 1080p와 4k도 제공하지만, 당사에서는 더 높은 해상도가 별도의 enhance 단계입니다. |
aspect_ratio | aspect_ratio | aspect_ratio | aspect_ratio | 16:9, 9:16 또는 1:1, 기본값 16:9. auto, adaptive, 4:3, 3:4, 21:9는 없습니다. |
generate_audio | generate_audio | generate_audio | generate_audio | 의미는 같으며, 기본으로 켜져 있습니다. 켜든 끄든 가격은 같습니다. |
image_url | image_url | image | image | 첫 프레임. fal과 이름이 같으며, Replicate와 WaveSpeed에서는 image라고 합니다. 참조 이미지와 함께 쓸 수 없습니다. |
reference_image_urls | image_urls | reference_images | reference_images | 최대 9장이며, 프롬프트에서 @image1, @image2로 지칭합니다. image_urls라고 부르는 fal과 다릅니다. |
seed | 없음 | seed | 없음 | 허용되지만 사용되지 않습니다. Seedance 2.0은 시드를 받지 않습니다. fal과 WaveSpeed에는 이 필드가 없습니다. |
quote_id | 없음 | 없음 | 없음 | 새 필드: quote_id와 max_credits 중 정확히 하나만 보내세요. 작업 비용은 이를 넘지 않습니다. |
max_credits | 없음 | 없음 | 없음 | 새 필드: quote_id와 max_credits 중 정확히 하나만 보내세요. 작업 비용은 이를 넘지 않습니다. |
webhook_url | fal_webhook쿼리 문자열 | webhook | standard_webhook쿼리 문자열 | 본문에 넣습니다. 쿼리 문자열로 fal_webhook을 받는 fal과 다릅니다. |
end_user_id | end_user_id | 없음 | 없음 | fal과 같은 이름입니다. 승인된 개발자 계정용(신청제): 사용량에 표시되는 내 사용자 ID. |
project_id | 없음 | 없음 | 없음 | 당사 전용, 선택: 프로젝트와 공급업체 라우팅. |
shot_id | 없음 | 없음 | 없음 | 당사 전용, 선택: 프로젝트와 공급업체 라우팅. |
routing_preference | 없음 | 없음 | 없음 | 당사 전용, 선택: 프로젝트와 공급업체 라우팅. |
enhance | 없음 | 없음 | 없음 | 당사 전용, 선택: 생성 후 AI 업스케일을 하며, AI Enhanced 라벨이 붙습니다. |
Idempotency-Key헤더 | 없음 | 없음 | 없음 | 새로 생긴 필수 항목: 24시간 이내에 같은 키로 요청하면 같은 작업이 반환됩니다. |
당사에 대응하는 필드가 없는 다른 플랫폼의 Seedance 필드. 그대로 보내면 알 수 없는 필드로 거부됩니다(400 invalid_request).
- fal
end_image_urlvideo_urlsaudio_urlsbitrate_modecodec- Replicate
last_frame_imagereference_videosreference_audios- WaveSpeed
last_imagereference_videosreference_audiosenable_web_search
Qwen-Image, 필드별 비교
당사 이미지 본문은 다른 플랫폼보다 작습니다. 자유로운 픽셀 지정 대신 크기와 화면 비율을 쓰고, 작업당 이미지는 1장이며, 샘플러 설정은 없습니다.
| 당사 | fal | Replicate | WaveSpeed | 참고 |
|---|---|---|---|---|
model | URL에 포함 | URL에 포함 | URL에 포함 | 본문에 ID 4개: Image Mini와 Image Fast, 각각 생성용과 편집용. |
prompt | prompt | prompt | prompt | 같은 텍스트를 그대로 쓸 수 있습니다. |
size | image_size | 없음 | size | 1K 또는 2K, 기본값 1K. 화면 비율과 함께 고정 크기를 정하며, 한 변은 최대 2048 px입니다. 너비와 높이를 자유롭게 지정할 수 없습니다. |
aspect_ratio | image_size | aspect_ratio | size | 16:9, 9:16 또는 1:1, 기본값 1:1. 가격에는 영향이 없습니다. |
image_url | image_urls | image | images | 편집 모델 전용: 원본 이미지 정확히 1장을 URL로 보냅니다. 다른 플랫폼은 목록을 받습니다. |
seed | seed | seed | seed | 의미는 같습니다. |
quote_id | 없음 | 없음 | 없음 | 새 필드: quote_id와 max_credits 중 정확히 하나만 보내세요. 작업 비용은 이를 넘지 않습니다. |
max_credits | 없음 | 없음 | 없음 | 새 필드: quote_id와 max_credits 중 정확히 하나만 보내세요. 작업 비용은 이를 넘지 않습니다. |
webhook_url | fal_webhook쿼리 문자열 | webhook | standard_webhook쿼리 문자열 | 본문에 넣습니다. 쿼리 문자열로 fal_webhook을 받는 fal과 다릅니다. |
end_user_id | 없음 | 없음 | 없음 | 당사 전용, 선택, 승인된 개발자 계정용(신청제): 사용량에 표시되는 내 사용자 ID. |
project_id | 없음 | 없음 | 없음 | 당사 전용, 선택: 프로젝트와 공급업체 라우팅. |
shot_id | 없음 | 없음 | 없음 | 당사 전용, 선택: 프로젝트와 공급업체 라우팅. |
routing_preference | 없음 | 없음 | 없음 | 당사 전용, 선택: 프로젝트와 공급업체 라우팅. |
Idempotency-Key헤더 | 없음 | 없음 | 없음 | 새로 생긴 필수 항목: 24시간 이내에 같은 키로 요청하면 같은 작업이 반환됩니다. |
당사에 대응하는 필드가 없는 다른 플랫폼의 Qwen-Image 필드. 그대로 보내면 알 수 없는 필드로 거부됩니다(400 invalid_request).
- fal
negative_promptnum_inference_stepsguidance_scalenum_imagesoutput_formataccelerationenable_safety_checkersync_modeloras- Replicate
negative_promptstrengthwidthheightguidancenum_inference_stepsgo_fastoutput_formatoutput_qualitydisable_safety_checkerlora_weightslora_scale- WaveSpeed
widthheightoutput_formatenable_base64_outputenable_sync_mode
비동기 작업과 웹훅
네 곳 모두 작업을 백그라운드에서 실행합니다. 각 단계를 부르는 방식은 다음과 같습니다:
| 단계 | Pershot | fal | Replicate | WaveSpeed |
|---|---|---|---|---|
| 생성 | POST /v1/videos/generationsPOST /v1/images/generations202 → { id: "job_…" } | POST https://queue.fal.run/<endpoint id>→ request_id, status_url, response_url | POST /v1/models/{owner}/{name}/predictions{ "input": { … } } | POST /api/v3/<model id>→ data.id |
| 폴링 | GET /v1/jobs/{id} | GET status_urlGET response_url | GET /v1/predictions/{id} | GET /api/v3/predictions/{id}/result |
| 상태 | queuedprocessingsucceededfailedcancelledunknown | IN_QUEUEIN_PROGRESSCOMPLETED | startingprocessingsucceededfailedcanceled | createdcompletedfailedcancelledtimeoutdeleted |
| 웹훅 | webhook_url (body) | ?fal_webhook=… | webhook (body)webhook_events_filter | ?standard_webhook=…?webhook=… (legacy) |
| 서명 | X-Signature: t=…,v1=…HMAC-SHA256, whsec_…X-Event-Id | X-Fal-Webhook-SignatureED25519, JWKS | webhook-idwebhook-timestampwebhook-signature | webhook-idwebhook-timestampwebhook-signature |
| 전송 재시도 | 1분, 5분, 30분, 2시간, 6시간 후. 10초 이내에 2xx로 응답하면 전송된 것으로 간주합니다. | 저장된 결과가 만료될 때까지 최대 31회 재시도. | 재시도할 수 있으므로 중복을 처리하세요. | 최대 3회 재시도. |
| 출력 파일 | 서명된 링크는 24시간 동안 유효하며, 새 링크가 필요하면 작업을 다시 조회하세요. 파일은 12개월 동안 보관됩니다. | 미디어 만료 설정을 따릅니다. | API로 만든 prediction은 1시간 후 삭제됩니다. | 최대 7일 동안 보관됩니다. |
| 한 번의 호출로 대기 | 없음: 모든 작업은 비동기입니다. MCP에서는 wait_for_job이 최대 60초까지 기다립니다. | POST https://fal.run/<endpoint id> | Prefer: wait=n | enable_sync_mode |
당사 웹훅 본문은 작업 자체이며, 서명도 당사 방식입니다. 다른 플랫폼의 웹훅을 검증하는 코드는 당사 웹훅을 거부합니다. 당사 웹훅 검증 방법
멱등성
모든 생성 요청에는 Idempotency-Key 헤더(눈에 보이는 ASCII 문자 1~255자)가 필요합니다. 24시간 이내에 같은 키로 요청하면 HTTP 200과 함께 같은 작업이 반환되므로, 시간 초과 후 재시도해도 두 번째 작업이 생성되거나 청구되지 않습니다.
세 곳 모두 작업 생성용 멱등성 키를 문서화하지 않았습니다(2026-10-22). fal은 request_id로 웹훅 중복을 제거하라고 안내하고, WaveSpeed는 한 번만 제출하고 다시 제출하기 전에 작업을 찾아보라고 합니다. 작업마다 키를 하나 정하고 재시도할 때마다 그 키를 다시 쓰세요.
호환되지 않는 것
다음은 그대로 보내면 실패하거나 거부됩니다:
- 각 플랫폼의 클라이언트 라이브러리(fal_client, replicate, wavespeed)는 /v1을 호출하지 않습니다. 일반 HTTP, OpenAPI 문서 또는 MCP 서버를 사용하세요.
- 응답 형태: 당사의 작업은
outputs[].url이 있는 Job이며, fal 결과, Replicate prediction, WaveSpeeddata래퍼가 아닙니다. - 마지막 프레임: fal
end_image_url, Replicatelast_frame_image, WaveSpeedlast_image. - 참조 동영상과 참조 오디오: fal
video_urls와audio_urls, Replicate와 WaveSpeedreference_videos와reference_audios. - 자동 길이나 자동 비율, 4:3, 3:4, 21:9 비율, 1080p 또는 4K 생성. 당사에서 더 높은 해상도는 별도 단계인
enhance이며, AI Enhanced 라벨이 붙습니다. - 첫 프레임과 참조 이미지를 함께 보내는 것. Replicate도 이를 거부합니다.
- 한 번의 호출로 결과를 기다리는 것(fal.run, Replicate의
Prefer: wait, WaveSpeed의enable_sync_mode): 당사의 모든 작업은 비동기입니다. - 작업당 여러 이미지, PNG 또는 WebP 출력, 자유로운 너비와 높이, 편집용 여러 원본 이미지, LoRA와 샘플러 설정.
- 웹훅 검증 방식: 당사 전송에는 whsec_ 시크릿으로 계산한 HMAC-SHA256인
X-Signature가 담기며, fal의 ED25519 서명이나webhook-signature헤더가 아닙니다. - 사용 후 결제: 크레딧은 선불이고, 모든 작업에 상한이 있으며,
max_credits를 넘는 작업은 청구되지 않고 거부됩니다. - 오래 유지되는 출력 링크: 당사 링크는 24시간 동안 유효합니다. 새 링크가 필요하면 작업을 다시 조회하세요.
변경 전과 후
첫 프레임이 있는 같은 Seedance 2.0 Fast 요청을 각 플랫폼 문서대로 작성한 예와 /v1 예입니다. 가격 상한은 당사 가격 엔진에서 계산합니다.
curl -X POST https://queue.fal.run/bytedance/seedance-2.0/fast/image-to-video \
-H "Authorization: Key $FAL_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Slow dolly-in on a ceramic mug on a wooden table, morning window light",
"image_url": "https://example.com/first-frame.jpg",
"duration": "5",
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": true
}'curl https://api.pershot.app/v1/videos/generations \
-H "Authorization: Bearer $API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0-fast",
"prompt": "Slow dolly-in on a ceramic mug on a wooden table, morning window light",
"image_url": "https://example.com/first-frame.jpg",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": true,
"max_credits": 34
}'가격은 당사 기준입니다
당사의 모든 작업은 실행 전에 크레딧으로 견적이 제공되며(US$1 = 100 크레딧), 견적이나 max_credits보다 비용이 더 들지 않습니다.
fal, Replicate, WaveSpeed의 요금은 각자의 페이지에 있습니다. 당사 비교 페이지에는 이들이 공개한 Seedance 2.0 가격이 확인한 날짜와 함께 나와 있습니다.
| 모델 | 480p, 초당 | 720p, 초당 |
|---|---|---|
Seedance 2.0 Fastseedance-2.0-fast | $0.031 | $0.067 |
Seedance 2.0 Miniseedance-2.0-mini | $0.020 | $0.042 |
| 모델 | 1K, 이미지당 | 2K, 이미지당 |
|---|---|---|
Qwen-Image-2512 · Lightning 4-stepqwen-image-2512-lightning | 1 크레딧 | 3 크레딧 |
Qwen-Image-2512qwen-image-2512 | 2 크레딧 | 6 크레딧 |
Qwen-Image-Edit-2511 · Lightningqwen-image-edit-2511-lightning | 2 크레딧 | 4 크레딧 |
Qwen-Image-Edit-2511qwen-image-edit-2511 | 3 크레딧 | 10 크레딧 |
출처
2026-10-22에 각 플랫폼의 공개 페이지에 나와 있던 필드 이름과 동작입니다. 전환하기 전에 해당 문서를 확인하세요:
- fal
- fal.ai/models/bytedance/seedance-2.0/fast/text-to-video/llms.txtfal.ai/models/bytedance/seedance-2.0/fast/image-to-video/llms.txtfal.ai/models/bytedance/seedance-2.0/fast/reference-to-video/llms.txtfal.ai/models/fal-ai/qwen-image-2512/llms.txtfal.ai/models/fal-ai/qwen-image-edit-2511/llms.txtfal.ai/docs/model-apis/model-endpoints/queuefal.ai/docs/model-apis/model-endpoints/webhooks
- Replicate
- replicate.com/bytedance/seedance-2.0-fast/llms.txtreplicate.com/qwen/qwen-image-2512/llms.txtreplicate.com/qwen/qwen-image-edit-2511/llms.txtreplicate.com/docs/reference/httpreplicate.com/docs/topics/webhooks/verify-webhook
- WaveSpeed
- wavespeed.ai/models/bytedance/seedance-2.0-fast/text-to-videowavespeed.ai/models/bytedance/seedance-2.0-fast/image-to-videowavespeed.ai/models/wavespeed-ai/qwen-image/text-to-image-2512wavespeed.ai/models/wavespeed-ai/qwen-image/edit-2511wavespeed.ai/docs/submit-taskwavespeed.ai/docs/how-to-use-webhookswavespeed.ai/docs/verify-webhookswavespeed.ai/docs/data-retention-policy