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.
- 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
- Download a Release build
- 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-keyCreate 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)
Run the tool to start capturing and uploading screenshots:
.\ImRecallThe 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
Build a native AOT executable for production:
dotnet publish -c Release- Windows 10, 2104 or later
AGPL
Vaguely inspired by OpenRecall and Windows Recall.