VideoIQ is an AI-powered video workspace for turning long-form video into transcripts, summaries, and chat-ready knowledge. It combines a Django backend, a React frontend, and a lightweight Chrome side panel extension so the same system can be used in the browser or inside an extension workflow.
VideoIQ is designed to help you ingest video content, process it into structured text, and interact with the result.
Current capabilities include:
- local video upload
- YouTube URL ingestion
- screen recording from the frontend
- transcript generation with timestamped segments
- cleaned transcript and summary generation
- chatbot workflows grounded on processed video content
- progress-aware processing states in the UI
- Chrome side panel access through an extension wrapper
At a high level, the system works like this:
- a user uploads a video, submits a YouTube URL, or records the screen
- the backend creates a video record and starts processing
- audio is extracted and prepared for transcription
- transcript data is generated, cleaned, and stored
- summary and chat-ready artifacts are produced
- the results are shown in the web app and can also be accessed from the extension
- Python 3.12
- Django
- Django REST Framework
- Celery
- Redis
- SQLite for local development
- FFmpeg for media processing
- React 18
- Vite
- React Router
- Axios
- Tailwind CSS
- Framer Motion
- Chrome Extension Manifest V3
- Side panel wrapper around the main app
AI Video Summarizer/
|-- backend/
| |-- videoiq/ # Django project config
| |-- videos/ # Video ingestion and processing pipeline
| |-- chatbot/ # Chat sessions, retrieval, chatbot APIs
| |-- summarizer/ # Summary API surface
| |-- manage.py
| `-- requirements.txt
|-- frontend/
| |-- src/
| | |-- components/
| | |-- constants/
| | |-- context/
| | |-- pages/
| | `-- services/
| |-- package.json
| `-- vite.config.js
|-- extension/ # Chrome side panel extension
|-- README.md
`-- .gitignore
The active Django project package. It contains:
- settings
- root URL configuration
- WSGI and ASGI entry points
- Celery app configuration
The main application for:
- file upload and YouTube import
- processing orchestration
- transcript persistence
- summary persistence
- processing metadata and support utilities
- extension compatibility endpoints
The chat system for:
- chat sessions
- chat messages
- retrieval and ranking logic
- chatbot endpoints tied to video content
A smaller API surface dedicated to text summarization endpoints.
The core objects in the current system include:
VideoTranscriptSummaryHighlightSegmentShortVideoProcessingTask
The Video model tracks the current processing stage, including statuses such as:
pendingprocessingextracting_audiotranscribingcleaning_transcripttranscript_readysummarizingindexing_chatcompletedfailed
These states are reflected in the frontend so users can follow processing progress.
The main route groups exposed by the backend are:
/api/v1/videos//api/v1/chatbot//api/v1/summarizer//api/extension//swagger//redoc/
Examples of current endpoints include:
POST /api/v1/videos/upload/POST /api/v1/videos/youtube/GET /api/v1/videos/POST /api/v1/chatbot/chat/POST /api/v1/summarizer/summarize/POST /api/extension/summarizeGET /api/extension/statusGET /api/extension/resultPOST /api/extension/chat
The frontend is a React + Vite application that provides:
- the main dashboard
- upload and import flows
- processing progress views
- transcript and summary presentation
- chatbot interaction
- panel-mode rendering for the extension
The app supports a compact layout mode through:
/?layout=panel
That allows the extension to load the same application with a side-panel-friendly presentation instead of maintaining a separate UI codebase.
The extension is intentionally lightweight. It does not reimplement the product. Instead, it wraps the existing application and opens it in Chrome’s side panel.
The extension provides:
- backend URL configuration
- side panel entry point
- a compact way to use the existing frontend inside Chrome
By default, it points to:
http://127.0.0.1:8000
- Python 3.12+
- Node.js 18+
- FFmpeg installed and available on
PATH - Redis if you want Celery-based background processing
cd backend
python -m venv venv
.\venv\Scripts\activate
pip install -r requirements.txt
copy .env.example .env
python manage.py migrate
python manage.py runserverDefault backend URL:
http://127.0.0.1:8000
If you want worker-based background processing:
cd backend
celery -A videoiq worker -l infoMake sure Redis is running first.
cd frontend
npm install
npm run devDefault frontend development URL:
http://localhost:5173
In development, Django redirects to the Vite dev server when a built frontend is not available.
To build the frontend for Django-served usage:
cd frontend
npm install
npm run buildThe backend expects built assets under:
backend/frontend_dist/
To load the extension in Chrome:
- open
chrome://extensions - enable Developer mode
- click Load unpacked
- select the
extension/folder
Make sure the backend is already running before opening the panel.
This repository is now prepared for a Docker-based Render deployment.
Deployment files:
Dockerfile.dockerignorerender.yaml
Recommended Render layout:
- one web service for Django
- one worker service for Celery
- one Postgres database
- one Redis-compatible Key Value instance
The safest path for this repo is Docker-based deployment because the app depends on FFmpeg, Python native dependencies, frontend build output, and background processing.
Before deploying on Render, make sure you set or verify:
DJANGO_SECRET_KEYDJANGO_DEBUG=FalseDJANGO_ALLOWED_HOSTSDJANGO_CSRF_TRUSTED_ORIGINSCORS_ALLOWED_ORIGINSDATABASE_URLCELERY_BROKER_URLCELERY_RESULT_BACKEND- any API provider keys you want enabled in production
Important production note:
- uploaded media stored on the web service filesystem is ephemeral on Render unless you add external object storage or another persistent media strategy
Current runtime behavior includes:
- Django serves the built frontend when present
- Django falls back to the Vite dev server in development
- media files are stored under
backend/media - the extension can embed the app through iframe-friendly development settings
- Celery and Redis can be used for background processing
- local development can also be configured to run processing without a separate worker
The repository is configured to ignore local-only and generated files such as:
.env- local database files
- uploaded media
- vector indices
- generated benchmark and evaluation output
- temporary files
- editor-local folders
- generated audio and video files
node_modules
In practice, commit:
- backend source code
- frontend source code
- extension source code
- migrations
- dependency manifest changes
- shared project documentation you want public
Do not commit:
- secrets
- local media and debug artifacts
- local databases
- cache directories
- scratch files
Check:
- whether
backend/frontend_dist/index.htmlexists - whether the Vite dev server is running
- whether Django is in development mode and redirecting correctly
Check:
- whether the extension backend URL is correct
- whether the app is loading with
?layout=panel - whether the backend is allowing extension iframe embedding in your current environment
Check:
- the current video status in the UI or API
- backend logs
- Celery worker logs, if you are using Celery
- Redis availability
- FFmpeg installation
This repository is already structured to support continued work in:
- transcript quality improvements
- richer summary schemas
- stronger chat retrieval
- extension-specific flows
- operational tooling around benchmarking and backfills
Add your preferred license information here if you want the repository to state it explicitly.