Omahub
← All plugins
J

Textify

by jltrench

Private, local OCR for any region of your screen. Extract text and copy it instantly.

Security review

Review recommended · 1 finding

Deterministic scan — not a security guarantee

Low
Risk level
Low
Analyzed commit
1d6f66d
Scanned
1 month ago

Flagged patterns appear only in documentation files (README / docs) — descriptive examples, not executable code.

  • Docs external_hosts README.md:59

    Downloads or connects to an external HTTP(S) host.

    git clone https://github.com/jltrench/textify.git

Automated analysis only — not a security guarantee.

AI advisory review

No obvious issues detected

Language-model assessment · ~deepseek/deepseek-v4-flash-latest — advisory only

None
AI risk level
None
Recommendation
install
Model
~deepseek/deepseek-v4-flash-latest
Analyzed commit
1d6f66d
Reviewed
1 month ago

Textify is a local OCR bar widget whose Rust engine invokes documented local tools with fixed argument lists, uses private temp directories, and performs no network communication or privileged operations. The only deterministic finding is a `git clone` command in the README, which is documentation and not executed by the plugin. No obfuscated code, hidden persistence, credential theft, or destructive install behavior was found.

  • The deterministic scan flagged README.md:59 for an external host, but that line is a documentation-only install instruction (`git clone`) and is not part of the plugin's runtime code.
  • The plugin captures screen regions and copies OCR results to the clipboard; this is the documented and user-initiated purpose of the widget, not hidden behavior.
How this check works

This review combines the deterministic scan (the rule-based results above) with an independent look at the plugin's code by a language model. The model reads a trimmed sample of the repository's files, the manifest, and the README, then gives a plain-language risk level and a recommendation: install (no notable danger), review (look closer first), or avoid (clearly dangerous).

It runs on the same analyzed commit as the deterministic scan and is strictly advisory — it is not a security guarantee and never blocks a plugin by itself. A human moderator still reviews plugins before they are listed.

AI advisory only — automated analysis, not a security guarantee.

Install
$ omarchy plugin add https://github.com/jltrench/textify --enable
Productivity #bar #quickshell

Textify

License: MIT Version

Native Omarchy Quickshell bar widget to extract text from any region of your screen and copy it to the clipboard. Select a region (or grab the whole screen), and the text lands on your clipboard instantly — no network, no cloud, fully local.

Textify preview — local OCR panel with capture, confidence, copy, and history

Powered by tesseract with slurp/grim (Wayland capture) and ImageMagick (pre-processing).

Features

  • Select region — click the icon, drag a box over any text, done.
  • Full screen — grab everything on screen in one shot.
  • Auto-copy — extracted text is copied to the clipboard immediately.
  • History — the last 12 extractions are kept in the panel; click one to copy it again.
  • Local & private — everything runs on your machine. No API keys, no uploads, no network.
  • Rust engine — a small textify CLI (serde, zero heavyweight deps) that orchestrates the pipeline with fixed argument lists (no shell), temp files in private directories under $XDG_RUNTIME_DIR, and cleanup on every exit path.

Requirements

  • Omarchy 4 with its Quickshell bar
  • slurp, grim (Wayland screen capture)
  • tesseract (OCR engine) with at least the eng language data
  • identify (ImageMagick, required to enforce image bounds)
  • magick (ImageMagick, optional pre-processing — falls back to the validated raw image)
  • wl-copy (Wayland clipboard)

All of these are present on a standard Omarchy install. For other languages, install the matching tesseract data, e.g. tesseract-ocr-por for Portuguese.

Install

omarchy plugin add https://github.com/jltrench/textify.git --enable
cd ~/.config/omarchy/plugins/jltrench.textify && make install
omarchy bar move jltrench.textify --section right

The marketplace install clones the repository; make install builds the Rust binary into the plugin folder (requires cargo/rustc at build time only). No elevated privileges are required; everything lives in ~/.config/omarchy/plugins/jltrench.textify/.

From this repository

git clone https://github.com/jltrench/textify.git
cd textify
make install                                  # builds native/ + installs plugin
omarchy plugin enable jltrench.textify right   # adds the widget to the bar

Updating / removing

git pull && make install      # update in place
make remove                   # uninstall

Usage

Click the OCR icon in the bar:

Control Action
Select region Drag a box over text to extract it
Full screen Extract text from the whole screen
Copy again Re-copy the last extraction
History row Click to copy that extraction again
Esc Close the panel

CLI

The same engine is usable standalone:

~/.config/omarchy/plugins/jltrench.textify/bin/textify region --json
~/.config/omarchy/plugins/jltrench.textify/bin/textify full
~/.config/omarchy/plugins/jltrench.textify/bin/textify file ~/Pictures/photo.png
~/.config/omarchy/plugins/jltrench.textify/bin/textify langs
printf '%s' "some text" | ~/.config/omarchy/plugins/jltrench.textify/bin/textify copy

--json prints {"text": "...", "lang": "eng", "copied": true, "source": "screen"}.

Security and privacy

Omarchy plugins run with the current user's permissions. Textify does not request elevated privileges, open network connections, upload images, or invoke a shell. It launches only the documented local tools above, plus hyprctl/fcitx5-remote for best-effort language detection. Screen captures and intermediate images are kept in private temporary directories and removed when the OCR process exits. Clipboard text is sent to wl-copy over stdin, never as a process argument. The engine enforces bounded runtimes and output, a 32 KiB text/result limit, a 64 MiB image limit, 10,000 px dimensions, 50 megapixels, bounded language/region/path fields, and ImageMagick plus OS resource limits. The panel also bounds process output and history before QML retains it. The optional file command reads only the path explicitly supplied by the user.

Development

make build       # cargo build --release
make test        # cargo unit tests
make lint        # qmllint against the installed shell imports
make validate    # manifest validation via omarchy plugin validate

Layout:

manifest.json     Plugin manifest (marketplace contract)
BarWidget.qml     Bar entry point (SVG icon recolored per theme)
Panel.qml         OCR panel state + processes + history
icon.svg          Bar icon (Phosphor scan icon)
native/src/main.rs   CLI dispatch
native/src/engine.rs  slurp/grim/magick/tesseract/wl-copy pipeline

Saved changes under ~/.config/omarchy/plugins/ hot-reload; force with omarchy-shell shell rescanPlugins. If a change refuses to apply (stale QML disk cache), run omarchy restart shell. Inspect runtime errors with qs log -p "$OMARCHY_PATH/shell" --tail 100.

Acknowledgements

  • tesseract for OCR.
  • slurp / grim for Wayland capture.
  • ImageMagick for image pre-processing.
  • The Omarchy shell kit and its built-in plugins, used as reference for the panel lifecycle (Panel, KeyboardPanel, WidgetButton).
  • Icon: Phosphor Icons (MIT).

License

MIT.