A simple web-based remote desktop application that allows you to control your computer through a browser. This project was done to learn basic webdev with Flask.
- Real-time screen streaming
- Mouse and keyboard control
- File upload to server
- Web-based interface
The application follows a three-tier architecture:
- Client Browser: HTML/CSS/JS interface for user interaction
- Flask Server: Python backend handling routing, capture, and input control
- Host System: Screen capture (mss) and input control (pyautogui)
- Python 3.x
- Works on Windows, macOS, and Linux
Note: The current
requirements.txtincludes macOS-specific dependencies (pyobjc). For Windows/Linux, you may need to remove these lines and install only the core dependencies (Flask,mss,Pillow,pyautogui).
- Clone the repository
- Install dependencies:
pip install -r requirements.txt- Start the server:
python run_server.py- Open your browser and navigate to:
http://127.0.0.1:5001
Edit server/config.py to customize:
HOST- Server host (use0.0.0.0for network access)PORT- Server port (default: 5001)FPS- Stream frame rate (default: 60)IMAGE_QUALITY- JPEG quality (default: 30)SCALE- Screen scale factor (default: 0.5)UPLOAD_FOLDER- File upload destination (default: ~/Downloads)
remote-access/
├── client/ # Frontend files (HTML, CSS, JS)
├── server/ # Backend Flask application
├── run_server.py # Server entry point
├── architecture.png # Architecture image
├── LICENSE # License file
├── README.md # README file
├── .gitignore # gitignore file
└── requirements.txt # Python dependencies
- Flask: Web framework
- mss: Fast screen capture
- Pillow (PIL): Image processing
- pyautogui: Mouse/keyboard control
- Vanilla JavaScript: No frameworks
- CSS3: Modern styling with Inter font
- HTML5: Semantic markup
- HTTP/1.1: Request/response
- Multipart JPEG: Video streaming
- JSON: API payloads
In order to turn this into a fully fledged working app, there would need to be a centralized server running a web app which 2 devices can log on to and authenticate with each other to view screens/transfer files etc. This can be done using flask auth and instead of running a server on the host system, the central server would run the server to which both the host and user can connect to.
