A powerful, privacy-first desktop application for downloading videos and audio from 1000+ websites.
Version 0.3.0 | Built with PyQt5 & yt-dlp | 📖 Full Documentation
- Self-contained Linux package (69 MB) - no installation required
- Works on any distribution with glibc 2.6.32+ (Ubuntu 20.04+, Fedora 32+, Arch, etc.)
- Desktop integration with proper icon embedding
- Squashfs 4.0 compression (98.94% efficiency)
- Denoise video - 3D temporal denoising for grainy footage
- Stabilize video - Reduce camera shake with deshake filter
- Sharpen video - Unsharp mask with edge-aware settings
- Audio processing - Normalization & denoising for video audio
- Container support - MP4, MKV, WebM, MOV, AVI, FLV
- Enhanced AppImage build script with proper icon handling
- Icon now uses .DirIcon symlink (AppImageKit standard)
- Improved AppRun script with icon environment variables
- Comprehensive build documentation (BUILD_SUMMARY.md)
- Platform extractor coverage analysis
- Complete build verification checklist
- Distribution guidelines and system requirements
- Enhanced security and privacy documentation
See CHANGELOG.md for complete version history.
- 🎥 Video Downloads – Multiple quality options (Best, 4K, 1440p, 1080p, 720p, 480p, 360p)
- 🎵 Audio Extraction – MP3, AAC, FLAC, Opus, M4A with bitrate selection
- 📋 Playlist Support – Download entire playlists/channels with multi-selection
- 🔐 Smart Authentication – Auto-detects browser cookies for YouTube access
- 🎯 Dual Mode – Basic (auto-config) & Advanced (manual settings)
- 🎚️ Audio Enhancement
- EBU R128 broadcast-standard loudness normalization
- Dynamic normalization for varying volume levels
- FFT-based noise reduction (adaptive filtering)
- Thumbnail/album art embedding
- 📝 Filename Customization – Drag-and-drop template tags (title, uploader, date, duration, etc.)
- 📑 Subtitle Handling – Download and embed subtitles automatically
- ⚡ Real-time Progress – Live download tracking with filename and percentage
- 🔒 Privacy-First – Cookieless by default, authenticated only when needed
- 🤖 Auto Mode – Intelligently finds the best browser with YouTube authentication
- 🔍 Browser Support – Firefox, Chrome, Brave, Edge, Chromium, Opera, Vivaldi
- 🛡️ Secure by Design – Read-only access, in-memory storage, OS keyring encryption
- 💬 User-Friendly – Plain-English errors with actionable solutions
- 🎞️ Denoise – 3D temporal denoising (hqdn3d) for grainy footage
- 🤳 Stabilize – Camera shake reduction (deshake filter)
- ✨ Sharpen – Unsharp mask with edge-aware settings
- 🔊 Audio Processing – Normalization & denoising for video audio tracks
- 📦 Container Support – MP4, MKV, WebM, MOV, AVI, FLV
Powered by yt-dlp (2026.1.31+) with support for:
| Category | Platforms |
|---|---|
| Streaming | YouTube, Vimeo, Twitch, DailyMotion |
| Social Media | Twitter/X, Facebook, Instagram, TikTok, Snapchat |
| Alternatives | Odysee/LBRY, Rumble, BitChute |
| Plus | 1000+ additional sites – See yt-dlp docs |
📌 YouTube includes PO token support for 2026+ bot detection bypasses
| Requirement | Purpose | Status |
|---|---|---|
| Python 3.7+ | Application runtime | Required |
| FFmpeg | Audio/video processing | Required |
| Deno or Node.js 25+ | YouTube PO token generation | Recommended (YouTube downloads) |
All automatically installed via requirements.txt:
PyQt5 >= 5.15.0– GUI frameworkyt-dlp >= 2026.1.31– Video downloadingrequests >= 2.28.0– HTTP clientbeautifulsoup4 >= 4.11.0– HTML parsingPillow >= 10.0.0– Image handling
Download, make executable, and run:
# Download the latest AppImage
wget https://github.com/asafelobotomy/AV-Morning-Star/releases/download/v0.3.0/AV-Morning-Star-0.3.0-x86_64.AppImage
# Make it executable
chmod +x AV-Morning-Star-0.3.0-x86_64.AppImage
# Run it!
./AV-Morning-Star-0.3.0-x86_64.AppImage✨ Benefits:
- ✅ No installation required - Just download and run
- ✅ Self-contained - Includes all dependencies (69 MB)
- ✅ Universal - Works on any Linux distribution (glibc 2.6.32+)
- ✅ No conflicts - Doesn't interfere with system packages
- ✅ Desktop integration - Adds to application menu automatically
Requirements: FFmpeg (for audio/video processing) and optionally Deno (for YouTube).
# Clone the repository
git clone https://github.com/asafelobotomy/AV-Morning-Star.git
cd AV-Morning-Star
# Run the auto-setup script
chmod +x start.sh
./start.shThe start.sh script handles:
- ✅ Virtual environment creation
- ✅ Python dependency installation
- ✅ FFmpeg availability check
- ✅ Deno installation (optional, for YouTube)
- ✅ Application launch
Ubuntu/Debian:
sudo apt update
sudo apt install -y python3 python3-venv ffmpegFedora/RHEL:
sudo dnf install -y python3 python3-venv ffmpegArch Linux:
sudo pacman -S python ffmpegmacOS:
brew install python@3.11 ffmpeg# Create virtual environment
python3 -m venv .venv
# Activate it
source .venv/bin/activate # Linux/macOS
# OR
.venv\Scripts\activate # Windows
# Install Python packages
pip install --upgrade pip
pip install -r requirements.txt# Install Deno
curl -fsSL https://deno.land/install.sh | sh
# Add to PATH
echo 'export DENO_INSTALL="$HOME/.deno"' >> ~/.bashrc
echo 'export PATH="$DENO_INSTALL/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
# Verify installation
deno --versionAlternatives to Deno:
- Node.js 25+ – See nodejs.org
- Bun – See bun.sh
- QuickJS –
sudo apt install quickjs
python3 main.pyCreate a portable, standalone executable:
chmod +x build-appimage.sh
./build-appimage.shOutput: AV-Morning-Star-0.3.0-x86_64.AppImage (69 MB)
Build includes:
- ✅ All Python dependencies bundled
- ✅ PyQt5 GUI framework
- ✅ yt-dlp with 1000+ site extractors
- ✅ Desktop integration files
- ✅ Application icon (.DirIcon symlink)
- ✅ Squashfs 4.0 with gzip compression (98.94% efficiency)
Share this single file with others – no installation needed!
1. Launch App → ./start.sh or python3 main.py
2. Configure Auth → Tools > Preferences (keep "Auto" default)
3. Paste URL → YouTube, Odysee, etc.
4. Fetch Metadata → Click "Fetch" button
5. Select Videos → Check desired videos from list
6. Choose Settings → Quality, format, mode
7. Download → Click "Download Selected"
- ✅ Auto-detects best quality
- ✅ Auto-configures audio settings
- ✅ Perfect for 90% of users
- ✅ No technical knowledge required
- Manual video quality selection (4K down to 360p)
- Audio codec choice (MP3, AAC, FLAC, Opus, M4A, WAV, ALAC)
- Bitrate selection (96-320 kbps or lossless)
- Audio enhancements:
- 🎚️ EBU R128 loudness normalization
- 🔊 Dynamic normalization
- 🔇 FFT-based noise reduction
- 🖼️ Thumbnail embedding
- Video enhancements (for MP4/MKV/WebM):
- 🎬 Video denoising
- 🤳 Stabilization (reduce camera shake)
- ✨ Sharpening
- 🔊 Audio processing (normalization/denoising)
Customize output filenames with drag-and-drop tags:
| Tag | Example | Use Case |
|---|---|---|
| Title | "Amazing Video" | Video name |
| Uploader | "Channel Name" | Creator/channel |
| Quality | "1080p" | Video resolution |
| Format | "mp4" | File format |
| Website | "YouTube" | Platform name |
| ID | "dQw4w9WgXcQ" | Unique video ID |
| Upload Date | "20260203" | Original upload date |
| Download Date | "20260203" | When downloaded |
| Duration | "03:45:20" | Video length |
| Extension | "mp4" | Auto file extension |
Example: Drag Title, Uploader, Date → "Amazing Video - Channel Name - 20260203.mp4"
- Default "Auto" mode – Intelligent browser selection
- Tries cookieless first – No authentication needed
- YouTube blocks it? – Auto-detects your browser
- Prompts for confirmation – "Retry with Firefox?"
- Uses your login session – You stay logged in
✅ Firefox (recommended)
✅ Chrome / Chromium
✅ Brave
✅ Edge
✅ Opera
✅ Vivaldi
✅ Safari (macOS)
| Problem | Solution |
|---|---|
| "Sign in to confirm" error | Make sure you're logged into YouTube in your browser |
| "Browser cookies not found" | Switch to "Auto" mode in Preferences |
| Repeated "Bot detected" | Wait 15 minutes or try different video |
| Specific browser fails | Use "Auto" mode to try another browser |
⏱️ Pro Tip: Keep "Auto (Recommended)" selected – it finds the best browser automatically
extractors/
├── __init__.py # Factory function (get_extractor)
├── base.py # BaseExtractor (common interface)
├── youtube_ytdlp.py # YouTube with PO token support
├── odysee.py # Odysee/LBRY platform
└── generic.py # Fallback for 1000+ other sites
How It Works:
- User provides URL
- Factory function identifies platform
- Selects appropriate extractor class
- Extracts metadata via
extract_info() - Returns standardized format
Easy to Extend: Add new platform? Create extractor, inherit from BaseExtractor, register in factory. ✨
┌─────────────────────────┐
│ Main GUI Thread │
│ (PyQt5 Event Loop) │
└────────┬────────────────┘
│
┌────┴─────┬──────────────┐
│ │ │
▼ ▼ ▼
┌────────┐ ┌──────────┐ ┌──────────┐
│ Scraper│ │ Download │ │ UI │
│ Thread │ │ Thread │ │ Updates │
│ │ │ │ │ (signals)│
└────────┘ └──────────┘ └──────────┘
- Main Thread – GUI updates, user interaction
- Scraper Thread – Metadata extraction (non-blocking)
- Download Thread – File downloads with progress (non-blocking)
- Communication – PyQt signals/slots (thread-safe)
| Feature | Status | Benefit |
|---|---|---|
| Read-only access | ✅ | Cannot modify browser data |
| Memory-only storage | ✅ | Cookies never written to disk |
| OS keyring encryption | ✅ | Protected by system encryption |
| HTTPS-only | ✅ | Encrypted connections only |
| User consent | ✅ | Must approve before use |
| Auto cleanup | ✅ | Destroyed when app closes |
- Cookieless by Default – Authenticates only when YouTube requires it
- Smart Detection – Only scans browsers when needed (not on startup)
- No Tracking – Zero analytics, no telemetry, no data collection
- Local Processing – All operations happen on your computer
- Open Source – Inspect the code yourself
See docs/SECURITY_AUDIT.md for a comprehensive security review including:
- Cookie handling mechanisms
- Browser database encryption
- Network security
- Data flow analysis
Complete documentation is available in the docs/ folder:
- Getting Started: Step-by-step tutorial
- Authentication Guide: YouTube cookie authentication
- Security & Privacy: Security explained for users
- Smart Browser Detection: Auto-detection feature
- Architecture: Modular extractor system design
- Project Structure: Complete project organization
- Build Summary: v0.3.0 AppImage build manifest
- Extractor Coverage: Platform support analysis
- Security Audit: Comprehensive technical security review
- CHANGELOG.md: Version history and release notes
- Latest Release: Download AppImage
- Documentation Index: Full documentation guide
- Archive: Historical development documentation
✓ Solution:
- Open YouTube in your default browser and log in
- Tools > Preferences → Select "Auto (Recommended)"
- Retry the download
✓ Solution:
# Ubuntu/Debian
sudo apt install ffmpeg
# Fedora
sudo dnf install ffmpeg
# Arch Linux
sudo pacman -S ffmpeg
# macOS
brew install ffmpeg✓ Solution: Install Deno
curl -fsSL https://deno.land/install.sh | sh
source ~/.bashrc✓ Solution:
- Wait 15-30 minutes (YouTube rate limiting)
- Try a different YouTube video
- Ensure you're logged into YouTube in your browser
✓ Solution:
- Close your web browser (some lock cookie files)
- Switch to "Auto (Recommended)" mode
- Retry
✓ Solution:
- Make sure browser is installed and accessible
- Sign into YouTube in that browser
- Use "Auto" mode to switch browsers automatically
✓ Solution:
# Ubuntu/Debian
sudo apt install python3
# macOS (requires Homebrew)
brew install python@3.11✓ Solution:
# Install system libraries first
sudo apt install python3-dev # Ubuntu/Debian
# Then reinstall
pip install --upgrade PyQt5✓ Solution:
python3 -m pip install -r requirements.txt✓ Solution:
- Check your internet connection
- Try a different video
- Increase quality setting might help
- Restart the application
✓ Solution:
- Some videos have limited formats available
- Try a different quality setting
- Video might be private/restricted
Need more help? Check Full Documentation
Want to add support for a new platform? It's easy with our modular architecture!
-
Create extractor file –
extractors/yourplatform.pyfrom .base import BaseExtractor class YourPlatformExtractor(BaseExtractor): def extract_info(self): # Return list of videos with title, url, duration, uploader pass def get_download_opts(self, ...): # Return yt-dlp options for downloading pass
-
Inherit from BaseExtractor – Get common functionality for free
-
Register in factory –
extractors/__init__.pydef get_extractor(url, cookies_from_browser=None): if 'yourplatform.com' in url.lower(): return YourPlatformExtractor(url) # ... rest of function
-
Test it – No changes to main.py needed!
📖 Full guide: See docs/ARCHITECTURE.md
- Getting Started – Step-by-step tutorial
- YouTube Authentication – Cookie authentication explained
- Security & Privacy – User-friendly security guide
- Smart Browser Detection – Auto-detection feature
- Architecture – Modular system design
- Project Structure – Complete file organization
- Security Audit – Technical security review
- Code Review – Code quality analysis
- CHANGELOG.md – Version history and updates
- Latest Release – Download AppImage
- Build Summary – v0.3.0 build documentation
- Archive – Historical development notes
- Full Documentation Index – Everything in one place
This project is open source and available for personal and educational use.
See LICENSE file for full details.
- yt-dlp – Powerful video downloading engine
- PyQt5 – Excellent GUI framework
- FFmpeg – Media processing capabilities
- Deno – JavaScript runtime for YouTube PO tokens
This tool is for personal use only. Please respect:
- ✅ Copyright laws in your jurisdiction
- ✅ Website terms of service
- ✅ Creator permissions and licenses
The developers are not responsible for misuse of this software.
- 📖 Documentation – Check docs/ folder first
- 🐛 Report Issues – Use GitHub Issues with details
- 🔒 Security – See Security Guide
- 🌐 Repository – github.com/asafelobotomy/AV-Morning-Star
- 📜 Changelog – CHANGELOG.md
- 🏗️ Architecture – docs/ARCHITECTURE.md
AV Morning Star v0.3.0
Built with 🎥 for video enthusiasts
Maintained with ❤️ by the community
Privacy-first • Open-source • Easy-to-use
