dgtlmoon/changedetection.io · error

Processor '{processor_name}' does not support assets

Error message

Processor '{processor_name}' does not support assets

What it means

Preview counterpart of the 'processor does not support assets' 404: the processor module behind /preview/<uuid>/asset/... has no get_asset() hook, so the endpoint logs a warning and aborts 404 stating the processor does not support assets.

Source

Thrown at changedetectionio/blueprint/ui/preview.py:186

                datastore=datastore,
                request=request
            )

            if result is None:
                from flask import abort
                abort(404, description=f"Asset '{asset_name}' not found")

            binary_data, content_type, cache_control = result

            response = make_response(binary_data)
            response.headers['Content-Type'] = content_type
            if cache_control:
                response.headers['Cache-Control'] = cache_control
            return response
        else:
            logger.warning(f"Processor {processor_name} does not implement get_asset()")
            from flask import abort
            abort(404, description=f"Processor '{processor_name}' does not support assets")

    return preview_blueprint

View on GitHub (pinned to 5d9c7c6da7)

Solutions

  1. Enable visual/screenshot fetching for the watch, or switch to a processor that serves assets
  2. For custom processors implement get_asset() returning (bytes, content_type, cache_control) or None
  3. Guard client code to hide asset elements on 404

Example fix

# before
# always-failing asset fetch for text processor

# after
resp = requests.get(preview_asset_url)
show_image = resp.status_code == 200
Defensive patterns

Strategy: type-guard

Validate before calling

from changedetectionio.processors import get_processor_submodule
def preview_supports_assets(name):
    m = get_processor_submodule(name, None)
    return m is not None and callable(getattr(m, 'get_asset', None))

Type guard

def can_serve_assets(processor_module) -> bool:
    return callable(getattr(processor_module, 'get_asset', None))

Try / catch

if not hasattr(processor_module, 'get_asset'):
    abort(404, description=f"Processor '{processor_name}' does not support assets")

Prevention

When it happens

Trigger: GET /preview/<uuid>/asset/<name> where the watch's processor (e.g. the plain text watchdog processor) doesn't implement get_asset().

Common situations: Screenshot/asset URLs used with text-only watches; visual/screenshot mode not enabled; custom processors without the get_asset hook.

Related errors


AI-assisted analysis of dgtlmoon/changedetection.io@5d9c7c6da7 (2026-08-27). Data as JSON: /api/errors/4e132457383b5c7f. Report an issue: GitHub.