# sahahahil/shruti---avsr-in-nepali-language- architecture

> Architecture diagram of the GitHub repository sahahahil/shruti---avsr-in-nepali-language-, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/sahahahil/shruti---avsr-in-nepali-language-
- Repository: https://github.com/sahahahil/shruti---avsr-in-nepali-language-

## Overview

Shruti is a Nepali audio-visual speech-recognition application: users submit video or use live audio/video capture to obtain a transcription. The sampled backend shows HTTP AVSR processing and a WebSocket path for streaming input, with inference and configurable audio/video fusion. The README provides little architectural detail, and several frontend pages and backend routes are unsampled, so uncertain component wiring is omitted.

Main entry points: [`backend/inference.py`](https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/backend/inference.py) (AVSR inference), [`frontend/nepali-avsr-frontend/src/app/offline/page.tsx`](https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/frontend/nepali-avsr-frontend/src/app/offline/page.tsx) (Offline page), [`frontend/nepali-avsr-frontend/src/components/RealtimeAVSR.tsx`](https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/frontend/nepali-avsr-frontend/src/components/RealtimeAVSR.tsx) (Live AVSR), [`frontend/nepali-avsr-frontend/src/app/realtime/page.tsx`](https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/frontend/nepali-avsr-frontend/src/app/realtime/page.tsx) (Realtime page)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["User experience"]
  node_offline["Offline page<br/>[page.tsx]"]
  node_uploader["File uploader<br/>[FileUploader.tsx]"]
  node_results["Output display<br/>[OutputDisplay.tsx]"]
  node_realtime["Realtime page<br/>[page.tsx]"]
  node_liveavsr["Live AVSR<br/>[RealtimeAVSR.tsx]"]
  node_webcam["Webcam capture<br/>[RealtimeWebcam.tsx]"]
  node_audio["Audio capture<br/>[RealtimeAudio.tsx]"]
  node_clientapi["API client<br/>[api-client.ts]"]
end

subgraph group_service["Recognition service"]
  node_app["HTTP and socket API<br/>[app.py]"]
end

subgraph group_engine["Inference"]
  node_inference["AVSR inference<br/>[inference.py]"]
  node_video["Video preprocessing"]
  node_audioextract["Audio extraction<br/>[extract_audio.py]"]
  node_videoframes["Frame extraction<br/>[extract_frames.py]"]
  node_audioprep["Audio preprocessing"]
  node_ctc["CTC decoding<br/>[decode_ctc.py]"]
end

node_user(("User"))

node_user -->|"opens"| node_offline
node_user -->|"opens"| node_realtime
node_offline -->|"offers upload"| node_uploader
node_offline -->|"shows output"| node_results
node_realtime -->|"presents"| node_liveavsr
node_clientapi -->|"sends AVSR request"| node_app
node_app -->|"runs inference"| node_inference
node_inference -->|"preprocesses frames"| node_video
node_inference -->|"extracts audio"| node_audioextract
node_inference -->|"extracts frames"| node_videoframes
node_inference -->|"prepares audio"| node_audioprep
node_inference -->|"decodes output"| node_ctc
node_webcam -->|"provides video"| node_liveavsr
node_audio -->|"provides audio"| node_liveavsr

click node_offline "https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/frontend/nepali-avsr-frontend/src/app/offline/page.tsx"
click node_uploader "https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/frontend/nepali-avsr-frontend/src/components/offline/FileUploader.tsx"
click node_results "https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/frontend/nepali-avsr-frontend/src/components/offline/OutputDisplay.tsx"
click node_realtime "https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/frontend/nepali-avsr-frontend/src/app/realtime/page.tsx"
click node_liveavsr "https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/frontend/nepali-avsr-frontend/src/components/RealtimeAVSR.tsx"
click node_webcam "https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/frontend/nepali-avsr-frontend/src/components/RealtimeWebcam.tsx"
click node_audio "https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/frontend/nepali-avsr-frontend/src/components/RealtimeAudio.tsx"
click node_clientapi "https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/frontend/nepali-avsr-frontend/src/lib/api-client.ts"
click node_app "https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/backend/app.py"
click node_inference "https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/backend/inference.py"
click node_video "https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/backend/utils/preprocess_video.py"
click node_audioextract "https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/backend/utils/extract_audio.py"
click node_videoframes "https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/backend/utils/extract_frames.py"
click node_audioprep "https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/backend/utils/preprocess_audio.py"
click node_ctc "https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/backend/utils/decode_ctc.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_offline,node_uploader,node_results,node_realtime,node_liveavsr,node_webcam,node_audio,node_clientapi,node_user toneBlue
class node_app toneAmber
class node_inference,node_video,node_audioextract,node_videoframes,node_audioprep,node_ctc toneMint
```

## Components

### User experience

- [Offline page](https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/frontend/nepali-avsr-frontend/src/app/offline/page.tsx): `frontend/nepali-avsr-frontend/src/app/offline/page.tsx`
- [File uploader](https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/frontend/nepali-avsr-frontend/src/components/offline/FileUploader.tsx): `frontend/nepali-avsr-frontend/src/components/offline/FileUploader.tsx`
- [Output display](https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/frontend/nepali-avsr-frontend/src/components/offline/OutputDisplay.tsx): `frontend/nepali-avsr-frontend/src/components/offline/OutputDisplay.tsx`
- [Realtime page](https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/frontend/nepali-avsr-frontend/src/app/realtime/page.tsx): `frontend/nepali-avsr-frontend/src/app/realtime/page.tsx`
- [Live AVSR](https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/frontend/nepali-avsr-frontend/src/components/RealtimeAVSR.tsx): `frontend/nepali-avsr-frontend/src/components/RealtimeAVSR.tsx`
- [Webcam capture](https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/frontend/nepali-avsr-frontend/src/components/RealtimeWebcam.tsx): `frontend/nepali-avsr-frontend/src/components/RealtimeWebcam.tsx`
- [Audio capture](https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/frontend/nepali-avsr-frontend/src/components/RealtimeAudio.tsx): `frontend/nepali-avsr-frontend/src/components/RealtimeAudio.tsx`
- [API client](https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/frontend/nepali-avsr-frontend/src/lib/api-client.ts): `frontend/nepali-avsr-frontend/src/lib/api-client.ts`

### Recognition service

- [HTTP and socket API](https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/backend/app.py): `backend/app.py`

### Inference

- [AVSR inference](https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/backend/inference.py): `backend/inference.py`
- [Video preprocessing](https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/backend/utils/preprocess_video.py): `backend/utils/preprocess_video.py`
- [Audio extraction](https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/backend/utils/extract_audio.py): `backend/utils/extract_audio.py`
- [Frame extraction](https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/backend/utils/extract_frames.py): `backend/utils/extract_frames.py`
- [Audio preprocessing](https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/backend/utils/preprocess_audio.py): `backend/utils/preprocess_audio.py`
- [CTC decoding](https://github.com/sahahahil/shruti---avsr-in-nepali-language-/blob/main/backend/utils/decode_ctc.py): `backend/utils/decode_ctc.py`

### Other components

- **User**

## Connections

- User → Offline page: opens
- User → Realtime page: opens
- Offline page → File uploader: offers upload
- Offline page → Output display: shows output
- Realtime page → Live AVSR: presents
- API client → HTTP and socket API: sends AVSR request
- HTTP and socket API → AVSR inference: runs inference
- AVSR inference → Video preprocessing: preprocesses frames
- AVSR inference → Audio extraction: extracts audio
- AVSR inference → Frame extraction: extracts frames
- AVSR inference → Audio preprocessing: prepares audio
- AVSR inference → CTC decoding: decodes output
- Webcam capture → Live AVSR: provides video
- Audio capture → Live AVSR: provides audio
