{"id":43250729,"url":"https://github.com/yakirma/imageviewer","last_synced_at":"2026-05-03T13:05:43.498Z","repository":{"id":328222973,"uuid":"1112178932","full_name":"yakirma/ImageViewer","owner":"yakirma","description":null,"archived":false,"fork":false,"pushed_at":"2026-04-27T23:12:41.000Z","size":36819,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-27T23:25:41.165Z","etag":null,"topics":["computer-vision","cross-platform","depth-anything","depth-estimation","desktop-app","image-processing","image-viewer","optical-flow","pyqt6","python","raw-image","scientific-computing"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yakirma.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-08T09:05:11.000Z","updated_at":"2026-04-27T23:12:45.000Z","dependencies_parsed_at":"2026-02-25T20:00:56.396Z","dependency_job_id":null,"html_url":"https://github.com/yakirma/ImageViewer","commit_stats":null,"previous_names":["yakirma/imageviewer"],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/yakirma/ImageViewer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yakirma%2FImageViewer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yakirma%2FImageViewer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yakirma%2FImageViewer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yakirma%2FImageViewer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yakirma","download_url":"https://codeload.github.com/yakirma/ImageViewer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yakirma%2FImageViewer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32569715,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T06:36:36.687Z","status":"ssl_error","status_checked_at":"2026-05-03T06:36:09.306Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["computer-vision","cross-platform","depth-anything","depth-estimation","desktop-app","image-processing","image-viewer","optical-flow","pyqt6","python","raw-image","scientific-computing"],"created_at":"2026-02-01T13:01:17.325Z","updated_at":"2026-05-03T13:05:43.491Z","avatar_url":"https://github.com/yakirma.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ImageViewer: A Professional Image Analysis Tool\n\nImageViewer is a powerful, cross-platform desktop application for viewing and analyzing scientific and standard image formats. Built with Python and PyQt6, it provides a fluid, multi-window interface packed with features designed for in-depth image comparison and analysis — from raw sensor dumps and optical-flow fields to live histograms, NumPy math transforms, and AI-powered 3D reconstruction.\n\n![ImageViewer Screenshot](assets/screenshot.gif)\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"assets/video_demo.gif\" alt=\"Video playback demo\" width=\"100%\" /\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"assets/3d_demo.gif\" alt=\"3D point cloud demo\" width=\"100%\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n---\n\n## Table of Contents\n\n- [Installation](#installation)\n- [Usage](#usage)\n- [Supported Formats](#supported-formats)\n- [Key Features](#key-features)\n- [Keyboard Shortcuts](#keyboard-shortcuts)\n- [Building from Source](#building-from-source)\n- [License](#license)\n\n---\n\n## Installation\n\n**[Download the latest release for your OS here](https://github.com/yakirma/ImageViewer/releases)**\n\nThe application checks for new releases on launch and notifies you when an update is available.\n\n### macOS\n1. Download the `.dmg` file.\n2. Open it and drag **ImageViewer** to your **Applications** folder.\n3. Open \"Applications\", find **ImageViewer**, and double-click to launch.\n\n### Windows\n1. Download `ImageViewer_Setup.exe`.\n2. Run the installer.\n3. Launch **ImageViewer** from your Start Menu or Desktop.\n\n### Linux\n1. Download the `.deb` package.\n2. Install it: `sudo dpkg -i ImageViewer_*.deb` (or open it with your software center).\n3. Launch **ImageViewer** from your application menu.\n\n### Running from Source\n\n```sh\ngit clone https://github.com/yakirma/ImageViewer.git\ncd ImageViewer\npip install -r requirements.txt\npython main.py\n```\n\nRequires Python 3.9 or newer.\n\n---\n\n## Usage\n\nOnce installed, open any supported file by:\n- **Right-clicking** it and selecting **Open With \u003e ImageViewer**, or\n- **Dragging and dropping** files onto an open ImageViewer window, or\n- **Pasting** an image from the clipboard (`Ctrl+V` / `Cmd+V`), or\n- Using **File \u003e Open** (`Ctrl+O` / `Cmd+O`).\n\nImageViewer enforces a **single instance** by default — opening additional files routes them to the running application instead of spawning duplicates.\n\n---\n\n## Supported Formats\n\n| Category | Extensions |\n| :--- | :--- |\n| **Standard images** | `.png`, `.jpg`, `.jpeg`, `.bmp`, `.tiff`, `.tif`, `.gif`, `.webp`, `.heic`, `.heif` |\n| **Raw sensor data** | `.raw`, `.bin`, `.dat`, `.f32`, `.f16`, `.uint8`, `.u8`, `.uint16`, `.u16`, `.u10`, `.u12`, `.u14`, `.yuv`, `.nv12`, `.nv21`, `.y`, `.yuyv`, `.uyvy`, `.rgb`, `.rgba`, `.bgr`, `.bgra` |\n| **Optical flow** | `.flo` (Middlebury 2-channel format) |\n| **Video** | `.mp4`, `.avi`, `.mov`, `.mkv`, `.webm`, `.gif` |\n| **NumPy archives** | `.npz` (multi-array files exposed via a key picker) |\n\nResolution and dtype for raw files are inferred from filename hints, inherited from the previously opened file, or chosen via a dialog when ambiguous.\n\n---\n\n## Key Features\n\n### 1. File Exploration \u0026 Navigation\n- **Smart File Explorer:** Dedicated pane with breadcrumb navigation, folder history, and advanced filtering.\n- **\"Hide Folders\" Filter:** Toggle folder visibility to focus strictly on image files.\n- **Synchronized Navigation:** Guaranteed image presentation during rapid browsing — no skipped files when arrowing through directories.\n- **Context-Aware Up-Navigation:** Automatically re-selects the previously exited subfolder when you navigate up the tree.\n- **Recent Files:** Quickly reopen recent files from the File menu.\n\n### 2. Image Viewing \u0026 Raw Support\n- **Wide Format Support:** Standard images, raw sensor formats, optical-flow fields, video, and NPZ archives — see [Supported Formats](#supported-formats).\n- **Optical Flow Visualization:** Automatic color coding for 2-channel flow fields (`.flo` files or \"RG\" channel selection), with histogram-driven contrast for surfacing subtle motion.\n- **Smart Raw Inheritance:** Automatically inherits resolution and dtype between similar raw files, gracefully falling back to resolution guessing on mismatches.\n- **NPZ Key Picker:** Multi-array `.npz` files expose a dropdown to switch between contained arrays.\n- **Drag and Drop:** Drop images directly onto the window to load them.\n- **Interactive Zoom \u0026 Pan:** Smooth, cursor-centered zoom with native trackpad pinch-gesture support on macOS.\n- **Multi-Window Interface:** Open independent windows (`Ctrl+N`) with robust lifecycle management.\n\n### 3. Real-Time Analysis \u0026 Metadata\n- **Live Info Pane:** Scrub rows, columns, and dtypes with immediate, frame-by-frame visual feedback — no debounce delays.\n- **Channel Selector:** Isolate specific channels (R, G, B, A) or view combinations (e.g., \"RG\" for optical flow) via a toolbar dropdown.\n- **Live Histogram:** Dockable histogram updates in real time. Performance-optimized to skip processing when hidden.\n- **Interactive Contrast Stretching:** Drag histogram bars or apply presets (Min-Max with `M`, 5%–95% percentiles with `Shift+M`). Hold `Alt` to compute the stretch from the **visible viewport only**.\n- **Math Transforms:** Apply NumPy expressions to image data (e.g., `np.log(x)`, `x ** 0.5`) via a dedicated pane with smart resizing.\n- **Colormaps:** Apply standard colormaps like `viridis`, `turbo`, or `magma` to single- or multi-channel data.\n\n### 4. Comparison View (Montage)\n- **Thumbnail Pane:** Dockable pane showing every image across every window.\n  - **Master Image List:** All images from all windows in one place.\n  - **Visual Selection State:** Selected images (blue border) appear in the montage; unselected images stay in the list.\n  - **Toggle Selection:** Click thumbnails to select/deselect, or use the \"Select All\" checkbox.\n  - **Keyboard Navigation:** Arrow keys to browse, `Enter`/`Space` to toggle.\n  - **Focus Indicator:** Yellow border highlights the current keyboard focus position.\n- **Montage Layout:** Compare multiple images side-by-side in a synchronized grid.\n- **Synchronized Viewport:** Zoom and pan instantly mirror across all images in the montage.\n- **Synchronized Crosshair:** Press `C` to toggle crosshairs and read per-image pixel values from the status bar.\n- **Smart Overlays:** Overlay images preserve every modification (colormap, contrast, math transforms) from their source windows.\n\n### 5. Copy / Paste View State\n- **Copy View State** (`Ctrl+C` / `Cmd+C`): Copies the current zoom, pan, and contrast configuration as JSON to the system clipboard. Robust across images: contrast is stored as percentiles so it adapts when pasted onto a different image.\n- **Copy Image** (`Ctrl+Shift+C` / `Cmd+Shift+C`): Copies the rendered image (with current colormap and contrast applied) to the clipboard.\n- **Paste** (`Ctrl+V` / `Cmd+V`): Paste a clipboard image into ImageViewer, or paste a previously copied view state to instantly mirror another window's view.\n\n### 6. Video Playback\n- **Native Video Support:** Opens standard video formats just like images.\n- **Frame-by-Frame Control:** Scrub frames with the slider, play/pause, or step continuously.\n- **Persistent Edits:** Apply zoom, pan, contrast, or math transforms to a running video — every frame updates in real time while preserving your modifications.\n- **Keyboard Navigation:** `Left`/`Right` arrows step backward/forward by one frame.\n\n### 7. 3D Visualization (Point Cloud)\n- **3D Surface View:** Visualize any single-channel 2D image as a 3D terrain where pixel intensity represents height.\n- **Live Synchronization:** The 3D view updates instantly when math transforms or new data arrive.\n- **Hardware Acceleration:** OpenGL-backed rendering for smooth interaction with large datasets.\n- **Interaction:**\n  - **Rotate:** Left-click drag.\n  - **Pan:** Middle-click drag.\n  - **Zoom:** Scroll wheel.\n  - **Reset:** Dedicated button to restore default view.\n- **Optimized Rendering:** Large images are automatically downsampled to maintain responsive frame rates without losing structural context.\n\n### 8. AI Depth Estimation (Depth Anything 3)\n- **One-Click Depth Maps:** Generate per-pixel depth from any standard image or video using [Depth Anything 3](https://github.com/ByteDance-Seed/depth-anything-3).\n- **Model Selection:** Choose between `DA3-SMALL`, `DA3-BASE`, `DA3-LARGE`, and `DA3-GIANT` to trade off speed for accuracy.\n- **Companion Files:** The generated depth map is saved alongside the source as a 32-bit TIFF and can be opened directly into the 3D viewer.\n- **Optional Dependency:** PyTorch and the Depth Anything package are installed on demand to keep the base installer small.\n\n---\n\n## Keyboard Shortcuts\n\n| Shortcut | Action |\n| :--- | :--- |\n| `Ctrl+N` / `Cmd+N` | Open a new ImageViewer window. |\n| `Ctrl+O` / `Cmd+O` | Open file dialog. |\n| `Ctrl+V` / `Cmd+V` | Paste image or view state from clipboard. |\n| `Ctrl+C` / `Cmd+C` | Copy current view state (zoom, pan, contrast) as JSON. |\n| `Ctrl+Shift+C` / `Cmd+Shift+C` | Copy rendered image to clipboard. |\n| `M` | Apply Min-Max contrast stretch. |\n| `Shift+M` | Apply 5%–95% percentile contrast stretch. |\n| `Alt+M` / `Alt+Shift+M` | Same as above, computed from the visible viewport only. |\n| `C` | Toggle synchronized crosshair (active image or full montage). |\n| `V` | Cycle filename overlay (off → basename → full path). |\n| `Backspace` | Navigate up one folder level in the File Explorer. |\n| `Enter` / `Space` | Open file or toggle thumbnail selection. |\n| `Arrow Up/Down` | Navigate files or thumbnails. |\n| `Arrow Left/Right` | Previous/next video frame (in video mode). |\n| `Pinch / Scroll` | Zoom in/out (Mac trackpad supported). |\n\n---\n\n## Building from Source\n\nBuild artifacts are placed in `dist/`.\n\n| Platform | Command | Output |\n| :--- | :--- | :--- |\n| Cross-platform | `python build.py` | Frozen application bundle |\n| macOS / Linux | `./build.sh` | `.dmg` (macOS) or `.deb` (Linux) |\n| Windows | `build.bat` | NSIS installer (when `makensis` is on `PATH`) |\n\nThe `ImageViewer.spec` file drives PyInstaller and contains the platform-specific bundle metadata, file associations, and icon configuration.\n\n---\n\n## License\n\nReleased under the [MIT License](LICENSE).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyakirma%2Fimageviewer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyakirma%2Fimageviewer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyakirma%2Fimageviewer/lists"}