ATH-MaaS/Pixelle-Video · error · Exception

No description generated

Error message

No description generated

What it means

Raised when the workflow finished with status "completed" but the service could not extract any text description from result.outputs. It tries two formats — selfhost text outputs ({'6': {'text': [...]}}) and RunningHub raw_data txt file URLs — and raises if neither yields non-empty text.

Source

Thrown at pixelle_video/services/image_analysis.py:189

            # Format: {'raw_data': [{'fileUrl': 'https://...txt', 'fileType': 'txt', ...}]}
            if not description and result.outputs and 'raw_data' in result.outputs:
                raw_data = result.outputs['raw_data']
                if raw_data and len(raw_data) > 0:
                    # Find text file entry
                    for item in raw_data:
                        if item.get('fileType') == 'txt' and 'fileUrl' in item:
                            # Download text content from URL
                            import aiohttp
                            async with aiohttp.ClientSession() as session:
                                async with session.get(item['fileUrl']) as resp:
                                    if resp.status == 200:
                                        description = await resp.text()
                                        description = description.strip()
                                        break
            
            if not description:
                logger.error(f"No text found in outputs: {result.outputs}")
                raise Exception("No description generated")
            
            logger.info(f"✅ Image analyzed: {description[:100]}...")
            
            return description
        
        except Exception as e:
            logger.error(f"Image analysis error: {e}")
            raise

View on GitHub (pinned to 848b054e4f)

Solutions

  1. Inspect the logged 'No text found in outputs: {...}' payload to see the actual output shape
  2. Update the workflow so a text-output node (e.g. ShowText/SaveText) is present and enabled
  3. Extend the extraction to cover the new output format for the backend you use
  4. If using RunningHub, check the raw_data entry fileType/fileUrl and confirm the txt URL is still downloadable

Example fix

// before
if 'text' in node_output:
    description = node_output['text'][0]
// after
if 'text' in node_output and node_output['text']:
    description = node_output['text'][0]
elif 'string' in node_output and node_output['string']:
    description = node_output['string'][0]
Defensive patterns

Strategy: fallback

Validate before calling

def outputs_contain_text(outputs) -> bool:
    if not outputs:
        return False
    if any('text' in o and o['text'] for o in outputs.values()):
        return True
    rd = outputs.get('raw_data') or []
    return any(i.get('fileType') == 'txt' and i.get('fileUrl') for i in rd)

Type guard

def extract_text_output(node_output) -> str | None:
    if isinstance(node_output, dict):
        texts = node_output.get('text') or node_output.get('string')
        if isinstance(texts, list) and texts and isinstance(texts[0], str):
            return texts[0]
    return None

Try / catch

try:
    desc = await analyzer(image_path=img, source=src)
except Exception as e:
    logger.warning(f"no description extracted ({e}); using placeholder")
    desc = "(no description available)"

Prevention

When it happens

Trigger: Workflow completed but its LLM/text node output node id changed so 'text' key is absent from outputs; RunningHub returned raw_data without a fileType=='txt' item; the txt fileUrl download returned non-200; or outputs is empty/None.

Common situations: Edited or upgraded workflow JSON renamed the output node; backend switched between selfhost and RunningHub so the output format changed; RunningHub returned a URL that expired before download; text node produced an empty string.

Related errors


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