whisperx-frontend.mov
ΠΡΠ½ΠΎΠ²Π°Π½ΠΎ Π½Π° WhisperX - Automatic Speech Recognition with Word-level Timestamps & Diarization
Copyright (c) 2024, Max Bain. ΠΠΈΡΠ΅Π½Π·ΠΈΡ BSD-2-Clause.
β‘ ΠΡΡΡΡΡΠΉ ΡΡΠ°ΡΡ: QUICKSTART.md
- GPU: NVIDIA Ρ 8GB+ ΠΏΠ°ΠΌΡΡΠΈ
- ΠΠ‘: Ubuntu 20.04+
- Docker + NVIDIA Container Toolkit
- NVIDIA Π΄ΡΠ°ΠΉΠ²Π΅ΡΡ (470+)
- vLLM ΡΠ΅ΡΠ²Π΅Ρ Ρ ΠΌΠΎΠ΄Π΅Π»ΡΡ 32K+ ΡΠΎΠΊΠ΅Π½ΠΎΠ²
- Google OAuth Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ
# 1. ΠΠ»ΠΎΠ½ΠΈΡΡΠ΅ΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ
git clone https://github.com/your-repo/whisperx-fronted-docker-compose
cd whisperx-fronted-docker-compose
# 2. ΠΠ°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ
cp .env.example .env
# Π Π΅Π΄Π°ΠΊΡΠΈΡΡΠ΅ΠΌ .env - Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Google OAuth ΠΈ vLLM Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ
# 3. ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ vLLM ΡΠ΅ΡΠ²Π΅Ρ (Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅)
docker run --gpus all -p 11434:8000 \
vllm/vllm-openai:latest \
--model meta-llama/Llama-3.1-8B-Instruct \
--guided-decoding-backend xgrammar
# 4. Π‘ΠΎΠ±ΠΈΡΠ°Π΅ΠΌ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
docker-compose build
docker-compose up -d
# 5. ΠΡΠΊΡΡΠ²Π°Π΅ΠΌ http://localhost:8000# Google OAuth (ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ)
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
# vLLM Π΄Π»Ρ ΡΡΠΌΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ (ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ)
SUMMARIZATION_API_URL=http://localhost:11434/v1/chat/completions
SUMMARIZATION_MODEL=meta-llama/Llama-3.1-8B-Instruct
# Yandex S3 (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ)
S3_ACCESS_KEY=your-s3-key
S3_SECRET_KEY=your-s3-secretπ― Π Π΅Π·ΡΠ»ΡΡΠ°Ρ: ΠΠΎΠ»Π½ΠΎΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΠΈ Ρ AI ΡΡΠΌΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Π³ΠΎΡΠΎΠ²Π° ΠΊ ΡΠ°Π±ΠΎΡΠ΅!
whisperx-fronted-docker-compose - ΡΡΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π΄Π»Ρ ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΠΈ Π°ΡΠ΄ΠΈΠΎ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΏΠΎΡΡΡΠΎΠ΅Π½Π½Π°Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ WhisperX Ρ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ Π²Π΅Π±-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ, API, Chrome ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ real-time ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΠ΅ΠΉ. Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΊΡΠΏΠΎΡΡ Π² 6 ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΎΡΠΌΠ°ΡΠΎΠ², Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ Π·Π°Π³ΡΡΠ·ΠΊΡ Π² Yandex Cloud S3, ΡΡΠΌΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΎΠ² ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΠΎΡΠΈΡΡΠΊΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ².
ΠΠ±ΡΠ°Ρ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°: 16,437+ ΡΡΡΠΎΠΊ ΠΊΠΎΠ΄Π°
- ΠΡΡΠΎΠΊΠΎΡΠΎΡΠ½Π°Ρ ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΡ Π°ΡΠ΄ΠΈΠΎ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ WhisperX
- Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΏΠΈΠΊΠ΅ΡΠΎΠ² (Π΄ΠΈΠ°ΡΠΈΠ·Π°ΡΠΈΡ) Ρ ΡΠ²Π΅ΡΠΎΠ²ΠΎΠΉ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΠΎΡΠΌΠ°ΡΠΎΠ²: MP3, M4A, WAV, MP4, AVI, MKV ΠΈ Π΄ΡΡΠ³ΠΈΠ΅
- ΠΡΠ±ΠΎΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ: Large-v3, Medium, Small Π΄Π»Ρ Π±Π°Π»Π°Π½ΡΠ° ΠΊΠ°ΡΠ΅ΡΡΠ²Π° ΠΈ ΡΠΊΠΎΡΠΎΡΡΠΈ
- ΠΡΠ»ΡΡΠΈΡΠ·ΡΡΠ½ΠΎΡΡΡ: Π ΡΡΡΠΊΠΈΠΉ, English, Π°Π²ΡΠΎΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅
- 6 ΡΠΎΡΠΌΠ°ΡΠΎΠ² ΡΠΊΡΠΏΠΎΡΡΠ°: JSON, SRT, VTT, TSV, DOCX, PDF
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π½Π° Yandex Cloud S3
- ΠΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΠΌ ΠΈ ΡΠΎΡΠΌΠ°ΡΠ°ΠΌ
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΎΡΠΈΡΡΠΊΠ° Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΏΠΎΡΠ»Π΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ
- ΠΠΈΠ²Π°Ρ ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΡ Ρ ΠΌΠΈΠΊΡΠΎΡΠΎΠ½Π° Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ
- WebSocket ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π΄Π»Ρ Π½ΠΈΠ·ΠΊΠΎΠΉ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ
- ΠΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΡ ΡΡΠΎΠ²Π½Ρ Π·Π²ΡΠΊΠ° ΠΈ ΡΡΠ°ΡΡΡΠ°
- ΠΠ°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ°ΠΌΠΌΠ°ΡΠΈ ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΎΠ²
- ΠΠ½Π°Π»ΠΈΠ· ΡΠΏΠΈΠΊΠ΅ΡΠΎΠ² ΠΈ ΠΈΡ ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΡΠΎΡΠ΅ΠΊ
- ΠΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Π°ΠΆΠ½ΡΡ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠ² Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΠΌΠ΅ΡΠΊΠ°ΠΌΠΈ
- Π‘ΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ²
- Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ UI Ρ drag & drop ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΠΎΠΌ
- ΠΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΌΠ΅Π΄ΠΈΠ°ΠΏΠ»Π΅Π΅Ρ Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠ°
- ΠΡΡΠΎΡΠΈΡ ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΠΉ Ρ ΠΏΠΎΠΈΡΠΊΠΎΠΌ ΠΈ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠ΅ΠΉ
- ΠΠ΄Π°ΠΏΡΠΈΠ²Π½ΡΠΉ Π΄ΠΈΠ·Π°ΠΉΠ½ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΡΡΡΠΎΠΉΡΡΠ²
- ΠΠ°ΠΏΠΈΡΡ Π²ΡΡΡΠ΅Ρ ΠΏΡΡΠΌΠΎ ΠΈΠ· Π±ΡΠ°ΡΠ·Π΅ΡΠ°
- ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Π²ΠΊΠ»Π°Π΄ΠΊΠ°ΠΌΠΈ Π΄Π»Ρ Π·Π°Ρ Π²Π°ΡΠ° Π°ΡΠ΄ΠΈΠΎ
- ΠΠΈΠΊΡ ΠΌΠΈΠΊΡΠΎΡΠΎΠ½Π° ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π·Π²ΡΠΊΠ°
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° Π½Π° ΡΠ΅ΡΠ²Π΅Ρ
- Google OAuth 2.0 Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ
- JWT ΡΠΎΠΊΠ΅Π½Ρ Π΄Π»Ρ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ
- CORS Π·Π°ΡΠΈΡΠ° ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ
- Π¨ΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅
ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ whisperx-fronted-docker-compose Π²ΠΊΠ»ΡΡΠ°Π΅Ρ:
- Drag & Drop ΠΎΠ±Π»Π°ΡΡΡ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²
- ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΠΈ: Π²ΡΠ±ΠΎΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΡΠ·ΡΠΊΠ°, Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄ΠΈΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ
- ΠΠ΅Π΄ΠΈΠ°ΠΏΠ»Π΅Π΅Ρ Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠ°
- ΠΠ°Π½Π΅Π»Ρ ΡΠΊΡΠΏΠΎΡΡΠ° Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ 6 ΡΠΎΡΠΌΠ°ΡΠΎΠ²
- ΠΡΡΠΎΡΠΈΡ ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΠΉ Ρ ΠΏΠΎΠΈΡΠΊΠΎΠΌ ΠΈ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠ΅ΠΉ
- Real-time ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΡ Ρ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ°ΠΌΠΈ
- AI ΡΡΠΌΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ²
- π¨ Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Π΄ΠΈΠ·Π°ΠΉΠ½ Ρ ΡΠ΅ΠΌΠ½ΠΎΠΉ ΡΠ΅ΠΌΠΎΠΉ
- π± ΠΠ΄Π°ΠΏΡΠΈΠ²Π½Π°Ρ Π²Π΅ΡΡΡΠΊΠ° Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΡΡΡΠΎΠΉΡΡΠ²
- π΅ ΠΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΌΠ΅Π΄ΠΈΠ°ΠΏΠ»Π΅Π΅Ρ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ Π°ΡΠ΄ΠΈΠΎ/Π²ΠΈΠ΄Π΅ΠΎ
- π ΠΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ΅ΡΡΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ
- π ΠΠΎΠΈΡΠΊ ΠΈ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΡ Π² ΠΈΡΡΠΎΡΠΈΠΈ
- π ΠΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π±ΡΡΠ΅Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠ»ΠΈΠΊΠΎΠΌ
whisperx-fronted-docker-compose/ # ΠΠΎΡΠ½Π΅Π²Π°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°
βββ π Π‘ΡΠ°ΡΠΈΡΡΠΈΠΊΠ°: 16,437+ ΡΡΡΠΎΠΊ ΠΊΠΎΠ΄Π°
βββ
βββ π₯οΈ Π‘ΠΠ ΠΠΠ ΠΠΠ― Π§ΠΠ‘Π’Π¬ (Backend)
βββ src/ # ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΊΠΎΠ΄ ΡΠ΅ΡΠ²Π΅ΡΠ° (4,247 ΡΡΡΠΎΠΊ)
β βββ main.py # FastAPI ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (80 ΡΡΡΠΎΠΊ)
β βββ
β βββ π£οΈ API ΡΠ»ΠΎΠΉ
β βββ api/ # REST API ΡΠ½Π΄ΠΏΠΎΠΈΠ½ΡΡ (1,185 ΡΡΡΠΎΠΊ)
β β βββ routes.py # ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΌΠ°ΡΡΡΡΡΡ (589 ΡΡΡΠΎΠΊ)
β β βββ realtime_routes.py # Real-time WebSocket API (377 ΡΡΡΠΎΠΊ)
β β βββ auth_routes.py # ΠΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ OAuth (219 ΡΡΡΠΎΠΊ)
β βββ
β βββ π§ Π―Π΄ΡΠΎ ΡΠΈΡΡΠ΅ΠΌΡ
β βββ core/ # ΠΡΠ½ΠΎΠ²Π½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° (463 ΡΡΡΠΎΠΊΠΈ)
β β βββ whisper_manager.py # Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ WhisperX ΠΌΠΎΠ΄Π΅Π»ΡΠΌΠΈ (102 ΡΡΡΠΎΠΊΠΈ)
β β βββ transcription_processor.py # ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΠΉ (361 ΡΡΡΠΎΠΊΠ°)
β βββ
β βββ π§ Π‘Π΅ΡΠ²ΠΈΡΡ
β βββ services/ # ΠΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠ° (1,308 ΡΡΡΠΎΠΊ)
β β βββ auth_service.py # Google OAuth ΡΠ΅ΡΠ²ΠΈΡ (284 ΡΡΡΠΎΠΊΠΈ)
β β βββ database_service.py # JSON Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ
(227 ΡΡΡΠΎΠΊ)
β β βββ s3_service.py # Yandex Cloud S3 (149 ΡΡΡΠΎΠΊ)
β β βββ subtitle_generator.py # ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΡΠΎΡΠΌΠ°ΡΠΎΠ² (341 ΡΡΡΠΎΠΊΠ°)
β β βββ summarization_service.py # AI ΡΡΠΌΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ (242 ΡΡΡΠΎΠΊΠΈ)
β βββ
β βββ π Real-Time ΡΠΈΡΡΠ΅ΠΌΠ°
β βββ realtime/ # WebSocket ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΡ (1,162 ΡΡΡΠΎΠΊΠΈ)
β β βββ manager.py # ΠΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΡΠ΅ΡΡΠΈΠΉ (298 ΡΡΡΠΎΠΊ)
β β βββ processor.py # ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π°ΡΠ΄ΠΈΠΎ ΠΏΠΎΡΠΎΠΊΠ° (312 ΡΡΡΠΎΠΊ)
β β βββ websocket_handler.py # WebSocket ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ (387 ΡΡΡΠΎΠΊ)
β β βββ models.py # ΠΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½ΡΡ
(165 ΡΡΡΠΎΠΊ)
β βββ
β βββ βοΈ ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈ ΡΡΠΈΠ»ΠΈΡΡ
β βββ config/
β β βββ settings.py # ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (79 ΡΡΡΠΎΠΊ)
β βββ models/
β β βββ schemas.py # Pydantic ΡΡ
Π΅ΠΌΡ (91 ΡΡΡΠΎΠΊΠ°)
β βββ middleware/
β β βββ auth_middleware.py # Middleware Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ (54 ΡΡΡΠΎΠΊΠΈ)
β βββ utils/
β βββ time_formatters.py # Π€ΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²ΡΠΈΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ (25 ΡΡΡΠΎΠΊ)
βββ
βββ π ΠΠΠ-ΠΠΠ’ΠΠ Π€ΠΠΠ‘ (Frontend)
βββ web_interface/ # ΠΠ»ΠΈΠ΅Π½ΡΡΠΊΠ°Ρ ΡΠ°ΡΡΡ (9,247 ΡΡΡΠΎΠΊ)
β βββ π HTML ΡΡΡΠ°Π½ΠΈΡΡ
β βββ index.html # ΠΠ»Π°Π²Π½Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ° (226 ΡΡΡΠΎΠΊ)
β βββ login.html # Π‘ΡΡΠ°Π½ΠΈΡΠ° Π²Ρ
ΠΎΠ΄Π° (280 ΡΡΡΠΎΠΊ)
β βββ
β βββ π¨ Π‘ΡΠΈΠ»ΠΈ
β βββ style.css # ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΠΈΠ»ΠΈ (1,988 ΡΡΡΠΎΠΊ)
β βββ css/
β β βββ realtime.css # Π‘ΡΠΈΠ»ΠΈ Real-Time UI (605 ΡΡΡΠΎΠΊ)
β βββ
β βββ βοΈ ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ
β βββ config.js # ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° (136 ΡΡΡΠΎΠΊ)
β βββ config.example.js # ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ (80 ΡΡΡΠΎΠΊ)
β βββ debug_config.js # ΠΡΠ»Π°Π΄ΠΎΡΠ½ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ (24 ΡΡΡΠΎΠΊΠΈ)
β βββ cache_version.js # ΠΠ΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ΅ΡΠ° (4 ΡΡΡΠΎΠΊΠΈ)
β βββ
β βββ π¦ JavaScript ΠΌΠΎΠ΄ΡΠ»ΠΈ
β βββ modules/ # ΠΠΎΠ΄ΡΠ»ΡΠ½Π°Ρ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ° (6,204 ΡΡΡΠΎΠΊΠΈ)
β β βββ main.js # ΠΠ»Π°Π²Π½ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ (640 ΡΡΡΠΎΠΊ)
β β βββ api.js # HTTP ΠΊΠ»ΠΈΠ΅Π½Ρ (233 ΡΡΡΠΎΠΊΠΈ)
β β βββ auth.js # Π‘ΠΈΡΡΠ΅ΠΌΠ° Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ (173 ΡΡΡΠΎΠΊΠΈ)
β β βββ ui.js # UI ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ (337 ΡΡΡΠΎΠΊ)
β β βββ
β β βββ π€ Π’ΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΡ
β β βββ transcription.js # Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΠ΅ΠΉ (355 ΡΡΡΠΎΠΊ)
β β βββ transcript.js # ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΎΠ² (309 ΡΡΡΠΎΠΊ)
β β βββ
β β βββ π΅ ΠΠ΅Π΄ΠΈΠ°
β β βββ mediaPlayer.js # ΠΡΠ΄ΠΈΠΎ/Π²ΠΈΠ΄Π΅ΠΎ ΠΏΠ»Π΅Π΅Ρ (375 ΡΡΡΠΎΠΊ)
β β βββ fileHandler.js # ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ°ΠΉΠ»ΠΎΠ² (171 ΡΡΡΠΎΠΊΠ°)
β β βββ
β β βββ π ΠΠ°Π½Π½ΡΠ΅ ΠΈ ΠΈΡΡΠΎΡΠΈΡ
β β βββ history.js # ΠΡΡΠΎΡΠΈΡ ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΠΉ (524 ΡΡΡΠΎΠΊΠΈ)
β β βββ downloads.js # Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π³ΡΡΠ·ΠΊΠ°ΠΌΠΈ (507 ΡΡΡΠΎΠΊ)
β β βββ summarization.js # AI ΡΡΠΌΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ (777 ΡΡΡΠΎΠΊ)
β β βββ
β β βββ π΄ Real-Time
β β βββ realtimeAudio.js # ΠΡΠ΄ΠΈΠΎ Π·Π°Ρ
Π²Π°Ρ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° (562 ΡΡΡΠΎΠΊΠΈ)
β β βββ realtimeUI.js # UI Π΄Π»Ρ real-time (694 ΡΡΡΠΎΠΊΠΈ)
β β βββ audio-processor.js # ΠΡΠ΄ΠΈΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ (61 ΡΡΡΠΎΠΊΠ°)
β βββ
β βββ server.py # HTTP ΡΠ΅ΡΠ²Π΅Ρ Π΄Π»Ρ ΡΡΠ°ΡΠΈΠΊΠΈ (68 ΡΡΡΠΎΠΊ)
βββ
βββ π CHROME Π ΠΠ‘Π¨ΠΠ ΠΠΠΠ
βββ whisperx-fronted-docker-compose-extension/ # ΠΡΠ°ΡΠ·Π΅ΡΠ½ΠΎΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ (2,943 ΡΡΡΠΎΠΊΠΈ)
β βββ manifest.json # ΠΠ°Π½ΠΈΡΠ΅ΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ (36 ΡΡΡΠΎΠΊ)
β βββ
β βββ π― ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ
β βββ background.js # Service Worker (494 ΡΡΡΠΎΠΊΠΈ)
β βββ popup.html # ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ (488 ΡΡΡΠΎΠΊ)
β βββ popup.js # ΠΠΎΠ³ΠΈΠΊΠ° popup (514 ΡΡΡΠΎΠΊ)
β βββ
β βββ ποΈ ΠΡΠ΄ΠΈΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°
β βββ offscreen.html # Offscreen Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ (10 ΡΡΡΠΎΠΊ)
β βββ offscreen.js # ΠΡΠ΄ΠΈΠΎ ΠΌΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (521 ΡΡΡΠΎΠΊΠ°)
β βββ
β βββ π Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ
β βββ permission.html # Π‘ΡΡΠ°Π½ΠΈΡΠ° ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠΉ (96 ΡΡΡΠΎΠΊ)
β βββ permission.js # ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠΉ (79 ΡΡΡΠΎΠΊ)
β βββ
β βββ π Π Π΅ΡΡΡΡΡ
β βββ icons/ # ΠΠΊΠΎΠ½ΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ
β βββ README.md # ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ (150 ΡΡΡΠΎΠΊ)
β βββ INSTALL.md # ΠΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ (64 ΡΡΡΠΎΠΊΠΈ)
βββ
βββ π³ DOCKER Π Π ΠΠΠΠΠ Π’Π«ΠΠΠΠΠ
βββ Dockerfile # Backend ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ (PyTorch + CUDA)
βββ Dockerfile.frontend # Frontend ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ
βββ docker-compose.gpu.yml # GPU ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ
βββ docker-compose.dev.yml # Development ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅
βββ
βββ π Π‘ΠΠ ΠΠΠ’Π« ΠΠΠΠ£Π‘ΠΠ
βββ run.py # ΠΠ°ΠΏΡΡΠΊ Backend + Frontend
βββ server.py # Π’ΠΎΠ»ΡΠΊΠΎ API ΡΠ΅ΡΠ²Π΅Ρ
βββ dev.py # Π Π΅ΠΆΠΈΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ
βββ
βββ π ΠΠΠΠΠΠ’ΠΠΠ Π Π£Π’ΠΠΠΠ’Π«
βββ analyze_users_transcripts.py # ΠΠ½Π°Π»ΠΈΠ· ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ
Π΄Π°Π½Π½ΡΡ
βββ quick_stats.py # ΠΡΡΡΡΠ°Ρ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°
βββ generate_icons.py # ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΈΠΊΠΎΠ½ΠΎΠΊ
βββ
βββ π ΠΠΠΠ€ΠΠΠ£Π ΠΠ¦ΠΠ―
βββ requirements.txt # Python Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ (45 ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²)
βββ data/
β βββ transcriptions_db.json # JSON Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ
βββ
βββ π ΠΠΠΠ£ΠΠΠΠ’ΠΠ¦ΠΠ―
βββ README.md # ΠΡΠ½ΠΎΠ²Π½Π°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ
βββ QUICKSTART.md # β‘ ΠΡΡΡΡΡΠΉ ΡΡΠ°ΡΡ (5 ΠΌΠΈΠ½ΡΡ)
βββ DEPLOYMENT.md # ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ
βββ SUMMARIZATION_SETUP.md # ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° AI ΡΡΠΌΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ (vLLM + xgrammar)
βββ SUMMARIZATION_CONFIG_MIGRATION.md # ΠΠΈΠ³ΡΠ°ΡΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΡΠΌΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ
βββ DOCKER_README.md # Docker ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ
βββ DOCKER_GPU_SETUP.md # ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° GPU
βββ DOCKER_QUICK_START.md # ΠΡΡΡΡΡΠΉ Π·Π°ΠΏΡΡΠΊ Docker
βββ GOOGLE_OAUTH_SETUP.md # ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° OAuth
βββ SECURITY_SETUP.md # ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ
βββ EXTENSION_QUICK_START.md # ΠΡΡΡΡΡΠΉ ΡΡΠ°ΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ
βββ EXTENSION_DEVELOPMENT_PLAN.md # ΠΠ»Π°Π½ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ
βββ EXTENSION_TODO_PLAN.md # TODO Π΄Π»Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ
βββ REALTIME_DEVELOPMENT_PLAN.md # ΠΠ»Π°Π½ Real-Time ΡΡΠ½ΠΊΡΠΈΠΉ
βββ TELEGRAM_POST.md # ΠΠΎΡΡ Π΄Π»Ρ Telegram
graph TB
%% ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ
User[π€ ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ]
Browser[π ΠΡΠ°ΡΠ·Π΅Ρ]
Extension[π Chrome Extension]
User --> Browser
User --> Extension
%% Frontend ΡΠ»ΠΎΠΉ
subgraph Frontend["π Frontend Layer"]
WebUI[π± Web Interface<br/>localhost:8000]
StaticServer[ποΈ Static Server<br/>Python HTTP]
subgraph JSModules["π¦ JavaScript Modules"]
MainJS[main.js<br/>ΠΠ»Π°Π²Π½ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ]
AuthJS[auth.js<br/>ΠΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ]
APIJS[api.js<br/>HTTP ΠΊΠ»ΠΈΠ΅Π½Ρ]
TranscriptionJS[transcription.js<br/>Π’ΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΡ]
RealtimeJS[realtimeAudio.js<br/>Real-Time Π°ΡΠ΄ΠΈΠΎ]
SummarizationJS[summarization.js<br/>AI ΡΡΠΌΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ]
end
end
Browser --> WebUI
Extension --> WebUI
%% Backend ΡΠ»ΠΎΠΉ
subgraph Backend["π₯οΈ Backend Layer"]
FastAPI[β‘ FastAPI Application<br/>localhost:8880]
subgraph APIRoutes["π£οΈ API Routes"]
MainRoutes[routes.py<br/>ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠ½Π΄ΠΏΠΎΠΈΠ½ΡΡ]
AuthRoutes[auth_routes.py<br/>OAuth Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ]
RealtimeRoutes[realtime_routes.py<br/>WebSocket API]
end
subgraph Core["π§ Core Layer"]
WhisperMgr[whisper_manager.py<br/>Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΡΠΌΠΈ]
TransProcessor[transcription_processor.py<br/>ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΠΉ]
end
subgraph Services["π§ Services Layer"]
AuthService[auth_service.py<br/>Google OAuth]
S3Service[s3_service.py<br/>Yandex Cloud S3]
DBService[database_service.py<br/>JSON Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ
]
SubtitleGen[subtitle_generator.py<br/>ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΡΠΎΡΠΌΠ°ΡΠΎΠ²]
end
subgraph Realtime["π Real-Time System"]
RTManager[manager.py<br/>ΠΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΡΠ΅ΡΡΠΈΠΉ]
RTProcessor[processor.py<br/>ΠΡΠ΄ΠΈΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°]
WSHandler[websocket_handler.py<br/>WebSocket]
end
end
WebUI --> FastAPI
Extension --> FastAPI
%% External Services
subgraph External["βοΈ External Services"]
YandexS3[Yandex Cloud S3<br/>Π₯ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²]
GoogleOAuth[Google OAuth 2.0<br/>ΠΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ]
WhisperX[π€ WhisperX Models<br/>AI ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΡ]
end
S3Service --> YandexS3
AuthService --> GoogleOAuth
WhisperMgr --> WhisperX
%% Data Storage
subgraph Storage["πΎ Data Storage"]
JSONDb[(π JSON Database<br/>transcriptions_db.json)]
TempFiles[π Temporary Files<br/>/data/temp/]
Uploads[π Uploads<br/>/data/uploads/]
end
DBService --> JSONDb
TransProcessor --> TempFiles
TransProcessor --> Uploads
%% Export Formats
subgraph Formats["π Export Formats"]
JSON[JSON - API Π΄Π°Π½Π½ΡΠ΅]
SRT[SRT - ΠΠΈΠ΄Π΅ΠΎ ΡΡΠ±ΡΠΈΡΡΡ]
VTT[VTT - ΠΠ΅Π± ΡΡΠ±ΡΠΈΡΡΡ]
TSV[TSV - Π’Π°Π±Π»ΠΈΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅]
DOCX[DOCX - Word Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ]
PDF[PDF - ΠΠ΅ΡΠ°ΡΠ½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ]
end
SubtitleGen --> Formats
%% Docker Infrastructure
subgraph Docker["π³ Docker Infrastructure"]
BackendContainer[whisperx2-backend-gpu<br/>PyTorch + CUDA + cuDNN]
FrontendContainer[whisperx2-frontend<br/>Static HTTP ΡΠ΅ΡΠ²Π΅Ρ]
GPUSupport[π NVIDIA GPU Support<br/>CUDA Runtime]
end
%% Styling
classDef userClass fill:#e1f5fe,stroke:#01579b,stroke-width:2px
classDef frontendClass fill:#f3e5f5,stroke:#4a148c,stroke-width:2px
classDef backendClass fill:#e8f5e8,stroke:#1b5e20,stroke-width:2px
classDef externalClass fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef storageClass fill:#fce4ec,stroke:#880e4f,stroke-width:2px
classDef dockerClass fill:#e3f2fd,stroke:#0d47a1,stroke-width:2px
class User,Browser,Extension userClass
class WebUI,StaticServer,JSModules,MainJS,AuthJS,APIJS,TranscriptionJS,RealtimeJS,SummarizationJS frontendClass
class FastAPI,APIRoutes,MainRoutes,AuthRoutes,RealtimeRoutes,Core,WhisperMgr,TransProcessor,Services,AuthService,S3Service,DBService,SubtitleGen,Realtime,RTManager,RTProcessor,WSHandler backendClass
class YandexS3,GoogleOAuth,WhisperX,Formats,JSON,SRT,VTT,TSV,DOCX,PDF externalClass
class JSONDb,TempFiles,Uploads storageClass
class BackendContainer,FrontendContainer,GPUSupport dockerClass
- FastAPI - ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Π²Π΅Π±-ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ
- WhisperX - AI ΠΌΠΎΠ΄Π΅Π»Ρ ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΠΈ
- Pydantic - Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ
- Uvicorn - ASGI ΡΠ΅ΡΠ²Π΅Ρ
- Google Auth - OAuth 2.0 Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ
- boto3 - AWS/Yandex Cloud SDK
- WebSockets - real-time ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡ
- python-docx & reportlab - Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ²
- Vanilla JavaScript (ES6+) - Π±Π΅Π· ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ²
- HTML5 Ρ ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ°Π·ΠΌΠ΅ΡΠΊΠΎΠΉ
- CSS3 Ρ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ
- WebSocket API - real-time ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ
- Web Audio API - ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π°ΡΠ΄ΠΈΠΎ
- ΠΠΎΠ΄ΡΠ»ΡΠ½Π°Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° - ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ
- Manifest V3 - ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΡΠ°Π½Π΄Π°ΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ
- Service Workers - ΡΠΎΠ½ΠΎΠ²Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°
- Offscreen API - Π°ΡΠ΄ΠΈΠΎ Π·Π°Ρ Π²Π°Ρ
- Chrome APIs - tabs, runtime, storage
- Yandex Cloud S3 - Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²
- Google OAuth 2.0 - Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ
- JSON Database - ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅
- Docker - ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·Π°ΡΠΈΡ
- Docker Compose - ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΈΡ
- NVIDIA CUDA - GPU ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅
- Nginx - reverse proxy (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ)
# ΠΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ
git clone <repository-url>
cd whisperx-fronted-docker-compose
# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ
python -m venv venv
source venv/bin/activate # Linux/Mac
# ΠΈΠ»ΠΈ venv\Scripts\activate # Windows
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ
pip install -r requirements.txt# ΠΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
cp web_interface/config.example.js web_interface/config.js
# ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ
export S3_ACCESS_KEY="your_s3_key"
export S3_SECRET_KEY="your_s3_secret"
export S3_BUCKET="your_bucket"
export GOOGLE_CLIENT_ID="your_google_client_id"
export GOOGLE_CLIENT_SECRET="your_google_client_secret"
export JWT_SECRET_KEY="your_jwt_secret"# Backend + Frontend ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ
python run.py
# Π’ΠΎΠ»ΡΠΊΠΎ API ΡΠ΅ΡΠ²Π΅Ρ
python server.py
# Π Π΅ΠΆΠΈΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ
python dev.py# Π‘Π±ΠΎΡΠΊΠ° ΠΎΠ±ΡΠ°Π·ΠΎΠ²
docker compose build
# ΠΠ°ΠΏΡΡΠΊ Ρ GPU ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ
docker compose -f docker-compose.yml -f docker-compose.gpu.yml up -d
# ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΡΠ°ΡΡΡΠ°
docker compose ps- Web Interface: http://localhost:8000
- Backend API: http://localhost:8880
- API Documentation: http://localhost:8880/docs
- Real-Time WebSocket: ws://localhost:8880/ws/realtime
Π€Π°ΠΉΠ»Ρ: src/core/transcription_processor.py, src/core/whisper_manager.py
- ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ WhisperX ΠΌΠΎΠ΄Π΅Π»ΡΠΌΠΈ
- ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π°ΡΠ΄ΠΈΠΎ/Π²ΠΈΠ΄Π΅ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ²
- ΠΠΈΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΡΠΏΠΈΠΊΠ΅ΡΠΎΠ²
- ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΌΠ΅ΡΠΎΠΊ
- ΠΠΊΡΠΏΠΎΡΡ Π² ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠΎΡΠΌΠ°ΡΡ
Π€Π°ΠΉΠ»Ρ: src/realtime/, web_interface/modules/realtimeAudio.js
- WebSocket ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π΄Π»Ρ Π½ΠΈΠ·ΠΊΠΎΠΉ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ
- ΠΠΎΡΠΎΠΊΠΎΠ²Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π°ΡΠ΄ΠΈΠΎ
- Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΈΡΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ
- ΠΠΈΠ·ΡΠ°Π»ΡΠ½Π°Ρ ΠΎΠ±ΡΠ°ΡΠ½Π°Ρ ΡΠ²ΡΠ·Ρ
Π€Π°ΠΉΠ»Ρ: src/services/summarization_service.py, web_interface/modules/summarization.js
- Π‘Π΅ΡΠ²Π΅ΡΠ½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°: Π‘ΡΠΌΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΠΏΠ΅ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π° Π±ΡΠΊΠ΅Π½Π΄Π΅ Π΄Π»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ
- Π‘ΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π²ΡΠ²ΠΎΠ΄: ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ JSON Schema Π΄Π»Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° ΠΎΡΠ²Π΅ΡΠ°
- ΠΠ½Π°Π»ΠΈΠ· ΡΠΏΠΈΠΊΠ΅ΡΠΎΠ²: ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ»Π΅ΠΉ ΠΈ Π²ΠΊΠ»Π°Π΄Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠ°
- ΠΠ»ΡΡΠ΅Π²ΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΡ: ΠΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Π°ΠΆΠ½ΡΡ ΡΠΎΠ±ΡΡΠΈΠΉ Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΠΌΠ΅ΡΠΊΠ°ΠΌΠΈ
- Π‘ΡΡΠ°ΡΠ΅Π³ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·: ΠΡΠ±ΠΎΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° (Π²ΡΡΡΠ΅ΡΠ°, ΠΈΠ½ΡΠ΅ΡΠ²ΡΡ, Π»Π΅ΠΊΡΠΈΡ)
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ:
- vLLM ΡΠ΅ΡΠ²Π΅Ρ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ
guided_jsonΠΈguided_decoding_backend: "xgrammar" - Π‘ΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ: Llama 3.1, Qwen, Mistral ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ JSON ΡΠ΅ΠΆΠΈΠΌΠ°
- ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ: OpenAI API, Anthropic Claude (Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ ΡΡ Π΅ΠΌΡ)
ΠΡΠΈΠΌΠ΅Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ vLLM:
# ΠΠ°ΠΏΡΡΠΊ vLLM Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ xgrammar
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3.1-8B-Instruct \
--guided-decoding-backend xgrammar \
--port 11434ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π² .env:
SUMMARIZATION_API_URL=http://localhost:11434/v1/chat/completions
SUMMARIZATION_API_KEY=your-api-key-here
SUMMARIZATION_MODEL=meta-llama/Llama-3.1-8B-InstructΠ€Π°ΠΉΠ»Ρ: src/services/auth_service.py, src/api/auth_routes.py
- Google OAuth 2.0 ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ
- JWT ΡΠΎΠΊΠ΅Π½Ρ Π΄Π»Ρ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ
- Middleware Π΄Π»Ρ Π·Π°ΡΠΈΡΡ ΠΌΠ°ΡΡΡΡΡΠΎΠ²
- Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΈΡΠΌΠΈ
Π€Π°ΠΉΠ»Ρ: src/services/s3_service.py
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° Π½Π° Yandex Cloud S3
- ΠΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΏΠΎ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΠΌ
- ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΡ ΡΡΡΠ»ΠΎΠΊ
- Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΆΠΈΠ·Π½Π΅Π½Π½ΡΠΌ ΡΠΈΠΊΠ»ΠΎΠΌ ΡΠ°ΠΉΠ»ΠΎΠ²
Π€Π°ΠΉΠ»Ρ: whisperx-fronted-docker-compose-extension/
- ΠΠ°ΠΏΠΈΡΡ Π²ΡΡΡΠ΅Ρ ΠΈΠ· Π±ΡΠ°ΡΠ·Π΅ΡΠ°
- ΠΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΈΠΊΡΠΎΡΠΎΠ½Π° ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π·Π²ΡΠΊΠ°
- ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Π²Π΅Π±-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ
- Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡΠΌΠΈ
| Π€ΠΎΡΠΌΠ°Ρ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ |
|---|---|---|
| JSON | Π‘ΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΠΌΠ΅ΡΠΊΠ°ΠΌΠΈ | API ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° |
| SRT | Π‘ΡΠ±ΡΠΈΡΡΡ Π΄Π»Ρ Π²ΠΈΠ΄Π΅ΠΎ | ΠΠΈΠ΄Π΅ΠΎΠΏΠ»Π΅Π΅ΡΡ, YouTube |
| VTT | ΠΠ΅Π±-ΡΡΠ±ΡΠΈΡΡΡ | HTML5 Π²ΠΈΠ΄Π΅ΠΎ, Π²Π΅Π±-ΠΏΠ»Π΅Π΅ΡΡ |
| TSV | Π’Π°Π±Π»ΠΈΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ | Excel, Google Sheets |
| DOCX | ΠΠΎΠΊΡΠΌΠ΅Π½Ρ Word | Π Π΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΠ΅ΡΠ°ΡΡ |
| ΠΠΎΡΠΎΠ²ΡΠΉ ΠΊ ΠΏΠ΅ΡΠ°ΡΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ | ΠΡΡ ΠΈΠ²ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΠΈ |
GET /api/auth/oauth/google- ΠΠ½ΠΈΡΠΈΠ°ΡΠΈΡ OAuthGET /api/auth/oauth/google/callback- OAuth callbackPOST /api/auth/refresh- ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠΊΠ΅Π½Π°GET /api/auth/user- ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅
POST /api/upload- ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΡΠ°ΠΉΠ»Π°GET /api/status/{task_id}- Π‘ΡΠ°ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈGET /api/s3-links/{task_id}- Π‘ΡΡΠ»ΠΊΠΈ Π½Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡDELETE /api/transcription/{task_id}- Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΠΈ
GET /api/transcriptions- ΠΡΡΠΎΡΠΈΡ ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΠΉGET /api/transcription/{task_id}- ΠΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°Ρ ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΡPOST /api/summarize/{task_id}- Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ°ΠΌΠΌΠ°ΡΠΈ (ΡΡΠ΅Π±ΡΠ΅Ρ vLLM + xgrammar)GET /api/config/summarization- ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΡΠΌΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ
WebSocket /ws/realtime- Real-time ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΡPOST /api/realtime/session- Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΈΠΈDELETE /api/realtime/session/{session_id}- ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΈΠΈ
- Google OAuth 2.0 Π΄Π»Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ Π²Ρ ΠΎΠ΄Π°
- JWT ΡΠΎΠΊΠ΅Π½Ρ Ρ ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΡΠΎΠΊΠ° Π΄Π΅ΠΉΡΡΠ²ΠΈΡ
- Refresh ΡΠΎΠΊΠ΅Π½Ρ Π΄Π»Ρ ΠΏΡΠΎΠ΄Π»Π΅Π½ΠΈΡ ΡΠ΅ΡΡΠΈΠΉ
- Middleware Π΄Π»Ρ Π·Π°ΡΠΈΡΡ ΠΌΠ°ΡΡΡΡΡΠΎΠ²
- CORS Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄Π»Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Π½ΡΡ Π΄ΠΎΠΌΠ΅Π½ΠΎΠ²
- CSP Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΡ XSS
- ΠΠ°Π»ΠΈΠ΄Π°ΡΠΈΡ Π²ΡΠ΅Ρ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ Π΄Π°Π½Π½ΡΡ
- ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ°ΠΉΠ»ΠΎΠ²
- Π¨ΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ Π΄Π°Π½Π½ΡΡ
- ΠΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΡΠ°ΠΉΠ»Ρ
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΎΡΠΈΡΡΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ
- ΠΠ·ΠΎΠ»ΡΡΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ Π΄Π°Π½Π½ΡΡ
# ΠΠ½Π°Π»ΠΈΠ· ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ
ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΠΉ
python analyze_users_transcripts.py
# ΠΡΡΡΡΠ°Ρ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° ΡΠΈΡΡΠ΅ΠΌΡ
python quick_stats.py- Π‘ΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π»ΠΎΠ³ΠΈ FastAPI
- ΠΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΠΈ
- ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ
- ΠΡΠ΄ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ
- Π£Π»ΡΡΡΠ΅Π½ΠΈΠ΅ AI ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ - ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Π½ΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΠΉ Whisper
- ΠΡΠ»ΡΡΠΈΡΠ·ΡΡΠ½ΠΎΡΡΡ - ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ·ΡΠΊΠΎΠ²
- Batch ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° - Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²
- API v2 - ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ
- ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π°: Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ
- Real-time Π·Π°Π΄Π΅ΡΠΆΠΊΠ°: 100-500ms Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠ²: Chrome/Edge Π΄Π»Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ
feat: Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ
fix: ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ
docs: ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ
style: ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠΈΠ»Π΅ΠΉ
refactor: ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³ ΠΊΠΎΠ΄Π°
test: Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΎΠ²
# Π Π΅ΠΆΠΈΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Ρ hot-reload
python dev.py
# Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ API
curl -X GET http://localhost:8880/docs
# ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΡΠΈΠ»Π΅ΠΉ
# ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π»ΡΠ±ΠΎΠΉ CSS/JS Π»ΠΈΠ½ΡΠ΅ΡΠΡΠ»ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ ΠΎΠΊΠ°Π·Π°Π»ΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ, ΠΏΠΎΡΡΠ°Π²ΡΡΠ΅ Π·Π²Π΅Π·Π΄Ρ Π½Π° GitHub! β
ΠΡΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅:
- WhisperX by Max Bain - ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΠΈ Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΠΌΠ΅ΡΠΊΠ°ΠΌΠΈ ΠΈ Π΄ΠΈΠ°ΡΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΡΠΏΠΈΠΊΠ΅ΡΠΎΠ²
- OpenAI Whisper - Π±Π°Π·ΠΎΠ²Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ Π΄Π»Ρ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ ΡΠ΅ΡΠΈ
- pyannote-audio - Π΄Π»Ρ Π΄ΠΈΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΡΠΏΠΈΠΊΠ΅ΡΠΎΠ²
- FastAPI - ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Π²Π΅Π±-ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ API
WhisperX ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ BSD-2-Clause:
Copyright (c) 2024, Max Bain
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
ΠΡΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ MIT. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π² ΡΠ°ΠΉΠ»Π΅ LICENSE.
MIT License
Copyright (c) 2025 whisperx-fronted-docker-compose Contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
ΠΡΠΎΠ΅ΠΊΡ whisperx-fronted-docker-compose - ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΠΈ Ρ ΠΏΠΎΠ»Π½ΡΠΌ ΡΡΠ΅ΠΊΠΎΠΌ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ, Π³ΠΎΡΠΎΠ²ΠΎΠ΅ ΠΊ ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Ρ ΠΈ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌΡ ΡΠ°Π·Π²ΠΈΡΠΈΡ.
ΠΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅: Π―Π½Π²Π°ΡΡ 2025