A lightweight, frameless teleprompter for Linux / KDE Plasma, inspired by NotchPrompter. Built with PyQt6 — no Electron, no browser, no bloat.
┌──────────────────────────────────────┐
│ │
│ The text scrolls upward │
│ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │ ← fade out
│ ████ smoothly, centred, ████ │ ← full opacity (centre)
│ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │ ← fade out
│ │
│ [ ⏸ ][ ⏮ ][ ✏ ] Speed ──●── Font ──●── [ ✕ ] ⠿ │ ← control bar (on hover)
└──────────────────────────────────────┘
- Always-on-top, frameless window — sits above your video software
- Smooth 60 fps scroll driven by a 16 ms QTimer
- Voice-activated scrolling — scroll speed follows your speech energy in real time; pauses automatically when you stop talking
- Quadratic alpha fade — lines near the centre are fully opaque; edges fade out gracefully
- Hover to pause — moving the pointer over the window pauses scrolling and reveals controls
- Drag to reposition anywhere on screen; grip to resize
- Script editor with file-load support (plain
.txt) - Speed & font-size sliders in the control bar
- Mouse wheel and keyboard shortcuts for quick adjustments
- Catppuccin Mocha colour scheme
| Dependency | Version | Notes |
|---|---|---|
| Python | ≥ 3.10 | |
| PyQt6 | ≥ 6.4.0 | |
| pyaudio | ≥ 0.2.13 | Optional — required for voice-activated scroll |
| numpy | ≥ 1.24.0 | Optional — required for voice-activated scroll |
| libportaudio2 | any | System library for pyaudio |
Download the latest .deb from the Releases page and install it:
sudo apt install ./kdeteleprompter_1.0.2_all.debThis will automatically install python3-pyqt6, python3-pyaudio, python3-numpy and libportaudio2 if not already present.
After installation, the app is available as kdeteleprompter from the terminal and from the KDE application launcher.
# Clone or download the project
cd kdeteleprompter/
# For voice-activated scroll, install the portaudio system library first:
sudo apt install portaudio19-dev
# Launch (creates a venv and installs dependencies automatically)
./run.shTip (KDE): Right-click the title bar → More Actions → Keep Above Others is not needed — the window sets this flag automatically.
| Key | Action |
|---|---|
Space |
Play / Pause |
R |
Reset to beginning |
M |
Toggle voice-activated scroll |
+ / = |
Increase speed |
- |
Decrease speed |
Ctrl+E |
Open script editor |
Escape |
Close |
| Action | Effect |
|---|---|
| Scroll wheel | Adjust speed ±1 step |
| Left-click drag | Move window |
| Drag the grip (bottom-right) | Resize window |
| Hover | Pause scroll, show controls |
| Leave | Resume scroll, hide controls |
Appears automatically when the pointer enters the window.
| Control | Range | Default | Description |
|---|---|---|---|
| ⏸ / ▶ button | — | Playing | Toggle pause |
| ⏮ button | — | — | Reset scroll to top |
| ✏ button | — | — | Open script editor |
| 🎤 button | — | Off | Toggle voice-activated scroll |
| Speed slider | 1 – 30 | 5 | Scroll speed (× 0.1 px/frame = 0.1 – 3.0 px/frame) |
| Font slider | 10 – 72 pt | 28 pt | Display font size |
| ✕ button | — | — | Close the application |
kdeteleprompter/
├── kdeteleprompter.py # Single-file application
├── requirements.txt # pyaudio, numpy
├── run.sh # launcher (creates venv automatically)
└── build_deb.sh # .deb packaging script
TeleprompterWindow (QMainWindow)
├── ScrollDisplay (QWidget) — QPainter-based animated canvas
├── ControlBar (QWidget) — hover-revealed control strip
├── EditorDialog (QDialog) — script editor (modal)
├── MicDialog (QDialog) — microphone selection
└── VoiceListener (QThread) — real-time VAD via pyaudio + numpy
All colours follow the Catppuccin Mocha palette:
| Role | Colour |
|---|---|
| Background | rgb(11, 11, 17) |
| Text | #cdd6f4 |
| Accent / UI | #cba6f7 (mauve) |
| Bar background | rgba(30, 30, 46, 210) |
This project is a port of NotchPrompter by Jan Pomykala to KDE Plasma, rewritten from scratch in PyQt6 for Linux.
Original project licensed under MIT.
MIT License — see LICENSE for the full text.
Copyright (c) 2024 Jan Pomykala Copyright (c) 2026 Eduardo Collado