{"id":35165179,"url":"https://github.com/erroralex/metadata-viewer","last_synced_at":"2026-04-13T12:01:28.321Z","repository":{"id":329632389,"uuid":"1120244329","full_name":"erroralex/Metadata-Viewer","owner":"erroralex","description":"A JavaFX desktop application for extracting and managing AI image generation metadata across multiple platforms. Features recursive parsing logic, JSON persistence, and a custom dark theme.","archived":false,"fork":false,"pushed_at":"2026-01-11T00:04:38.000Z","size":278990,"stargazers_count":32,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-11T07:10:27.096Z","etag":null,"topics":["css","generative-ai","json","metadata-extraction"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/erroralex.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":null,"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},"funding":{"github":["erroralex"],"ko_fi":"error_alex"}},"created_at":"2025-12-20T19:37:25.000Z","updated_at":"2026-01-11T00:04:45.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/erroralex/Metadata-Viewer","commit_stats":null,"previous_names":["erroralex/metadata-viewer"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/erroralex/Metadata-Viewer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erroralex%2FMetadata-Viewer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erroralex%2FMetadata-Viewer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erroralex%2FMetadata-Viewer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erroralex%2FMetadata-Viewer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/erroralex","download_url":"https://codeload.github.com/erroralex/Metadata-Viewer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/erroralex%2FMetadata-Viewer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31751705,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-13T09:16:15.125Z","status":"ssl_error","status_checked_at":"2026-04-13T09:16:05.023Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["css","generative-ai","json","metadata-extraction"],"created_at":"2025-12-28T19:27:25.578Z","updated_at":"2026-04-13T12:01:28.314Z","avatar_url":"https://github.com/erroralex.png","language":"Java","funding_links":["https://github.com/sponsors/erroralex","https://ko-fi.com/error_alex"],"categories":[],"sub_categories":[],"readme":"# AI Metadata Viewer \u0026 Extractor\n\n![Java](https://img.shields.io/badge/Java-8-ED8B00?style=for-the-badge\u0026logo=openjdk\u0026logoColor=white)\n![JavaFX](https://img.shields.io/badge/JavaFX-Programmatic-4285F4?style=for-the-badge\u0026logo=java\u0026logoColor=white)\n![CSS](https://img.shields.io/badge/CSS-Obsidian_Indigo-1572B6?style=for-the-badge\u0026logo=css3\u0026logoColor=white)\n![Jackson](https://img.shields.io/badge/Persistence-Jackson_JSON-2f2f2f?style=for-the-badge\u0026logo=json\u0026logoColor=white)\n\nA high-performance JavaFX desktop application designed to unify generation metadata across the fragmented AI image generation ecosystem. It provides instant extraction, **rapid-fire culling**, **privacy scrubbing**, portable local persistence, and deep-node inspection for professional artists and developers.\n\n---\n\n## 📸 Interface\n\n### Core Workflow\n| Extractor Portal | Speed Sorter ⚡ |\n|:---:|:---:|\n| \u003cimg src=\"src/main/resources/screenshots/extractor_view.png\" width=\"400\" alt=\"Extractor View\"\u003e | \u003cimg src=\"src/main/resources/screenshots/speedsorter_view.png\" width=\"400\" alt=\"Speed Sorter\"\u003e |\n| *Drag \u0026 Drop Extraction \u0026 Fullscreen Preview* | *Rapid Organization with Keyboard Shortcuts* |\n\n### Library \u0026 Privacy\n| Favorites Library | Metadata Scrubber |\n|:---:|:---:|\n| \u003cimg src=\"src/main/resources/screenshots/favorites_view.png\" width=\"400\" alt=\"Favorites Library\"\u003e | \u003cimg src=\"src/main/resources/screenshots/scrub_view.png\" width=\"400\" alt=\"Scrubber View\"\u003e |\n| *Portable Card-Based Persistence* | *Strip EXIF/PNG chunks for privacy* |\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eView Advanced Features\u003c/b\u003e\u003c/summary\u003e\n\u003cbr\u003e\n\n| Raw JSON Viewer | Save to Favorites |\n|:---:|:---:|\n| \u003cimg src=\"src/main/resources/screenshots/raw_json.png\" width=\"400\" alt=\"Raw Metadata\"\u003e | \u003cimg src=\"src/main/resources/screenshots/save_dialog.png\" width=\"400\" alt=\"Save Dialog\"\u003e |\n| *Deep Inspection for Complex Graphs* | *Themed Undecorated Dialogs* |\n\n\u003c/details\u003e\n\n---\n\n## ✨ Key Features\n\n* **Speed Sorting (New):** A high-velocity workflow for organizing large datasets.\n    * **Hotkeys 1-5:** Instantly move images to pre-assigned folders.\n    * **Spacebar Navigation:** Rapidly skip through sets.\n    * **Deep Analysis:** One-click fullscreen mode for checking fine details before sorting.\n* **Fully Portable:** The application now stores all favorites and thumbnails in a local `/data` directory. Move the folder to a USB drive or another PC, and your library travels with you.\n* **Universal Compatibility:** Intelligent parsing for **ComfyUI** (API \u0026 Workflow), **SwarmUI**, **A1111**, **Forge**, **InvokeAI**, **NovelAI**, and **SD-Matrix**.\n* **Metadata Scrubbing:** A dedicated view to strip all hidden metadata (Prompts, Workflow, EXIF) and export clean images for safe sharing.\n* **Smart Parsing Engine:**\n    * **Content-Aware Detection:** Distinguishes between API execution blocks and visual workflow graphs to prevent \"N/A\" errors.\n    * **Deep Recursion:** Identifies custom nodes (e.g., *Power LoRA Loader*, *Qwen*), resolution inputs, and nested JSON structures.\n    * **Physical Fallback:** Reads physical file headers to guarantee valid image dimensions even when metadata is missing or malformed.\n* **Interactive UI:**\n    * **Fullscreen Preview:** Click any thumbnail (Extractor, Sorter, or Scrubber) for a modal, high-res inspection view.\n    * **Raw Inspector:** Debug non-standard outputs with a syntax-highlighted JSON viewer.\n* **Lightweight Performance:** Programmatic JavaFX (No FXML) ensures near-instant launch times and zero-lag image processing.\n\n---\n\n## 🛠️ Technical Architecture\n\nThe application implements a **Model-View-Service** (MVS) architecture to decouple business logic from the interface.\n\n* **Singleton Pattern:** Thread-safe global access to image registries and persistent views.\n* **Portable Persistence:** Custom JSON serialization logic that maintains relative paths for a self-contained environment.\n* **Heuristic Strategy Pattern:** Adaptive parsing strategies that score metadata chunks to select the most relevant generation data.\n* **Reactive Binding:** JavaFX properties ensure real-time UI updates and responsive text wrapping.\n* **Technology Stack:** Java 8 (Liberica JDK Full), Jackson (JSON Serialization), Metadata Extractor (Drew Noakes), Ikonli (FontAwesome).\n\n---\n\n## 🚀 Getting Started\n\n[![Download Portable Zip](https://img.shields.io/badge/Download-Portable_Zip-2ea44f?style=for-the-badge\u0026logo=windows\u0026logoColor=white)](https://github.com/erroralex/metadata-viewer/releases/latest)\n\n---\n\n## 📜 License\n\nDistributed under the **MIT License**. Free for personal and commercial use.\n\n---\n\n## 💖 Support the Project\n\nIf the **AI Metadata Viewer** has streamlined your workflow, consider supporting its ongoing development. Your contributions help maintain compatibility with new AI platforms and node structures.\n\n[![GitHub Sponsors](https://img.shields.io/badge/Sponsor-GitHub-ea4aaa?style=for-the-badge\u0026logo=github-sponsors)](https://github.com/sponsors/erroralex)\n[![Ko-fi](https://img.shields.io/badge/Ko--fi-F16061?style=for-the-badge\u0026logo=ko-fi\u0026logoColor=white)](https://ko-fi.com/error_alex)\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003cb\u003eDeveloped by\u003c/b\u003e\u003cbr\u003e\n  \u003cimg src=\"src/main/resources/alx_logo.png\" width=\"120\" alt=\"Alexander Nilsson Logo\"\u003e\u003cbr\u003e\n  Copyright (c) 2025 Alexander Nilsson\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferroralex%2Fmetadata-viewer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ferroralex%2Fmetadata-viewer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferroralex%2Fmetadata-viewer/lists"}