Hyprshot-ocr is a fork of hyprshot, an utility to easily take screenshots in Hyprland, that adds easyocr text recognition option on top and auto-labeling based on hyprctl client title/class
It allows taking screenshots of windows, regions and monitors which are saved to a folder of your choosing and copied to your clipboard. It can also OCR a selected region and copy the extracted text to your clipboard.
- hyprland (this one should be obvious)
- jq (to parse and manipulate json)
- grim (to take the screenshot)
- slurp (to select what to screenshot)
- wl-clipboard (to copy screenshot to clipboard)
- libnotify (to get notified when a screenshot is saved)
- hyprpicker (to freeze the screen contents with the
--freezeflag) - easyocr for Python together with
python3(for theocrmode)
To install manually, simply clone this repo and copy/symlink the hyprshot script to a folder in your PATH:
$ git clone https://github.com/makerze/Hyprshot-ocr.git Hyprshot
$ ln -s $(pwd)/Hyprshot/hyprshot $HOME/.local/bin
$ chmod +x Hyprshot/hyprshotYou can get help on how to use hyprshot-ocr by executing:
$ hyprshot -hThe simplest usage of Hyprshot-ocr is executing it with one of the available modes.
For example, to screenshot an open window:
$ hyprshot -m windowYou can also skip saving the screenshot to a file, copying it only to the clipboard:
$ hyprshot -m output --clipboard-onlyTo append a descriptive label to the saved filename:
$ hyprshot -m window --labelThis keeps the usual timestamped filename and adds a context label such as the window title or visible client classes before the file extension.
To extract text from a selected region and copy it to the clipboard:
$ hyprshot -m ocrYou can add the various modes as keybindings in your Hyprland config like so:
# ~/.config/hypr/hyprland.conf
...
# Screenshot a window
bind = $mainMod, PRINT, exec, hyprshot -m window
# Screenshot a window with a label in the filename
bind = $mainMod SHIFT, PRINT, exec, hyprshot -m window --label
# Screenshot a monitor
bind = , PRINT, exec, hyprshot -m output
# Screenshot a region
bind = $shiftMod, PRINT, exec, hyprshot -m region
# OCR a region
bind = $ctrlMod, PRINT, exec, hyprshot -m ocr
This would allow you to:
Take a screenshot of a window by using MOD + PrintScr
Take a screenshot of a window with a labeled filename by using MOD + SHIFT + PrintScr
Take a screenshot of a monitor by using PrintScr
Take a screenshot of a region by using MOD + Shift + PrintScr
Extract text from a region by using CTRL + PrintScr
You can choose which directory Hyprshot will save screenshots in by setting an HYPRSHOT_DIR environment variable to your preferred location.
If HYPRSHOT_DIR is not set, Hyprshot will attempt to save to XDG_PICTURES_DIR and will further fallback to your home directory if this is also not available.
When you pass --label, Hyprshot appends an extra label to the filename:
window: the captured client title, shortened and sanitized for filenamesoutput: all visible client classes on the captured output, deduplicated and shortenedregion: the title of the client under the selected region, using the region center as the primary match
hyprshot -m ocr defaults to EasyOCR's en language model.
To use a different language, pass --ocr-lang. The provided value replaces the default instead of being added to it:
hyprshot -m ocr --ocr-lang pt