{"record":{"id":"e8a30a5b438c69cf","repo":"ATH-MaaS/Pixelle-Video","slug":"dashscope-image-generation-returned-no-image-urls","errorCode":null,"errorMessage":"DashScope image generation returned no image URLs. output={getattr(response, 'output', None)}","messagePattern":"DashScope image generation returned no image URLs\\. output=(.+?)","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"pixelle_video/services/api_services/image_dashscope.py","lineNumber":116,"sourceCode":"        if ImageGeneration is None:\n            raise RuntimeError(\"dashscope package not installed. Run: pip install dashscope\")\n\n        try:\n            messages = [{\"role\": \"user\", \"content\": [{\"text\": prompt}]}]\n            with self._proxy_env():\n                response = ImageGeneration.call(\n                    model=model,\n                    api_key=self.api_key,\n                    messages=messages,\n                    n=n,\n                    size=size,\n                    watermark=False,\n                )\n\n            if response.status_code == 200:\n                results = self._extract_image_urls(getattr(response, \"output\", None))\n                if not results:\n                    raise RuntimeError(f\"DashScope image generation returned no image URLs. output={getattr(response, 'output', None)}\")\n                \n                # Check if we should download\n                if save_dir:\n                    os.makedirs(save_dir, exist_ok=True)\n                    local_files = []\n                    for i, url in enumerate(results):\n                        file_name = f\"ds_{session_id if session_id else 'nosess'}_{int(time.time())}_{i}_{uuid.uuid4().hex[:6]}.png\"\n                        file_path = os.path.join(save_dir, file_name)\n                        if self.image_processor.download_image(url, file_path):\n                            local_files.append(file_path)\n                    return local_files\n                \n                return results\n            else:\n                raise RuntimeError(f\"Image generation failed: {response.code}, {response.message}, status={response.status_code}\")\n        except Exception as e:\n            logging.error(f\"Error in generate_image (DashScope): {e}\")\n            raise","sourceCodeStart":98,"sourceCodeEnd":134,"githubUrl":"https://github.com/ATH-MaaS/Pixelle-Video/blob/848b054e4fae40dabc62ec58e960b573e83793ac/pixelle_video/services/api_services/image_dashscope.py#L98-L134","documentation":"When DashScope returns HTTP status 200 but _extract_image_urls finds no image URLs in response.output, generate_image raises this RuntimeError — the call nominally succeeded but contained no usable image results.","triggerScenarios":"Provider returns 200 with an empty/unexpected output structure; task still pending with no results; response schema changed after an SDK/API update; prompt yielded zero generations.","commonSituations":"DashScope API version drift; async generation polled too early; account restrictions returning empty results; logging the output shows output.results missing or empty.","solutions":["Log response.output to inspect the actual structure","Update the dashscope SDK to match the current API response schema","Retry the generation; check account quotas/content policy","Adjust _extract_image_urls parsing to handle the observed output shape"],"exampleFix":"// before\nresults = self._extract_image_urls(response.output)\n// after\nresults = self._extract_image_urls(response.output)\nif not results:\n    logging.warning(\"empty output: %s\", response.output)\n    results = self._extract_image_urls(getattr(response.output, 'results', None) or response.output)","handlingStrategy":"retry","validationCode":"results = gen.generate_image(prompt=p, save_dir=out)\nif not results:\n    raise RuntimeError(\"no images produced; check response.output\")","typeGuard":null,"tryCatchPattern":"for attempt in range(3):\n    try:\n        return gen.generate_image(prompt=p)\n    except RuntimeError as e:\n        if \"no image URLs\" in str(e) and attempt < 2:\n            time.sleep(2 ** attempt)\n            continue\n        raise","preventionTips":["Log response.output on every empty result","Update dashscope SDK when API schemas change","Check quotas and content policy for silent-empty behavior"],"tags":["api-error","empty-response","image-generation"],"backgroundTag":"empty-api-response","analyzedSha":"848b054e4fae40dabc62ec58e960b573e83793ac","analyzedAt":"2026-08-30T03:24:41.468Z","schemaVersion":2},"datasetVersion":"2026-08-30T08:17:16.595Z"}