A background Windows application that captures computer activity (screenshots, key presses, mouse movements, mouse clicks) for training data collection. All data is stored locally in the user's Documents folder under "ActivityRecorder".
- System tray application for non-intrusive background operation
- Screenshot capture at regular intervals
- Keyboard and mouse event tracking
- Local data storage with JSON serialization
- HTTP upload capability
- Performance monitoring
- HTML viewer for captured data
Download the ZIP file and extract contents. Make sure .NET 9.0 Runtime is installed (minimum .NET 6.0). Finally, run ActivityRecorder.exe. After this, right-click the system tray icon to start/stop recording, upload collected data, and view captured screenshots, etc.
- Windows 10/11
- .NET 9.0 Runtime (minimum .NET 6.0)
- 50MB free disk space
- Administrator privileges (for input monitoring)
- Data Format: Timestamped JSON files and JPEG screenshots
- Win32 Integration: Low-level hooks for keyboard/mouse capture
- Performance:
- Typically 20-80MB RAM. I did some research and found that this is pretty typical of system tray apps (like antivirus icons, sound managers, etc.) However, I did not stress-test extensively and rarely had recording sessions longer than 2min.
- <1% CPU when idle, 2-5% during capture.
- Storage is ~500KB per minute of recording. I found that this varies based on activity level and I imagine it also varies based on screen resolution. These results are based on the performance monitor I implemented. Measurements were taken every 30sec.
- Upload: My app sends HTTP POST requests to a configurable endpoint (currently using webhook.site for demonstration, but this is not scalable).
-
Smart capture for screenshots so we only capture meaningful changes. Currently screenshots are taken every 5 seconds, but to optimise performance even further this should be adaptive and based on activity rather than a fixed interval.
-
Privacy filters for sensitive applications. I didn’t look into this too much, but it may make it easier to get more users/ training data at scale if the application had some sort of privacy layer.
-
Data compression for extended recordings. As I mentioned, most of my tests were under 2min.