실사 인물·유명인 IP 이미지를 Seedance 2.0 레퍼런스로 활용하기 위한 정책 기준, 인증 체계, IAM 설정, Asset 등록·조회·참조 API, 오류 처리까지 하나로 정리한 통합 가이드입니다. 본 가이드의 Asset Library 연동은 Seedance 2.0(영상 생성) 기준입니다.
Seedream 5.0 Pro / Lite의 t2i(Text-to-Image) 생성 이미지는 Asset Library 등록 없이 Seedance 2.0 레퍼런스로 직접 사용 가능합니다.
유명인 IP (Clearance 완료)는 직접 참조도 기술적으로 가능하지만, false block 최소화를 위해 Asset Library 등록 후 Asset ID 방식을 강력 권장합니다.
그 외 모든 실사 인물 이미지(i2i 생성, 3rd-party AI, 실제 사진 포함)는 Asset Library 등록이 필수이며, 미등록 시 Seedance 2.0 참조가 차단됩니다.
이미지 소스에 따라 Asset Library 등록 필요 여부가 결정됩니다. 아래 표를 기준으로 각 소스에 맞는 처리 경로를 구현하세요.
| 이미지 소스 | Asset Library 등록 | Seedance 2.0 참조 | 비고 |
|---|---|---|---|
Seedream 5.0 Pro / Lite t2i (Text-to-Image) 생성 이미지 |
불필요 | 직접 참조 | BytePlus 내부 생성 이미지 — 별도 승인 절차 불필요 |
유명인 IP Clearance (사전 승인) 완료된 경우 |
강력 권장 | 직접 가능 (비권장) | 직접 참조 시 false block 발생 가능. Asset ID 방식 권장 |
Seedream 5.0 Pro / Lite i2i (Image-to-Image) 생성 이미지 |
필수 | 등록 후만 가능 | 실제 인물 동일 정책 적용 ※ Seedream i2i 레퍼런스 사용 시 Asset Library 미지원 — BytePlus 별도 Approval 필요 |
3rd-party AI 생성 이미지 GPT Image 2, Nano Banana 등 |
필수 | 등록 후만 가능 | 실제 인물 동일 정책 적용 |
실제 인물 사진 촬영본, 스캔본 등 모든 실사 이미지 |
필수 | 등록 후만 가능 | Clearance 완료 여부와 무관하게 등록 필요 |
Clearance 완료 ≠ 등록 면제: IP 사용 권한이 있더라도 실사 이미지는 Asset Library에 등록해야만 Seedance 2.0에서 참조할 수 있습니다. Clearance는 법적 사용 권한, 등록은 기술적 사용 요건입니다.
| Asset 구분 | 관리 API 조회 | 등록·관리 | Seedance 사용 |
|---|---|---|---|
| Created by me — Virtual Portrait | 가능 | 생성·조회·수정·삭제 가능 | 지원 |
| Created by me — Real-human Portrait | 가능 | 실인증 그룹 생성 후 등록·관리 | 지원 |
| Authorized to me — 다른 계정에서 승인 | 불가 | 조회·수정·삭제 불가 | 지원 |
Seedream 이미지 생성 모델 — 레퍼런스 이미지 지원 범위
| 레퍼런스 이미지 유형 | 지원 여부 | 비고 |
|---|---|---|
| AI 생성 인물 이미지 | 가능 | AI로 생성된 가상 인물 레퍼런스 이미지 사용 가능 |
| 실사 인물 이미지 | 가능 | 실제 인물 사진을 레퍼런스로 사용 가능 |
| 유명인 이미지 | 인물별 상이 | 인물에 따라 통과되는 경우와 차단되는 경우가 혼재. 차단 시 sensitive content 오류 발생 |
Seedream 이미지 생성 모델은 Asset Library와 연동되지 않으며, 레퍼런스 이미지는 URL 또는 Base64로 직접 전달합니다. 유명인 이미지 차단 시 BytePlus 별도 Approval 프로세스를 통해 해제 요청이 가능합니다.
Asset 관리 API와 Seedance 생성 API는 자격 증명과 엔드포인트가 완전히 다릅니다. 혼용하면 401 오류가 발생합니다.
| 구분 | 자격 증명 | 호출 엔드포인트 | 용도 |
|---|---|---|---|
| Asset 관리 API | Access Key ID + Secret Access Key |
ark.ap-southeast-1.byteplusapi.com |
Asset Group·Asset 생성, 목록, 상세, 수정, 삭제 |
| Seedance 생성 API | ModelArk API Key |
ark.ap-southeast.bytepluses.com |
Endpoint 모델 호출, 영상 생성 |
Asset 관리 API는 HMAC-SHA256 V4 서명이 필요합니다. API Key Bearer 방식(Seedance용)과 혼동하지 마세요.
Asset 관리 API 호출 전 BytePlus IAM에서 아래 설정을 완료해야 합니다. 현재 환경(digicap_test) 기준입니다.
| 항목 | 확인된 값 |
|---|---|
| IAM 사용자 | digicap_test |
| 연결 정책 | Test_Asset |
| 정책 유형 | Customer managed |
| 프로젝트 제한 | digicap_test |
연결된 정책 JSON
{
"Statement": [
{
"Effect": "Allow",
"Action": ["ark:*Asset*"],
"Resource": ["*"]
}
]
}
IAM 설정 순서
ark:*Asset* 허용 및 Project limits 확인ArkFullAccess 필요 (CreateVisualValidateSession 호출 시)ArkFullAccess 불필요ark:*Asset* 범위면 충분
ArkFullAccess를 digicap_test 프로젝트 범위로 추가한 뒤 CreateVisualValidateSession 호출 성공. H5Link와 BytedToken이 정상 반환되었으며, Callback URL과 Cloudflare Tunnel도 정상 동작 확인.회사 관리 계정 — 다중 배우 운영 모델
회사 관리 계정 하나를 Asset 사용자로 두고, 배우마다 별도의 H5 인증 세션을 발급합니다. 이것은 회사 계정이 그룹을 직접 생성하는 Created by me 흐름입니다. 배우가 별도 BytePlus 계정으로 QR에 로그인해 승인하는 Authorized to me 흐름과 구분하세요.
회사 관리 계정 / digicap_test 프로젝트 ├─ 배우 A → CreateVisualValidateSession → H5Link (QR로 전달) → 인증 → Group A → 배우 A 이미지 ├─ 배우 B → CreateVisualValidateSession → H5Link (QR로 전달) → 인증 → Group B → 배우 B 이미지 └─ 배우 C → CreateVisualValidateSession → H5Link (QR로 전달) → 인증 → Group C → 배우 C 이미지 핵심 원칙 • CreateVisualValidateSession 은 배우마다 별도 호출 • BytedToken · GroupId 는 배우 식별자(DB)와 1:1 매핑 • 모든 Group · Asset · Seedance Endpoint 에 동일 ProjectName 사용
BytePlus Asset Library는 가상 인물(AIGC)과 실사 인물(LivenessFace) 두 가지 GroupType을 운용합니다.
| 콘솔 표시명 | GroupType | 대상 | 그룹 생성 방법 |
|---|---|---|---|
| Virtual Portrait Asset | AIGC |
실제 자연인과 닮지 않은 가상 인물 | Action=CreateAssetGroup |
| Portrait Assets (Real-human) | LivenessFace |
실인증 & 사용 승인을 완료한 실제 인물 | 콘솔 QR 또는 Action=CreateVisualValidateSession |
우회 등록 금지: 실제 인물 자료를 AIGC 그룹으로 우회 등록하지 마세요. 실제 인물은 반드시 LivenessFace 인증 흐름을 거쳐야 합니다.
영상 생성 요청 전 이미지 소스를 판별하고, 소스에 따라 직접 URL 전달 또는 Asset Library 등록 → Asset ID 전달로 분기합니다.
이미지가 Seedream 5.0 Pro/Lite t2i 생성물인지 확인합니다.
직접 URL 전달
Asset Library 등록 없이 생성된 이미지 URL을 image_url.url에 직접 전달합니다.
Asset Library 등록 필요
아래 Step 2–4를 거쳐 발급된 Asset ID를 API에 전달합니다. 미등록 시 참조가 차단됩니다.
인물별 Asset Group을 조회하거나 신규 생성합니다. 인물 1명 = Group 1개 원칙.
이미지를 Group에 등록 후 GetAsset 폴링으로 Active 상태를 확인합니다. Processing 상태에서는 Seedance에서 사용할 수 없습니다.
발급된 Asset ID를 asset://<Asset ID> 형식으로 영상 생성 요청의 레퍼런스 파라미터에 사용합니다.
모든 Asset 관리 API는 동일한 엔드포인트에 Action 쿼리 파라미터로 기능을 지정하는 방식입니다. ?Action=ListAssets&Version=2024-01-01 형식을 사용합니다.
| 항목 | 값 |
|---|---|
| Base URL | https://ark.ap-southeast-1.byteplusapi.com |
| 호출 방식 | POST /?Action=<ActionName>&Version=2024-01-01 |
| Service / Region | ark / ap-southeast-1 |
| 서명 방식 | HMAC-SHA256 V4 서명 |
| Content-Type | application/json; charset=UTF-8 |
| 프로젝트 지정 | 요청 Body의 ProjectName 필드로 전달 |
POST /?Action=ListAssets&Version=2024-01-01 HTTP/1.1 Host: ark.ap-southeast-1.byteplusapi.com Content-Type: application/json; charset=UTF-8 X-Date: <UTC timestamp, e.g. 20260729T090000Z> X-Content-Sha256: <SHA256 hex of request body> Authorization: HMAC-SHA256 Credential=<AK>/<date>/ap-southeast-1/ark/request, ...
전체 Action 목록
GroupType(AIGC / LivenessFace) 및 이름·설명 전달GroupId 반환내 계정에서 생성한 Asset Group과 Asset을 조회합니다. Seedance 참조에 필요한 Asset ID를 여기서 확인합니다.
// POST /?Action=ListAssets&Version=2024-01-01 { "Filter": { "GroupType": "LivenessFace", "Statuses": ["Active", "Processing"] }, "PageNumber": 1, "PageSize": 100, "SortBy": "GroupId", "SortOrder": "Asc", "ProjectName": "digicap_test" }
| 응답 필드 | 설명 |
|---|---|
Id | Asset ID — Seedance 참조 시 asset://<Id> 형식으로 사용 |
AssetType | Image / Video / Audio |
Status | Active (사용 가능) / Processing (처리 중) / Failed (처리 실패) |
URL | Asset 원본 URL |
GroupId | 소속 Asset Group ID |
Virtual Portrait(AIGC)와 Real-human Portrait(LivenessFace)는 등록 절차가 다릅니다.
A. Virtual Portrait (가상 인물 — AIGC)
CreateAssetGroupAIGCCreateAssetGetAsset 폴링B. Real-human Portrait (실사 인물 — LivenessFace)
CreateVisualValidateSession으로 H5 링크 생성GetVisualValidateResult로 LivenessFace GroupId 조회CreateAsset → GetAsset 폴링 → Active 확인회사 → 배우 H5 링크 / QR 전달 워크플로우
H5Link입니다 (H5Url 아님). QR 이미지 자체를 반환하는 API는 공식 문서에 정의되어 있지 않습니다. QR이 필요하면 서버 또는 프런트엔드에서 H5Link를 QR 코드로 인코딩해 배우에게 전달합니다. 콘솔 QR 초대 기능과 API H5 세션은 별도입니다.
CallbackURL + ProjectName을 지정해 배우별 H5 인증 세션 생성. 응답의 H5Link를 DB에 세션 ID와 함께 저장.
H5Link URL을 QR 라이브러리(예: qrcode.js, python-qrcode)로 이미지로 변환합니다. QR 스캔 시 배우는 동일한 H5Link를 열게 됩니다. QR은 선택 사항 — 링크를 문자/이메일로 직접 전달해도 됩니다.
배우가 H5 페이지에서 실인증을 완료하고 초상 사용에 동의합니다. 별도 BytePlus 계정 불필요.
설정된 CallbackURL로 인증 결과가 전달됩니다. resultCode=10000이면 성공. GetVisualValidateResult로 GroupId를 조회해 배우 DB에 저장합니다.
CreateAsset으로 배우 레퍼런스를 Group에 등록합니다. 등록 후 GetAsset 폴링으로 Active 상태 확인.
H5 실인증 세션 API 예시
// POST /?Action=CreateVisualValidateSession&Version=2024-01-01 { "ProjectName": "digicap_test", "CallbackURL": "https://your-platform.com/auth/callback" // ExpireTime 파라미터는 공식 문서에 정의되어 있지 않으므로 추가하지 않습니다 } // 응답 — 실제 필드명은 H5Link (H5Url 아님) { "SessionId": "session-xxxxxxxxxxxx", "H5Link": "https://validate.byteplus.com/liveness?session=...", // 배우에게 전달하거나 QR로 변환 "BytedToken": "byted-xxxxxx" // 공식 문서상 30분 유효 }
보안 주의: H5Link, BytedToken, V4 서명 헤더, AK/SK는 브라우저 로그나 QR 코드 데이터에 노출하지 마세요. QR 코드에는 H5Link URL만 인코딩합니다.
CreateVisualValidateSession 요청에 공식 ExpireTime 파라미터는 없습니다 — 임의로 추가하지 마세요.H5Link만 반환하며 QR 이미지 자체를 생성하는 API는 공식 문서에 없습니다. QR이 필요하면 플랫폼에서 직접 변환합니다.BytedToken은 공식 문서상 30분 유효합니다.// POST /?Action=GetVisualValidateResult&Version=2024-01-01 { "SessionId": "session-xxxxxxxxxxxx", "ProjectName": "digicap_test" } // 응답 — Status가 Completed이고 resultCode=10000일 때 GroupId 사용 { "Status": "Completed", // Pending | Completed | Failed "GroupId": "grp-zzzzzzzzzzzzzzzz",// 인증된 LivenessFace Group ID → DB에 배우와 매핑 "resultCode": 10000 // 10000 = 인증 성공 }
Asset 등록 방법 — 콘솔 vs API
| 방식 | 등록 방법 | 비고 |
|---|---|---|
| Model Playground 콘솔 | 로컬 이미지·영상 파일을 선택해 직접 업로드 | PC 로컬 파일 지원. 소량 등록 시 편리 |
| Asset 관리 API | CreateAsset의 URL에 공개 접근 가능한 이미지·영상·오디오 URL 전달 |
Base64 미지원. 비공개 URL 불가. 자동화 등록에 사용 |
CreateAsset 요청 예시
// POST /?Action=CreateAsset&Version=2024-01-01 { "GroupId": "grp-zzzzzzzzzzzzzzzz", "Name": "홍길동_정면샷_01", "AssetType": "Image", "URL": "https://your-cdn.example.com/portrait.jpg", // 공개 접근 가능한 URL "ProjectName": "digicap_test" } // 응답 { "AssetId": "asset-yyyyyyyyyyyyyyyy", "Status": "Processing" // 비동기 처리 시작 — 아래 폴링 패턴으로 Active 대기 }
파일 형식 및 크기 제한
| AssetType | 지원 형식 | 주요 제한 |
|---|---|---|
Image |
jpeg · png · webp · bmp · tiff · gif · heic/heif |
30 MB 미만 · 가로/세로 300–6000 px · 종횡비 0.4–2.5 |
Video |
mp4 · mov |
480p / 720p / 1080p · 2–15초 · 50 MB 이하 · FPS 24–60 |
Audio |
wav · mp3 |
2–15초 · 15 MB 이하 |
Active 상태 대기 — 폴링 패턴
CreateAsset 직후 Status: Processing 상태의 Asset은 Seedance 2.0에서 참조할 수 없습니다. 반드시 Active 확인 후 사용하세요. 처리 시간은 이미지 크기에 따라 수초~수십 초 소요됩니다.
import time def wait_for_active(asset_id, project_name, max_attempts=20, interval_sec=3): """CreateAsset 후 Active 상태가 될 때까지 폴링.""" for attempt in range(max_attempts): res = call_ark_api( action="GetAsset", body={"AssetId": asset_id, "ProjectName": project_name} ) status = res["Asset"]["Status"] if status == "Active": return asset_id # 사용 가능 if status == "Failed": err = res["Asset"].get("FailReason", "unknown") raise RuntimeError(f"Asset processing failed: {err}") # Processing — 재시도 time.sleep(interval_sec) raise TimeoutError( f"Asset {asset_id} did not become Active " f"after {max_attempts * interval_sec}s" ) # 사용 예 asset_id = create_asset(group_id, image_url)["AssetId"] wait_for_active(asset_id, project_name="digicap_test") # 이후 Seedance 호출에 asset_id 사용 가능
CreateAsset은 비동기 API이며 요청 1회에 Asset 1개를 등록합니다. 영상은 이미지보다 처리 시간이 더 걸릴 수 있습니다.Moderation 기본값은 Content Pre-filter 검토를 사용합니다. Skip은 콘솔에서 허용된 경우에만 지정합니다.Name은 최대 64자이며 ListAssets 검색용으로만 사용됩니다 (모델 추론에 영향 없음).ProjectName은 대상 Group의 프로젝트명과 동일해야 합니다.
CreateAsset으로 추가하며, 얼굴 일치 검사를 통과해야 합니다.H5Link는 무효가 되며 다시 CreateVisualValidateSession을 호출해야 합니다. 업로드 자료에 여러 얼굴이 감지되거나 Group의 인물과 다른 얼굴이면 Asset 등록이 실패합니다. 공개 URL이 아닌 PC 로컬 경로나 비공개 URL은 CreateAsset의 URL 필드에 사용할 수 없습니다.
Asset Library 연동 시 자주 발생하는 오류 상황과 조치 방법입니다. 오류 발생 시 가장 먼저 아래 표를 참조하세요.
| 오류 상황 | 원인 | 조치 방법 |
|---|---|---|
Asset Status: Failed얼굴 불일치 오류 |
동일 Group에 서로 다른 인물 이미지 등록 시도 | 인물 1명 = Group 1개 원칙 확인. 새 Group을 생성하여 등록 |
Asset Status: FailedURL 접근 불가 |
이미지 URL이 비공개(private) 이거나 만료된 경우 | 공개 접근 가능한 CDN URL 또는 유효한 Pre-signed URL 사용 |
Seedance — false block 실사 이미지 직접 참조 시 |
미등록 실사·유명인 이미지를 URL로 직접 전달 | Asset Library 등록 후 asset://<AssetId> 방식으로 전환 |
Seedream i2i — sensitive content 오류 유명인·실사 인물 레퍼런스 입력 시 |
Seedream은 Asset Library 미연동 — URL/Base64만 지원하므로 콘텐츠 필터 우회 불가 | BytePlus 별도 Approval 프로세스 신청 필요. 승인 완료 후 해당 프로젝트에서 사용 가능 (BytePlus 공식 확인) |
401 Unauthorized 인증 방식 혼용 |
Asset 관리 API에 API Key 사용, 또는 Seedance API에 AK/SK 사용 | Asset 관리 API → AK/SK V4 서명, Seedance API → Bearer API Key |
403 Permission Denied IAM Action 미허용 |
IAM 정책에 해당 Action이 포함되지 않은 경우 | IAM 정책에 ark:*Asset* 추가. H5 인증 시 ArkFullAccess 필요 |
중복 Group 생성 같은 인물 재인증 시도 |
동일 인물을 H5 인증으로 여러 번 등록하여 중복 Group 발생 | GetVisualValidateResult로 기존 GroupId 재사용. 새 Asset만 추가 등록 |
Processing 상태에서 Seedance 호출 Asset 미완료 상태 |
CreateAsset 직후 Active 대기 없이 즉시 영상 생성 요청 | GetAsset 폴링으로 Active 상태 확인 후 호출 (Section 08 폴링 패턴 참조) |
Authorized to me Asset 조회 실패 관리 API 제한 |
다른 계정에서 승인된 Asset을 ListAssets 등으로 조회 시도 | 해당 Asset은 관리 API 조회 불가. Asset ID를 직접 전달받아 Seedance에서만 사용 |
오류 응답에는 ResponseMetadata.Error.Code와 Message 필드가 포함됩니다. 특정 오류 코드 목록은 API 레퍼런스 공식 문서의 Error Codes 섹션을 확인하세요.
다른 계정에서 승인된 Asset은 관리 API로 조회·수정·삭제할 수 없지만, Seedance 2.0 생성 시 레퍼런스 입력으로는 사용 가능합니다.
| 항목 | 공식 문서상 범위 |
|---|---|
| Asset (Group) Management API | 불가 다른 계정에서 승인한 Asset은 조회·수정·삭제할 수 없음 |
| Seedance 2.0 생성 입력 | 지원 승인된 실사 인물 Asset을 레퍼런스 입력으로 사용 가능 |
QR 승인 Asset 사용 절차 (Authorized to me 흐름)
이 흐름은 배우가 별도 BytePlus 계정으로 QR에 로그인해 Asset을 직접 업로드하고 플랫폼 계정에 사용 권한을 승인하는 방식입니다. 회사 계정이 H5 세션을 발급하는 Created by me 흐름과 다릅니다.
플랫폼 계정의 콘솔에서 생성한 QR 초대 링크를 배우에게 전달합니다. 배우가 자신의 BytePlus 계정으로 QR을 스캔해 자료를 직접 업로드합니다.
수신 대기 자료를 열고 Accept를 선택합니다. 수락 후 상태가 Active가 됩니다.
콘솔 Asset 상세 페이지에서 Asset ID를 확인합니다. 이 Asset은 ListAssets 등 관리 API로는 조회할 수 없으며, API 영상 생성 시 asset://<asset_id>로 전달합니다.
관리 API 조회 불가: Authorized to me Asset의 Asset ID를 ListAssets·GetAsset으로 읽어오는 방법은 현재 공식 문서에 명시되어 있지 않습니다. API에서 Asset ID가 필요하다면 콘솔에서 직접 확인하거나 BytePlus 지원에 별도 조회 API 여부를 확인하세요.
Asset ID는 content 배열의 미디어 URL 객체에 asset://<Asset ID> 형식으로 전달합니다. 프롬프트 텍스트에 넣는 것이 아닙니다.
| 미디어 유형 | Asset URI 위치 | role 값 | 프롬프트 참조명 |
|---|---|---|---|
| Image | image_url.url | reference_image | Image 1, Image 2 … |
| Video | video_url.url | reference_video | Video 1 |
| Audio | audio_url.url | reference_audio | Audio 1 |
POST /chat/completions Authorization: Bearer {MODELARK_API_KEY} { "model": "ep-20260710123019-wz6fj", "content": [ { "type": "text", "text": "Image 1의 인물이 카메라를 바라보며 자연스럽게 인사한다." }, { "type": "image_url", "image_url": { "url": "asset://asset-yyyyyyyyyyyyyyyy" }, "role": "reference_image" } ], "generate_audio": true, "ratio": "16:9", "duration": 5, "watermark": false }
// 여러 레퍼런스를 content 배열에 순서대로 추가 // 프롬프트에서 "Image 1", "Image 2" 로 참조 { "model": "ep-20260710123019-wz6fj", "content": [ { "type": "text", "text": "Image 1의 인물이 Image 2의 배경에서 걷고 있다." }, { "type": "image_url", "image_url": { "url": "asset://asset-person-id" }, "role": "reference_image" // → Image 1 }, { "type": "image_url", "image_url": { "url": "https://cdn.example.com/background.jpg" }, "role": "reference_image" // → Image 2 (t2i 생성 이미지 — 직접 URL 가능) } ], "ratio": "16:9", "duration": 5 }
t2i 생성 이미지는 asset:// 없이 HTTPS URL을 image_url.url에 직접 전달 가능합니다. 실사·유명인 IP 이미지는 반드시 asset:// 방식을 사용하세요.
asset:// URI 예시전체 파라미터 스키마, 오류 코드, 인증 방식은 아래 공식 BytePlus 문서를 참조하세요. 이 가이드와 내용이 다를 경우 공식 문서가 우선합니다.