{"record":{"id":"c31f10fdcd03a630","repo":"affaan-m/ECC","slug":"could-not-import-event-asset","errorCode":null,"errorMessage":"could not import {event['asset']}","messagePattern":"could not import (.+?)","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"skills/taste-application/scripts/tasteforge/resolve.py","lineNumber":280,"sourceCode":"    count = timeline.GetTrackCount(\"video\")\n    if count < base_track_count:\n        raise ValueError(\"base_track_count exceeds target video tracks\")\n    for track in range(base_track_count + 1, count + 1):\n        if _items(timeline, \"video\", track):\n            raise ValueError(\"target overlay tracks must be empty\")\n    before = _base_snapshot(timeline, base_track_count)\n    for _ in range(count, max(event[\"track\"] for event in plan)):\n        old_count = timeline.GetTrackCount(\"video\")\n        if (\n            not timeline.AddTrack(\"video\")\n            or timeline.GetTrackCount(\"video\") != old_count + 1\n        ):\n            raise RuntimeError(\"could not create overlay track\")\n    appended = []\n    for event in plan:\n        imported = media_pool.ImportMedia([event[\"asset\"]])\n        if not imported or len(imported) != 1:\n            raise RuntimeError(f\"could not import {event['asset']}\")\n        items = media_pool.AppendToTimeline(\n            [\n                {\n                    \"mediaPoolItem\": imported[0],\n                    \"startFrame\": 0,\n                    \"endFrame\": event[\"frames\"] - (source_end_mode == \"inclusive\"),\n                    \"mediaType\": 1,\n                    \"trackIndex\": event[\"track\"],\n                    \"recordFrame\": event[\"record_frame\"],\n                }\n            ]\n        )\n        if not items or len(items) != 1:\n            raise RuntimeError(f\"could not append {event['id']}\")\n        item = items[0]\n        for key, value in [\n            (\"Opacity\", event[\"opacity\"]),\n            (\"CompositeMode\", event[\"composite\"]),","sourceCodeStart":262,"sourceCodeEnd":298,"githubUrl":"https://github.com/affaan-m/ECC/blob/8321021c54d670126ce3b2969d5deb880b4b0c2a/skills/taste-application/scripts/tasteforge/resolve.py#L262-L298","documentation":"For each planned event, apply_placements imports the asset file into the media pool via media_pool.ImportMedia([asset]) and requires exactly one imported MediaPoolItem back. If the import fails (empty result, None, or more than one item), it raises this RuntimeError naming the asset path. Import typically fails when the file path is invalid or unsupported by Resolve.","triggerScenarios":"event['asset'] points to a file that does not exist, has an unsupported codec/container, lies outside the project's media storage, or the path is a relative path that Resolve cannot resolve from the scripting host.","commonSituations":"Renders not yet finished when the script runs (overlay file missing); assets moved/renamed after planning; network share unmounted; unsupported formats like some ProRes variants on certain OS builds.","solutions":["Verify the asset file exists and is an absolute path before calling apply_placements (os.path.isfile).","Pre-import the assets into the media pool and confirm Resolve can open them in the UI.","Re-render or restore the missing overlay file, then re-run."],"exampleFix":"// before\napply_placements(tl, pool, placements, ...)\n// after\nmissing = [e[\"asset\"] for e in placements if not os.path.isfile(e[\"asset\"])]\nif missing:\n    raise FileNotFoundError(missing)\napply_placements(tl, pool, placements, ...)","handlingStrategy":"validation","validationCode":"missing = [e[\"asset\"] for e in placements if not os.path.isabs(e[\"asset\"]) or not os.path.isfile(e[\"asset\"])]\nif missing:\n    raise FileNotFoundError(f\"assets missing for import: {missing}\")","typeGuard":"def importable_assets(placements):\n    import os\n    return all(\n        isinstance(e.get(\"asset\"), str)\n        and os.path.isabs(e[\"asset\"])\n        and os.path.isfile(e[\"asset\"])\n        for e in placements\n    )","tryCatchPattern":"try:\n    apply_placements(tl, pool, placements, ...)\nexcept RuntimeError as e:\n    if \"could not import\" in str(e):\n        asset = str(e).split(\"could not import \", 1)[1]\n        print(f\"check existence/codec of {asset} and re-render if needed\")\n    else:\n        raise","preventionTips":["Verify every overlay render completed and the file exists before running.","Use absolute paths for all assets handed to ImportMedia.","Confirm each format opens in Resolve's media pool manually once before automating."],"tags":["resolve","media-import","file-not-found","runtime"],"backgroundTag":"file-not-found","analyzedSha":"8321021c54d670126ce3b2969d5deb880b4b0c2a","analyzedAt":"2026-09-16T10:08:13.343Z","contentChangedAt":"2026-09-16T10:08:13.343Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}