An async media anonymization platform that blurs faces in images and videos using FastAPI, Taskiq workers, OpenCV processing, and a React polling UI.
context
I built this as a solo project to demonstrate a production-minded async processing architecture, where heavy CV work runs in workers while the API remains responsive and observable.
highlights
> Built an async processing pipeline for image and video face blurring that keeps API response paths lightweight while CPU-heavy work runs in workers.
> Implemented distributed background execution with Taskiq, RabbitMQ as broker, and Redis as result backend.
> Added upload validation guards for file type, extension, size, and video duration to protect processing resources.
> Implemented task result polling endpoints that return processed files (single output or zip bundle) and lifecycle status updates.
> Added storage cleanup behavior to remove temporary artifacts after retrieval and on periodic TTL-based sweeps.
> Exposed operations endpoints for health (`/health`), queue insight (`/queue`), vanity stats (`/stats`), and Prometheus metrics (`/metrics`).
> Added frontend upload and polling orchestration with clear pending/success/error state handling for both image and video flows.
> Included optional Prometheus and Grafana local monitoring profile for quick observability setup in development.