๐๏ธ NLP-powered presentations with voice navigation, live highlighting, and speech analytics.
---- Overview
- Key Features
- Prerequisites
- Installation
- Usage
- Configuration
- Project Structure
- Contributing
- License
- Contact & Acknowledgements
VoiceSlide is a full-stack presentation platform that lets you control slides with your voice. It uses on-device speech-to-text (faster-whisper), semantic intent classification, and voice activity detection (Silero VAD) to deliver a hands-free presenting experience โ no cloud APIs, no microphone button mashing, no latency.
Why? Traditional presentation tools force speakers to click, tap, or use a clicker. VoiceSlide replaces all of that: just speak naturally, and the system navigates to the right slide, highlights keywords in real time, answers your Q&A from speaker notes, and tracks your speaking analytics โ all locally and in real time.
How? A Flask + Socket.IO backend streams browser microphone audio through a VAD โ Whisper โ NLP pipeline. The frontend renders slides with reveal.js and reacts to WebSocket events for navigation, highlighting, and analytics.
| Feature | Description |
|---|---|
| ๐ฃ๏ธ Voice Navigation | Say "next slide", "go to slide 5", or even describe content โ the system finds and navigates to the right slide using semantic search. |
| ๐ฏ Live Keyword Highlighting | As you speak, matching words on the current slide are highlighted in real time using fuzzy matching. |
| ๐ง Semantic Content Search | Uses sentence-transformer embeddings to match spoken phrases to slide content, even when wording differs. |
| ๐ค Voice Activity Detection | Silero VAD detects speech boundaries โ transcription only fires when you actually pause, eliminating false triggers. |
| ๐ Speech Analytics Dashboard | Post-presentation dashboard with filler word tracking, words-per-minute, and VADER sentiment analysis over time. |
| ๐ฌ Q&A from Speaker Notes | Ask a question during your talk and the system searches your speaker notes for relevant answers, displayed on the Presenter Panel. |
| ๐ PPTX Import | Upload a .pptx file and it's automatically converted to VoiceSlide's slide format โ no manual JSON editing required. |
| ๐ฅ๏ธ Presenter Panel | A private second-screen view with speaker notes, Q&A results, and current slide context. |
| ๐ Fully Local | All NLP runs on-device. No cloud APIs, no data leaves your machine. |
| Requirement | Version | Notes |
|---|---|---|
| Python | 3.10+ | Required for type hints and library compatibility |
| PyTorch | 2.x | With CUDA 12.1 for GPU acceleration (CPU works but is slower) |
| torchaudio | 2.x | Required by Silero VAD |
| Node.js | โ | Not required โ frontend uses CDN-loaded libraries |
| FFmpeg | โ | Not required โ faster-whisper handles raw PCM directly |
Note
PyTorch and torchaudio must be installed manually for your CUDA version before running pip install. See Installation below.
git clone [INSERT_REPO_URL].git
cd voiceslidepython -m venv venv
source venv/bin/activate # Linux / macOS
venv\Scripts\activate # WindowsInstall PyTorch and torchaudio for your CUDA version. Example for CUDA 12.1:
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu121Tip
For CPU-only: pip install torch torchaudio --index-url https://download.pytorch.org/whl/cpu
pip install -r backend/requirements.txtEither upload a .pptx through the web UI or place a slides.json file in the data/ directory:
mkdir -p data
# Option A: Start the server and use /upload in the browser
# Option B: Create data/slides.json manually (see Usage below)python backend/app.pyThe server starts on http://localhost:5000 by default.
- Open
http://localhost:5000in your browser. - Click the microphone button (bottom-right) to enable voice input.
- Speak naturally โ VoiceSlide handles the rest:
"Next slide" โ advances one slide
"Previous slide" โ goes back one slide
"Go to slide 3" โ jumps to slide 3
"Show the revenue chart" โ semantic search finds the matching slide
"First slide" โ jumps to the beginning
"Last slide" โ jumps to the end
Open http://localhost:5000/presenter in a second browser window (or second monitor) to see:
- Current slide speaker notes
- Real-time Q&A results from your notes
- Transcript feed
After your presentation, open http://localhost:5000/analytics to review:
- Average WPM โ were you rushing or dragging?
- Filler word breakdown โ how many "um"s, "like"s, "you know"s?
- Sentiment timeline โ was your language confident and positive?
VoiceSlide uses a simple JSON format. You can create slides manually or import a .pptx:
{
"slides": [
{
"title": "Welcome",
"content": "<h1>Welcome to VoiceSlide</h1><p>Hands-free presentations.</p>",
"notes": "Introduce the product and greet the audience."
},
{
"title": "Revenue Growth",
"content": "<h2>Revenue</h2><p>Revenue grew 18% year over year.</p>",
"notes": "Key talking point: 18% growth driven by enterprise segment."
}
]
}All configuration is managed through environment variables. Defaults are defined in backend/config.py.
| Variable | Default | Description |
|---|---|---|
VOICESLIDE_HOST |
0.0.0.0 |
Server bind address |
VOICESLIDE_PORT |
5000 |
Server port |
VOICESLIDE_DEBUG |
true |
Enable Flask debug mode |
# Example: Run on port 8080 with debug off
export VOICESLIDE_HOST="127.0.0.1"
export VOICESLIDE_PORT="8080"
export VOICESLIDE_DEBUG="false"
python backend/app.pyvoiceslide/
โโโ backend/
โ โโโ app.py # Flask + Socket.IO entry point
โ โโโ config.py # Environment-based configuration
โ โโโ transcriber.py # faster-whisper STT engine
โ โโโ vad_engine.py # Silero VAD speech detection
โ โโโ intent_classifier.py # Voice command classification
โ โโโ context_search.py # Semantic slide search (sentence-transformers)
โ โโโ keyword_highlighter.py # Fuzzy keyword matching for live highlights
โ โโโ qa_assistant.py # Q&A from speaker notes
โ โโโ analytics.py # Speech analytics (fillers, WPM, sentiment)
โ โโโ slide_loader.py # JSON slide loading & validation
โ โโโ pptx_converter.py # .pptx โ slides.json converter
โ โโโ requirements.txt # Python dependencies
โโโ frontend/
โ โโโ index.html # Main presentation view
โ โโโ upload.html # Slide upload / editor page
โ โโโ presenter.html # Presenter Panel (speaker notes + Q&A)
โ โโโ analytics.html # Speech Analytics Dashboard
โ โโโ css/
โ โ โโโ style.css # Global styles & design tokens
โ โ โโโ presentation.css # Slide presentation styles
โ โ โโโ presenter.css # Presenter Panel styles
โ โ โโโ upload.css # Upload page styles
โ โ โโโ analytics.css # Analytics Dashboard styles
โ โโโ js/
โ โโโ app.js # Main presentation logic + WebSocket
โ โโโ presenter.js # Presenter Panel logic
โ โโโ upload.js # Upload page logic
โ โโโ analytics.js # Analytics Dashboard charts (Chart.js)
โ โโโ audio-processor.js # AudioWorklet for mic capture
โโโ tests/
โ โโโ test_analytics.py
โ โโโ test_context_search.py
โ โโโ test_intent_classifier.py
โ โโโ test_interceptor.py
โ โโโ test_keyword_highlighter.py
โ โโโ test_qa_assistant.py
โ โโโ test_transcriber.py
โ โโโ test_universal_fallback.py
โ โโโ fixtures/
โ โโโ sample.pptx
โ โโโ sample_audio.raw
โโโ data/
โโโ slides.json # Active slide content (auto-generated)
Contributions are welcome! Here's how to get started:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow the existing code style โ no comments unless they match existing patterns or explain complex logic.
- All new backend features must include tests in
tests/. - Run the full test suite before submitting:
pytest tests/ -vImportant
PyTorch and torchaudio are installed manually and are not listed in requirements.txt. Make sure your environment has them installed before running tests.
Distributed under the [INSERT_LICENSE] License. See LICENSE for more information.
[Muhammad Hassan] โ [muhammadhassan1762005@gmail.com] โ @MY_LinkedIn
Project Link: [INSERT_REPO_URL]
- Flask โ lightweight Python web framework
- Socket.IO โ real-time bidirectional communication
- faster-whisper โ CTranslate2-based Whisper inference
- Silero VAD โ voice activity detection
- sentence-transformers โ semantic text embeddings
- VADER Sentiment โ lexicon-based sentiment analysis
- reveal.js โ HTML presentation framework
- Chart.js โ JavaScript charting library
- thefuzz โ fuzzy string matching
Made with โค๏ธ and a whole lot of voice commands.

