Project Info
Inspiration
Ad performance is often measured by surface-level metrics — impressions, clicks, conversions — but those only reveal outcomes, not causes. We were driven by one question: what if ad platforms could understand why certain creatives succeed? Most systems measure audience behavior, not creative quality. We wanted to quantify the emotional tone, color balance, and pacing of ads, and link these to measurable performance signals such as CTR (Click-Through Rate) and virality. This inspired us to build AdAtlas AI, a platform that fuses vision, audio, and marketing intelligence into a unified creative understanding framework.
What it does
AdAtlas AI interprets ad creatives across multiple modalities visual, audio, and emotional and extracts performance-related insights. In under five minutes, it analyzes any video or image ad and provides a breakdown of its creative effectiveness. It identifies: Emotional tone and mood progression Emotional tone and mood progression Object and brand element detection Object and brand element detection Speech pacing and sentiment alignment Speech pacing and sentiment alignment Color and visual consistency Color and visual consistency Predicted CTR and virality scores (via Reka QuickTag) Predicted CTR and virality scores (via Reka QuickTag) Cross-creative similarity trends (via ChromaDB) Cross-creative similarity trends (via ChromaDB) These insights can directly inform recommendation models, ad ranking algorithms, and creative benchmarking dashboards.
How we built it
Backend — FastAPI + Asynchronous AI Pipeline Our backend, built with FastAPI, uses an asynchronous event-driven pipeline for parallelized multimodal processing. FFmpeg extracts frames and audio tracks from videos, ensuring consistent temporal sampling. OpenCV computes color-tone averages, motion intensity, and scene transitions. Gemini 2.5 Flash/Pro performs frame-level object detection, mood classification, and narrative summarization. Groq Whisper transcribes and embeds speech, generating semantic and tonal representations. Reka QuickTag predicts CTR, virality, and emotional tone distribution, linking creative elements to marketing performance. ChromaDB Cloud stores and indexes embeddings for similarity search and trend comparison. Each subsystem runs concurrently, with data merging at the orchestration layer. Average analysis time: 2.5 minutes per creative. Frontend — React + Modern UI Frameworks The frontend was built with React.js, HTML, Tailwind CSS, and Vanilla JavaScript for speed and responsiveness. We combined multiple UI frameworks ShadCNn UI, Acertinity UI, Cult UI, Magic UI, and Material UI to create a consistent design system. Frontend highlights: Upload ad creatives (video or image) for instant processing Upload ad creatives (video or image) for instant processing Real-time progress visualization Real-time progress visualization Emotion, tone, and visual object summaries Emotion, tone, and visual object summaries CTR and virality graphs CTR and virality graphs Interactive similarity map powered by embedding distances Interactive similarity map powered by embedding distances Color and narrative progression charts
Challenges we ran into
Color and narrative progression charts Challenges we ran into Multimodal Synchronization: Aligning visual, auditory, and semantic data streams in real time. Multimodal Synchronization: Aligning visual, auditory, and semantic data streams in real time. Latency Management: Balancing asynchronous API calls across Gemini, Groq, and Reka while preserving throughput. Latency Management: Balancing asynchronous API calls across Gemini, Groq, and Reka while preserving throughput. Visualization Overload: Presenting dense analytical data in an intuitive, non-technical interface. Visualization Overload: Presenting dense analytical data in an intuitive, non-technical interface. Embedding Storage: Optimizing ChromaDB queries for fast creative similarity results. Embedding Storage: Optimizing ChromaDB queries for fast creative similarity results.
Accomplishments we're proud of
Engineered a fully asynchronous multimodal analysis pipeline integrating five AI systems. Engineered a fully asynchronous multimodal analysis pipeline integrating five AI systems. Reduced total processing time to under 5 minutes per ad. Reduced total processing time to under 5 minutes per ad. Designed embedding-based creative similarity using ChromaDB Cloud. Designed embedding-based creative similarity using ChromaDB Cloud. Developed a responsive, elegant frontend dashboard using seven integrated UI frameworks. Developed a responsive, elegant frontend dashboard using seven integrated UI frameworks. Delivered a project that fits five major tracks AppLovin, Reka, Groq, Chroma, and Y Combinator with clear value for each. Delivered a project that fits five major tracks AppLovin, Reka, Groq, Chroma, and Y Combinator with clear value for each.
What we learned
Orchestrating asynchronous multimodal AI systems at scale requires strict dependency management. Orchestrating asynchronous multimodal AI systems at scale requires strict dependency management. Reka QuickTag’s marketing insight layer can predict engagement potential from creative tone alone. Reka QuickTag’s marketing insight layer can predict engagement potential from creative tone alone. Groq Whisper’s low-latency transcription accelerates real-time analysis. Groq Whisper’s low-latency transcription accelerates real-time analysis. ChromaDB embeddings are powerful for clustering and creative discovery. ChromaDB embeddings are powerful for clustering and creative discovery. True ad intelligence lies not in metrics, but in interpretation, understanding emotional and narrative structure. True ad intelligence lies not in metrics, but in interpretation, understanding emotional and narrative structure.
What's next
We are expanding AdAtlas AI into a full-scale creative intelligence SaaS platform designed for marketing teams, ad networks, and recommendation engines. Planned Developments Public API for creative benchmarking and real-time ad insight generation Public API for creative benchmarking and real-time ad insight generation Integration with Bright Data for live web trend enrichment Integration with Bright Data for live web trend enrichment Elastic-based creative search engine for large-scale ad clustering Elastic-based creative search engine for large-scale ad clustering Correlation studies between tone, narrative pacing, and engagement metrics Correlation studies between tone, narrative pacing, and engagement metrics Y Combinator incubation track: evolving AdAtlas into a scalable startup offering insight-driven creative analytics Y Combinator incubation track: evolving AdAtlas into a scalable startup offering insight-driven creative analytics Our long-term goal is to make creativity measurable transforming subjective design into interpretable, actionable data.
AdAtlas AI — Feature Extractor
A FastAPI backend that turns video and image ad creatives into rich, structured features using a multi-model AI pipeline.
📖 Overview
AdAtlas AI is the backend service (adatlas-backend) for analyzing advertising creatives. Given an uploaded video or image, it extracts keyframes and runs them through several AI models in parallel to produce a single, unified JSON describing the creative — vision features, an audio transcript, creative-performance signals, and vector embeddings.
The pipeline combines classic computer vision (OpenCV/FFmpeg for frame extraction, color-tone and scene-count estimation) with hosted LLMs: Google Gemini for vision analysis and captioning, Groq Whisper for audio transcription, Reka for creative scoring, and OpenAI for embedding generation (plus a vision fallback). Resulting embeddings can optionally be persisted to ChromaDB for similarity search. Every external model is opt-in via environment flags, so the service degrades gracefully when a provider is not configured.
✨ Features
- File upload — accepts videos (
.mp4,.mov,.mkv,.avi,.m4v) and images (.jpg,.jpeg,.png,.webp), stored with a generated ID. - Unified multi-model analysis (
/analyze) — for videos, runs Gemini vision, Reka QuickTag, Groq audio transcription, and visual embedding generation concurrently, then merges everything into one response. - Image analysis (
/analyze_image) — Gemini-based vision analysis and visual embeddings for still images. - Frame & scene understanding — FFmpeg keyframe extraction (with an OpenCV fallback), warm/cool color-tone detection via HSV, and scene-count estimation via histogram correlation.
- Audio transcription — extracts audio and transcribes it with Groq Whisper (
whisper-large-v3). - Creative scoring — Reka QuickTag features such as expected CTR, virality score, keywords, and mood/tone.
- Vector embeddings — audio and visual embeddings that can be stored in ChromaDB (ChromaDB Cloud client) when enabled.
- Batch processing (
/batch) — analyze multiple uploaded files in parallel. - Chatbot indexing (
/chatbot/index_video) — index a video with Reka for downstream chatbot use. - Health & debug endpoints — liveness/readiness probes plus debug routes for benchmarking and testing individual services.
🛠️ Tech Stack
| Area | Technology |
|---|---|
| Language | Python 3.11 |
| Web framework | FastAPI + Uvicorn (ASGI) |
| Config / validation | Pydantic v2, pydantic-settings |
| Media processing | ffmpeg-python, OpenCV (opencv-python-headless), Pillow |
| Vision & captioning | Google Gemini (google-generativeai) |
| Audio transcription | Groq (whisper-large-v3) |
| Creative scoring | Reka Vision Agent API |
| Embeddings / fallback | OpenAI |
| Vector store | ChromaDB (optional) |
| Numerics | NumPy, scikit-learn |
| HTTP clients | httpx, requests |
🚀 Getting Started
Prerequisites
- Python 3.11
- FFmpeg installed and available on your
PATH - API keys for the providers you intend to enable (Groq, Gemini, Reka, OpenAI, ChromaDB)
Installation
git clone https://github.com/2006-sk/backcal.git
cd backcal/adatlas-backend
python3.11 -m venv .venv
source .venv/bin/activate
pip install -r Requirements.txt
# ChromaDB is imported by the app but not pinned in Requirements.txt; install it too:
pip install chromadb
Configuration
The app reads settings from a .env file in the adatlas-backend directory (see app/core/config.py). Every external service is disabled by default — enable each with its USE_* flag and provide the matching key:
# Groq (audio transcription)
USE_GROQ=true
GROQ_API_KEY=your_groq_key
# Google Gemini (vision + captions)
USE_GEMINI=true
GEMINI_API_KEY=your_gemini_key
GEMINI_MODEL=gemini-2.5-flash # or gemini-2.5-pro
# Reka (creative scoring / QuickTag)
USE_REKA=true
REKA_API_KEY=your_reka_key
# OpenAI (embedding generation / vision fallback)
OPENAI_API_KEY=your_openai_key
# ChromaDB (optional embedding storage — ChromaDB Cloud)
USE_CHROMA=true
CHROMA_API_KEY=your_chroma_key
CHROMA_TENANT=your_tenant
CHROMA_DATABASE=your_database
CHROMA_COLLECTION_NAME=adatlas_embeddings
Usage
From the adatlas-backend directory, start the API server:
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
Then upload a file and analyze it:
# 1) Upload
curl -F "file=@sample.mp4" http://localhost:8000/upload
# -> { "id": "<file_id>", "file_name": "...", "saved_path": "..." }
# 2) Analyze
curl -X POST http://localhost:8000/analyze \
-H "Content-Type: application/json" \
-d '{"file_id": "<file_id>"}'
Interactive API docs are available at http://localhost:8000/docs.
📁 Project Structure
backcal/
└── adatlas-backend/
├── app/
│ ├── main.py # FastAPI app + all route handlers
│ ├── core/config.py # Settings (env vars, model selection)
│ ├── models/schemas.py # Pydantic request/response models
│ ├── services/ # Gemini, Groq, Reka, OpenAI, Chroma,
│ │ # audio & visual embedding helpers
│ └── utils/ # timing, unified output, Reka client
├── Requirements.txt
├── run.sh
├── API_ROUTES.md # Endpoint reference
└── test_*.py # Standalone integration/model tests
📚 API Endpoints
| Method | Path | Description |
|---|---|---|
GET | /, /health, /health/live, /health/ready | Health / liveness / readiness checks |
POST | /upload | Upload a video or image file |
POST | /analyze | Full multi-model analysis (video or image) |
POST | /analyze_image | Image-only Gemini vision analysis |
POST | /batch | Analyze multiple uploaded files in parallel |
POST | /chatbot/index_video | Index a video with Reka for chatbot use |
GET | /debug/* | Demo, benchmark, and per-service test routes |
See adatlas-backend/API_ROUTES.md for full request/response examples.
Analysis
View
Metric
- 5
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- FastAPIIn code
- OpenAIIn code
- PythonIn code
- Google GeminiClaimed
3 of 4 appear in the indexed code. 1 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
177 KB
Source files
27
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
2006-sk/backcal
51 files · 96.1 MB · @ bfed55a
Structure
Interface
16 files · 31%Screens, components and styles rendered to the user.
Application logic
5 files · 10%Domain rules, services and shared utilities.
Data & schema
2 files · 4%Schema definitions, migrations and data access.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- Python91%
- Markdown9%
- Shell0%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
adatlas-backend/Requirements.txt
pypi · 15- fastapi
- ffmpeg-python
- google-generativeai
- groq
- httpx
- numpy
- openai
- opencv-python-headless
- Pillow
- pydantic
- pydantic-settings
- python-multipart
- requests
- scikit-learn
- uvicorn[standard]
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.