왜 모델 하나가 아니라 두 모델인가
Seedance 2.0은 텍스트만으로 바로 영상을 생성할 수 있는데, 왜 먼저 이미지를 만들까요? 광고 성과는 제품의 정확성에 따라 좌우되며, 텍스트 프롬프트만으로는 실제 병, 라벨, 패키징을 안정적으로 재현할 수 없기 때문입니다. 해결 방법은 먼저 실제 제품을 정지 이미지에 고정한 뒤, 그 정확한 이미지를 애니메이션화하는 것입니다.
Seedream 5.0 Pro는 이미지 생성 단계입니다. 렌더링 전에 레이아웃을 계획하고, 14개 언어로 이미지 위 텍스트를 정확한 글자 형태로 작성하며, 최대 10개의 참조 이미지를 받아 실제 패키징을 기준점으로 삼는 텍스트-이미지 및 이미지 편집 모델입니다. Seedance 2.0은 영상 단계입니다 — 음성 해설을 나중에 덧붙이는 대신 한 번의 과정에서 동기화된 오디오를 생성하는 ByteDance의 텍스트/이미지/참조-영상 모델입니다(아키텍처와 네이티브 오디오 관련 주장은 arXiv 논문에 나와 있습니다). Seedance 2.0의 참조-영상 모드에서만 Seedream 정지 이미지를 전달하고 "이 제품은 그대로 유지하고, 주변에 장면을 만들어줘"라고 지시할 수 있습니다.
사진 한 장을 넣어 영상 10개를 만들고, 모든 영상에서 제품을 일관되게 유지하는 것. 이것이 핵심 아이디어의 전부입니다.

두 모델 연결: Seedream 5.0 Pro가 정지 이미지를 만들고 Seedance 2.0이 애니메이션화합니다.
이 작업을 할 가치가 있는지 결정하는 비용 계산
먼저 수치를 나란히 비교했습니다. 이 수치가 파이프라인 구축을 실제로 정당화해 주기 때문입니다.
| 완성된 15초 세로형 광고 10개 |
이 워크플로(API) |
사람 크리에이터 영상 10개 |
| 대표 이미지 |
$0.081 (2K Seedream 정지 이미지 1개, 재사용) |
촬영당 포함 |
| 영상 10개 |
~$24.95 (10 × 720p, Seedance 15초) |
— |
| 광고 10개 총비용 |
≈ $25 |
$1,500–3,000 |
| 유료 광고 사용 권한 |
포함 |
+25–30% |
| 소요 시간 |
오후 반나절 |
약 일주일 |
완성된 15초 광고 하나당 약 $2.58입니다. 가격은 GPT Proto의 Seedream 5.0 Pro 및 Seedance 2.0 페이지 기준입니다(ByteDance 공식 가격보다 10% 저렴). 사람 크리에이터 비용 범위는 2026년 UGC 요금 조사를 참고했습니다. 제 판단으로는 — 측정된 주장이 아니라 개인적인 견해입니다 — 비용 절감이 가장 큰 이점은 아닙니다. 진짜 이점은 변형 제작이 무료에 가까워진다는 것입니다. 제품 사진 하나를 10개의 프롬프트에 넣어 하나가 아닌 A/B 테스트용 10가지 각도를 얻을 수 있습니다.
필요한 것
API 키가 있는 GPT Proto 계정(이메일 가입, 전화번호나 사업자 인증 불필요), requests가 설치된 Python 3, 공개 URL에 호스팅된 제품 사진 한 장, 그리고 광고 10개 전체를 몇 차례 실행할 수 있도록 약 $30의 잔액이 필요합니다. 대시보드에서 키를 복사하세요 — 키는 sk-...와 같은 형태입니다 — 그리고 문서에 표시된 대로 Authorization 헤더 값에 그대로 붙여 넣으세요. Bearer 접두사는 사용하지 않습니다.
1단계 — 제품 사진을 대표 이미지로 변환하기
두 모델 모두 비동기 방식입니다. 작업을 POST하고, 예측 id를 받은 다음, GET /api/v3/predictions/{id}/result를 호출해 status가 succeeded가 될 때까지 확인합니다. 다음은 두 단계에서 재사용할 간단한 폴러입니다.
import requests, json, time
API_KEY = "sk-xxxxx" # paste your key directly, no "Bearer"
HEADERS = {"Authorization": API_KEY, "Content-Type": "application/json"}
BASE = "https://gptproto.com/api/v3"
def submit(path, payload):
r = requests.post(f"{BASE}/{path}", headers=HEADERS, data=json.dumps(payload))
r.raise_for_status()
return r.json()["data"]["id"]
def wait(pred_id, every=5, timeout=600):
deadline = time.time() + timeout
while time.time() < deadline:
r = requests.get(f"{BASE}/predictions/{pred_id}/result", headers=HEADERS)
data = r.json()["data"]
if data["status"] == "succeeded":
return data["outputs"][0]
if data["status"] in ("failed", "expired"):
raise RuntimeError(f"job {data['status']}: {data.get('error')}")
time.sleep(every)
raise TimeoutError("polling timed out")
이제 제품 사진 한 장을 image-edit 작업으로 장면에 배치합니다. 캡션이 아니라 디자인 브리프처럼 작성하세요 — 구도 규칙을 먼저 쓰고 스타일 형용사는 마지막에 배치하며, 조명을 직접 명시해야 합니다. Seedream의 사실감이 바로 여기서 나오기 때문입니다. 약 30–80단어로 작성하고, 세로형 2K 크기를 사용해 정지 이미지가 9:16 영상 프레임과 맞도록 하세요.
product_photo = "https://your-cdn.com/serum-bottle.png" # the one photo you start with
edit_prompt = (
"Place this matte-black serum bottle on a wet bathroom counter, "
"soft window light from the left, water droplets on the glass, "
"shallow depth of field, photoreal product photography, keep the label exactly as shown"
)
img_id = submit(
"bytedance/dola-seedream-5-0-pro-260628/image-edit",
{"prompt": edit_prompt, "images": [product_photo], "size": "1600*2848"},
)
hero_image_url = wait(img_id)["url"] # feed this into Seedance next
print(hero_image_url)
먼저 셸에서 테스트하려면 같은 호출을 cURL로 실행할 수 있습니다:
curl --location 'https://gptproto.com/api/v3/bytedance/dola-seedream-5-0-pro-260628/image-edit' \
--header 'Authorization: sk-xxxxx' \
--header 'Content-Type: application/json' \
--data '{"prompt":"Place this matte-black serum bottle...","images":["https://your-cdn.com/serum-bottle.png"],"size":"1600*2848"}'
size 형식은 1600*2848처럼 별표를 사용하며, x를 사용하지 않는다는 점에 유의하세요. 2K 이미지는 $0.081이며, 1K(832*1248)로 같은 장면을 만들면 $0.0405로 낮아집니다. 일회성 콘셉트 테스트라면 유용합니다. 첫 번째 참조 이미지는 무료이고, 추가 참조 이미지는 최대 10개까지 개당 $0.0027입니다.
1단계: 같은 병을 평범한 스튜디오 사진에서 UGC에 적합한 장면으로 옮겼습니다.
2단계 — UGC 프롬프트 작성하기(대부분의 광고가 실패하는 지점)
Seedance 광고 프롬프트는 설명문이 아니라 촬영 브리프입니다. 모델이 이미지와 사운드를 한 번에 생성하기 때문입니다. 네 가지 레이어로 구성하세요. 주제와 장면(크리에이터나 제품을 최소 세 가지 구체적인 시각적 디테일로 설명), 첫 0–3초의 훅, 4–10초의 제품 등장 장면, 깔끔한 클로징 프레임입니다. 대사는 큰따옴표로 묶고 짧게 유지하세요 — 긴 독백은 립싱크에서 어긋나기 쉽습니다.
거의 모든 사람이 빠지는 함정은 지나치게 세련되게 만드는 것입니다. 영화 같은 조명과 극적인 카메라 움직임을 프롬프트하고 싶은 마음이 들지만, UGC 피드에서는 가짜처럼 보입니다. 믿을 만한 클립은 실제 사람이 휴대전화로 욕실에서 촬영할 수 있었을 법해야 합니다 — 약간의 핸드헬드 느낌, 자연스러운 창문 빛, 스튜디오 같은 광택은 제외하세요. 한 프롬프트에 두 가지 아이디어를 억지로 넣지도 마세요. 생성 하나당 형식 하나만 사용하세요.

모든 Seedance 2.0 UGC 프롬프트에 필요한 네 가지 레이어.
3단계 — Seedance 2.0으로 대표 이미지 애니메이션화하기
플레이그라운드 가이드가 건너뛰는 단계입니다. reference-to-video를 사용하고 Seedream URL을 images에 전달하세요 — 이것이 화면에 정확한 제품을 유지하는 방법입니다. 프롬프트에 작성한 타이밍에 맞춰 duration을 설정하고, TikTok과 Reels에는 9:16을 사용하세요. 대사가 네이티브로 렌더링되도록 generate_audio는 켜 둡니다.
video_prompt = (
"UGC-style phone video, vertical, a woman in her late twenties in a bright bathroom "
"holding the serum bottle to camera with easy creator energy, slightly handheld, "
"natural window light. She says: \"Okay this one actually cleared my skin in a week.\" "
"Cut to a macro close-up of the dropper. Ends on the bottle held up, label facing camera."
)
vid_id = submit(
"bytedance/dreamina-seedance-2-0-260128/reference-to-video",
{
"prompt": video_prompt,
"images": [hero_image_url], # product consistency comes from here
"aspect_ratio": "9:16",
"duration": 15,
"resolution": "720p",
"generate_audio": True,
"seed": -1,
},
)
print(wait(vid_id, every=10)["url"]) # video takes longer -- poll less often
curl --location 'https://gptproto.com/api/v3/bytedance/dreamina-seedance-2-0-260128/reference-to-video' \
--header 'Authorization: sk-xxxxx' \
--header 'Content-Type: application/json' \
--data '{"prompt":"UGC-style phone video...","images":["HERO_IMAGE_URL"],"aspect_ratio":"9:16","duration":15,"resolution":"720p","generate_audio":true}'
전체 참조 시스템 없이 단일 시작 프레임만 애니메이션화하고 싶다면 image-to-video를 사용할 수 있습니다. image 필드 하나를 사용하며, images 배열 대신 전달한다는 점 외에는 동일하게 작동합니다.
4단계 — 변형 10개 일괄 생성하기
이 작업을 코드로 수행하는 보람이 바로 여기에 있습니다. 각도 10개를 만드는 데 드는 노력은 하나를 만들 때와 같습니다. 같은 대표 이미지에 대해 서로 다른 프롬프트 10개로 영상 호출을 반복하고, 모두 제출한 다음 URL을 수집하면 됩니다.
angles = [
"...opens on a splash of water, energetic hook, 'wait for it'...",
"...opens mid-sentence, skeptical creator tone, 'I did not expect this'...",
"...opens on the product already in hand, calm morning-routine demo...",
"...street-style, walking and talking, quick to-camera line...",
"...close friend recommendation, sitting on the bathroom floor...",
# ...ten total, one format each
]
jobs = [
submit("bytedance/dreamina-seedance-2-0-260128/reference-to-video",
{"prompt": p, "images": [hero_image_url], "aspect_ratio": "9:16",
"duration": 15, "resolution": "720p", "generate_audio": True})
for p in angles
]
clips = [wait(j, every=10)["url"] for j in jobs]
for i, url in enumerate(clips, 1):
print(f"ad {i}: {url}")

대표 이미지 하나, 광고 각도 10개 — 4단계에서 만든 결과입니다.
Seedance 2.0 출력 사양 및 가격
| 해상도 |
화면 비율 |
길이 |
실행당 가격 |
| 480p |
16:9 |
4초 |
$0.3094 |
| 720p |
16:9 |
15초 |
$2.4948 |
| 1080p |
16:9 |
15초 |
$6.1746 |
| 4K |
16:9 |
15초 |
$12.83 |
해상도는 480p/720p/1080p/4K, 길이는 4–15초이며, 6가지 화면 비율(9:16, 1:1, 16:9, 4:3, 3:4, 21:9)을 지원합니다. 720p에서 16:9는 1280×720으로 렌더링되고, 1080p는 1920×1088로 렌더링됩니다. 유료 소셜 광고라면 720p 9:16을 권장합니다 — 비용 측면에서 가장 적절하고, 피드 압축으로 인해 1080p의 차이 대부분이 사라지기 때문입니다. 전체 표는 Seedance 2.0 모델 페이지와 모델 페이지에서 확인할 수 있습니다.
실제로 문제가 되는 오류
길이 불일치는 조용히 발생하는 문제입니다. 프롬프트는 15초에 맞춰 작성했는데 duration을 기본값 5로 두면 모델이 장면을 서두르거나 잘라냅니다. 둘을 일치시키세요. API의 503은 콘텐츠 정책 거부를 의미하며(400으로 반환됨), 무작정 재시도하지 말고 문구를 수정해 다시 제출하세요. 403은 대개 잘못된 키가 아니라 잔액 부족을 의미합니다. 클립이 고급 광고처럼 보인다면 UGC 배치에는 좋은 결과가 아닙니다 — 프롬프트를 "휴대전화로 촬영한 영상"에 가깝게 완화하세요.
게시하기 전에
모든 결과물을 완성된 광고가 아닌 광고 초안으로 취급하세요. 비용을 투입하기 전에 제품 주장, 업로드한 사진의 이미지 권리, 플랫폼 광고 정책, 해당 시장에 적용되는 AI 공개 규정을 확인하세요. AI는 제작 비용을 줄여 주지만, 광고가 전달하는 내용에 대한 책임까지 없애 주지는 않습니다.
이 게시물의 모든 이미지, 즉 표지와 네 개의 일러스트는 Seedream 5.0 Pro로 총 약 $0.24에 생성했습니다. 같은 워크플로, 같은 키를 사용했습니다.