{"record":{"id":"3fc762a266324f94","repo":"calesthio/OpenMontage","slug":"could-not-find-download-url-on-mixkit-page-detai","errorCode":null,"errorMessage":"Could not find download URL on Mixkit page: {detail_url}","messagePattern":"Could not find download URL on Mixkit page: (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"tools/video/stock_sources/mixkit.py","lineNumber":194,"sourceCode":"\n            # Look for video source tags\n            if not download_url:\n                for source in soup.select(\"video source[src]\"):\n                    src = source.get(\"src\", \"\")\n                    if src and any(ext in src.lower() for ext in [\".mp4\", \".mov\"]):\n                        download_url = src\n                        break\n\n            # Look for data attributes with video URLs\n            if not download_url:\n                for el in soup.select(\"[data-video-url], [data-download-url], [data-src]\"):\n                    url = el.get(\"data-video-url\") or el.get(\"data-download-url\") or el.get(\"data-src\") or \"\"\n                    if url and any(ext in url.lower() for ext in [\".mp4\", \".mov\"]):\n                        download_url = url\n                        break\n\n            if not download_url:\n                raise ValueError(f\"Could not find download URL on Mixkit page: {detail_url}\")\n\n            if not download_url.startswith(\"http\"):\n                download_url = f\"https://mixkit.co{download_url}\"\n\n            return self._stream_download(download_url, out_path)\n\n        except Exception as e:\n            raise RuntimeError(f\"Mixkit download failed for {detail_url}: {e}\") from e\n\n    def _stream_download(self, url: str, out_path: Path) -> Path:\n        import requests\n\n        with requests.get(\n            url, stream=True, timeout=120,\n            headers={\"User-Agent\": \"OpenMontage/1.0\"},\n        ) as r:\n            r.raise_for_status()\n            with open(out_path, \"wb\") as f:","sourceCodeStart":176,"sourceCodeEnd":212,"githubUrl":"https://github.com/calesthio/OpenMontage/blob/95e1c3d0ab93482159818560f6a8c8e866b9139f/tools/video/stock_sources/mixkit.py#L176-L212","documentation":"Error \"Could not find download URL on Mixkit page: {detail_url}\" thrown in calesthio/OpenMontage.","triggerScenarios":"The Mixkit stock-footage page HTML contains no resolvable download URL for the clip.","commonSituations":"See trigger scenarios.","solutions":["The Mixkit page structure may have changed; fetch the page manually and extract the video file URL.","Pick a different clip from the candidate list whose page still exposes a direct link."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"95e1c3d0ab93482159818560f6a8c8e866b9139f","analyzedAt":"2026-08-15T06:31:20.014Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}