A modern, lightweight, cross-platform video player built with Python and PyQt6. Perfect for developers learning GUI programming or users seeking a simple, elegant media player.
- π Zero configuration - Works out of the box with system codecs
- π¨ Beautiful UI - Modern dark/light themes with smooth animations
- β‘ Lightweight - Pure Python, no heavy dependencies
- π Cross-platform - Windows, macOS, and Linux support
- π Clean code - Well-structured, perfect for learning PyQt6
- π Open source - Free to use, modify, and learn from
Modern dark interface perfect for nighttime viewing

Clean, professional light mode for daytime use

- β Universal format support - MP4, MKV, AVI, MOV, WMV, FLV, WebM, and more
- β Hardware acceleration - Uses native OS media frameworks
- β Perfect sync - Audio and video perfectly synchronized
- β Variable speed - 0.5x to 2.0x playback with pitch preservation
- β Subtitle support - SRT, ASS, SSA formats
- π Dark/Light themes - Professional color schemes
- π±οΈ Intuitive controls - Click-to-seek, drag-and-drop support
- πΌοΈ Smart fullscreen - Auto-hiding controls, mouse-activated
- π Auto-resize - Window adapts to video resolution
- π― Responsive - Smooth, lag-free interface
- β‘ Keyboard shortcuts - Complete keyboard control
- π Fast forward - Click and hold to skip ahead
- ποΈ Volume control - Precise volume adjustment
- β―οΈ Playback control - Play, pause, stop, seek
- πΌοΈ Click-to-seek - Jump anywhere instantly
No Python installation required!
- Go to Releases
- Download
SimpleMediaPlayer.exe - Double-click to run
- That's it! π
Prerequisites:
- Python 3.10 or higher
- pip (Python package installer)
Installation Steps:
Download from Release:
- Go to Releases
- Download Source code (zip)
- Extract the ZIP file
- Open Terminal/Command Prompt in the extracted folder
- Install dependencies:
pip install -r requirements.txt
- Run the player:
# Windows python -m src.main # macOS/Linux python3 -m src.main
Or Clone from Git:
git clone https://github.com/ArjunBiswas-99/simple-media-player.git
cd simple-media-player
pip install -r requirements.txt
python -m src.mainMethod 1: Drag and Drop
- Simply drag a video file onto the player window
Method 2: File Menu
- Click
File β Open File(or pressCtrl+O)
Method 3: Command Line
python -m src.main "path/to/video.mp4"| Shortcut | Action |
|---|---|
Space |
Play/Pause |
S |
Stop |
β / β |
Seek backward/forward (5 seconds) |
β / β |
Volume up/down |
M |
Mute/Unmute |
| Shortcut | Action |
|---|---|
F |
Toggle fullscreen |
Esc |
Exit fullscreen |
Ctrl+O |
Open file |
Ctrl+S |
Open subtitle |
Ctrl+Q |
Quit |
| Action | Result |
|---|---|
| Click progress bar | Seek to position |
| Double-click video | Toggle fullscreen |
| Click and hold video | Fast forward (2x speed) |
| Mouse move (fullscreen) | Show controls |
Create a standalone application:
Windows:
python scripts/build.pyOutput: dist/PyMediaPlayer.exe
Cross-platform:
pip install pyinstaller
pyinstaller --name="Simple Media Player" --windowed src/main.py- PyQt6 - Modern Qt6 bindings for Python
- PyQt6-Multimedia - Native multimedia framework
- Python 3.10+ - Latest Python features
- ποΈ Clean Architecture - Separation of concerns, SOLID principles
- π§© Modular Design - Independent components with clear interfaces
- π Thread-safe - Proper synchronization for multimedia
- π Well-documented - Comprehensive code comments
βββββββββββββββββββββββββββββββββββββββ
β PyQt6 Application β
βββββββββββββββββββββββββββββββββββββββ€
β GUI (main_window.py) β
β ββ Video Widget (video_widget.py)β
β ββ Controls & UI β
β ββ Theme Manager β
βββββββββββββββββββββββββββββββββββββββ€
β Media Player (player.py) β
β ββ QMediaPlayer (Qt Multimedia) β
β ββ QAudioOutput (System audio) β
β ββ QVideoSink (Video rendering) β
βββββββββββββββββββββββββββββββββββββββ€
β Native OS Media Frameworks β
β ββ Windows: Media Foundation β
β ββ macOS: AVFoundation β
β ββ Linux: GStreamer β
βββββββββββββββββββββββββββββββββββββββ
Why PyQt6 Multimedia?
- β Uses native OS codecs (no external libraries needed)
- β Hardware acceleration support
- β Perfect audio/video synchronization
- β Same technology used by professional Qt applications
- β Simple, unified API for all media types
simple-media-player/
βββ README.md # Project documentation
βββ LICENSE # MIT License
βββ requirements.txt # Python dependencies
β
βββ src/ # Source code
β βββ main.py # Application entry point
β βββ core/
β β βββ player.py # Media playback engine
β βββ gui/
β βββ main_window.py # Main window & UI
β βββ video_widget.py # Video display widget
β βββ theme_manager.py # Theme management
β βββ fullscreen_overlay.py # Fullscreen controls
β
βββ docs/ # Documentation
β βββ CHANGELOG.md # Version history
β βββ CONTRIBUTING.md # Contribution guidelines
β βββ development/ # Developer docs
β βββ HOW_TO_RELEASE.md # Release process
β βββ RELEASE_NOTES_v1.0.0.md
β
βββ scripts/ # Build & utility scripts
β βββ build.py # Executable builder
β βββ BUILD-EXE.bat # Windows build script
β
βββ archive/ # Archived files
βββ errorlog.txt
βββ media-player-requirements.md
"No module named 'PyQt6'"
pip install --upgrade pip
pip install PyQt6 PyQt6-MultimediaPython version error
python --version # Must be 3.10 or higherVideo plays but no audio
- β
Check PyQt6-Multimedia is installed:
pip show PyQt6-Multimedia - β Verify video file has an audio track (test with another media player)
- β Check volume slider and mute button (press M to unmute)
- β Restart the application
Video won't load
- β Check file format is supported (MP4, MKV work best)
- β Look for error messages in terminal
- β Try a different video file
- β Ensure file isn't corrupted
Controls hidden in fullscreen
- β Move mouse to show controls
- β Controls auto-hide after 3 seconds
- β
Press
Escor double-click to exit fullscreen
Simple Media Player has comprehensive unit and integration tests.
# Install dev dependencies
pip install -r requirements-dev.txt
# Run all tests
pytest
# Run with coverage
pytest --cov=src --cov-report=html- Unit Tests (
tests/unit/) - Test isolated components - Integration Tests (
tests/integration/) - Test component interaction - Coverage Target - 70%+ overall coverage
See tests/README.md for detailed testing documentation.
Contributions are welcome! See docs/CONTRIBUTING.md for guidelines.
Quick start:
- π΄ Fork the repository
- π Create a feature branch (
git checkout -b feature/AmazingFeature) - πΎ Commit your changes (
git commit -m 'Add some AmazingFeature') - π€ Push to the branch (
git push origin feature/AmazingFeature) - π Open a Pull Request
# Clone your fork
git clone https://github.com/YOUR_USERNAME/simple-media-player.git
cd simple-media-player
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
pip install -r requirements-dev.txt
# Run tests
pytest
# Run the application
python -m src.mainThis project is licensed under the MIT License - see the LICENSE file for details.
If you find this project useful, please consider giving it a star! β
- π Bug Reports: Open an issue
- π‘ Feature Requests: Open an issue
- π¬ Discussions: GitHub Discussions
- PyQt6 team for excellent Python bindings
- Qt Project for the robust multimedia framework
- Open source community for inspiration and support
Made by Arjun Biswas