mirror of
https://github.com/thesleepingsage/hypr-lens.git
synced 2026-11-01 06:56:42 +01:00
Replace the manual monitorOrder config array (a debugging artifact from a temporarily rearranged setup) with automatic sorting by Hyprland layout position (ascending x, ties by y). The list is rebuilt on every overlay open, screen hotplug, and shortcut re-trigger, with refreshMonitors() and an unpopulated-monitor (lastIpcObject) fallback to ShellScreen position. Removes the regex JSONC parse path and the monitorOrder key from the config schema and defaults.
10 KiB
10 KiB
Changelog
All notable changes to hypr-lens are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Conventional Commits.
Unreleased
Added
- Crop Mode - Press
C(or the new Instant/Crop toolbar tabs) to switch the region selector into Crop mode: releasing a selection opens an adjustable editor (8 resize handles + interior move, min-size and screen clamping, live size label) instead of capturing immediately; Enter/Space or the confirm button captures, Escape returns to drawing. Crop implies rectangles: entering it from Freehand auto-swaps to Rect (Freehand is unselectable while Crop is active). Works for screenshots and recording alike; configurable viaregionSelector.crop.minSize/handleSize RHotkey - Toggles Rect/Freehand selection mode inside the overlay (the "Circle" tab is now labeled Freehand; config keys keep theircirclenames)- Freehand True-Shape Capture - Freehand selections now capture only the pixels inside the drawn loop (transparent outside, via an ImageMagick polygon mask). OCR flattens onto white; recording and the crop editor remain rectangular (true-shape applies to Instant-mode freehand only)
regionSelector.dragThresholdConfig Key - Pixel dead-zone (default6) for the region selector's click/drag discriminator;0disables it, restoring the previous per-pixel sensitivity (circle mode always uses0— every circle gesture is the drawn shape)
Changed
- Region Selector Click/Drag Dead-Zone - Press-to-release movements within
dragThreshold(default6px) are now treated as clicks that select the whole hovered window/region, instead of snipping a tiny drag rectangle. This is a user-visible behavior change: if you relied on tiny deliberate drags to grab very small rectangles, lower or zero the threshold - Region Selector Empty-Space Clicks - A click (or sub-threshold micro-drag) over empty space with no targetable region now dismisses the overlay cleanly instead of capturing a sliver
- Monitor Button Order - The toolbar's monitor capture buttons now follow left-to-right layout order automatically (ascending x, ties broken top-to-bottom, from Hyprland logical coordinates), re-read every time the selector opens — no configuration needed
Removed
monitorOrderConfig Key - The manual monitor button ordering array is gone; ordering is now automatic from the layout position. A leftover key in an existing config is ignored and dropped the next time the config is rewritten
Fixed
- Edge-Straddling Window Targeting - Clicking a window or layer that hangs off the monitor's left/top edge now selects it (matching its hover highlight) instead of dismissing the overlay; validity no longer sign-checks the region's origin. The capture is trimmed to the window's visible on-screen extent — screen clamping used to slide such regions fully on-screen at full size, which would have captured unrelated content beside the window
- Cross-Monitor Capture State - Monitor-button captures on another screen now honor the initiating screen's Crop mode (the target's crop editor opens instead of an instant snip) and right-click Edit (previously the capture silently went to the clipboard as Copy)
- Copy Failure Handling - A failed capture in Copy mode no longer clears the clipboard or reports a false "Copied to clipboard"; failures now show an explicit "Copy failed" notification and leave no zero-byte files behind
- Freehand Closed Loops - A freehand loop that ends precisely on its starting pixel is now captured as the drawn shape instead of being discarded as a click. Consequence: any Freehand gesture with 2+ motion samples counts as a draw even if it returns to its start pixel — a jittery click there now captures a tiny shape rather than selecting the content region under the cursor (matching how Freehand already treated jitter with any net drift)
- Invisible Region Selection - Clicks no longer select regions whose highlight type is disabled (
regionSelector.targetRegions.*: false); hit-testing now follows the same gating as the visuals. Note this also changes Freehand mode: a stationary click on a window (never highlighted there) previously captured that window silently — it now dismisses the overlay unless the click lands inside a highlighted content region, which stays selectable in Freehand, consistent with what's on screen
1.6.0 - 2026-06-06
Added
- satty Annotation Tool - satty is now the default editor for the "edit" action (configurable via
regionSelector.annotation.useSatty), with a bundledsatty.tomland swappy as a fallback hypr-lens/hlWrappers - Installer now provides launcher commands that detach on launch and run synchronously for IPC; removed on uninstall- Dev Update Helper -
dev-update.shsyncs scripts and ensuresshell.qmlintegration during development
Changed
- Selection Rounding Matches Hyprland - Selection overlays now read
decoration:roundinglive viahyprctl getoptioninstead of a hardcoded value, so corners match real windows; updates on start and on Hyprland events - Docs Use Wrapper Commands - README/MANUAL now reference
hypr-lens/hlinstead of rawqs --path ...
Fixed
- Config Docs - Removed the misleading
killall quickshell; quickshell &tip; the JSON config hot-reloads and never needs a restart
1.5.0 - 2025-12-20
Added
- Developer Setup Script - New
dev-setup.shcreates symlinks for live editing during development - Development Wiki Page - Contributor guide with setup instructions and project structure
Changed
- Installer Cleanup - Removed dev-specific symlink detection; installer now always copies files (cleaner code path for users)
Documentation
- README - Added Development link to navigation bar
- Wiki Sidebar - Added Contributing section with Development page link
1.4.0 - 2025-12-19
Fixed
- Screenshot Save Path - Screenshots and edited images now properly save to configured
savePath - Tilde Expansion -
~/paths now correctly expand in all save path configurations - Swappy Integration - Edit mode (swappy) now respects
copyAlsoSavessetting for consistent behavior - Config Parsing - Changed config format from JSONC to JSON for reliable parsing
Added
- Default Save Paths - Screenshots default to
~/Pictures/hypr-lens, recordings to~/Videos/hypr-lens - Copy Also Saves Option - New
copyAlsoSavesconfig option for users who want left-click to also save - Screenshot Notifications - Visual feedback via notify-send for copy and save operations
Changed
- Copy Mode Behavior - Left-click (Copy) now only copies to clipboard by default; use Edit mode (right-click) or enable
copyAlsoSavesto save files - Code Quality - Extracted save path helpers to reduce duplication in screenshot commands
1.3.0 - 2025-12-16
Added
- Right-Click Edit on Monitor Buttons - Right-click monitor buttons to capture and edit with swappy
Fixed
- MonitorButton Tooltip - Fixed missing services import for tooltip functionality
Changed
- Documentation - Clarified compatibility notes for non-Arch distributions
1.2.0 - 2025-12-08
Added
- Demo Videos - Video demonstrations of screenshot, OCR, and screen recording features
- Security Documentation - Comprehensive SECURITY.md transparency document with line-by-line audit
Fixed
- Video Compatibility - Re-encoded demo videos to H.264 for GitHub compatibility
1.1.0 - 2025-12-08
Added
- One-Click Monitor Capture - Quick capture buttons for each monitor in the region selector UI
Changed
- Region Selector Refactor - Extracted utilities and reduced code duplication for better maintainability
Fixed
- Installer Recovery - Detect and recover missing shell integration during update mode
- Invalid Input Handling - Improved input validation in integration recovery flow
1.0.0 - 2025-12-08
Initial public release! 🎉
Added
- Core QML Region Selector - Polished region selection UI with window detection, custom region drawing, and visual feedback
- Screenshot Capture - Region, window, and fullscreen screenshot support with clipboard integration
- OCR Text Extraction - Tesseract-powered text extraction from selected screen regions
- Google Lens Integration - Quick image search workflow via clipboard + browser
- Screen Recording - Region-based screen recording with optional audio capture using wf-recorder
- Color Picker - Screen-wide color picking via hyprpicker integration
- OpenCV Content Detection - Intelligent region detection within screenshots using Python + OpenCV
- Window/Layer Detection - Automatic detection of Hyprland windows and layers for quick capture
- Installer Script - Interactive installer with dependency detection, automatic setup, and shell integration
- Example Keybinds - Pre-configured Hyprland keybinds for all features
- Default Configuration - JSONC config with sensible defaults for all options
- Matugen Theming Support - Dynamic Material You theming via matugen integration
- IPC Interface - Programmatic control via quickshell IPC commands
- Project Documentation - README, MANUAL, SECURITY audit, and wiki
Features in Detail
| Feature | Keybind |
|---|---|
| Region Screenshot | Super+Shift+S |
| Image Search | Super+Shift+A |
| OCR Extraction | Super+Shift+X |
| Screen Recording | Super+Shift+R |
| Recording + Audio | Super+Shift+Alt+R |
| Color Picker | Super+Shift+C |
| Quick Fullscreen | Print |
Version History Summary
| Version | Date | Highlights |
|---|---|---|
| 1.5.0 | 2025-12-20 | Developer setup script, contributor docs |
| 1.4.0 | 2025-12-19 | Screenshot save fix, tilde expansion, swappy integration |
| 1.3.0 | 2025-12-16 | Right-click edit on monitor buttons |
| 1.2.0 | 2025-12-08 | Demo videos, security documentation |
| 1.1.0 | 2025-12-08 | Monitor capture buttons, installer recovery |
| 1.0.0 | 2025-12-08 | Initial release |