{"record":{"id":"469f8b0dd7d86c20","repo":"calesthio/OpenMontage","slug":"image-to-video-requires-reference-image-url-or-ref","errorCode":null,"errorMessage":"image_to_video requires reference_image_url or reference_image_path","messagePattern":"image_to_video requires reference_image_url or reference_image_path","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"tools/video/kling_official_video.py","lineNumber":314,"sourceCode":"            return self._build_turbo_request(inputs, operation)\n        if api_family == \"omni\":\n            return self._build_omni_request(inputs, operation)\n        return self._build_classic_request(inputs, operation)\n\n    def _build_classic_request(self, inputs: dict[str, Any], operation: str) -> dict[str, Any]:\n        if operation == \"text_to_video\":\n            payload = self._base_classic_payload(inputs)\n            payload[\"prompt\"] = self._prompt(inputs)\n            if inputs.get(\"negative_prompt\"):\n                payload[\"negative_prompt\"] = inputs[\"negative_prompt\"]\n            if inputs.get(\"aspect_ratio\"):\n                payload[\"aspect_ratio\"] = inputs.get(\"aspect_ratio\", \"16:9\")\n            self._copy_multi_shot_fields(inputs, payload)\n            path = \"/v1/videos/text2video\"\n        elif operation == \"image_to_video\":\n            image = normalize_image_input(inputs.get(\"reference_image_url\"), inputs.get(\"reference_image_path\"))\n            if not image:\n                raise ValueError(\"image_to_video requires reference_image_url or reference_image_path\")\n            payload = self._base_classic_payload(inputs)\n            payload[\"image\"] = image\n            if inputs.get(\"prompt\"):\n                payload[\"prompt\"] = inputs[\"prompt\"]\n            if inputs.get(\"negative_prompt\"):\n                payload[\"negative_prompt\"] = inputs[\"negative_prompt\"]\n            tail = normalize_image_input(inputs.get(\"reference_tail_image_url\"), inputs.get(\"reference_tail_image_path\"))\n            if tail:\n                payload[\"image_tail\"] = tail\n            if inputs.get(\"element_list\"):\n                payload[\"element_list\"] = normalize_element_list(inputs.get(\"element_list\"))\n            self._copy_multi_shot_fields(inputs, payload)\n            path = \"/v1/videos/image2video\"\n        else:\n            raise ValueError(f\"Unsupported classic video operation: {operation}\")\n        return {\n            \"protocol\": \"classic\",\n            \"path\": path,","sourceCodeStart":296,"sourceCodeEnd":332,"githubUrl":"https://github.com/calesthio/OpenMontage/blob/95e1c3d0ab93482159818560f6a8c8e866b9139f/tools/video/kling_official_video.py#L296-L332","documentation":"Error \"image_to_video requires reference_image_url or reference_image_path\" thrown in calesthio/OpenMontage.","triggerScenarios":"kling_official_video image_to_video is called without reference_image_url or reference_image_path, so no first-frame image can be supplied.","commonSituations":"See trigger scenarios.","solutions":["Pass reference_image_url (a public URL) or reference_image_path (a local file) with the image_to_video call.","For the classic API family a local path is acceptable; the file will be uploaded as part of the request."],"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-15T22:17:37.221Z"}