{"record":{"id":"e325a3555679c7da","repo":"ATH-MaaS/Pixelle-Video","slug":"no-assets-provided-please-upload-at-least-one-ima","errorCode":null,"errorMessage":"No assets provided. Please upload at least one image or video.","messagePattern":"No assets provided\\. Please upload at least one image or video\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"pixelle_video/pipelines/asset_based.py","lineNumber":187,"sourceCode":"            context: Pipeline context with assets list\n        \n        Returns:\n            Updated context with asset_index\n        \"\"\"\n        # Create isolated task directory\n        task_dir, task_id = create_task_output_dir()\n        context.task_id = task_id\n        context.task_dir = Path(task_dir)  # Convert to Path for easier usage\n        \n        # Determine final video path\n        context.final_video_path = get_task_final_video_path(task_id)\n        \n        logger.info(f\"📁 Task directory created: {task_dir}\")\n        logger.info(\"🔍 Analyzing uploaded assets...\")\n        \n        assets: List[str] = context.request.get(\"assets\", [])\n        if not assets:\n            raise ValueError(\"No assets provided. Please upload at least one image or video.\")\n        \n        total_assets = len(assets)\n        logger.info(f\"Found {total_assets} assets to analyze\")\n        \n        # Emit initial progress (0-15% for asset analysis)\n        self._emit_progress(ProgressEvent(\n            event_type=\"analyzing_assets\",\n            progress=0.01,\n            frame_current=0,\n            frame_total=total_assets,\n            extra_info=\"start\"\n        ))\n        \n        self.asset_index = {}\n        \n        for i, asset_path in enumerate(assets, 1):\n            asset_path_obj = Path(asset_path)\n            ","sourceCodeStart":169,"sourceCodeEnd":205,"githubUrl":"https://github.com/ATH-MaaS/Pixelle-Video/blob/848b054e4fae40dabc62ec58e960b573e83793ac/pixelle_video/pipelines/asset_based.py#L169-L205","documentation":"The asset_based pipeline requires at least one image or video to operate on. setup_environment reads context.request['assets'] and raises ValueError when the list is empty or missing, before any asset analysis starts.","triggerScenarios":"Calling the asset-based pipeline (via __call__/service.generate_video) without an 'assets' key in the request, or with assets: [].","commonSituations":"Text-only prompt submitted to a pipeline that fundamentally needs reference media; frontend forgot to include uploaded file paths; assets uploaded under a different request key (e.g. 'images'/'media') so the default [] kicks in.","solutions":["Add at least one image or video path to the request's 'assets' list before invoking the pipeline","Verify the upload step actually stores file paths under the request key 'assets' (not another key)","If the intent was text-to-video with no assets, switch to a pipeline that supports text-only generation"],"exampleFix":"# before\nawait pipeline(text=\"a cat surfing\", request={})\n# after\nawait pipeline(text=\"a cat surfing\", request={\"assets\": [\"/tmp/uploads/cat.jpg\"]})","handlingStrategy":"validation","validationCode":"assets = request.get(\"assets\") or []\nif not assets:\n    raise ValueError(\"assets must contain at least one image or video path\")","typeGuard":"def has_assets(req: dict) -> bool:\n    a = req.get(\"assets\")\n    return isinstance(a, (list, tuple)) and len(a) > 0","tryCatchPattern":"try:\n    result = await pipeline(request=req)\nexcept ValueError as e:\n    if \"No assets provided\" in str(e):\n        result = await text_only_pipeline(request=req)\n    else:\n        raise","preventionTips":["Always populate request['assets'] with at least one path before calling asset-based pipelines","Validate the request payload in your app layer before dispatching to a pipeline","Route asset-less requests to a text-only pipeline instead"],"tags":["validation","missing-argument","pipeline"],"backgroundTag":"missing-required-argument","analyzedSha":"848b054e4fae40dabc62ec58e960b573e83793ac","analyzedAt":"2026-08-30T03:24:41.468Z","schemaVersion":2},"datasetVersion":"2026-08-30T08:17:16.595Z"}