A PyQt6 + OpenCV desktop application with AI-powered roasting and glazing, powered by Gemini LLM and ElevenLabs TTS.
- Automatically scrapes GitHub and LinkedIn profiles in the background
- Caches all scraped data locally in
profiles_cache.json - Only re-scrapes if profile URLs change (smart caching)
- Supports resume upload (PDF, DOCX, TXT) or inline text input
Press Tab to trigger the main AI call with:
- Live screenshot (Base64-encoded face crop)
- OpenCV face metrics (FWHR, jaw ratio, symmetry, etc.)
- Cached LinkedIn & GitHub profile data
- Resume text
- Detected facial emotion
Three modes available:
- Glaze Mode (👍 up gesture): Hyperbolic compliments
- Hate Mode (👎 down gesture): Savage roasts
- Super Hate Mode (two 👎👎): Maximum unhinged chaos
Press r to toggle screen recording.
Videos are saved to captured-videos/ folder with timestamp.
Red indicator dot appears in top-left when recording.
- Profile panel with resume text input field
- "SAVING..." → "SAVED ✓" checkmark flow
- Checkmark resets when inputs are edited
- Updated hint text showing all keybinds
AI responses are automatically passed to ElevenLabs TTS and played aloud.
# All required packages:
pip install PyQt6 opencv-python mediapipe numpy requests elevenlabs python-docx PyPDF2Create .env file in project root:
GEMINI_API_KEY=your_key_here
# OR
GOOGLE_API_KEY=your_key_here
ELEVENLABS_API_KEY=your_key_here
python app.py| Key | Action |
|---|---|
| Tab | Trigger AI (roast/glaze/super-hate based on mode) |
| r | Toggle screen recording (saves to captured-videos/) |
| Space | Capture screenshot of current face |
| m | Toggle face mesh visualization |
| Click | Cycle to next detected face |
| Esc | Quit |
.
├── app.py # Main PyQt6 GUI & video loop
├── ai_core.py # New: AI orchestration, caching, scraping
├── cvModule.py # Face analysis & metrics
├── mainAI.py # Gemini LLM integration (refactored)
├── githubinfo.py # GitHub profile scraper
├── linkedin_profile.py # LinkedIn profile scraper
├── profiles_cache.json # Auto-generated: cached profiles
├── captured-videos/ # Auto-created: screen recording videos
├── captures/ # Face capture screenshots
├── templates/index.html # (Legacy Flask template)
└── .env # API keys (not committed)
- User inputs GitHub username, LinkedIn username, resume (file or text)
- Click SAVE → background thread starts scraping
- Data cached locally with unique keys (
github::username,linkedin::username, etc.) - "SAVED ✓" checkmark appears when done
- Checkmark resets if user edits any field
- Screenshot captured & encoded to Base64
- Face metrics extracted (emotion, FWHR, symmetry, etc.)
- Cached profiles looked up from
profiles_cache.json - Payload constructed with all data
- Gemini LLM called with appropriate system prompt (glaze/hate/super_hate)
- Response text passed to ElevenLabs TTS
- Audio plays automatically
- Response printed to console
- Thumb Side → Neutral (no action)
- Thumb Up → Glaze Mode (compliments)
- Thumb Down → Hate Mode (roasts)
- Two Thumbs Down → Super Hate Mode (unhinged)
Creative, poetic, over-the-top compliments combining facial features with real achievements.
Savage but clever roasts merging facial features with online footprint.
Maximum unhinged chaos - deranged, creative, hilariously brutal.
ai_core.py (new core module):
schedule_background_scrape()- runs scraping in daemon threadbuild_payload()- assembles API request with cached datacall_ai_and_speak()- calls Gemini + ElevenLabs- Caching system with file locks for thread safety
mainAI.py refactored:
- Wrapped interactive code in
if __name__ == "__main__":block - Made module importable without prompts
"SAVED ✓ not appearing?"
- Check
.envhas valid API keys - See browser console for scraping errors (printed to stdout)
"No audio?"
- Verify
ELEVENLABS_API_KEYis set - Check system volume
"Recording not working?"
- Ensure
captured-videos/folder is writable - Check OpenCV VideoWriter support on your system
"Import errors?"
- Activate venv:
.\.venv\Scripts\Activate.ps1(Windows) orsource .venv/bin/activate(Unix) - Install all deps:
pip install -r requirements.txt(if exists)
- Cache expiration (refresh data after N days)
- Confidence scores for scraped data
- Multiple voice selections for TTS
- Custom system prompts via UI
- Video preview before upload
- Analytics dashboard
(Add your license here)