Avoid serializing runtime timeline tensors

This commit is contained in:
OpenClaw Agent
2026-07-17 09:12:31 +00:00
parent c782f3263b
commit 1cfe7f1932

View File

@@ -208,6 +208,27 @@ def _build_runtime_timeline_payload(external_timeline, frame_rate: float) -> tup
return tdata, " | ".join(local_prompts), ",".join(segment_lengths), duration_seconds, duration_frames return tdata, " | ".join(local_prompts), ",".join(segment_lengths), duration_seconds, duration_frames
def _make_json_safe(value):
"""Return a JSON-serializable copy of runtime data by stripping live tensor payloads."""
if isinstance(value, torch.Tensor):
return None
if isinstance(value, dict):
cleaned = {}
for key, item in value.items():
safe_item = _make_json_safe(item)
if safe_item is not None:
cleaned[key] = safe_item
return cleaned
if isinstance(value, (list, tuple)):
cleaned = []
for item in value:
safe_item = _make_json_safe(item)
if safe_item is not None:
cleaned.append(safe_item)
return cleaned
return value
def _compute_signal_peaks(samples: np.ndarray, num_peaks: int = PEAK_BUCKETS) -> list[float]: def _compute_signal_peaks(samples: np.ndarray, num_peaks: int = PEAK_BUCKETS) -> list[float]:
if samples.size == 0: if samples.size == 0:
return [0.0] * num_peaks return [0.0] * num_peaks
@@ -2086,14 +2107,19 @@ class LTXDirector(io.ComfyNode):
merged_tdata["segments"] = external_tdata["segments"] merged_tdata["segments"] = external_tdata["segments"]
merged_tdata.setdefault("motionSegments", existing_tdata.get("motionSegments", [])) merged_tdata.setdefault("motionSegments", existing_tdata.get("motionSegments", []))
merged_tdata.setdefault("audioSegments", existing_tdata.get("audioSegments", [])) merged_tdata.setdefault("audioSegments", existing_tdata.get("audioSegments", []))
timeline_data = json.dumps(merged_tdata) timeline_data = json.dumps(_make_json_safe(merged_tdata))
local_prompts = external_local_prompts local_prompts = external_local_prompts
segment_lengths = external_segment_lengths segment_lengths = external_segment_lengths
if duration is None: if duration is None:
duration_seconds = external_duration_seconds duration_seconds = external_duration_seconds
duration_frames = external_duration_frames duration_frames = external_duration_frames
else:
merged_tdata = None
# Parse timeline data # Parse timeline data
if merged_tdata is not None:
tdata = merged_tdata
else:
try: try:
tdata = _safe_json_loads(timeline_data) tdata = _safe_json_loads(timeline_data)
except Exception as e: except Exception as e: