<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: BAVAN VIJAYA RAJA M K</title>
    <description>The latest articles on DEV Community by BAVAN VIJAYA RAJA M K (@bvrmk).</description>
    <link>https://dev.to/bvrmk</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F99mvlsfu5tfj9m7ku25d.png</url>
      <title>DEV Community: BAVAN VIJAYA RAJA M K</title>
      <link>https://dev.to/bvrmk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bvrmk"/>
    <language>en</language>
    <item>
      <title>Shadow Automator</title>
      <dc:creator>BAVAN VIJAYA RAJA M K</dc:creator>
      <pubDate>Thu, 08 Oct 2026 11:31:49 +0000</pubDate>
      <link>https://dev.to/bvrmk/shadow-automator-1c1l</link>
      <guid>https://dev.to/bvrmk/shadow-automator-1c1l</guid>
      <description>&lt;h1&gt;
  
  
  Shadow Automator
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A fully-local, privacy-first desktop automation tool powered by a vision-language model.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
It &lt;em&gt;sees&lt;/em&gt; your screen, &lt;em&gt;finds&lt;/em&gt; UI elements by plain-text description, and &lt;em&gt;clicks&lt;/em&gt; them — all on your own hardware, with zero cloud calls.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="LICENSE"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2FLicense-MIT-blue.svg" alt="License: MIT" width="82" height="20"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.python.org/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2FPython-3.10%2B-cyan.svg" alt="Python 3.10+" width="92" height="20"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href=""&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2FPlatform-Windows-purple.svg" alt="Platform: Windows" width="116" height="20"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href=""&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2FHacktoberfest-2026-orange.svg" alt="Hacktoberfest 2026" width="124" height="20"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Team
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Team Name:&lt;/strong&gt; Texperts | &lt;strong&gt;Team Code:&lt;/strong&gt; HTF 009&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Member&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;th&gt;Contribution&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bavan Vijaya Raja M.K&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;GPU Lead (6GB VRAM)&lt;/td&gt;
&lt;td&gt;llama-server setup, Vision-Grounding pipeline, inference optimization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ithyaash&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Architecture &amp;amp; Compliance Lead&lt;/td&gt;
&lt;td&gt;Repo structure, SQLite logger, ROI calculator, PII redaction, FastAPI dashboard&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pranav Prasad&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;UI/UX Lead&lt;/td&gt;
&lt;td&gt;Spotlight bar, AR overlay, toast notifications, event bus UI wiring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bala Ragavan&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;OS Sandbox Lead&lt;/td&gt;
&lt;td&gt;Screen grabber, mouse executor, self-healing loop, edge-case testing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Problem Statement
&lt;/h2&gt;

&lt;p&gt;Millions of everyday office tasks happen inside desktop apps and internal tools that expose &lt;strong&gt;no API&lt;/strong&gt;: reading an invoice and logging it in a spreadsheet, copying values between windows, filling the same form repeatedly. Traditional RPA tools automate by recording pixel coordinates or fragile selectors — so a moved button breaks the entire workflow and someone has to fix it manually. Small teams dealing with repetitive back-office work are most affected, especially where &lt;strong&gt;sending screenshots to a cloud service is not acceptable&lt;/strong&gt; (banking, internal tools, regulated industries).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why we chose this:&lt;/strong&gt; Recent GUI-grounding vision-language models can now find a UI element from a plain-text description, making automation that survives UI changes realistic and small enough to run on a single consumer GPU. Keeping everything local makes it viable for sensitive workflows.&lt;/p&gt;




&lt;h2&gt;
  
  
  Solution
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Shadow Automator&lt;/strong&gt; is a local desktop automation agent. You describe what you want in natural language via a &lt;code&gt;Ctrl+Space&lt;/code&gt; Spotlight bar. The system:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Captures&lt;/strong&gt; your screen (via &lt;code&gt;mss&lt;/code&gt;) and &lt;strong&gt;redacts PII&lt;/strong&gt; (credit cards, SSNs, emails) offline with OpenCV + regex&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sends&lt;/strong&gt; the sanitised screenshot to a locally-hosted &lt;code&gt;Qwen2.5-VL-3B&lt;/code&gt; vision model&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Receives&lt;/strong&gt; exact &lt;code&gt;[x1, y1, x2, y2]&lt;/code&gt; bounding-box coordinates for the target element&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Projects&lt;/strong&gt; glowing AR bounding boxes on-screen via a transparent overlay&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clicks&lt;/strong&gt; with human-like mouse smoothing via PyAutoGUI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-heals&lt;/strong&gt; if no UI state change is detected — automatically re-crops and re-grounds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Logs&lt;/strong&gt; every task to SQLite and displays live &lt;strong&gt;ROI savings&lt;/strong&gt; (cloud cost + human hours avoided)&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Describe-and-find grounding&lt;/strong&gt; — clicks located from text descriptions, no stored pixel coordinates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline PII Redaction&lt;/strong&gt; — Regex + OpenCV blurs sensitive data before any image touches the model&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-Healing Loop&lt;/strong&gt; — MSE-based visual state validation with automatic re-grounding on failure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AR Bounding Box Overlay&lt;/strong&gt; — glowing, animated, corner-bracketed boxes projected over real UI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live ROI Dashboard&lt;/strong&gt; — FastAPI web dashboard tracking cloud costs and human hours saved&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fully Local&lt;/strong&gt; — zero outbound network calls during automation; all inference on-device&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Innovation and Differentiation
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Shadow Automator&lt;/th&gt;
&lt;th&gt;Traditional RPA&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;UI Change Tolerance&lt;/td&gt;
&lt;td&gt;✅ Re-grounds from text description&lt;/td&gt;
&lt;td&gt;❌ Breaks on pixel shift&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Privacy&lt;/td&gt;
&lt;td&gt;✅ 100% local, offline PII redaction&lt;/td&gt;
&lt;td&gt;❌ Screenshots sent to cloud&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hardware Cost&lt;/td&gt;
&lt;td&gt;✅ 4–6 GB VRAM consumer GPU&lt;/td&gt;
&lt;td&gt;❌ Expensive cloud APIs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-Healing&lt;/td&gt;
&lt;td&gt;✅ Automated retry loop&lt;/td&gt;
&lt;td&gt;❌ Manual re-recording&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AR Visual Feedback&lt;/td&gt;
&lt;td&gt;✅ Live glowing bounding boxes&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Technical Implementation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Architecture
&lt;/h3&gt;



&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart TD
    A["🔑 Ctrl+Space\nSpotlight UI"] --&amp;gt; B["EventBus\n(core/event_bus.py)"]
    B --&amp;gt; C["Orchestrator\n(core/orchestrator.py)"]
    C --&amp;gt; D["OSSandbox\n(core/os_sandbox.py)\nScreen Grab via mss"]
    D --&amp;gt; E["PII Redactor\n(src/architecture/pii_redaction.py)\nOpenCV + Regex Blur"]
    E --&amp;gt; F["VisionGrounder\n(core/vision_grounding.py)\nPOST /v1/chat/completions"]
    F --&amp;gt; G["llama-server\nQwen2.5-VL-3B Q4_K_M\nlocalhost:8080"]
    G --&amp;gt; H["Bounding Box JSON\n[x1,y1,x2,y2]"]
    H --&amp;gt; I["AR Overlay\n(ui/overlay.py)\nGlowing Box Projection"]
    H --&amp;gt; J["MouseExecutor\n(core/mouse_executor.py)\nHuman-like Trajectory"]
    J --&amp;gt; K["Self-Healing Loop\n(core/self_healing.py)\nMSE State Validation"]
    K --&amp;gt;|"State unchanged"| F
    K --&amp;gt;|"State changed ✅"| L["DB Logger + ROI Calc\n(src/architecture/)"]
    L --&amp;gt; M["Toast Notification\n✅ Done — $1.26 saved"]&lt;/code&gt;&lt;/pre&gt;



&lt;h3&gt;
  
  
  Technology Stack
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI Model&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Qwen2.5-VL-3B-Instruct-Q4_K_M.gguf&lt;/code&gt; via &lt;code&gt;llama-server&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inference Server&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;llama.cpp&lt;/code&gt; &lt;code&gt;llama-server&lt;/code&gt; on &lt;code&gt;localhost:8080&lt;/code&gt; with &lt;code&gt;-ngl 99&lt;/code&gt; GPU offload&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Screen Capture&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;mss&lt;/code&gt; (DPI-aware, multi-monitor)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PII Redaction&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;OpenCV&lt;/code&gt;, &lt;code&gt;re&lt;/code&gt; (Regex), optional &lt;code&gt;pytesseract&lt;/code&gt; OCR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mouse Automation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;PyAutoGUI&lt;/code&gt; with &lt;code&gt;easeOutQuad&lt;/code&gt; smoothing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;UI Framework&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;CustomTkinter&lt;/code&gt; (Spotlight), &lt;code&gt;Tkinter&lt;/code&gt; (AR Overlay), &lt;code&gt;PyQt5&lt;/code&gt; (Toast)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Event System&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Thread-safe singleton Pub/Sub (&lt;code&gt;core/event_bus.py&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Persistence&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;SQLite3&lt;/code&gt; (task logs), &lt;code&gt;FastAPI&lt;/code&gt; + Jinja2 (ROI dashboard)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;State Validation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;NumPy&lt;/code&gt; MSE pixel comparison&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Project Structure
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;shadow-automator/
├── core/
│   ├── event_bus.py          # Thread-safe singleton Pub/Sub event bus
│   ├── orchestrator.py       # 7-step automation pipeline orchestrator
│   ├── llm_client.py         # LLM HTTP client for llama-server
│   ├── vision_grounding.py   # Vision grounding pipeline (POST /v1/chat/completions)
│   ├── os_sandbox.py         # Screen capture + mouse safety bounds
│   ├── mouse_executor.py     # Human-like mouse smoothing + click/type loops
│   └── self_healing.py       # MSE visual diff + automated re-grounding
├── src/architecture/
│   ├── database_logger.py    # SQLite task execution logger
│   ├── roi_calculator.py     # Cloud cost + human labor ROI formulas
│   ├── pii_redaction.py      # Offline PII blurring pipeline
│   └── roi_dashboard.py      # FastAPI + HTML/JS ROI web dashboard
├── ui/
│   ├── spotlight.py          # Ctrl+Space command bar (CustomTkinter)
│   ├── overlay.py            # AR transparent bounding box overlay (Tkinter)
│   └── toast.py              # HUD toast notifications (PyQt5)
├── scripts/
│   ├── start_server.ps1      # llama-server launcher with GPU offload
│   └── download_models.ps1   # GGUF model downloader
├── tests/
│   ├── test_mouse_executor.py
│   └── test_member2_phase4_edge_cases.py
├── run_integration_test.py   # Phase 1+2 integration test
├── main.py                   # Application entry point
├── .env.example              # Required environment variables
└── LICENSE                   # MIT License
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Implementation During the Hackathon
&lt;/h2&gt;

&lt;p&gt;All of the following was built during &lt;strong&gt;Hacktoberfest Hack Day — Coimbatore 2026&lt;/strong&gt;:&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 1 — Environment Setup &amp;amp; Core Modules (Hours 0–3)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Configured &lt;code&gt;llama-server&lt;/code&gt; with GPU offloading (&lt;code&gt;-ngl 99&lt;/code&gt;) and model load verification&lt;/li&gt;
&lt;li&gt;Built screen-grabbing module (&lt;code&gt;mss&lt;/code&gt;) with display coordinate normalizers and mouse safety bounds
&lt;/li&gt;
&lt;li&gt;Built the transparent &lt;code&gt;Ctrl+Space&lt;/code&gt; Spotlight search bar with hotkey listener&lt;/li&gt;
&lt;li&gt;Initialized GitHub repo, MIT License, SQLite logger schema, and ROI calculation formulas&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Phase 2 — AI Integration (Hours 3–7)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Built Vision-Grounding pipeline (&lt;code&gt;POST /v1/chat/completions&lt;/code&gt;) extracting &lt;code&gt;[x1,y1,x2,y2]&lt;/code&gt; JSON&lt;/li&gt;
&lt;li&gt;Implemented mouse smoothing algorithms with human-like &lt;code&gt;easeOutQuad&lt;/code&gt; trajectories&lt;/li&gt;
&lt;li&gt;Built AR-style transparent overlay with animated glowing bounding boxes and corner brackets&lt;/li&gt;
&lt;li&gt;Implemented offline PII Redaction (Regex + OpenCV) and FastAPI ROI dashboard&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Phase 3 — Pipeline Integration &amp;amp; Self-Healing (Hours 7–10)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Optimized inference for sub-500ms responses (temperature, token limits, vision compression)&lt;/li&gt;
&lt;li&gt;Implemented Self-Healing Loop: MSE visual state validation with automatic re-grounding&lt;/li&gt;
&lt;li&gt;Wired Spotlight UI to Orchestrator via Event Bus (step labels, progress bar, toast popups)&lt;/li&gt;
&lt;li&gt;Live ROI calculator hooked into task completion events with analytics state manager&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Phase 4 — Testing &amp;amp; Polish (Hours 10–12)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;End-to-end stress testing of &lt;code&gt;llama-server&lt;/code&gt; under continuous automation loops&lt;/li&gt;
&lt;li&gt;Edge-case testing across Excel, browser, PDF reader for accurate click targeting&lt;/li&gt;
&lt;li&gt;Visual polish: glow animations, PyQt5 toast notifications with timer bars and stacking&lt;/li&gt;
&lt;li&gt;Comprehensive README, architecture diagrams, commit history audit, submission preparation&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Open Source and AI Usage
&lt;/h2&gt;

&lt;h3&gt;
  
  
  AI Model
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Qwen3VL-4B-Instruct (Q4_K_M GGUF):&lt;/strong&gt; The vision-language model powering all UI grounding. Given a screenshot + text description, it returns exact bounding box coordinates. Served locally via &lt;code&gt;llama-server&lt;/code&gt; on &lt;code&gt;localhost:8080&lt;/code&gt;. Download from &lt;a href="https://huggingface.co/ShuaiBai623/Qwen3VL-4B-Instruct-GGUF" rel="noopener noreferrer"&gt;HuggingFace&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Open Source Libraries
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Library&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;th&gt;License&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;llama.cpp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Local model server (OpenAI-compatible API)&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CustomTkinter&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Premium dark-mode UI widgets&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PyQt5&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Toast notification HUD&lt;/td&gt;
&lt;td&gt;GPL / Commercial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mss&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fast DPI-aware screen capture&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PyAutoGUI&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Mouse and keyboard automation&lt;/td&gt;
&lt;td&gt;BSD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OpenCV&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Image processing for PII blurring&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FastAPI&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ROI web dashboard backend&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NumPy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;MSE visual state comparison&lt;/td&gt;
&lt;td&gt;BSD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pynput&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Global hotkey listener&lt;/td&gt;
&lt;td&gt;LGPL&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Setup and Usage
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Windows 10/11&lt;/li&gt;
&lt;li&gt;Python 3.10+&lt;/li&gt;
&lt;li&gt;GPU with &lt;strong&gt;4–6 GB VRAM&lt;/strong&gt; (or CPU with slower inference)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;llama-server&lt;/code&gt; binary from &lt;a href="https://github.com/ggerganov/llama.cpp/releases" rel="noopener noreferrer"&gt;llama.cpp releases&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1. Clone the Repository
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/bavanvrmk/Hacktoberfest-Texperts.git
&lt;span class="nb"&gt;cd &lt;/span&gt;Hacktoberfest-Texperts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Install Python Dependencies
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;customtkinter pyqt5 mss pyautogui opencv-python numpy fastapi uvicorn keyboard jinja2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Download the GGUF Model
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Run the automated download script:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;\scripts\download_models.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or manually download:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Qwen3VL-4B-Instruct-Q4_K_M.gguf&lt;/code&gt; → place in &lt;code&gt;models/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;mmproj-Qwen3VL-4B-Instruct-F16.gguf&lt;/code&gt; → place in &lt;code&gt;models/&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Configure Environment Variables
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
&lt;span class="c"&gt;# Edit .env with your model paths&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LLAMA_SERVER_URL=http://localhost:8080
MODEL_PATH=./models/Qwen3VL-4B-Instruct-Q4_K_M.gguf
MMPROJ_PATH=./models/mmproj-Qwen3VL-4B-Instruct-F16.gguf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. Start the Model Server
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;\scripts\start_server.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# Waits for server readiness before proceeding&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6. Run Shadow Automator
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Full application&lt;/span&gt;
python main.py

&lt;span class="c"&gt;# Integration test (Phases 1+2)&lt;/span&gt;
python run_integration_test.py

&lt;span class="c"&gt;# ROI Dashboard only&lt;/span&gt;
uvicorn src.architecture.roi_dashboard:app &lt;span class="nt"&gt;--host&lt;/span&gt; 127.0.0.1 &lt;span class="nt"&gt;--port&lt;/span&gt; 8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7. Usage
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Press &lt;strong&gt;&lt;code&gt;Ctrl + Space&lt;/code&gt;&lt;/strong&gt; anywhere to open the Spotlight bar&lt;/li&gt;
&lt;li&gt;Type a natural language command: &lt;code&gt;"Click the Save button in the form"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;To launch an app, type &lt;code&gt;Open Spotify&lt;/code&gt; or &lt;code&gt;Open Brave Browser&lt;/code&gt;. The Windows search bar opens, the name is typed, and the top result launches&lt;/li&gt;
&lt;li&gt;To open a file, type &lt;code&gt;Open README.md&lt;/code&gt; or &lt;code&gt;Find the budget file&lt;/code&gt;. File Explorer searches for that name and double-clicks the result&lt;/li&gt;
&lt;li&gt;For other commands, watch the AR glowing box highlight the target element on screen. The system clicks it with a human-like trajectory and validates the state change&lt;/li&gt;
&lt;li&gt;A toast notification confirms completion with ROI savings displayed&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Challenges and Learnings
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Q4_K_M quantization accuracy:&lt;/strong&gt; Published benchmark scores are for full-precision weights; the quantized model's bounding box precision needed calibration via prompt engineering for reliable sub-pixel accuracy&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DPI scaling on Windows:&lt;/strong&gt; DPI-aware capture and click must use the same coordinate space — this was the most common source of misplaced clicks and required explicit DPI normalization&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model inference latency:&lt;/strong&gt; Cold inference exceeds 500ms; persistent server warm-up calls and vision token compression brought P90 latency under 400ms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Thread safety in UI:&lt;/strong&gt; Tkinter and PyQt5 UI updates from background threads caused crashes; routing all UI mutations through &lt;code&gt;.after()&lt;/code&gt; and &lt;code&gt;QTimer.singleShot()&lt;/code&gt; resolved this&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-healing false positives:&lt;/strong&gt; Static screens (e.g. loading spinners) produce near-zero MSE even when state has changed; the 1.5% delta threshold was tuned empirically&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Credits and License
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Credits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Qwen Team&lt;/strong&gt; — Qwen2.5-VL model&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;llama.cpp contributors&lt;/strong&gt; — Local inference server&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CustomTkinter&lt;/strong&gt; — by TomSchimansky&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;INIT CLUB × iDEA CLUB&lt;/strong&gt; — Hacktoberfest Hack Day Coimbatore 2026 organizers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Major League Hacking (MLH)&lt;/strong&gt; — Event platform and challenges&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  License
&lt;/h3&gt;

&lt;p&gt;This project is licensed under the &lt;strong&gt;MIT License&lt;/strong&gt; — see &lt;a href="https://dev.toLICENSE"&gt;LICENSE&lt;/a&gt; for details.&lt;br&gt;&lt;br&gt;
Third-party models retain their own licenses. Qwen2.5-VL is licensed under &lt;a href="https://huggingface.co/Qwen/Qwen2.5-VL-3B-Instruct/blob/main/LICENSE" rel="noopener noreferrer"&gt;Qwen License&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Submission Checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[x] Project title and description added&lt;/li&gt;
&lt;li&gt;[x] All team members listed with contributions&lt;/li&gt;
&lt;li&gt;[x] Problem clearly explained&lt;/li&gt;
&lt;li&gt;[x] Reason for choosing the problem explained&lt;/li&gt;
&lt;li&gt;[x] Solution and key features documented&lt;/li&gt;
&lt;li&gt;[x] Innovation and differentiation explained&lt;/li&gt;
&lt;li&gt;[x] Architecture diagram included (Mermaid)&lt;/li&gt;
&lt;li&gt;[x] Technical implementation documented&lt;/li&gt;
&lt;li&gt;[x] Work completed during the hackathon documented&lt;/li&gt;
&lt;li&gt;[x] Team contributions documented&lt;/li&gt;
&lt;li&gt;[x] AI and open-source components documented with attribution&lt;/li&gt;
&lt;li&gt;[x] Setup and usage instructions complete&lt;/li&gt;
&lt;li&gt;[x] Environment variables documented&lt;/li&gt;
&lt;li&gt;[x] Challenges and learnings documented&lt;/li&gt;
&lt;li&gt;[x] Credits added&lt;/li&gt;
&lt;li&gt;[x] MIT License included&lt;/li&gt;
&lt;li&gt;[x] Repository organized and complete&lt;/li&gt;
&lt;li&gt;[x] No secrets committed&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>opensource</category>
      <category>python</category>
    </item>
  </channel>
</rss>
