Comfy-Org/ComfyUI · error · ValueError

Reference asset {i} (Id={asset_id}) is not Active (Status={r

Error message

Reference asset {i} (Id={asset_id}) is not Active (Status={result.status}).{extra}

What it means

Seedance reference assets are uploaded out-of-band and polled via /proxy/seedance/assets/{id}. Only status 'Active' assets are usable; any other status (e.g. 'Failed', 'Pending', 'Error') raises, appending the API's error code/message when present.

Source

Thrown at comfy_api_nodes/nodes_bytedance.py:224

    """Look up each asset, validate Active status, group by asset_type.

    Returns (image_assets, video_assets, audio_assets), each mapping asset_id -> "asset://<asset_id>".
    """
    image_assets: dict[str, str] = {}
    video_assets: dict[str, str] = {}
    audio_assets: dict[str, str] = {}
    for i, raw_id in enumerate(asset_ids, 1):
        asset_id = (raw_id or "").strip()
        if not asset_id:
            continue
        result = await sync_op(
            cls,
            ApiEndpoint(path=f"/proxy/seedance/assets/{asset_id}"),
            response_model=GetAssetResponse,
        )
        if result.status != "Active":
            extra = f" {result.error.code}: {result.error.message}" if result.error else ""
            raise ValueError(f"Reference asset {i} (Id={asset_id}) is not Active (Status={result.status}).{extra}")
        asset_uri = f"asset://{asset_id}"
        if result.asset_type == "Image":
            image_assets[asset_id] = asset_uri
        elif result.asset_type == "Video":
            video_assets[asset_id] = asset_uri
        elif result.asset_type == "Audio":
            audio_assets[asset_id] = asset_uri
    return image_assets, video_assets, audio_assets


_ASSET_REF_RE = re.compile(r"\basset ?(\d{1,2})\b", re.IGNORECASE)


def _build_asset_labels(
    reference_assets: dict[str, str],
    image_asset_uris: dict[str, str],
    video_asset_uris: dict[str, str],
    audio_asset_uris: dict[str, str],

View on GitHub (pinned to 1c6d8d45b3)

Solutions

  1. Re-upload the asset and use the fresh asset id.
  2. Inspect the appended error code/message to see if moderation or format caused the non-Active status and fix the source file.
  3. Blank/whitespace-only ids are skipped - make sure you did not paste a truncated id that maps to someone else's or a dead asset.
Defensive patterns

Strategy: retry

Validate before calling

status = await get_asset_status(asset_id)
if status != 'Active':
    asset_id = await reupload_asset(source_file)  # fresh id

Try / catch

try:
    assets = await collect_active_assets(cls, asset_ids)
except ValueError as e:
    if 'not Active' in str(e):
        asset_ids = await reupload_all(sources)  # one retry with fresh uploads
        assets = await collect_active_assets(cls, asset_ids)
    else:
        raise

Prevention

When it happens

Trigger: An asset_ids entry resolves to an asset whose GetAssetResponse.status != 'Active' - upload failed, moderation rejected it, or polling raced ahead of processing.

Common situations: Reusing stale asset ids from a previous session; content moderation rejected the upload; network hiccup during upload left the asset in a failed state.

Related errors


AI-assisted analysis of Comfy-Org/ComfyUI@1c6d8d45b3 (2026-08-14). Data as JSON: /api/errors/949c7c225d828106. Report an issue: GitHub.