How shweta-nair/orator works
Orator is a Flask and vanilla-JavaScript presentation rehearsal coach. A presenter creates a scripted presentation, rehearses while the browser records video and transcribes speech, then submits the attempt for speech and visual analysis, score fusion, and a saved report. Dashboard, history, and progress aggregate saved attempts. The repository also contains a separate dataset-collection and PyTorch research scaffold; the README says trained models are not used by the app. Research links below describe documented capabilities, not inspected end-to-end wiring.
Main entry points: api.js API client · attempts.py Attempt routes · app.js App shell · models.py Domain models
Components 27
Rehearsal UI
- App shell
frontend/js/app.js - Auth views
frontend/js/auth.js - API client
frontend/js/api.js - Presentation flow
frontend/js/presentation.js - Recorder
frontend/js/recorder.js - Teleprompter
frontend/js/teleprompter.js - Report view
frontend/js/report.js - Dashboard view
frontend/js/dashboard.js - Progress view
frontend/js/progress.js
Application API
- Auth routes
app/routes/auth.py - Presentation routes
app/routes/presentations.py - Attempt routes
app/routes/attempts.py - Stats routes
app/routes/stats.py - Session auth
app/auth_utils.py
Attempt Analysis
- Speech metrics
app/services/speech_service.py - Video metrics
app/services/vision_service.py - Score and feedback
app/services/fusion_service.py - Stats aggregation
app/services/stats_service.py
Account and History
- Domain models
app/models.py - SQL database
app/models.py
Model Research
- Dataset collection
dataset_collection/scripts/ingest.py - Training dataset
training/data/dataset.py - Experiment runner
training/train_common.py - Multimodal models
training/models/multimodal_model.py
Other components
- Presenter
- Browser
- Web Speech API
Connections 33
- Presenter → App shell: uses
- App shell → Presentation flow: routes to
- App shell → Report view: routes to
- App shell → Dashboard view: routes to
- App shell → Progress view: routes to
- Auth views → API client: requests
- Presentation flow → API client: requests
- Report view → API client: requests
- Dashboard view → API client: requests
- Progress view → API client: requests
- Presentation flow → Recorder: records
- Presentation flow → Teleprompter: presents script
- Recorder → Browser: captures media
- Browser → Web Speech API: transcribes
- API client → Auth routes: calls
- API client → Presentation routes: calls
- API client → Attempt routes: submits attempt
- API client → Stats routes: requests stats
- Auth routes → Domain models: reads/writes
- Presentation routes → Domain models: manages
- Attempt routes → Session auth: checks session
- Presentation routes → Session auth: checks session
- Stats routes → Session auth: checks session
- Attempt routes → Speech metrics: analyzes transcript
- Attempt routes → Video metrics: analyzes video
- Attempt routes → Score and feedback: fuses metrics
- Attempt routes → Domain models: saves attempt
- Stats routes → Domain models: reads attempts
- Stats routes → Stats aggregation: aggregates
- Domain models → SQL database: persists
- Dataset collection → Training dataset: provides dataset inputs
- Experiment runner → Training dataset: loads data
- Experiment runner → Multimodal models: trains