from __future__ import annotations from pydantic import BaseModel, Field class WordTiming(BaseModel): index: int word: str start: float end: float score: float | None = None sentence_id: int = 0 phrase_id: int = 0 review_required: bool = False class Phrase(BaseModel): id: int word_indices: list[int] text: str start: float end: float class RevealEvent(BaseModel): event_index: int phrase_id: int word_index: int word: str visible_text: str measured_start: float measured_end: float reveal_time: float reveal_frame: int end_frame: int pulse_frames: int = 3 confidence: float | None = None review_required: bool = False class Timeline(BaseModel): format: str = "wordbeat.timeline.v1" fps: float language: str source_media: str words: list[WordTiming] phrases: list[Phrase] events: list[RevealEvent] metadata: dict = Field(default_factory=dict)