Skip to content

uwx/ImRecall

Repository files navigation

ImRecall

A .NET tool that automatically captures Windows screenshots every 3 seconds and uploads them to Immich, a self-hosted photo and video backup solution.

This lets you take advantage of Immich's powerful search (and newly added OCR) for your screenshots.

Features

  • Captures screenshots from all connected displays using Windows Graphics Capture API (virtually instant)
  • Only uploads visually different screenshots
  • HDR to SDR tonemapping for proper color representation (no washed out colors)
  • Organizes screenshots by screen name and active window title
  • Automatically uploads to Immich in an "ImRecall" titled album

Installation

  1. Download a Release build
  2. Set up Immich authentication:

Either authenticate with Immich CLI (pnpm dlx @immich/cli login <url> <key>) or create a YAML file at ~/.config/immich/auth.yml:

url: https://your-immich-instance.com
key: your-api-key

Configuration

Create an appsettings.json file in the same directory as the executable to configure ImRecall:

{
  "ImRecall": {
    "EnableUpload": true,
    "AlbumName": "ImRecall",
    "ArchiveUploads": true,
    
    // in seconds, how often to capture screenshots (default: 3)
    "ScreenshotInterval": 3,

    // Png -> Terrible file size, great compatibility, lossless
    // Jpeg -> Better file size, great compatibility, very lossy
    // WebP -> Better file size, great compatibility, lossy or lossless
    // Avif -> Great file size, decent compatibility, lossy or lossless, worse encode time
    // JpegXL -> Great file size, terrible compatibility, lossy or lossless, great encode time
    "Encoder": "JpegXL",

    // Set to 100 for AVIF lossless. Note that AVIF lossless greatly increases encode time. For JpegXL, you usually want
    // to also set JxlLossless.
    "Quality": 90,

    // Range 1-9, less is faster to encode
    "JxlEffort": 2,
    
    // Range 0-4, less is slower to decode
    "JxlDecodeSpeed": 0,
    
    // Enables lossless mode. Also need to set quality to 100.
    "JxlLossless": false,
  }
}

Configuration options:

  • EnableUpload - Whether to upload screenshots to Immich (default: true)
  • AlbumName - Name of the Immich album to upload to (default: "ImRecall")
  • ArchiveUploads - Whether to mark uploaded assets as archived in Immich (default: true)

Usage

Basic Usage

Run the tool to start capturing and uploading screenshots:

.\ImRecall

The tool will:

  • Capture screenshots from all displays every 3 seconds
  • Skip duplicate screenshots using similarity detection
  • Upload new screenshots to Immich with filename format: [DisplayName]-[WindowTitle]-[Timestamp].png

Publishing

Build a native AOT executable for production:

dotnet publish -c Release

Requirements

  • Windows 10, 2104 or later

License

AGPL

Credits

Vaguely inspired by OpenRecall and Windows Recall.

About

poor man's copilot recall

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages