> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apiyi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Does Seedance 2.0 auto-upload face references to the asset library? Does it trigger the deepfake filter?

> Seedance 2.0 cannot accept reference images with realistic human faces directly — they must first be uploaded to the asset library to get an asset:// ID. This page covers the correct workflow and the deepfake filter workaround.

## Short answer

Two questions, two answers:

1. **No, it does not auto-upload.** Reference images are NOT automatically pushed to the asset library when you call Seedance 2.0. You must separately upload through the asset library API to get an `asset://` ID, then reference it in the video generation request.
2. **Yes, the deepfake filter triggers.** Reference images with realistic human faces passed directly will be blocked by upstream content safety. Sending real-person photos for video generation will fail.

Choose the correct workflow based on your character type:

* **Virtual avatar** (AI-generated realistic human, no real-world counterpart): use the "Virtual avatar ingest" path → get `asset://` ID → reference it
* **Real human face** (celebrity, model, end-user photo): complete liveness scan first → ingest with the person-specific `groupId` → get `asset://` ID → reference it
* **Output from Seedance in the last 30 days**: can be used as a reference for re-creation (the platform-allowed path)

## Detailed explanation

### Why can't I pass face images directly?

Seedance 2.0 **cannot accept reference images with realistic human faces directly** (deepfake filter). This is an upstream content-safety restriction, not an apiyi policy.

### The correct workflow

<Steps>
  <Step title="Determine the asset type">
    Identify which category your image falls into:

    * **Anime / stylized characters**: no realistic face, **no ingest required** — pass a public URL or base64 directly
    * **Virtual avatars** (AI-generated realistic humans): go through "Virtual avatar ingest" — fully automatic, no review
    * **Real human faces** (celebrity, model, end-user): liveness scan is required first
  </Step>

  <Step title="Upload to the asset library to get an asset:// ID">
    * Web UI: upload at the [icover.ai asset library](https://icover.ai/zh/seedance-official/asset-library), wait for status to become "Available", copy the `asset://xxx`
    * API: use `presign` + `POST /api/asset-library/assets` for the full code path — see [Asset reference end-to-end](/en/api-capabilities/seedance2/asset-reference)
  </Step>

  <Step title="Reference the asset ID in the video generation request">
    In the Seedance 2.0 request's `content`, put `asset://<Id>` into `image_url`, and use "image 1" in the prompt to refer to the character. See [Seedance 2.0 Video Generation API](/en/api-capabilities/seedance2/video-generation).
  </Step>
</Steps>

<Info>
  **Two keys — don't mix them up**:

  * **Asset library KEY** (created at icover.ai): only for upload / ingest / list / delete
  * **APIYI SeeDance2 token** (created at api.apiyi.com, must have the `SeeDance2` group enabled): only for the video generation endpoint

  Details in [Asset library](/en/api-capabilities/seedance2/asset-library).
</Info>

### Real-person asset special flow

Real-person photos cannot bypass the deepfake filter by "just uploading to the library" — the **subject themselves** must complete a liveness scan (log into their Volcano account and pass facial recognition). This locks down portrait rights at the source; no proxy is allowed.

<Steps>
  <Step title="Generate the liveness link">
    Have the subject scan the QR code / open the link on their phone and complete the liveness check via their Volcano account
  </Step>

  <Step title="Query the liveness result">
    Get the subject-specific real-person asset group `groupId`
  </Step>

  <Step title="Ingest with the groupId">
    Upload the asset with that group's `groupId`. After the face-consistency check passes, you'll receive the `asset://` ID. The same subject reuses the same group for different looks — no re-verification needed
  </Step>
</Steps>

<Warning>
  **Real person ≠ AI-generated realistic human.** AI-generated realistic-looking humans that have no real-world counterpart (e.g., generated by Nano Banana) are "virtual avatars" — go through "Virtual avatar ingest" directly, no authorization step. Only photos of **real people** count as "real human faces" — uploading such a photo is not equivalent to authorization; the subject must complete the liveness scan.
</Warning>

## FAQ

<AccordionGroup>
  <Accordion title="Do asset IDs expire?">
    No. `asset://` asset IDs are permanent — ingest once, reference forever. However, the `content.video_url` returned after a successful generation is a 24-hour signed URL — **download and re-host immediately after the task succeeds**.
  </Accordion>

  <Accordion title="If a face-consistency check fails for one image, can I swap it for another?">
    Yes. You can upload multiple images into the same asset group (side views, multi-face, blurry may fail — clear front views recommended). An `asset://` ID is asset-group level, not per-image — all images in the same group share the same ID.
  </Accordion>

  <Accordion title="Is the asset library billed separately?">
    No. Virtual avatar ingest, real-person verification, and other private asset library capabilities are included with the Seedance 2.0 API at no extra annual fee.
  </Accordion>

  <Accordion title="Why does passing a face image directly return 400?">
    Upstream content-safety filter blocks it. A 400 doesn't charge your balance, but the request is rejected — finish the asset library ingest first, then reference the `asset://` ID.
  </Accordion>
</AccordionGroup>

## Related docs

* [Seedance 2.0 Video Generation API](/en/api-capabilities/seedance2/video-generation)
* [Seedance 2.0 Asset library](/en/api-capabilities/seedance2/asset-library)
* [Asset reference end-to-end (with full code)](/en/api-capabilities/seedance2/asset-reference)
* [Seedance 2.0 Overview](/en/api-capabilities/seedance2/overview)
