Skip to content

ads2280/local-activity-recorder

Repository files navigation

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.

Releases

No releases published

Packages

No packages published

Languages