{"record":{"id":"a9cc6308030a3240","repo":"calesthio/OpenMontage","slug":"turbo-image-to-video-requires-reference-image-url","errorCode":null,"errorMessage":"Turbo image_to_video requires reference_image_url; local paths cannot be silently uploaded.","messagePattern":"Turbo image_to_video requires reference_image_url; local paths cannot be silently uploaded\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"tools/video/kling_official_video.py","lineNumber":355,"sourceCode":"            \"references_used\": self._reference_metadata_from_classic_payload(payload),\n            \"element_ids\": element_ids(payload.get(\"element_list\")),\n        }\n\n    def _build_turbo_request(self, inputs: dict[str, Any], operation: str) -> dict[str, Any]:\n        settings = {\n            \"resolution\": inputs.get(\"resolution\", \"720p\"),\n            \"duration\": int(str(inputs.get(\"duration\", \"5\"))),\n        }\n        options = self._options_payload(inputs)\n        if operation == \"text_to_video\":\n            settings[\"aspect_ratio\"] = inputs.get(\"aspect_ratio\", \"16:9\")\n            payload = {\"prompt\": self._prompt(inputs), \"settings\": settings}\n            if options:\n                payload[\"options\"] = options\n            path = \"/text-to-video/kling-3.0-turbo\"\n        elif operation == \"image_to_video\":\n            if inputs.get(\"reference_image_path\") and not inputs.get(\"reference_image_url\"):\n                raise ValueError(\"Turbo image_to_video requires reference_image_url; local paths cannot be silently uploaded.\")\n            image_url = inputs.get(\"reference_image_url\")\n            if not image_url:\n                raise ValueError(\"image_to_video requires reference_image_url for api_family=turbo\")\n            contents = [{\"type\": \"prompt\", \"text\": self._prompt(inputs)}, {\"type\": \"first_frame\", \"url\": image_url}]\n            payload = {\"contents\": contents, \"settings\": settings}\n            if options:\n                payload[\"options\"] = options\n            path = \"/image-to-video/kling-3.0-turbo\"\n        else:\n            raise ValueError(f\"Unsupported turbo video operation: {operation}\")\n        return {\n            \"protocol\": \"turbo\",\n            \"path\": path,\n            \"payload\": payload,\n            \"operation\": operation,\n            \"api_family\": \"turbo\",\n            \"model\": \"kling-3.0-turbo\",\n        }","sourceCodeStart":337,"sourceCodeEnd":373,"githubUrl":"https://github.com/calesthio/OpenMontage/blob/95e1c3d0ab93482159818560f6a8c8e866b9139f/tools/video/kling_official_video.py#L337-L373","documentation":"Error \"Turbo image_to_video requires reference_image_url; local paths cannot be silently uploaded.\" thrown in calesthio/OpenMontage.","triggerScenarios":"Turbo image_to_video is given a local reference image path; the Turbo API only accepts hosted URLs and local files are not auto-uploaded.","commonSituations":"See trigger scenarios.","solutions":["Provide reference_image_url pointing to a publicly accessible HTTPS image.","Upload the local image to a public/signed URL first (e.g. via an asset upload step), then pass that URL — the turbo API will not accept local paths."],"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"}