sgl-project/sglang · error · RuntimeError

No image data in response

Error message

No image data in response

What it means

RuntimeError from the ComfyUI image node: the API call succeeded but the response's data list is empty or the first image has no b64_json payload, so there is nothing to convert to a tensor.

Source

Thrown at python/sglang/multimodal_gen/apps/ComfyUI_SGLDiffusion/nodes.py:390

            request_params["enable_teacache"] = True
        if image is not None:
            # If the image is empty, use the size of the image to generate the image
            if is_empty_image(image):
                width, height = image.shape[2], image.shape[1]
                size = f"{width}x{height}"
                request_params["size"] = size
            else:
                request_params["image_path"] = get_image_path(image)

        # Call API
        try:
            response = sgld_client.generate_image(**request_params)
        except Exception as e:
            raise RuntimeError(f"Failed to generate image: {str(e)}")

        # Decode base64 image
        if not response["data"] or not response["data"][0]["b64_json"]:
            raise RuntimeError("No image data in response")
        image_data = response["data"][0]["b64_json"]
        image = convert_b64_to_tensor_image(image_data)

        return (image,)


class SGLDiffusionGenerateVideo:
    """Node to generate videos using SGLang Diffusion."""

    @classmethod
    def INPUT_TYPES(cls):
        return {
            "required": {
                "sgld_client": ("SGLD_CLIENT",),
                "positive_prompt": (
                    "STRING",
                    {
                        "default": "",

View on GitHub (pinned to 0132848349)

Solutions

  1. Log the raw response inside the node to inspect its shape.
  2. If URLs are returned, fetch them instead of expecting b64_json.
  3. Check server logs for why generation yielded no image data.
  4. Retry — occasional transient empty payloads indicate server overload.

Example fix

// before
if not response["data"] or not response["data"][0]["b64_json"]:
    raise RuntimeError("No image data in response")
// after
entry = (response.get("data") or [{}])[0]
if not entry.get("b64_json"):
    raise RuntimeError(f"No image data in response: {response}")
Defensive patterns

Strategy: type-guard

Validate before calling

entry = (response.get('data') or [{}])[0]
assert entry.get('b64_json'), f'unexpected payload: {response}'

Type guard

def usable_image_response(r: dict) -> bool:
    data = r.get('data') or []
    return bool(data) and bool(data[0].get('b64_json'))

Try / catch

if not usable_image_response(response):
    raise RuntimeError(f'No image data in response: {response}')

Prevention

When it happens

Trigger: Server returns 200 with empty data, or data[0] lacking b64_json (e.g. URL-mode response or silent per-image failure).

Common situations: Server bug or partial failure; response_format mismatch; requesting more images than the server produced.

Related errors


AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28). Data as JSON: /api/errors/1b957d46d65141f2. Report an issue: GitHub.