Files
AiVideo/engine/director.py
2026-03-25 13:43:00 +08:00

44 lines
1.4 KiB
Python

from __future__ import annotations
from typing import Any
def _read_scene(scene: Any) -> tuple[str, str, str]:
if hasattr(scene, "image_prompt") and hasattr(scene, "video_motion") and hasattr(scene, "narration"):
return (
str(getattr(scene, "image_prompt", "")).strip(),
str(getattr(scene, "video_motion", "")).strip(),
str(getattr(scene, "narration", "")).strip(),
)
if isinstance(scene, dict):
return (
str(scene.get("image_prompt", "")).strip(),
str(scene.get("video_motion", scene.get("motion", ""))).strip(),
str(scene.get("narration", scene.get("tts", ""))).strip(),
)
return ("", "", "")
def scenes_to_shots(scenes: list) -> list[dict[str, Any]]:
shots: list[dict[str, Any]] = []
for scene_idx, scene in enumerate(scenes, start=1):
image_prompt, motion, tts = _read_scene(scene)
scene_id = f"scene_{scene_idx:02d}"
shot_id = f"{scene_id}_01"
# Keep default duration simple and deterministic for MVP.
duration = 3
shots.append(
{
"shot_id": shot_id,
"scene_id": scene_id,
"duration": int(duration),
"image_prompt": image_prompt,
"motion": motion,
"camera": "",
"tts": tts,
"status": "pending",
}
)
return shots