Voca.mp4
Voca (AI Video Helper) is a high-fidelity meeting intelligence platform that transforms video/audio files or YouTube links into a searchable, actionable knowledge base. It handles the complete pipeline: downloading audio, transcribing with language-specific routing (English & Hinglish), extracting executive summaries, and indexing transcripts into a vector database for natural language chat (RAG).
The user interface follows a premium, editorial design system inspired by Resendβfeaturing a pure black canvas, high-contrast typography, and low-opacity atmospheric glows.
| Workflow Diagram | Architecture & Pipeline |
|---|---|
![]() |
![]() |
graph TD
Source[Video or Audio Source] --> AudioProc[audio_processing.py]
AudioProc -->|yt-dlp or pydub| Chunks[Convert & Split into Chunks]
Chunks --> Transcriber[transcriber.py]
Transcriber -->|English| Whisper[Hugging Face Whisper API]
Transcriber -->|Hinglish| Sarvam[Sarvam AI Translate API]
Whisper --> Assembly[Assemble Full Transcript]
Sarvam --> Assembly
Assembly --> Summarizer[summarizer.py]
Assembly --> Extractor[extractor.py]
Assembly --> VectorStore[vector_store.py]
Summarizer --> Response[AnalyzeResponse JSON]
Extractor --> Response
VectorStore --> Response
Response --> Cleanup[Cleanup Temporary Audio]
graph LR
UserQuestion[User Question] --> RAG[rag_core.py]
RAG --> Qdrant[Qdrant Vector Database]
Qdrant -->|Retrieve Context| RAG
RAG --> LLM[Mistral AI LLM]
LLM --> Answer[Context-Aware Answer]
- SSE Stream (
/api/analyze/stream): Real-time progress updates are sent to the client via Server-Sent Events (SSE) as each pipeline step finishes. - Pipeline Checkpoints (Fault Tolerance): After Step 1 (Transcription) and Step 2 (LLM Analysis), progress is saved in
meetings.json. If a run fails due to network or API issues, the client can resume by submitting the samemeeting_idto skip already completed steps.
- Distinct Qdrant Collections: Instead of overwriting a single collection, each meeting gets a unique Qdrant collection name (
meeting_<uuid>). Deleting a meeting also clears its vector collection. - Persistent History & Chat logs: All completed analyses and corresponding RAG chat messages are stored in
meetings.jsoninside the backend directory.
The backend API routing has been modularized under apps/backend/api/:
upload.py: Handles raw audio/video uploads.analyze.py: Manages blocking and streaming analysis routes.chat.py: Directs context-aware RAG queries.history.py: Lists, details, and deletes historical sessions and conversations.
- Monorepo Manager: Turborepo & Bun
- Frontend: Next.js (TypeScript), Tailwind CSS
- Backend: Python 3.10+, FastAPI, LangChain
- Vector Database: Qdrant (supports both local disk-based DB and Qdrant Cloud)
- AI Models:
- Transcription: Whisper (
openai/whisper-large-v3-turbovia HF Inference) / Sarvam AI (Hinglish translation) - Intelligence & LLM: Mistral AI (
mistral-small-latestvia LangChain) - Embeddings:
all-MiniLM-L6-v2via HuggingFace
- Transcription: Whisper (
Ensure you have the following installed:
- Bun (for frontend and package management)
- Python 3.10+ (for backend)
- FFmpeg (automatically configured in Python virtualenv via
static-ffmpeg)
-
Navigate to the backend directory:
cd apps/backend -
Create and activate a Python virtual environment:
# On Windows (PowerShell) python -m venv .venv .venv/Scripts/activate # On macOS/Linux python -m venv .venv source .venv/bin/activate
-
Install dependencies:
pip install -r requirements.txt
-
Create an
apps/backend/.env.localfile and add your keys (see Environment Variables below).
From the root directory of the project, run all applications in development mode simultaneously:
bun dev- Frontend: running on http://localhost:3000
- Backend: running on http://localhost:8000
Create apps/backend/.env.local to override default settings:
| Variable | Required | Default / Recommendation | Description |
|---|---|---|---|
MISTRAL_API_KEY |
Yes | β | Mistral AI API key |
MISTRAL_MODEL |
No | mistral-small-latest |
Mistral model used for summaries and extraction |
HF_TOKEN |
Yes | β | Hugging Face Access Token |
WHISPER_MODEL |
No | openai/whisper-large-v3-turbo |
Hugging Face Whisper Model ID |
SARVAM_API_KEY |
No | β | Required only if processing Hinglish audio |
QDRANT_URL |
No | Local Disk-based DB | Qdrant Cloud URL (omit for local deployment) |
QDRANT_API_KEY |
No | β | Qdrant Cloud Key |
Important
Hugging Face Token Permission Requirements:
If you are using a Fine-grained access token on Hugging Face, you must enable the "Make calls to Inference Providers" permission scope in your Hugging Face Token Settings. Otherwise, serverless API requests will return a 403 Forbidden error.
AI-Video-Helper/
βββ apps/
β βββ backend/
β β βββ api/ # Modular API endpoints (upload, analyze, chat, history)
β β βββ core/ # Core pipeline logic
β β β βββ pipeline.py # Orchestrates blocking/streaming analysis & checkpointing
β β β βββ transcriber.py # Whisper / Sarvam routing & chunk transcription
β β β βββ summarizer.py # MapReduce text summarization
β β β βββ extractor.py # Bulleted insights extractor factory
β β β βββ vector_store.py # Qdrant collection builder & retriever
β β β βββ rag_core.py # LCEL RAG chain orchestration
β β βββ utils/
β β β βββ audio_processing.py # yt-dlp downloader & pydub wav converters
β β β βββ hf_client.py # HuggingFace client singleton
β β β βββ llm.py # Mistral ChatMistralAI model singleton
β β βββ config.py # Centralized environment configs
β β βββ storage.py # JSON-based storage engine for history and checkpoints
β β βββ meetings.json # Local storage database file
β β βββ main.py # FastAPI server entrypoint (CORS, Windows OS fixes)
β β βββ requirements.txt # Python dependencies
β βββ web/
β βββ app/ # Next.js app routes
β β βββ (app)/
β β β βββ upload/ # URL submit & drag-and-drop file upload
β β β βββ processing/ # Visual pipeline progress using SSE stream
β β β βββ results/ # Multi-tab analysis dashboard
β β β βββ chat/ # Meeting-specific RAG chatbot interface
β β β βββ history/ # Browse history & resume/load/delete sessions
β βββ components/ # Sidebar & Navbar components
β βββ lib/ # API client & localStorage handlers
β βββ design.md # UI visual spec & tokens
β βββ tailwind.config.ts # Tailwind theme integration
βββ package.json # Monorepo dependencies & script definitions
βββ turbo.json # Turborepo task pipeline configuration
Voca's UI is designed with an editorial aesthetic:
- Luminance Contrast: Pitch black background (
#000000) with off-white text (#fcfdff) makes reading long transcripts comfortable. - Scarcity of Color: Solid colors are rarely used. Instead, subtle, low-opacity skyline atmospheric glows (orange, blue, green, red, yellow) are anchored to headers of specific content sections.
- Grid Elevation: Shadows are replaced entirely by thin, translucent 1px white borders (
rgba(255,255,255,0.06)). - Primary CTA: The primary action button is a stark white pill container with black text, rendering it the brightest pixel on the screen and drawing focus immediately.
For details, refer to the full visual specifications in apps/web/design.md.


