Skip to content

Commit ab864e5

Browse files
committed
docs: add mermaid flow diagrams
1 parent cbddf3b commit ab864e5

1 file changed

Lines changed: 74 additions & 0 deletions

File tree

README.md

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,80 @@ Run API transcription mode:
152152

153153
API mode is recommended when you need better multilingual support, faster transcription, and Indonesian translation.
154154

155+
## Documentation
156+
157+
### System Flow
158+
159+
```mermaid
160+
flowchart TD
161+
mic["Microphone input"] --> mic_recorder["DefaultMicRecorder"]
162+
speaker["System speaker output"] --> speaker_recorder["DefaultSpeakerRecorder via WASAPI loopback"]
163+
164+
mic_recorder --> mic_queue["Mic audio queue"]
165+
speaker_recorder --> speaker_queue["Speaker audio queue"]
166+
167+
mic_queue --> transcriber["AudioTranscriber"]
168+
speaker_queue --> transcriber
169+
170+
transcriber --> filter["Filter short or quiet audio"]
171+
filter --> cleanup["Light audio normalization"]
172+
cleanup --> model_router["TranscriberModels"]
173+
174+
model_router --> local_model["Local Faster Whisper"]
175+
model_router --> api_model["Groq or OpenAI-compatible API"]
176+
177+
local_model --> transcript_state["Transcript state"]
178+
api_model --> transcript_state
179+
180+
transcript_state --> ui["CustomTkinter transcript card"]
181+
ui --> finish["User clicks Selesai"]
182+
finish --> translation_queue["Background translation queue"]
183+
translation_queue --> translation_model["Groq chat translation model"]
184+
translation_model --> ui
185+
```
186+
187+
### Realtime Transcript Flow
188+
189+
```mermaid
190+
sequenceDiagram
191+
participant Audio as "Mic or Speaker"
192+
participant Recorder as "AudioRecorder.py"
193+
participant Queue as "Audio queue"
194+
participant Transcriber as "AudioTranscriber.py"
195+
participant Model as "TranscriberModels.py"
196+
participant UI as "main.py UI"
197+
198+
Audio->>Recorder: Voice is detected
199+
Recorder->>Queue: Push short audio chunk
200+
Queue->>Transcriber: Drain pending chunks
201+
Transcriber->>UI: Show speaking status
202+
Transcriber->>Transcriber: Skip noise or very short audio
203+
Transcriber->>Model: Send cleaned WAV chunk
204+
Model-->>Transcriber: Return original transcript text
205+
Transcriber->>Transcriber: Merge chunk into active segment
206+
Transcriber->>UI: Update active card only
207+
UI-->>UI: Show translation placeholder
208+
UI->>Transcriber: User clicks Selesai
209+
Transcriber->>Model: Translate active transcript only
210+
Model-->>Transcriber: Indonesian translation
211+
Transcriber->>UI: Update the same card
212+
```
213+
214+
### UI State Flow
215+
216+
```mermaid
217+
stateDiagram-v2
218+
[*] --> Waiting: No transcript yet
219+
Waiting --> Speaking: Audio chunk detected
220+
Speaking --> Processing: Chunk is sent to transcription model
221+
Processing --> Ready: Original text is available
222+
Ready --> Translating: User clicks Selesai
223+
Translating --> Done: Translation returned
224+
Ready --> Speaking: More audio in same segment
225+
Done --> Speaking: New phrase starts
226+
Done --> [*]: Clear Transcript
227+
```
228+
155229
## How It Works
156230

157231
1. `AudioRecorder.py` captures microphone audio and default speaker loopback audio.

0 commit comments

Comments
 (0)