Arquitectura inicial de 3 capas funcional. El throttling es manual por select FPS: el usuario selecciona la cantidad de FPS desde un <select>. Renderizado de bounding boxes con PredictionProcessor — comparación directa frame a frame, sin diff inteligente. Objetivo: validar que el pipeline cámara → modelo → canvas era viable en browser.
Refactorización completa hacia 4 capas. Se extrae el control de inferencia a ThrottleController, un módulo dedicado con calibración automática en warmup (3 runs) y ajuste de FPS ±1 por ciclo según presupuesto de CPU. Arquitectura modular definitiva: cada capa reemplazable de forma independiente.
Se inserta VectorProcessor entre ModelController y CanvasRenderer. Compara vectores de predicción por índice entre frames y bloquea draws cuando no hay cambios reales. Si el frame no cambió, el render se omite completamente. Primera optimización real de CPU para dispositivos de gama baja.
VectorProcessor evoluciona a un Object Tracker real. Cada objeto detectado recibe una identidad persistente (#id) entre frames. Matching via Intersection over Union (IoU) con fallback por distancia euclidiana de centroides. Los objetos envejecen via MAX_AGE y desaparecen si no son vistos.
VectorProcessor actúa como capa de filtrado inteligente: solo dispara el render cuando hay cambios reales entre frames, eliminando draw calls innecesarios y reduciendo consumo de CPU. ThrottleController calibra automáticamente el dispositivo y ajusta el FPS dinámicamente según el presupuesto disponible — sin intervención del usuario.