A professional webcam effects application with real-time video processing capabilities. Transform your webcam into a professional streaming setup with real-time effects, filters, and virtual camera output for OBS, Zoom, Teams, and more.
- Real-Time Video Effects: Apply professional-grade filters and effects to your webcam feed with minimal latency
- Virtual Camera Output: Stream processed video to OBS Virtual Camera or UnityCapture for use in any application
- Auto Device Detection: Automatic camera detection with support for DirectShow (Windows), MSMF, and OpenCV backends
- Intelligent Parameter Optimization: AI-powered auto-optimization that analyzes frames and adjusts parameters for best results
- Performance Controls: Adaptive frame skipping and FPS limiting to maintain smooth performance
- Multiple Effect Categories:
- π Artistic: Cartoon, anime, sketch, and artistic effects
- π¨ Color Filters: Brightness, contrast, saturation, and color adjustments
- βοΈ Basic Effects: Blur, sharpen, edge detection, and more
- π Distortions: Glitch, halftone, and creative distortions
- Live Preview: Real-time preview of effects before streaming
- Snapshot Capture: Save processed frames as images
- Settings Persistence: Automatically saves your preferences and parameters
- Modular Design: Easy to add new effects and styles
- Python 3.11 or higher
- Windows 10/11 (primary platform, Linux/Mac support via OpenCV)
- Webcam/camera device
- OBS Studio (optional, for OBS Virtual Camera backend)
-
Clone the repository:
git clone <repository-url> cd MeTuber
-
Set up a Python virtual environment:
python -m venv venv # On Windows: venv\Scripts\activate # On Linux/Mac: source venv/bin/activate
-
Install dependencies:
pip install -r requirements.txt
-
Run the application:
python webcam_filter_pyqt5.py
- Launch the application using
python webcam_filter_pyqt5.py - Select your camera device from the dropdown (or use "Auto-detect on start")
- Choose a style/effect from the categorized tabs
- Adjust parameters using the sliders and controls
- Click "Start Virtual Camera" to begin streaming
The application supports two virtual camera backends:
-
OBS Virtual Camera (default):
- Best for Zoom, Teams, Google Meet, Discord
- Requires OBS Studio to be installed
- Select "OBS Virtual Camera" in your video conferencing app
-
UnityCapture:
- Best for using as a source in OBS Studio
- Add as "Video Capture Device" in OBS
- Select "Unity Video Capture" as the device
The application includes several performance features:
- Adaptive Frame Skipping: Automatically adjusts frame processing based on system performance
- FPS Limiting: Set maximum FPS to reduce CPU/GPU load
- Manual Frame Skip: Manually skip frames for lower-end systems
- Performance Warnings: Logs warnings when processing is slow (informational only)
Click the "Auto Optimize Parameters" button to:
- Analyze the current frame for brightness, contrast, and detail levels
- Automatically adjust style parameters for optimal results
- View detailed optimization results and changes
If you encounter camera access issues on Windows:
-
Enable Camera Access:
- Settings β Privacy & Security β Camera
- Enable "Camera access"
- Enable "Let apps access your camera"
- Enable "Allow desktop apps to access your camera" (IMPORTANT!)
-
Close Other Apps:
- Close any apps using the camera (Teams, Zoom, Discord, OBS, Chrome, etc.)
- Check Task Manager for processes using the camera
-
Try Different USB Ports:
- Prefer rear motherboard USB ports
- Try unplugging and replugging the camera
MeTuber/
βββ webcam_filter_pyqt5.py # Main application entry point
βββ webcam_threading.py # Threading and camera capture logic
βββ gui_components/ # Modular GUI components
β βββ device_selector.py
β βββ style_tab_manager.py
β βββ parameter_controls.py
β βββ action_buttons.py
βββ styles/ # Style/effect implementations
β βββ base.py # Base Style class
β βββ artistic/ # Artistic effects (cartoon, sketch, etc.)
β βββ basic/ # Basic filters
β βββ color_filters/ # Color adjustments
β βββ distortions/ # Distortion effects
β βββ effects/ # Special effects
βββ src/ # Additional source code
β βββ gui/ # GUI modules
β βββ plugins/ # Plugin system
β βββ services/ # Service layer
βββ tests/ # Test suite
βββ snapshots/ # Saved snapshot images
βββ config.json # Saved settings (auto-generated)
βββ requirements.txt # Python dependencies
- Cartoon Style Pro: Advanced cartoon/anime effects with multiple presets
- Sketch Effects: Pencil sketch and artistic drawing styles
- Edge Detection: Advanced edge detection algorithms
- Brightness/Contrast: Adjust image brightness and contrast
- Saturation: Control color intensity
- Color Grading: Professional color adjustments
- Blur/Sharpen: Image blurring and sharpening
- Original: Passthrough (no effects)
- Glitch: Digital glitch effects
- Halftone: Halftone printing effects
- Creative Distortions: Various artistic distortions
Settings are automatically saved to config.json:
- Selected camera device
- Current style and parameters
- Virtual camera backend preference
- Snapshot save directory
- Fixed! This issue has been resolved. The application now properly waits for threads to finish before closing.
- Check Windows Camera privacy settings (see Windows Camera Setup above)
- Ensure no other apps are using the camera
- Try selecting "Auto-detect on start" in the device dropdown
- Check that camera drivers are installed
- Reduce Max FPS in Performance Settings
- Increase Frame Skip value
- The adaptive skip mechanism will automatically adjust if needed
- Performance warnings are informational and don't indicate errors
- For OBS backend: Ensure OBS Studio is installed
- For UnityCapture: Check that UnityCapture driver is installed
- Try restarting the application
- Check that "Send frames to Virtual Camera" checkbox is enabled
Run the test suite:
# Run all tests
pytest -n auto --cov=styles tests/
# Run specific test file
pytest tests/test_cartoon.py
# Run with coverage report
pytest --cov=styles --cov-report=html tests/- Create a new file in the appropriate
styles/subfolder - Inherit from
Stylebase class instyles/base.py - Implement the
applymethod:def apply(self, frame, **params): # Process frame return processed_frame
- Define parameters in the
parameterslist - Add unit tests
- Follow PEP 8 guidelines
- Use type hints where appropriate
- Document functions and classes
- Run
blackfor formatting:black . - Run
flake8for linting:flake8 .
This project is licensed under the MIT License. See the LICENSE file for details.
- PyQt5 for the GUI framework
- OpenCV for image processing
- PyAV for camera capture
- pyvirtualcam for virtual camera support
- OBS Studio for virtual camera backend
- Thread Safety: Fixed QThread cleanup issues - threads now properly stop before application exit
- Performance: Added adaptive frame skipping for better performance on lower-end systems
- Auto-Optimization: Enhanced AI-powered parameter optimization with frame analysis
- Device Detection: Improved Windows camera detection with multiple backend support
- Error Handling: Better error messages and troubleshooting guidance
Get started and make your streams shine with personalized filters and effects! π