{"record":{"id":"ec26a9140438d515","repo":"Comfy-Org/ComfyUI","slug":"provide-at-least-one-of-start-frame-end-frame","errorCode":null,"errorMessage":"Provide at least one of start_frame / end_frame.","messagePattern":"Provide at least one of start_frame / end_frame\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"comfy_api_nodes/nodes_luma.py","lineNumber":1107,"sourceCode":"                IO.Hidden.unique_id,\n            ],\n            is_api_node=True,\n            price_badge=_BADGE_RAY32_VIDEO_5S,\n        )\n\n    @classmethod\n    async def execute(\n        cls,\n        prompt: str,\n        resolution: str,\n        loop: bool,\n        seed: int,\n        start_frame: torch.Tensor | None = None,\n        end_frame: torch.Tensor | None = None,\n    ) -> IO.NodeOutput:\n        validate_string(prompt, strip_whitespace=True, min_length=1, max_length=6000)\n        if start_frame is None and end_frame is None:\n            raise ValueError(\"Provide at least one of start_frame / end_frame.\")\n        if loop and end_frame is not None:\n            raise ValueError(\"Looping is not available when an end_frame is set.\")\n        video = Luma2VideoOptions(resolution=resolution, duration=\"5s\", loop=loop or None)\n        if start_frame is not None:\n            url = await upload_image_to_comfyapi(cls, start_frame, mime_type=\"image/png\")\n            video.start_frame = Luma2ImageRef(url=url)\n        if end_frame is not None:\n            url = await upload_image_to_comfyapi(cls, end_frame, mime_type=\"image/png\")\n            video.end_frame = Luma2ImageRef(url=url)\n        request = Luma2GenerationRequest(prompt=prompt, model=\"ray-3.2\", type=\"video\", video=video)\n        return await _ray32_generate(cls, request)\n\n\nclass LumaRay32KeyframeNode(IO.ComfyNode):\n    @classmethod\n    def define_schema(cls) -> IO.Schema:\n        return IO.Schema(\n            node_id=\"LumaRay32KeyframeNode\",","sourceCodeStart":1089,"sourceCodeEnd":1125,"githubUrl":"https://github.com/Comfy-Org/ComfyUI/blob/1c6d8d45b3693bfbb32385b410d813a7fd6be216/comfy_api_nodes/nodes_luma.py#L1089-L1125","documentation":"Raised by LumaRay32ImageToVideoNode (comfy_api_nodes/nodes_luma.py:1107) when both start_frame and end_frame are None. Ray 3.2 image-to-video requires at least one anchor frame; prompt-only generation belongs in the text-to-video node.","triggerScenarios":"Executing the Ray 3.2 image-to-video node with neither start_frame nor end_frame connected.","commonSituations":"Disconnected edges during graph editing; user expects prompt-only behavior from an image-conditioned node; workflow converted from the text-to-video node without wiring frames.","solutions":["Connect an image to start_frame (or end_frame, or both).","Use LumaRay32TextToVideoNode for prompt-only generation.","For a single frame plus continuation, consider the Ray 3.2 extend node with a prior generation_id."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"if start_frame is None and end_frame is None:\n    raise ValueError(\"Ray 3.2 image-to-video needs a start_frame or end_frame\")","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use the text-to-video node when no frames are available.","Queue-time sanity check: required image inputs on i2v nodes must be connected."],"tags":["luma","ray-3-2","image-to-video","input-validation","comfy-api-nodes"],"backgroundTag":null,"analyzedSha":"1c6d8d45b3693bfbb32385b410d813a7fd6be216","analyzedAt":"2026-08-14T19:37:18.893Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}