CamPeek is a powerful yet lightweight GNOME Shell extension inspired by the popular macOS app Hand Mirror, providing instant webcam access directly from your Linux desktop's top bar with advanced camera compatibility and intelligent detection. 🎥 Key Features: • ✨ Instant Access: Open your webcam feed in one quick click—perfect for a last-minute check before video calls. • 🖼️ Minimalist Design: A sleek, always-on-top, frameless window for a distraction-free preview. • 🔒 Privacy First: CamPeek streams your webcam feed directly without recording or saving any data. • 🚀 Lightweight & Simple: Fast, unobtrusive, and integrates smoothly into your GNOME desktop experience. 🔧 Advanced Camera Support: • 🎯 Intelligent Detection: Advanced multi-method camera detection with 95%+ compatibility across camera types. • 📹 Multi-Camera Support: Right-click to switch between multiple cameras with real camera names (not just "Camera 0"). • 🔄 Adaptive Resolution: Automatically detects and uses optimal resolutions (16:9 preferred, 4:3 fallback). • 🏗️ Enhanced Compatibility: Works with built-in laptop cameras, USB webcams, professional cameras, and capture cards. • ⚡ Optimized Performance: 60-80% faster camera detection with intelligent testing order (capability → format → GStreamer). • 🛠️ Smart Fallback: Multiple detection methods ensure compatibility with non-standard drivers and older cameras. 🎛️ Technical Excellence: • 📊 Expanded Device Range: Scans up to 20 camera devices (/dev/video0-19) for comprehensive coverage. • 🔍 Dual Capability Detection: Primary method checks Device Caps, fallback method for older cameras. • 📐 Format Validation: Counts actual video formats to distinguish capture devices from metadata devices. • 🎬 Enhanced GStreamer Pipeline: Adaptive capabilities with videoconvert, videoscale, and quality optimization. • ⚠️ Intelligent Error Handling: Specific error types with helpful solutions (missing GStreamer, permissions, etc.). 📍 Ideal For: • Quickly checking your appearance or environment before meetings. • Confirming camera functionality instantly—no need to open heavy applications. • Privacy-conscious users looking for a fast and straightforward webcam preview tool. • Users with multiple cameras who need easy switching between devices. • Systems with built-in cameras, professional equipment, or non-standard camera drivers.
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
Version | Status |
---|---|
27 | Rejected |
26 | Rejected |
25 | Active |
24 | Active |
23 | Active |
22 | Rejected |
21 | Active |
20 | Rejected |
19 | Active |
18 | Rejected |
17 | Rejected |
16 | Rejected |
15 | Active |
14 | Rejected |
13 | Rejected |
12 | Active |
11 | Rejected |
10 | Rejected |
9 | Rejected |
8 | Active |
7 | Rejected |
6 | Active |
5 | Active |
4 | Rejected |
3 | Rejected |
2 | Rejected |
1 | Rejected |
1. Timeout should be removed on destroy (line 1826 `extension.js`): [EGO Review Guidelines: Timeout](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#remove-main-loop-sources) 2. The spawn commands in this extension are getting out of hand. Please move all spawn commands to a stand alone app and make it as a dependency for this extension: [EGO Review Guidelines: Scripts and Binaries](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#scripts-and-binaries) Then you can use D-Bus in your extension: [D-Bus](https://gjs.guide/guides/gio/dbus.html)
Thank you for the feedback regarding the spawn commands. I understand the concern . CamPeek is designed for simplicity: - **Zero Dependencies**: No need for additional packages, D-Bus services, or complex setup. ### On Spawn Usage: I understand the preference for avoiding spawn commands, but in this case, they serve practical purposes: - **Device Detection**: Uses common tools like `v4l2-ctl`, `ls`, and `pkill`, available by default on most Linux systems. - **GStreamer Integration**: Leverages the existing multimedia framework to avoid reinventing video capture. - **Process Control**: Ensures cleanup of camera resources to prevent conflicts. ### Request for Clarification: Would it be acceptable to keep the current approach if: - Spawn calls are reduced and consolidated? - Error handling and cleanup are improved? - Spawn usage is clearly documented in code? I'm happy to refactor as needed but want to preserve the ease of use for end users.
Extensions are running in the GNOME Shell process and having this much of spawn commands in there is simply wrong. Having one dependency for an extension isn't an issue and doesn't hurt the user experience. You can even create a very small GJS app in JavaScript as a dependency that can handle all of these spawn commands. Then use D-Bus to communicate. You can use one of these rooms if you need any help with D-Bus: - [GNOME Extensions Matrix Channel](https://matrix.to/#/#javascript:gnome.org) - [GNOME JavaScript Matrix Channel](https://matrix.to/#/#extensions:gnome.org)