{"record":{"id":"4e132457383b5c7f","repo":"dgtlmoon/changedetection.io","slug":"processor-processor-name-does-not-support-asse-4e1324","errorCode":null,"errorMessage":"Processor '{processor_name}' does not support assets","messagePattern":"Processor '(.+?)' does not support assets","errorType":"http","errorClass":null,"httpStatus":404,"severity":"error","filePath":"changedetectionio/blueprint/ui/preview.py","lineNumber":186,"sourceCode":"                datastore=datastore,\n                request=request\n            )\n\n            if result is None:\n                from flask import abort\n                abort(404, description=f\"Asset '{asset_name}' not found\")\n\n            binary_data, content_type, cache_control = result\n\n            response = make_response(binary_data)\n            response.headers['Content-Type'] = content_type\n            if cache_control:\n                response.headers['Cache-Control'] = cache_control\n            return response\n        else:\n            logger.warning(f\"Processor {processor_name} does not implement get_asset()\")\n            from flask import abort\n            abort(404, description=f\"Processor '{processor_name}' does not support assets\")\n\n    return preview_blueprint\n","sourceCodeStart":168,"sourceCodeEnd":189,"githubUrl":"https://github.com/dgtlmoon/changedetection.io/blob/5d9c7c6da76340597243e8163c4f2439237fa0e8/changedetectionio/blueprint/ui/preview.py#L168-L189","documentation":"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.","triggerScenarios":"GET /preview/<uuid>/asset/<name> where the watch's processor (e.g. the plain text watchdog processor) doesn't implement get_asset().","commonSituations":"Screenshot/asset URLs used with text-only watches; visual/screenshot mode not enabled; custom processors without the get_asset hook.","solutions":["Enable visual/screenshot fetching for the watch, or switch to a processor that serves assets","For custom processors implement get_asset() returning (bytes, content_type, cache_control) or None","Guard client code to hide asset elements on 404"],"exampleFix":"# before\n# always-failing asset fetch for text processor\n\n# after\nresp = requests.get(preview_asset_url)\nshow_image = resp.status_code == 200","handlingStrategy":"type-guard","validationCode":"from changedetectionio.processors import get_processor_submodule\ndef preview_supports_assets(name):\n    m = get_processor_submodule(name, None)\n    return m is not None and callable(getattr(m, 'get_asset', None))","typeGuard":"def can_serve_assets(processor_module) -> bool:\n    return callable(getattr(processor_module, 'get_asset', None))","tryCatchPattern":"if not hasattr(processor_module, 'get_asset'):\n    abort(404, description=f\"Processor '{processor_name}' does not support assets\")","preventionTips":["Check the hook before linking preview assets","Implement get_asset in custom processors needing binary previews","Hide asset UI for processors lacking support"],"tags":["flask","asset","processor-plugin","http-404"],"backgroundTag":"plugin-capability-missing","analyzedSha":"5d9c7c6da76340597243e8163c4f2439237fa0e8","analyzedAt":"2026-08-27T19:41:16.067Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}