A unified collection of screen utilities for the Noctalia Shell, designed to streamline screenshotting, annotation, recording, and visual inspection workflows.
Screen Toolkit provides a single integrated panel for advanced screen interaction tools, including capture, annotation, OCR, recording, and color analysis.
| Tool | Description |
|---|---|
| Color Picker | Inspect any pixel and retrieve HEX, RGB, HSV, and HSL values instantly. |
| Annotate | Draw on screenshots using pens, highlights, arrows, shapes, text, and blur effects. |
| Measure | Measure precise pixel distances using on-screen line tools. Hold Alt while dragging to constrain to horizontal or vertical axis. |
| Pin | Pin screenshots or local media as floating overlays on the screen. |
| Palette Extraction | Extract dominant color palettes from selected regions. |
| OCR | Extract text from images with multilingual support and translation. |
| QR Scanner | Detect and decode QR codes and barcodes from screen regions. |
| Google Lens | Send a selected region to Google Lens for reverse image search. |
| Screen Recorder | Record fullscreen or selected regions as MP4 or GIF (with optional audio). |
| Webcam Mirror | Floating webcam preview with resizing, flipping, and capture support. |
You can use the color picker tool to select any color, and it will be automatically applied to annotations.
- Ctrl + C: Copy current annotation to clipboard and close overlay.
You can quickly upload screenshots and get a shareable link.
- Default (no setup): uses https://uguu.se/ β links expire after ~3 hours
- Want more control: get a free API key from https://up.x02.me/ to increase upload limits and choose expiry from settings:
1h | 1d | 7d | 30d | permanent(default: 7d).
When recording is active, the plugin icon shows a red pulsing dot. Clicking the icon stops the recording.
- Take screenshots from mirror view
- Automatically pin screenshots on screen (pin/unpin button)
- Record video from mirror overlay
- Optional microphone audio recording (on/off)
grimβ screenshotsslurpβ region selectionwl-clipboardβ clipboard integrationtesseractβ OCR engineimagemagickβ image processingzbarβ QR/barcode scanningcurlβ network requestsffmpegβ video processingjqβ JSON parsingwl-screenrec(preferred) orwf-recorder(fallback)python3+ PyGObject (system file picker support)xdg-desktop-portal(File picker for Pin Image/Video)
hyprpickerβ primary picker (Hyprland / Niri compatible)- Zoom lens, live preview, multiple formats
- Fallback:
slurp+grim
translate-shellβ OCR translationgifskiβ high-quality GIF encodingzenity/kdialogβ fallback for Pin Image/Video
sudo pacman -S grim slurp hyprpicker wl-clipboard tesseract tesseract-data-eng imagemagick zbar curl translate-shell ffmpeg jq wl-screenrec python python-gobject xdg-desktop-portal
yay -S gifskisudo apt install grim slurp hyprpicker wl-clipboard tesseract-ocr tesseract-ocr-eng imagemagick zbar-tools curl translate-shell ffmpeg jq python3 python3-gi xdg-desktop-portal
cargo install gifskisudo dnf install grim slurp hyprpicker wl-clipboard tesseract tesseract-langpack-eng ImageMagick zbar curl translate-shell ffmpeg jq wl-screenrec python3 python3-gobject xdg-desktop-portal
cargo install gifskienvironment.systemPackages = with pkgs; [
grim slurp hyprpicker wl-clipboard tesseract imagemagick zbar curl
translate-shell wl-screenrec ffmpeg gifski jq
python3 python3Packages.pygobject xdg-desktop-portal
];Optional languages for OCR:
# programs.tesseract.languages = [ "eng" "deu" "fra" ];Screen-Toolkit/
βββ i18n/
β βββ en.json
β βββ fr.json
β βββ tr.json
β
βββ scripts/
β βββ annotate.sh
β βββ color-picker.sh
β βββ lens-upload.sh
β βββ ocr.sh
β βββ pick-file.sh
β βββ pick-file.py
β βββ share-upload.sh
βββ overlays/
β βββ Annotate.qml
β βββ Mirror.qml
β βββ Record.qml
β βββ Measure.qml
β βββ Pin.qml
β βββ RegionSelector.qml
β
βββ widgets/
β βββ ResultColor.qml
β βββ ResultOcr.qml
β βββ ResultPalette.qml
β βββ ResultQr.qml
β
βββ shaders/
β βββ dimming.frag
β βββ dimming.frag.qsb
β
βββ utils/
β βββ utils.js
β
βββ Main.qml
βββ BarWidget.qml
βββ ControlCenterWidget.qml
βββ Panel.qml
βββ Settings.qml
βββ manifest.json
βββ README.md
| Compositor | Status | Notes |
|---|---|---|
| Hyprland | Fully supported | All features enabled |
| Niri | Fully supported | Active window annotation is disabled (Niri API limitation) |
| Other Wayland compositors | Partial support | Feature availability may vary |
All settings are configurable via the plugin settings panel.
| Setting | Description | Default |
|---|---|---|
| Screenshot Path | Directory for screenshots and annotations | ~/Pictures/Screenshots |
| Video Path | Directory for recordings | ~/Videos |
| Filename Format | Timestamp template for generated files | %Y-%m-%d_%H-%M-%S |
| x0.2 API Key | API key for uploading and sharing captures | β |
| x0.2 Link Expiry | How long shared links remain valid | 7d |
| Skip Share Popover | Share immediately without confirmation popup | false |
| Skip Recording Confirmation | Start recording immediately | false |
| Copy Recording to Clipboard | Copy output after recording | false |
| GIF Max Seconds | Maximum GIF duration | 30 |
Files automatically receive appropriate extensions (.png, .mp4, .gif).
Control Screen Toolkit via scripts or keybindings:
qs -c noctalia-shell ipc call plugin:screen-toolkit <command>Replace <command> with any of the following:
| Command | Description |
|---|---|
toggle |
Open or close the main panel |
| Command | Description |
|---|---|
annotate |
Annotate a selected region |
annotateFullscreen |
Annotate full screen |
annotateWindow |
Annotate active window (Hyprland only) |
| Command | Description |
|---|---|
pin |
Pin a selected region |
pinImage |
Pin an existing image or video |
| Command | Description |
|---|---|
record |
Record region as GIF |
recordMp4 |
Record region as MP4 |
recordFullscreen |
Record fullscreen as GIF |
recordFullscreenMp4 |
Record fullscreen as MP4 |
recordStop |
Stop recording |
| Command | Description |
|---|---|
mirror |
Open webcam mirror (supports capture) |
| Command | Description |
|---|---|
colorPicker |
Pick pixel color |
ocr |
Extract text via OCR |
qr |
Scan QR/barcodes |
palette |
Extract color palette |
lens |
Send region to Google Lens |
measure |
Measure screen distances |
Ensure:
xdg-desktop-portalis installed and running- A fallback picker is available (
zenityorkdialog)
Check:
wl-screenrecorwf-recorderis installed- Your compositor supports screen capture
Ensure:
tesseractis installed- Language packs are installed (e.g.
tesseract-data-eng)
Install:
gifskifor improved encoding quality
Ensure:
zbaris installed- The region has sufficient contrast and clarity
MIT License
Contributions, issues, and feature requests are welcome.





