# aksh-it-code/video-agent architecture

> Architecture diagram of the GitHub repository aksh-it-code/video-agent, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/aksh-it-code/video-agent
- Repository: https://github.com/aksh-it-code/video-agent

## Overview

Video-Agent turns a YouTube URL or local media file into meeting audio chunks, transcribes them, and produces a title, summary, action items, decisions, and open questions. Users can then ask transcript-grounded questions through a retrieval-augmented chat. The Streamlit interface and CLI both orchestrate this workflow. The sampled source confirms the processing and retrieval calls; README provides no further capability detail, and unsampled portions may contain additional UI behavior.

Main entry points: [`app.py`](https://github.com/aksh-it-code/video-agent/blob/main/app.py) (Streamlit app), [`main.py`](https://github.com/aksh-it-code/video-agent/blob/main/main.py) (CLI pipeline), [`utils/audio_processor.py`](https://github.com/aksh-it-code/video-agent/blob/main/utils/audio_processor.py) (Audio preparation), [`core/transcriber.py`](https://github.com/aksh-it-code/video-agent/blob/main/core/transcriber.py) (Transcription)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["User interfaces"]
  node_streamlit["Streamlit app<br/>[app.py]"]
  node_cli["CLI pipeline<br/>[main.py]"]
end

subgraph group_media["Media transcription"]
  node_audio["Audio preparation<br/>[audio_processor.py]"]
  node_transcription["Transcription<br/>[transcriber.py]"]
end

subgraph group_analysis["Meeting analysis"]
  node_title_summary["Title and summary<br/>[summarize.py]"]
  node_extraction["Meeting extraction<br/>[extractor.py]"]
end

subgraph group_chat["Transcript chat"]
  node_rag["RAG question answering<br/>[rag_engine.py]"]
  node_vector["Transcript retrieval<br/>[vector_store.py]"]
  node_chroma[("Chroma store<br/>[vector_store.py]")]
end

node_user(("User"))
node_youtube["YouTube"]
node_ffmpeg["FFmpeg tools"]
node_whisper["Whisper"]
node_sarvam["Sarvam speech API"]
node_mistral["Mistral model"]

node_user -->|"submits media, asks"| node_streamlit
node_user -->|"provides media, asks"| node_cli
node_streamlit -->|"processes input"| node_audio
node_cli -->|"processes input"| node_audio
node_audio -.->|"downloads audio"| node_youtube
node_audio -->|"converts, chunks"| node_ffmpeg
node_audio -->|"passes chunks"| node_transcription
node_streamlit -->|"transcribes chunks"| node_transcription
node_cli -->|"transcribes chunks"| node_transcription
node_transcription -->|"transcribes locally"| node_whisper
node_transcription -.->|"sends Hinglish audio"| node_sarvam
node_streamlit -->|"generates title, summary"| node_title_summary
node_cli -->|"generates title, summary"| node_title_summary
node_title_summary -->|"invokes model"| node_mistral
node_streamlit -->|"extracts meeting items"| node_extraction
node_cli -->|"extracts meeting items"| node_extraction
node_extraction -->|"invokes model"| node_mistral
node_streamlit -->|"builds chain, asks"| node_rag
node_cli -->|"builds chain, asks"| node_rag
node_rag -->|"builds or loads retrieval"| node_vector
node_vector -->|"stores, retrieves chunks"| node_chroma
node_rag -->|"invokes model"| node_mistral

click node_streamlit "https://github.com/aksh-it-code/video-agent/blob/main/app.py"
click node_cli "https://github.com/aksh-it-code/video-agent/blob/main/main.py"
click node_audio "https://github.com/aksh-it-code/video-agent/blob/main/utils/audio_processor.py"
click node_transcription "https://github.com/aksh-it-code/video-agent/blob/main/core/transcriber.py"
click node_title_summary "https://github.com/aksh-it-code/video-agent/blob/main/core/summarize.py"
click node_extraction "https://github.com/aksh-it-code/video-agent/blob/main/core/extractor.py"
click node_rag "https://github.com/aksh-it-code/video-agent/blob/main/core/rag_engine.py"
click node_vector "https://github.com/aksh-it-code/video-agent/blob/main/core/vector_store.py"
click node_chroma "https://github.com/aksh-it-code/video-agent/blob/main/core/vector_store.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_streamlit,node_cli,node_user toneBlue
class node_audio,node_transcription toneAmber
class node_title_summary,node_extraction,node_sarvam toneMint
class node_rag,node_vector,node_chroma toneRose
class node_youtube,node_ffmpeg,node_whisper,node_mistral toneIndigo
```

## Components

### User interfaces

- [Streamlit app](https://github.com/aksh-it-code/video-agent/blob/main/app.py): `app.py`
- [CLI pipeline](https://github.com/aksh-it-code/video-agent/blob/main/main.py): `main.py`

### Media transcription

- [Audio preparation](https://github.com/aksh-it-code/video-agent/blob/main/utils/audio_processor.py): `utils/audio_processor.py`
- [Transcription](https://github.com/aksh-it-code/video-agent/blob/main/core/transcriber.py): `core/transcriber.py`

### Meeting analysis

- [Title and summary](https://github.com/aksh-it-code/video-agent/blob/main/core/summarize.py): `core/summarize.py`
- [Meeting extraction](https://github.com/aksh-it-code/video-agent/blob/main/core/extractor.py): `core/extractor.py`

### Transcript chat

- [RAG question answering](https://github.com/aksh-it-code/video-agent/blob/main/core/rag_engine.py): `core/rag_engine.py`
- [Transcript retrieval](https://github.com/aksh-it-code/video-agent/blob/main/core/vector_store.py): `core/vector_store.py`
- [Chroma store](https://github.com/aksh-it-code/video-agent/blob/main/core/vector_store.py): `core/vector_store.py`

### Other components

- **User**
- **YouTube**
- **FFmpeg tools**
- **Whisper**
- **Sarvam speech API**
- **Mistral model**

## Connections

- User → Streamlit app: submits media, asks
- User → CLI pipeline: provides media, asks
- Streamlit app → Audio preparation: processes input
- CLI pipeline → Audio preparation: processes input
- Audio preparation → YouTube: downloads audio
- Audio preparation → FFmpeg tools: converts, chunks
- Audio preparation → Transcription: passes chunks
- Streamlit app → Transcription: transcribes chunks
- CLI pipeline → Transcription: transcribes chunks
- Transcription → Whisper: transcribes locally
- Transcription → Sarvam speech API: sends Hinglish audio
- Streamlit app → Title and summary: generates title, summary
- CLI pipeline → Title and summary: generates title, summary
- Title and summary → Mistral model: invokes model
- Streamlit app → Meeting extraction: extracts meeting items
- CLI pipeline → Meeting extraction: extracts meeting items
- Meeting extraction → Mistral model: invokes model
- Streamlit app → RAG question answering: builds chain, asks
- CLI pipeline → RAG question answering: builds chain, asks
- RAG question answering → Transcript retrieval: builds or loads retrieval
- Transcript retrieval → Chroma store: stores, retrieves chunks
- RAG question answering → Mistral model: invokes model
