Skip to content

screen-toolkit : full screen utility - #221

Merged
ItsLemmy merged 8 commits into
noctalia-dev:mainfrom
Ahmed5Emad:screen-toolkit
Aug 3, 2026
Merged

screen-toolkit : full screen utility #221
ItsLemmy merged 8 commits into
noctalia-dev:mainfrom
Ahmed5Emad:screen-toolkit

Conversation

@Ahmed5Emad

Copy link
Copy Markdown
Contributor

Plugin

  • Id: alexander/screen-toolkit
  • New plugin
  • Update to an existing plugin (version bumped in plugin.toml)

What it does

Screen Toolkit — a Wayland Swiss-army-knife for anything on your screen:

  • Color picker — pick any pixel, copy HEX/RGB/HSL/HSV, with a pick history
  • OCR — select a region, extract text, copy/edit/search/translate/share it
  • QR scanner — read QR codes from any screen region
  • Palette extractor — grab the dominant colors from a selection
  • Google Lens — reverse-image search any region
  • Measure — pixel-perfect size of a selected area
  • Annotate — send a capture to swappy/satty for markup
  • Screen recording — region or fullscreen, GIF or MP4/MOV, with thumbnail preview, size/time info, save/discard, and optional audio
  • Share — upload captures to uguu.se/x02.me and get a link

this a remade of ycf-anon legacy v4 screen-toolkit , sorry thought someone else will do it but I really needed it , it was my fav on v4

External dependencies

slurp, grim, hyprpicker, tesseract, imagemagick, zbar, curl, jq, ffmpeg, ffprobe, translate-shell, swappy/satty, hyprctl, gpu-screen-recorder, wl-screenrec/wf-recorder, pkill, bc. All shelled out via service.luau and the scripts/ helpers; per-tool rationale is in the README.

Testing

  • Tested on Niri
  • Tested on Hyprland
  • Tested on Sway
  • Tested on another compositor:
  • Noctalia version tested against: 5.0.0 beta 6
  • Plugin API level: 9

Screenshots / Videos

screenshot_20260803_002102-region

Checklist

  • The directory name matches the part of id after the / in plugin.toml exactly.
  • It ships plugin.toml, README.md, thumbnail.webp, and translations/en.json.
  • README.md follows the
    README template, documents
    every entry id and dependency, and includes exact panel IPC commands and launcher prefixes where applicable.
  • I created thumbnail.webp with the thumbnail generator.
  • version follows semver and is bumped in this PR; plugin_api is the oldest API level this plugin requires.
  • Every non-English translation in this PR uses a locale supported by Noctalia core, and I can read, write, and
    understand that language well enough to review and maintain it (no unreviewed machine/LLM translations).
  • I did not edit catalog.toml; CI generates it.
  • This PR touches exactly one plugin directory.

Code review attestation

Plugins run as trusted, unsandboxed Luau in the user's session. Confirm:

  • The code is readable and not obfuscated, minified, or generated.
  • It does not download and execute remote code.
  • Every network call, filesystem write, and spawned process is something the description above accounts for.
  • I have the right to publish this code under the license declared in plugin.toml.

@Ahmed5Emad
Ahmed5Emad marked this pull request as draft August 2, 2026 21:45
@Ahmed5Emad
Ahmed5Emad marked this pull request as ready for review August 2, 2026 21:47
@ItsLemmy

ItsLemmy commented Aug 3, 2026

Copy link
Copy Markdown
Contributor
  1. blocking - screen-toolkit/plugin.toml:18

The dependency list omits commands directly invoked by the plugin. These include the recording backends at screen-toolkit/service.luau:544, xdg-open at screen-toolkit/scripts/lens-upload.sh:14, the annotators at screen-toolkit/service.luau:465, hyprctl at screen-toolkit/service.luau:513, and pkill at screen-toolkit/service.luau:701. The gimp fallback at screen-toolkit/service.luau:471 is also absent from both the manifest and plugin README.

Repository policy at README.md:53 requires external commands to appear in dependencies. The incomplete metadata also means the declared dependencies cannot provide any recording backend for a primary advertised feature.

  1. blocking - screen-toolkit/service.luau:694

recordStop calls finalizeRecord at screen-toolkit/service.luau:712 and screen-toolkit/service.luau:714, but the local finalizeRecord declaration does not enter scope until screen-toolkit/service.luau:736. Those references therefore resolve as a global rather than the later local function.

Stopping a recording fails instead of saving when either record-copy-to-clipboard or record-skip-confirmation is enabled.

  1. non-blocking - screen-toolkit/service.luau:788

shareFile indexes SHARE_EXIT_KEYS at screen-toolkit/service.luau:799, before the local table is declared at screen-toolkit/service.luau:814. The reference resolves as a nil global, so failed uploads raise a callback error instead of displaying the intended translated failure message.

  1. non-blocking - screen-toolkit/README.md:150

The documented recordSaveMp4 and recordSaveGif IPC events are not present in the handler table at screen-toolkit/service.luau:876. The implementation exposes only recordSave at screen-toolkit/service.luau:891, so both documented commands are ignored and cannot save a recording.

@ItsLemmy
ItsLemmy marked this pull request as draft August 3, 2026 03:10
@Ahmed5Emad
Ahmed5Emad marked this pull request as ready for review August 3, 2026 09:44
@ItsLemmy
ItsLemmy merged commit 6363173 into noctalia-dev:main Aug 3, 2026
1 check passed
@Ahmed5Emad
Ahmed5Emad deleted the screen-toolkit branch August 3, 2026 12:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants