# sanjogbora/whisper-hindi2hinglish architecture

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

- Interactive diagram: https://gitdiagram.com/sanjogbora/whisper-hindi2hinglish
- Repository: https://github.com/sanjogbora/whisper-hindi2hinglish

## Overview

This repository combines a Hindi/Hinglish speech-recognition service with video-to-SRT conversion. The main workflow accepts a video through the web interface or REST API, extracts audio, transcribes it with word timestamps, groups the transcript into subtitles, and returns an SRT file; a CLI entry point is also documented. A separate WebSocket workflow streams audio from file or microphone clients for incremental transcription. The source excerpts show the video conversion and streaming internals; some UI and model details are documented in the README rather than inspected source.

Main entry points: [`websocket_server.py`](https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/websocket_server.py) (WebSocket server), [`video_to_srt.py`](https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/video_to_srt.py) (Video converter), [`web_server.py`](https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/web_server.py) (Video upload), [`templates`](https://github.com/sanjogbora/whisper-hindi2hinglish/tree/main/templates) (Web UI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_video["Video subtitles"]
  node_video_converter["Video converter<br/>[video_to_srt.py]"]
  node_audio_extract["Audio extraction<br/>[video_to_srt.py]"]
  node_video_asr["Timestamped ASR<br/>[video_to_srt.py]"]
  node_subtitle_group["Subtitle grouping<br/>[video_to_srt.py]"]
  node_srt_output["SRT generation<br/>[video_to_srt.py]"]
  node_cli["CLI<br/>[video_to_srt.py]"]
end

subgraph group_web["Web interface"]
  node_video_input["Video upload<br/>[web_server.py]"]
  node_web_ui["Web UI"]
  node_rest_api["REST API<br/>[web_server.py]"]
end

subgraph group_stream["Live transcription"]
  node_live_client_file["File audio client<br/>[client_file.py]"]
  node_live_client_mic["Microphone client<br/>[client_mic.py]"]
  node_ws_server["WebSocket server"]
end

subgraph group_shared["Shared inference"]
  node_audio_preprocess["Audio preprocessing<br/>[utils.py]"]
  node_model_loader["Model loading<br/>[utils.py]"]
end

node_user(("Video user"))
node_ffmpeg["FFmpeg"]
node_timestamped["Whisper timestamped"]
node_speech_model["Hinglish speech model"]

node_user -->|"uses"| node_web_ui
node_web_ui -->|"submits video"| node_video_input
node_video_input -->|"uploads to"| node_rest_api
node_rest_api -->|"calls"| node_video_converter
node_video_converter -->|"extracts audio"| node_audio_extract
node_audio_extract -->|"runs"| node_ffmpeg
node_video_converter -->|"transcribes audio"| node_video_asr
node_video_asr -->|"uses"| node_timestamped
node_video_converter -->|"groups words"| node_subtitle_group
node_subtitle_group -->|"writes subtitles"| node_srt_output
node_user -->|"runs conversion"| node_cli
node_live_client_file -->|"streams audio"| node_ws_server
node_live_client_mic -->|"streams audio"| node_ws_server
node_ws_server -->|"preprocesses audio"| node_audio_preprocess
node_ws_server -->|"loads pipeline"| node_model_loader
node_model_loader -->|"loads model"| node_speech_model
node_ws_server -->|"transcribes chunks"| node_speech_model

click node_video_input "https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/web_server.py"
click node_web_ui "https://github.com/sanjogbora/whisper-hindi2hinglish/tree/main/templates"
click node_rest_api "https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/web_server.py"
click node_video_converter "https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/video_to_srt.py"
click node_audio_extract "https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/video_to_srt.py"
click node_video_asr "https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/video_to_srt.py"
click node_subtitle_group "https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/video_to_srt.py"
click node_srt_output "https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/video_to_srt.py"
click node_cli "https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/video_to_srt.py"
click node_live_client_file "https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/client_file.py"
click node_live_client_mic "https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/client_mic.py"
click node_ws_server "https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/websocket_server.py"
click node_audio_preprocess "https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/utils.py"
click node_model_loader "https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/utils.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_video_converter,node_audio_extract,node_video_asr,node_subtitle_group,node_srt_output,node_cli,node_user toneBlue
class node_video_input,node_web_ui,node_rest_api toneAmber
class node_live_client_file,node_live_client_mic,node_ws_server toneMint
class node_audio_preprocess,node_model_loader toneRose
class node_ffmpeg,node_timestamped,node_speech_model toneIndigo
```

## Components

### Video subtitles

- [Video converter](https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/video_to_srt.py): `video_to_srt.py`
- [Audio extraction](https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/video_to_srt.py): `video_to_srt.py`
- [Timestamped ASR](https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/video_to_srt.py): `video_to_srt.py`
- [Subtitle grouping](https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/video_to_srt.py): `video_to_srt.py`
- [SRT generation](https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/video_to_srt.py): `video_to_srt.py`
- [CLI](https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/video_to_srt.py): `video_to_srt.py`

### Web interface

- [Video upload](https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/web_server.py): `web_server.py`
- [Web UI](https://github.com/sanjogbora/whisper-hindi2hinglish/tree/main/templates): `templates`
- [REST API](https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/web_server.py): `web_server.py`

### Live transcription

- [File audio client](https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/client_file.py): `client_file.py`
- [Microphone client](https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/client_mic.py): `client_mic.py`
- [WebSocket server](https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/websocket_server.py): `websocket_server.py`

### Shared inference

- [Audio preprocessing](https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/utils.py): `utils.py`
- [Model loading](https://github.com/sanjogbora/whisper-hindi2hinglish/blob/main/utils.py): `utils.py`

### Other components

- **Video user**
- **FFmpeg**
- **Whisper timestamped**
- **Hinglish speech model**

## Connections

- Video user → Web UI: uses (evidence: `README.md`)
- Web UI → Video upload: submits video (evidence: `README.md`)
- Video upload → REST API: uploads to (evidence: `web_server.py`)
- REST API → Video converter: calls (evidence: `web_server.py`)
- Video converter → Audio extraction: extracts audio (evidence: `video_to_srt.py`)
- Audio extraction → FFmpeg: runs (evidence: `README.md`)
- Video converter → Timestamped ASR: transcribes audio (evidence: `video_to_srt.py`)
- Timestamped ASR → Whisper timestamped: uses (evidence: `video_to_srt.py`)
- Video converter → Subtitle grouping: groups words (evidence: `video_to_srt.py`)
- Subtitle grouping → SRT generation: writes subtitles (evidence: `video_to_srt.py`)
- Video user → CLI: runs conversion (evidence: `README.md`)
- File audio client → WebSocket server: streams audio (evidence: `client_file.py`)
- Microphone client → WebSocket server: streams audio (evidence: `client_mic.py`)
- WebSocket server → Audio preprocessing: preprocesses audio (evidence: `websocket_server.py`)
- WebSocket server → Model loading: loads pipeline (evidence: `websocket_server.py`)
- Model loading → Hinglish speech model: loads model (evidence: `utils.py`)
- WebSocket server → Hinglish speech model: transcribes chunks (evidence: `websocket_server.py`)
