Spaces:
Running
on
Zero
Running
on
Zero
| from __future__ import annotations | |
| from dataclasses import dataclass, field | |
| from typing import List, Optional | |
| class CharacterSpec: | |
| identifier: str | |
| name: str | |
| role: str | |
| description: str | |
| traits: List[str] = field(default_factory=list) | |
| reference_image: Optional[str] = None | |
| def to_row(self) -> dict: | |
| traits = ", ".join(self.traits) | |
| return { | |
| "ID": self.identifier, | |
| "Name": self.name, | |
| "Role": self.role, | |
| "Traits": traits or "—", | |
| } | |
| class SceneBeat: | |
| scene_id: str | |
| title: str | |
| visuals: str | |
| action: str | |
| characters: List[str] = field(default_factory=list) | |
| duration: int = 6 | |
| mood: str = "" | |
| camera: str = "" | |
| def to_row(self) -> dict: | |
| return { | |
| "Scene": self.scene_id, | |
| "Title": self.title, | |
| "Action": self.action, | |
| "Visuals": self.visuals, | |
| "Characters": ", ".join(self.characters) or "—", | |
| "Duration (s)": self.duration, | |
| } | |
| class Storyboard: | |
| title: str | |
| synopsis: str | |
| style: str | |
| inspiration_hint: Optional[str] | |
| characters: List[CharacterSpec] = field(default_factory=list) | |
| scenes: List[SceneBeat] = field(default_factory=list) | |
| def characters_table(self) -> List[dict]: | |
| return [char.to_row() for char in self.characters] | |
| def scenes_table(self) -> List[dict]: | |
| return [scene.to_row() for scene in self.scenes] | |