ATH-MaaS/Pixelle-Video · error · RuntimeError

DashScope image edit returned no image URLs. output={getattr

Error message

DashScope image edit returned no image URLs. output={getattr(response, 'output', None)}

What it means

Mirrors error 46 for the edit path: DashScope returns status 200 but no image URLs can be extracted from response.output, so edit_image raises this RuntimeError.

Source

Thrown at pixelle_video/services/api_services/image_dashscope.py:171

            }
        ]

        try:
            # Use ImageGeneration.call with messages, same as generate_image
            with self._proxy_env():
                response = ImageGeneration.call(
                    model=model,
                    api_key=self.api_key,
                    messages=messages,
                    n=n,
                    size=size,
                    watermark=False,
                )

            if response.status_code == 200:
                results = self._extract_image_urls(getattr(response, "output", None))
                if not results:
                    raise RuntimeError(f"DashScope image edit returned no image URLs. output={getattr(response, 'output', None)}")

                # Check if we should download
                if save_dir:
                    os.makedirs(save_dir, exist_ok=True)
                    local_files = []
                    for i, url in enumerate(results):
                        file_name = f"ds_{session_id if session_id else 'nosess'}_{int(time.time())}_{i}_{uuid.uuid4().hex[:6]}.png"
                        file_path = os.path.join(save_dir, file_name)
                        if self.image_processor.download_image(url, file_path):
                            local_files.append(file_path)
                    return local_files

                return results
            else:
                raise RuntimeError(f"Image edit failed: {response.code}, {response.message}, status={response.status_code}")
        except Exception as e:
            logging.error(f"Error in edit_image: {e}")
            raise

View on GitHub (pinned to 848b054e4f)

Solutions

  1. Inspect and log response.output for the actual payload
  2. Retry with backoff to allow async task completion
  3. Update the dashscope SDK and re-check _extract_image_urls parsing
  4. Validate input image URLs are publicly reachable and supported formats

Example fix

// before
res = gen.edit_image(prompt=p, image_urls=[local_path])
// after
res = gen.edit_image(prompt=p, image_urls=["https:// publicly-reachable/img.png"])
Defensive patterns

Strategy: retry

Validate before calling

for url in image_urls:
    assert url.startswith(("http://", "https://")), f"unreachable image url: {url}"

Try / catch

for attempt in range(3):
    try:
        return gen.edit_image(prompt=p, image_urls=urls)
    except RuntimeError as e:
        if "returned no image URLs" in str(e) and attempt < 2:
            time.sleep(2 ** attempt)
            continue
        raise

Prevention

When it happens

Trigger: Calling edit_image where the provider acknowledges the request (200) but output contains no image URLs — e.g. async task not finished, schema mismatch, or zero successful edits.

Common situations: Polling an async edit task too early; DashScope SDK/API schema drift; images rejected silently; account limits yielding empty results.

Related errors


AI-assisted analysis of ATH-MaaS/Pixelle-Video@848b054e4f (2026-08-30). Data as JSON: /api/errors/6a3ec6055154b8d9. Report an issue: GitHub.