"""Structural typing contracts for rendering backends. Any class that exposes the right method signatures satisfies these protocols -- no inheritance required. Existing generators (Google, Yunwu/Doubao, Yunwu/Veo) are already compliant by duck typing. """ from typing import List, Protocol, runtime_checkable from interfaces.image_output import ImageOutput from interfaces.video_output import VideoOutput @runtime_checkable class ImageGenerator(Protocol): """Generates a single image from a text prompt and optional reference images.""" async def generate_single_image( self, prompt: str, reference_image_paths: List[str], **kwargs, ) -> ImageOutput: ... @runtime_checkable class VideoGenerator(Protocol): """Generates a single video from a text prompt and optional reference images.""" async def generate_single_video( self, prompt: str, reference_image_paths: List[str], **kwargs, ) -> VideoOutput: ...