Asset Library Guide
Manage trusted assets for Seedance 2.0 video generation via console or API Key dedicated routes (/doubao/v1/assets|asset-groups|visual-validate)
Purpose: Manage trusted assets for Seedance 2.0 video generation. After upload and preprocessing, reference them in video tasks with the
asset://protocol.
API prefix:https://maasunion.com/doubao/v1/...
Overview
The system provides two asset libraries under the parent “Asset Library” menu:
| Library | Purpose | How to create |
|---|---|---|
| Real-person library | Real human likeness assets; requires face liveness verification | Create group → scan QR to authenticate |
| Virtual portrait library | Virtual portrait assets; no verification required | Create by name directly |
Each library is organized by asset groups. A group can hold multiple assets (Image / Video / Audio).
Asset status
| Status (UI) | API field | Meaning | Usable |
|---|---|---|---|
| Processing | Processing | Preprocessing in progress | No |
| Active | Active | Preprocessing complete | Yes |
| Failed | Failed | Preprocessing failed | No |
Only Active assets can be used in video generation.
Format requirements
Image
- Formats: jpeg, png, webp, bmp, tiff, gif, heic/heif
- Size: < 30 MB per image
- Aspect ratio: 0.4 ~ 2.5
- Resolution: width and height each 300 ~ 6000 px
Video
- Formats: mp4, mov
- Size: ≤ 50 MB
- Duration: 2 ~ 15 seconds
- Resolution: 480p / 720p / 1080p
- Frame rate: 24 ~ 60 FPS
Audio
- Formats: wav, mp3
- Size: ≤ 15 MB
- Duration: 2 ~ 15 seconds
Console entry
Click Asset Library in the left nav. The sidebar switches to asset-library navigation:
- Real-person library
- Virtual portrait library
- Back to console returns to the main nav
Page layout:
- Top — overview stats (groups, assets, active count, project name)
- Left — group list with search/filter
- Right — assets in the selected group (search, filter, upload)
Real-person library
Create a group
- Click Create group above the group list
- Enter a name, then Generate auth QR code
- Scan the QR / open the H5 link and complete face liveness
- On success the group becomes Active
QR codes expire in 120 seconds. Regenerate if expired.
Auth status
| Status | Description |
|---|---|
| Pending | Waiting for scan / liveness |
| Succeeded | Group created; ready for uploads |
| Failed | Auth rejected; group unavailable |
| Expired | QR timed out; regenerate |
Virtual portrait library
- Click Create group
- Enter name (required) and description (optional)
- Click Create — the group is usable immediately
Upload assets
Select an Active group, then upload.
| Method | Description |
|---|---|
| File upload | Local file |
| URL | Publicly accessible URL |
Steps: select group → Upload → choose method & type (Image / Video / Audio) → name (required) → submit.
New assets start as Processing. Poll or click Refresh status. Video preprocessing can take longer.
Manage assets
- View — name, ID, type, status, source/upstream URL, failure reason, project, upload time. Upstream URLs expire in ~12 hours; reopen details to refresh.
- Edit — name and description
- Delete — irreversible
- Refresh status — re-sync processing assets in the group
- Group details — IDs, status, stats
- Delete group — deletes all assets in the group (irreversible)
API Key endpoints (Doubao dedicated)
Besides the console, manage the Doubao asset library with an API Token. The API prefix is /doubao/v1/....
Dedicated route summary
| Item | Description |
|---|---|
| Assets | https://maasunion.com/doubao/v1/assets/... |
| Groups | https://maasunion.com/doubao/v1/asset-groups/... |
| Real-person auth | https://maasunion.com/doubao/v1/visual-validate/sessions/... |
| Auth header | Authorization: Bearer {API Token} |
| Field style | VolcEngine Ark PascalCase (Id, AssetType, URL, …) |
| Path params | Use the Id from API responses |
Endpoint list
| Method | Path | Description |
|---|---|---|
POST | /doubao/v1/assets/upload | Upload (default virtual group) |
GET | /doubao/v1/assets | List assets |
GET | /doubao/v1/assets/{asset_id} | Get asset |
PATCH | /doubao/v1/assets/{asset_id} | Update name/description |
DELETE | /doubao/v1/assets/{asset_id} | Delete asset |
POST | /doubao/v1/asset-groups | Create group |
GET | /doubao/v1/asset-groups | List groups |
GET | /doubao/v1/asset-groups/{group_id} | Get group |
PATCH | /doubao/v1/asset-groups/{group_id} | Update group |
DELETE | /doubao/v1/asset-groups/{group_id} | Delete group |
GET | /doubao/v1/asset-groups/{group_id}/assets | List assets in group |
POST | /doubao/v1/asset-groups/{group_id}/assets | Upload into group |
POST | /doubao/v1/asset-groups/{group_id}/refresh | Refresh processing status |
POST | /doubao/v1/visual-validate/sessions | Create liveness session |
GET | /doubao/v1/visual-validate/sessions/{session_id} | Poll session |
1. Upload asset (default virtual group)
POST https://maasunion.com/doubao/v1/assets/upload
AssetType: Image / Video / Audio.
curl --location --request POST "https://maasunion.com/doubao/v1/assets/upload" \
--header "Authorization: Bearer $API_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"URL": "https://example.com/image.jpg",
"AssetType": "Image",
"Name": "optional name"
}'Example response:
{
"Id": "asset-20260624152252-fz9tt",
"Name": "optional name",
"AssetType": "Image",
"Status": "Processing",
"URL": "https://...",
"CreateTime": "2026-06-24T07:22:52Z"
}Use response Id with asset:// in video tasks. Poll until Status is Active.
2. List assets
GET https://maasunion.com/doubao/v1/assets
| Query | Description |
|---|---|
page / page_size | Pagination |
keyword | Search |
asset_type | Image / Video / Audio / all |
kind | virtual / real_person / all |
curl --location "https://maasunion.com/doubao/v1/assets?page=1&page_size=20&asset_type=all&kind=all" \
--header "Authorization: Bearer $API_TOKEN"Response shape: { "Assets": [...], "Total", "PageNumber", "PageSize" }.
3. Get / update / delete asset
- GET
/doubao/v1/assets/{asset_id}— may sync upstream status - PATCH
/doubao/v1/assets/{asset_id}— body:{ "Name", "Description" } - DELETE
/doubao/v1/assets/{asset_id}— returns{ "Id": "..." }
4. Asset groups
POST https://maasunion.com/doubao/v1/asset-groups
{
"Name": "My virtual group",
"Description": "optional",
"Kind": "virtual"
}Kind: virtual (default) or real_person (starts a liveness session).
Virtual create response includes Id, Name, Status, Kind, AssetCount, etc. Real-person create returns session fields (SessionID, H5Link, ExpiresAt, …).
| Method | Path | Notes |
|---|---|---|
GET | /doubao/v1/asset-groups | Query: page, page_size, keyword, kind, status |
GET | /doubao/v1/asset-groups/{group_id} | Group + AssetStats |
PATCH | /doubao/v1/asset-groups/{group_id} | Update Name / Description |
DELETE | /doubao/v1/asset-groups/{group_id} | 204 on success |
GET | /doubao/v1/asset-groups/{group_id}/assets | Assets in group |
POST | /doubao/v1/asset-groups/{group_id}/assets | Upload into group |
POST | /doubao/v1/asset-groups/{group_id}/refresh | Refresh processing assets |
Upload into a group:
curl --location --request POST "https://maasunion.com/doubao/v1/asset-groups/{group_id}/assets" \
--header "Authorization: Bearer $API_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"URL": "https://example.com/clip.mp4",
"AssetType": "Video",
"Name": "reference video"
}'5. Visual validation sessions
POST https://maasunion.com/doubao/v1/visual-validate/sessions
{ "Name": "real-person group name" }Open H5Link, complete liveness, then poll:
GET https://maasunion.com/doubao/v1/visual-validate/sessions/{session_id}
After success, upload real-person assets into that group.
Use assets in video generation
When status is Active, reference the asset in Create Doubao Video Task content via asset://. Prefer the dedicated route: POST /doubao/v1/video/generations.
{
"model": "doubao-seedance-2-0-260128",
"content": [
{
"type": "text",
"text": "Image 1 presenting a weather forecast"
},
{
"type": "image_url",
"image_url": {
"url": "asset://asset-20260624152252-fz9tt"
},
"role": "first_frame"
}
],
"ratio": "1:1",
"duration": 5,
"resolution": "720p",
"generate_audio": true
}Get the ID from the console asset details, or from API response Id.
Important: Use the
Idfrom asset details, and confirm the asset status is Active. If you getasset not found, check the ID and status, then retry.
FAQ
1. Stuck on Processing
Video assets take longer. Use Refresh status or POST .../asset-groups/{group_id}/refresh. If still stuck after ~5 minutes, check format requirements.
2. Status Failed
Inspect FailedReason (console or GET asset). Common causes: face mismatch, safety review, unreachable URL, type/format/duration/size violations.
3. Auth QR expired
Valid for 120 seconds. Regenerate in the console, or create a new visual-validate session via API.
4. Cannot delete real-person group
Not deletable while authorization is still valid. Only expired or rejected groups can be deleted.
5. asset not found in video generation
Confirm the asset status is Active, and that the ID after asset:// matches the Id in asset details.
Document updated: 2026-07-21
How is this guide?