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
- Re-upload the asset and use the fresh asset id.
- Inspect the appended error code/message to see if moderation or format caused the non-Active status and fix the source file.
- 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
- Upload references fresh in the same session that consumes them.
- Treat any non-Active status as a failed upload: re-upload rather than reusing the id.
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
- Seedance session {session.session_id} completed without a gr
- Asset {aid} is not an Image asset.
- Reference video {index} is too small: {w}x{h} = {pixels:,} t
- Reference video {index} is too large: {w}x{h} = {pixels:,} t
- Minimum supported duration for Seedance 1.5 Pro is 4 seconds
AI-assisted analysis of Comfy-Org/ComfyUI@1c6d8d45b3 (2026-08-14).
Data as JSON: /api/errors/949c7c225d828106.
Report an issue: GitHub.