Milimo System Architect Skill
As an expert on the Milimo Video system architecture, you understand how the React/Vite frontend communicates with the FastAPI backend to orchestrate the AI Cinematic Studio.
Core Architectural Understanding
-
Split Architecture:
- Frontend: React 18, Vite, TypeScript.
- Backend: Python 3.10+, FastAPI, SQLModel (SQLite).
- Microservice: SAM 3 runs on port
8001as a separate, isolated backend service for object tracking and segmentation.
-
The God Store Pattern (Frontend State):
- The application relies on a massive Zustand store (
timelineStore.ts) built from 7 slices: Project, Shot, Playback, UI, Track, Element, Server. - CRITICAL: Never add new React Contexts for global state. Always add to the appropriate Zustand slice.
- Performance is maintained via
useShallowselectors and transient updates (store.getState()references inuseReffor render loops). - The timeline relies on a "Magnetic V1" layout: Track 0 (V1) items snap together sequentially. V2 and A1 tracks use free placement (
startFrame).
- The application relies on a massive Zustand store (
-
Job Management & SSE (Backend/Frontend Sync):
- Long-running generation/inpainting tasks are offloaded to
BackgroundTasksin FastAPI. - The backend
job_utils.pytracks active jobs in a global mapping and broadcasts progress via Server-Sent Events (SSE). - The frontend
SSEProvider.tsxlistens forprogress,complete,error, andcancelledevents, syncing status directly to the Shot or corresponding Element. - On page load,
jobPoller.tstriggers one-shot queries to/status/{lastJobId}to hydrate active state from the database.
- Long-running generation/inpainting tasks are offloaded to
-
Multi-Track Playback Loop:
- Playback is driven by a headless
requestAnimationFrameloop inPlaybackEngine.tsx. - Audio sync is handled by
GlobalAudioManager.ts(Web Audio API) to bypass Safari media tag drift. Do not use<audio>elements for timeline tracks. - Video elements (
CinematicPlayer.tsx) listen to the store via strict drift-correction thresholds (250ms).
- Playback is driven by a headless
Guidelines for Feature Implementation
- Adding an Endpoint: Create it in the appropriate router domain (
projects.py,jobs.py,assets.py,elements.py,storyboard.py). Wire it toschemas.pyanddatabase.py. - Handling Progress: Any task that takes longer than 2 seconds MUST log a
Jobto the DB and broadcast progress viajob_utils.broadcast_progress. Provide actionable progress messages. - Microservice Integration: When calling SAM 3, do not import its modules. Make HTTP requests via
InpaintingManagerorTrackingManagerto localhost:8001.
Rules
- No Canvas Rendering for NLE: The timeline must remain DOM-based CSS rendering. Do not attempt to rewrite the timeline in HTML5 Canvas.
- Maintain Single Source of Truth:
timelineStore.tsdictates the state. Local component state is only for transient UI interactions (e.g. dragging, hover states). - Graceful Cancellation: All long-running tasks must periodically check
active_jobs[job_id]["cancelled"]andraise RuntimeError("Cancelled")to free GPU resources.

