From bedb0146ae05737b6faa3a7d93bf8589f1551945 Mon Sep 17 00:00:00 2001 From: Dreaming Computers Date: Wed, 11 Feb 2026 10:40:23 +0700 Subject: [PATCH] ux: rename kling3 chained payload port to payload_data --- kie_api/kling3_video.py | 24 ++++++++++++++++++++++++ nodes.py | 23 ++++++++++++++++++++--- web/docs/KIE_Kling3_Preflight.md | 1 + web/docs/KIE_Kling3_Video.md | 1 + 4 files changed, 46 insertions(+), 3 deletions(-) diff --git a/kie_api/kling3_video.py b/kie_api/kling3_video.py index 6783326..e895e76 100644 --- a/kie_api/kling3_video.py +++ b/kie_api/kling3_video.py @@ -374,9 +374,33 @@ def run_kling3_video( elements=elements, log=log, ) + return run_kling3_video_from_request( + payload=payload, + poll_interval_s=poll_interval_s, + timeout_s=timeout_s, + log=log, + ) + + +def run_kling3_video_from_request( + *, + payload: dict[str, Any], + poll_interval_s: float, + timeout_s: int, + log: bool, +) -> Any: + """Submit a prebuilt Kling 3.0 createTask payload and return VIDEO output.""" + if not isinstance(payload, dict): + raise _validation_error("request payload must be an object.") + if payload.get("model") != MODEL_NAME: + raise _validation_error(f"request payload model must be '{MODEL_NAME}'.") + payload_input = payload.get("input") + if not isinstance(payload_input, dict): + raise _validation_error("request payload must include an input object.") _log(log, "Creating Kling 3.0 video task...") start_time = time.time() + api_key = _load_api_key() task_id, create_response_text = _create_task(api_key, payload) _log(log, f"createTask response (elapsed={time.time() - start_time:.1f}s): {create_response_text}") _log(log, f"Task created with ID {task_id}. Polling for completion...") diff --git a/nodes.py b/nodes.py index 8201816..86c0a5e 100644 --- a/nodes.py +++ b/nodes.py @@ -51,6 +51,7 @@ from .kie_api.kling3_video import ( merge_kling3_elements, preflight_kling3_payload, run_kling3_video, + run_kling3_video_from_request, ) from .kie_api.suno_music import MODEL_OPTIONS as SUNO_MODEL_OPTIONS, run_suno_generate from .kie_api.gemini3_pro_llm import ( @@ -782,6 +783,7 @@ Inputs: - sound: Single-shot only - element: Optional single KIE_ELEMENT - elements: Optional KIE_ELEMENTS batch +- payload_data: Optional payload object from preflight (overrides direct inputs) - log: Console logging on/off Rules: @@ -816,6 +818,8 @@ Outputs: "sound": ("BOOLEAN", {"default": True}), "element": ("KIE_ELEMENT",), "elements": ("KIE_ELEMENTS",), + "payload_data": ("KIE_KLING3_REQUEST",), + "request": ("KIE_KLING3_REQUEST",), "log": ("BOOLEAN", {"default": True}), }, } @@ -838,10 +842,22 @@ Outputs: sound: bool = True, element: dict | None = None, elements: list[dict] | None = None, + payload_data: dict | None = None, + request: dict | None = None, log: bool = True, poll_interval_s: float = 10.0, timeout_s: int = 1000, ): + chained_payload = payload_data if payload_data is not None else request + if chained_payload is not None: + video_output = run_kling3_video_from_request( + payload=chained_payload, + poll_interval_s=poll_interval_s, + timeout_s=timeout_s, + log=log, + ) + return (video_output,) + merged_elements: list[dict] | None = None if elements is not None: if not isinstance(elements, list): @@ -887,6 +903,7 @@ Inputs: - Same as KIE Kling 3.0 (Video) Outputs: +- KIE_KLING3_REQUEST: validated payload object for chaining into KIE Kling 3.0 (Video) - STRING: payload_json (exact payload that would be sent to createTask) - STRING: notes """ @@ -917,8 +934,8 @@ Outputs: }, } - RETURN_TYPES = ("STRING", "STRING") - RETURN_NAMES = ("payload_json", "notes") + RETURN_TYPES = ("KIE_KLING3_REQUEST", "STRING", "STRING") + RETURN_NAMES = ("payload_data", "payload_json", "notes") FUNCTION = "preflight" CATEGORY = "kie/helpers" @@ -995,7 +1012,7 @@ Outputs: notes_lines.append("Element names: " + ", ".join(element_names)) notes = "\n".join(notes_lines) - return (json.dumps(payload, indent=2, ensure_ascii=False), notes) + return (payload, json.dumps(payload, indent=2, ensure_ascii=False), notes) class KIE_Flux2_I2I: diff --git a/web/docs/KIE_Kling3_Preflight.md b/web/docs/KIE_Kling3_Preflight.md index 29e6432..dc0682d 100644 --- a/web/docs/KIE_Kling3_Preflight.md +++ b/web/docs/KIE_Kling3_Preflight.md @@ -13,6 +13,7 @@ Validate Kling 3.0 inputs and build the exact payload JSON without submitting a - Same inputs as `KIE Kling 3.0 (Video)`. ## Outputs +- `payload_data` (KIE_KLING3_REQUEST): validated payload object for direct chaining into `KIE Kling 3.0 (Video)`. - `payload_json` (STRING): exact request payload after validation and upload URL resolution. - `notes` (STRING): validation summary with detected settings and status. diff --git a/web/docs/KIE_Kling3_Video.md b/web/docs/KIE_Kling3_Video.md index f7033bd..ce210a3 100644 --- a/web/docs/KIE_Kling3_Video.md +++ b/web/docs/KIE_Kling3_Video.md @@ -19,6 +19,7 @@ Generate Kling 3.0 videos in single-shot or multi-shot mode. - `sound` (BOOLEAN, optional): single-shot only - `element` (KIE_ELEMENT, optional): one element - `elements` (KIE_ELEMENTS, optional): batched elements +- `payload_data` (KIE_KLING3_REQUEST, optional): prebuilt validated payload from preflight; when connected, this overrides direct field inputs - `log` (BOOLEAN, optional) ## Rules