# Activity Recorder 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". ## Features - 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 ## Building and Running 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. ## Requirements - Windows 10/11 - .NET 9.0 Runtime (minimum .NET 6.0) - 50MB free disk space - Administrator privileges (for input monitoring) ## Details and performance - 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). ## If I had more time - 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.