An open-source alternative to Microsoft's "Recall" feature on Windows. Works on both Windows and Linux, with a "not official" macOS support.
Dependencies
Librecall requires 3 python dependencies to run:
- customtkinter
- pillow
- cryptography
Using pip
, you can download all dependencies with either python -m pip install -r requirements.txt
, or python -m pip install customtkinter pillow
On Linux, you are (as always) recommended to use your package manager for system-wide packages.
For Arch Linux you can download all dependencies with sudo pacman -S python-pillow && yay -S python-customtkinter python-cryptography
.
For other linux distributions.. use your distros package manager
Now, for the actual program, you can download it with either one of these options:
-
Download a premade bin:
- For Windows, a premade executable can be found in the releases tab. This is unsigned code, which may prompt Windows Defender and its Smart Screen filter. You can, but arent forced to, press "More info" and click "Run anyways". If you do not trust this, you can build the project from source with the steps below.
- For Linux (x86_64), a premade binary can be found in the releases tab. If it doesnt work, or you dont trust it, you can build the project from source with the steps below, or use it in raw source code format (via point
3)
) - If your operating system isnt one of the 2 above, you need to use another method below.
-
Build from source:
To build it from source, you will needpyinstaller
(or some other Python packaging tools).
To downloadpyinstaller
, you can either download it withpip
-python -m pip install pyinstaller
, or use your python package manager (conda, poetry, ...). For Linux, its recommended to download the package from your distributions package manager. For Arch Linux, you use the AUR with an AUR helper. With yay, you useyay -S pyinstaller
Now that you have pyinstaller, you need to get the location of your "customtkinter" and "PIL" package. This is going to be in yoursite-packages
folder under your python install. Common locations (by which i mean "my locations") are:
On Windows:C:\Users\[USERNAME]\AppData\Local\Programs\Python\Python[VERSION]\Lib\site-packages\[PACKAGE]
- use the full path, not%localappdata%
On Linux (system wide):/usr/lib/python[VERSION]/site-packages/[PACKAGE]
don't blindly copy this, verify this for your environment.
Universally, you can get executepython -c "import PACKAGE; import os; print(os.path.dirname(PACKAGE.__file__))"
in your terminal. it will print the path for you.
Now that you got your CTK and PIL paths, in your terminal, navigate to the project files and run, with your specified package paths instead of their placeholders:
On Windows:pyinstaller -w -y --clean -n Librecall -D -i img/icon.ico --add-data img;img --add-data CTK_PATH:customtkinter --add-data PIL_PATH:PIL librecall.py
On Linux:pyinstaller -y --clean -n Librecall -D --add-data img:img --add-data CTK_PATH:customtkinter --add-data PIL_PATH:PIL librecall.py
(Troubleshooting) If you downloaded pyinstaller (via pip), but getting an error that pyinstaller wasnt found, either add it to your PATH, or use
python -m PyInstaller
instead ofpyinstaller
(Info) Do not use the--onefile
flag, as pyinstaller will create a folder in your temp folder each time you run the program. This will make both accessing images (within the ui) and keeping configurations impossible.
(Second variant) If you dont want to do all of this, try running the build script withpython build.py
, should work for most cases.
Now, navigate to the newly createddist/Librecall
folder and use theLibrecall
orLibrecall.exe
(for Windows) file.
Keep the original file in the location that its in, and only create shortcuts/symlinks.
To access the librecall UI, copy the shortcut, go into its properties (Alt + Enter) and in its destination, add the-c
flag.
If you are on Linux, and on a DE that doesnt have the option to do so automatically, create wrapper that runs thelibrecall
bin with the "-c" flag, and make a symlink to that (or, run theuisymlink.py
script, that should do everything for you).\ -
Download (and run) via CLI. minimal, but works:
git clone https://github.com/xeaft/librecall
cd librecall
python librecall.py
(-c)
Linux:
If you are using a distribution using the systemd
init system, you can run python autorun.py
to automatically create and use librecall every time.
To remove the autorun script, you can either
- run the
autorun.py
script with the--remove
(or-r
, for short) flag =>python autorun.py -r
. this will stop and disable the service, and remove the .service file from your system. - manually stop the service via
systemctl --user stop librecall
. To disable it, so it doesnt run again, you use thesystemctl --user disable librecall
For other operating systems... you need to make your own form of an autorun.\
Windows
For windows, you will need to use an executable. Check Download (1)
and either download or build your executable.
Now you have one of 2 options, either manully setup autostart with the steps below:
- Create a shortcut for that executable
- Open the properties of the shortcut
- Add the
-s
flag to the destination - Open the
%appdata%\Microsoft\Windows\Start Menu\Programs\Startup
folder - Move the shortcut to that folder
Or simply, run the autorun.py
script with python autorun.py
Usage:
Run librecall.py
with either -c
or --config
to access the settings menu (that would be python librecall.py -c
.)
To view the timeline, use python librecall.py -c
and press the View timeline
button on the bottom
Additional info:
All images are in a png
format.
All screenshots are saved in a sqlite3 database (images.db
). by default, the db is located under the data
folder under the original directory. this can be changed inside of the config menu.
Images can be encrypted with a password if you want them to be.
If you forget your password, there's (or shouldn't, at least) no way to get your data.
Your unique salt and a key used for verifying your password is stored in your config file (data/settings.json). If you delete that file, you will not be able to decrypt your data.
Currently supporting:
- Windows: default PIL screenshot (Tested on Windows 10 22H2)
- MacOS: default PIL screenshot (Not tested)
- Linux (Tested on Arch Linux -
6.10.3-arch1-2
):- X11: default PIL screenshot (Tested on Xfce4, i3wm (i3), KDE Plasma, and a lot more from the Arch DE wiki (this didnt go really well))
- Wayland (Tested on KDE Plasma, GNOME and a few (a whole 2) WMs.):
For wayland, not all tools work under all compositors, but all mentioned compositors are supported, you just need to choose the right tool (and set it up correctly).
Your compositor not being mentioned doesnt mean it won't work, but dont be surprised if it doesnt.
If you have a screenshotting tool thats not supported and can provide raw data of a full monitor screenshot, feel free to open an issue or a pull request with that tool.
For xorg/x11, the default option should work pretty much everywhere.