Screen Toolkit
A set of screen tools: color picker, annotate, record, pin, OCR, QR scanner, palette, measure, and webcam mirror (deps: README).
About
Screen Toolkit
A unified collection of screen utilities for the Noctalia Shell, designed to streamline screenshotting, annotation, recording, and visual inspection workflows.
Overview
Screen Toolkit provides a single integrated panel for advanced screen interaction tools, including capture, annotation, OCR, recording, and color analysis.
Included Tools
| 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. |
Color Picker + Annotation
You can use the color picker tool to select any color, and it will be automatically applied to annotations.
Annotation โ Shortcuts
- Ctrl + C: Copy current annotation to clipboard and close overlay.
Annotation โ Sharing
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).
Recording UI behavior
When recording is active, the plugin icon shows a red pulsing dot. Clicking the icon stops the recording.
Webcam Mirror Features
- Take screenshots from mirror view
- Automatically pin screenshots on screen (pin/unpin button)
- Record video from mirror overlay
- Optional microphone audio recording (on/off)
Requirements
Core Dependencies
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)
Color Picker
hyprpickerโ primary picker (Hyprland / Niri compatible)- Zoom lens, live preview, multiple formats
- Fallback:
slurp+grim
Optional Features
translate-shellโ OCR translationgifskiโ high-quality GIF encodingzenity/kdialogโ fallback for Pin Image/Video
Installation
Arch Linux
sudo pacman -S grim slurp hyprpicker wl-clipboard tesseract tesseract-data-eng imagemagick zbar curl translate-shell ffmpeg jq python python-gobject xdg-desktop-portal
yay -S gifski wl-screenrec-git
Debian / Ubuntu
sudo apt install grim slurp wl-clipboard tesseract-ocr tesseract-ocr-eng imagemagick zbar-tools curl translate-shell ffmpeg jq python3 python3-gi xdg-desktop-portal
cargo install gifski
Fedora
sudo 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 gifski
NixOS
environment.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" ];
Structure:
Screen-Toolkit/
โโโ i18n/
โ โโโ en.json
โ โโโ fr.json
โ โโโ tr.json
โ
โโโ scripts/
โ โโโ annotate.sh
โ โโโ capture.sh
| โโโ color-picker.sh
โ โโโ lens-upload.sh
| โโโ measure.sh
| โโโ mirror-record.sh
| โโโ mirror-screenshot.sh
โ โโโ ocr.sh
โ โโโ pick-file.py
โ โโโ pick-file.sh
โ โโโ record.sh
โ โโโ share-upload.sh
โโโ overlays/
โ โโโ Annotate.qml
โ โโโ Mirror.qml
โ โโโ Record.qml
โ โโโ Measure.qml
โ โโโ Pin.qml
โ โโโ RegionSelector.qml
โโโ tools/
โ โโโ ColorPicker.qml
โ โโโ Lens.qml
โ โโโ Ocr.qml
โ โโโ Palette.qml
โ โโโ Qr.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
Compatibility
| 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 |
Configuration
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 |
| Search Engine URL | URL used when searching OCR text. Leave empty to use Google. Examples: https://duckduckgo.com/?q= or https://search.brave.com/search?q= |
Google (default) |
Files automatically receive appropriate extensions (.png, .mp4, .gif).
IPC Commands
Control Screen Toolkit via scripts or keybindings:
qs -c noctalia-shell ipc call plugin:screen-toolkit <command>
Replace <command> with any of the following:
General
| Command | Description |
|---|---|
toggle |
Open or close the main panel |
Annotation
| Command | Description |
|---|---|
annotate |
Annotate a selected region |
annotateFullscreen |
Annotate full screen |
annotateWindow |
Annotate active window (Hyprland only) |
Pin
| Command | Description |
|---|---|
pin |
Pin a selected region |
pinImage |
Pin an existing image or video |
Recording
| 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 |
Mirror
| Command | Description |
|---|---|
mirror |
Open webcam mirror (supports capture) |
Utilities
| 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 |
Troubleshooting
File picker does not open (Pin Image/Video)
Ensure:
xdg-desktop-portalis installed and running- A fallback picker is available (
zenityorkdialog)
Recording does not work
Check:
wl-screenrecorwf-recorderis installed- Your compositor supports screen capture
OCR not working
Ensure:
tesseractis installed- Language packs are installed (e.g.
tesseract-data-eng)
GIF issues
Install:
gifskifor improved encoding quality
QR scanner not detecting codes
Ensure:
zbaris installed- The region has sufficient contrast and clarity
License
MIT License
Contributing
Contributions, issues, and feature requests are welcome.
Repository: https://github.com/noctalia-dev/noctalia-plugins