@@ -152,6 +152,80 @@ Run API transcription mode:
152152
153153API 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
1572311 . ` AudioRecorder.py ` captures microphone audio and default speaker loopback audio.
0 commit comments