{"id":49491207,"url":"https://github.com/trongajtt/imify","last_synced_at":"2026-05-01T06:01:21.209Z","repository":{"id":346352633,"uuid":"1186034606","full_name":"TrongAJTT/imify","owner":"TrongAJTT","description":"A privacy-first, 100% client-side browser extension that allows users to seamlessly convert, resize, and format images directly from the browser","archived":false,"fork":false,"pushed_at":"2026-04-30T18:07:43.000Z","size":3590,"stargazers_count":6,"open_issues_count":1,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-30T19:12:35.155Z","etag":null,"topics":["avif","batch-image-processor","context-menu","icon-pack","image-convert","image-converter","image-processing","image-processor","image-resizer","image-to-pdf","jxl","resize-images","save-image-as","save-image-as-type","watermark"],"latest_commit_sha":null,"homepage":"https://imify.trongajtt.com/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TrongAJTT.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-03-19T07:40:55.000Z","updated_at":"2026-04-30T18:07:16.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/TrongAJTT/imify","commit_stats":null,"previous_names":["trongajtt/imify"],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/TrongAJTT/imify","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TrongAJTT%2Fimify","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TrongAJTT%2Fimify/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TrongAJTT%2Fimify/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TrongAJTT%2Fimify/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TrongAJTT","download_url":"https://codeload.github.com/TrongAJTT/imify/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TrongAJTT%2Fimify/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32486222,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["avif","batch-image-processor","context-menu","icon-pack","image-convert","image-converter","image-processing","image-processor","image-resizer","image-to-pdf","jxl","resize-images","save-image-as","save-image-as-type","watermark"],"created_at":"2026-05-01T06:01:01.820Z","updated_at":"2026-05-01T06:01:21.202Z","avatar_url":"https://github.com/TrongAJTT.png","language":"TypeScript","funding_links":["https://github.com/sponsors/TrongAJTT","https://buymeacoffee.com/trongajtt"],"categories":[],"sub_categories":[],"readme":"# \u003cimg src=\"/assets/icon.png\" alt=\"Imify\" width=\"24\" height=\"24\" style=\"vertical-align: middle;\"\u003e Imify - Powerful Image Toolkit\n\n\u003e A privacy-first, 100% client-side image processing suite. Available as a **Next.js Web Application** and a **Browser Extension**. Save, convert, resize, split, splice, and audit images directly in your browser — without uploading anything to a server.\n\n![version](https://img.shields.io/github/release/trongajtt/imify?color=green)\n[![License](https://img.shields.io/badge/license-Apache%202-blue)](./LICENSE)\n[![React](https://img.shields.io/badge/React-18.2.0-61dafb.svg)](https://reactjs.org/)\n[![Plasmo](https://img.shields.io/badge/Plasmo-Framework-blue?logo=plasmo)](https://www.plasmo.com/)\n\n## ✨ Key Features (v2 Suite)\n\n* **Dual Platforms**: Use Imify as a standalone web application or as a tightly integrated browser extension.\n* **100% Client-Side Processing**: Zero server dependencies. Complete data privacy using WebAssembly and Web Workers.\n* **Rich Format Support**: Read and convert to `JPG`, `PNG` (Tiny mode, Floyd-Steinberg dithering, and OxiPNG WASM optimization), `WebP`, `AVIF`, `JXL` (JPEG XL), `TIFF`, `ICO`, `BMP`, and `PDF`.\n* **Advanced Processing Tools (Available in both the web application and the browser extension)**:\n  * **Batch Processor**: Drag-and-drop multiple files to convert them in bulk. Includes ZIP packaging.\n  * **Image Splitter**: Slice images via grid systems or custom percentage/pixel sequences with a reorderable guide UI.\n  * **Image Splicing**: Vertically or horizontally stitch multiple images together with gap controls.\n  * **Pattern \u0026 Fill**: Generate seamless patterns and use symmetric edge-filling techniques.\n  * **Difference Checker**: Pixel-perfect visual comparison tool for QA and analysis.\n  * **Image Inspector**: Deep dive into image metadata and EXIF data.\n* **Extension-Exclusive Features**:\n  * **Right-Click Context Menu**: Instantly convert and download any web image using your preferred presets.\n  * **SEO Audit (Chrome \u0026 Edge)**: Deep DOM scanning to detect oversized images, missing alt text, and potential bandwidth savings via modern formats. (Note: Currently unavailable on Firefox because this feature requires Side Panel API).\n* **Smart Resizing Engine**: Scale by dimension, percentage, or match standard physical paper sizes (A4, Letter) with DPI controls.\n* **Modern Workspace UI**: A unified, desktop-like layout with collapsible navigation, reorderable sidebar configurations (`dnd-kit`), and dark mode support.\n\n## 📸 Screenshots\n\n\u003cdiv align=\"center\"\u003e\n   \u003cimg src=\"https://cdn.trongajtt.com/apps/imify/context-menu.webp\" alt=\"Context Menu\" style=\"width:32%;\"\u003e\n  \u003cimg src=\"https://cdn.trongajtt.com/apps/imify/image-splicing.webp\" alt=\"Image Splicing\" style=\"width:32%;\"\u003e\n  \u003cimg src=\"https://cdn.trongajtt.com/apps/imify/difference-checker.webp\" alt=\"Difference Checker\" style=\"width:32%;\"\u003e\n  \u003cimg src=\"https://cdn.trongajtt.com/apps/imify/image-processor.webp\" alt=\"image Processor\" style=\"width:32%;\"\u003e\n  \u003cimg src=\"https://cdn.trongajtt.com/apps/imify/image-inspector.webp\" alt=\"Image Inspector\" style=\"width:32%;\"\u003e\n  \u003cimg src=\"https://cdn.trongajtt.com/apps/imify/seo-audit-preview.webp\" alt=\"SEO Audit\" style=\"width:32%;\"\u003e\n  \u003cimg src=\"assets/features/preview-image_filling.webp\" alt=\"Image Filling\" style=\"width:32%;\"\u003e\n  \u003cimg src=\"assets/features/preview-image_splitter-2.webp\" alt=\"Image Splitter 2\" style=\"width:32%;\"\u003e\n  \u003cimg src=\"assets/features/preview-pattern_generator.webp\" alt=\"Pattern Generator\" style=\"width:32%;\"\u003e\n\u003c/div\u003e\n\n## 💝 Support \u0026 Donate\n\nIf you find Imify useful, please consider supporting its development:\n\n[![GitHub Sponsors](https://img.shields.io/badge/GitHub%20Sponsors-6e5494?style=for-the-badge\u0026logo=github-sponsors\u0026logoColor=white)](https://github.com/sponsors/TrongAJTT)\n[![Buy Me A Coffee](https://img.shields.io/badge/Buy%20Me%20A%20Coffee-ffdd00?style=for-the-badge\u0026logo=buy-me-a-coffee\u0026logoColor=black)](https://buymeacoffee.com/trongajtt)\n\n## 📥 Installation\n\nImify is officially available on the Chrome Web Store, Microsoft Edge Add-ons Store, and Firefox Add-ons Store. Click the badges below to install it directly:\n\n[![Chrome Web Store](https://cdn.trongajtt.com/assets/get-on-chrome.webp)](https://chromewebstore.google.com/detail/imify-powerful-image-tool/ilhbmbkcakhlelcifilnlcmpklkafabg?authuser=0\u0026hl=en)\n[![Microsoft Edge Add-ons](https://cdn.trongajtt.com/assets/get-on-edge.webp)](https://microsoftedge.microsoft.com/addons/detail/jgdgjoioljlhigbnifkjeniojoeianfm)\n[![Firefox Add-ons](https://cdn.trongajtt.com/assets/get-on-firefox.webp)](https://addons.mozilla.org/en-US/firefox/addon/imify-save-process-images/)\n\n\u003e [!IMPORTANT]\n\u003e 🛡️ **Note for Chrome Users (Enhanced Safe Browsing):**\n\u003e - Because Imify is a newly published extension, users with Chrome's \"Enhanced Safe Browsing\" enabled might see a warning stating the extension is *\"not trusted.\"*\n\u003e - This is a standard Google policy applied to all **new developer accounts** until they build a history of trust over a few months. It is not related to the code itself. Imify is completely open-source, operates 100% offline, and requires no external servers. You can verify every line of code in this repository. It is entirely safe to click \"Continue to install\".\n\n## 🛠️ Tech Stack\n\n* **Monorepo**: [Turborepo](https://turbo.build/)\n* **Web App**: [Next.js](https://nextjs.org/) (App Router, Pure Static Export)\n* **Extension Framework**: [Plasmo](https://docs.plasmo.com/) (Manifest V3)\n* **UI/Styling**: React, Tailwind CSS, Radix UI, dnd-kit, Lucide React\n* **State Management**: Zustand\n* **Core Image Processing**: Native `OffscreenCanvas` API, Web Workers\n* **Advanced Encoders**: WebAssembly (Wasm) via `@jsquash/avif`, `@jsquash/jxl`, `@jsquash/oxipng`; plus `image-q`, `UPNG.js`, `UTIF.js`, `fflate`\n* **Language**: TypeScript (Strict typing)\n\n## 📂 Monorepo Structure\n\n```text\nimify/\n├── apps/\n│   ├── extension/          # Plasmo browser extension (Background, Popup, Sidepanel, Options)\n│   └── web/                # Next.js web application\n├── packages/\n│   ├── config/             # Shared build, lint, and Tailwind presets\n│   ├── core/               # Platform-agnostic types, math, and pure utilities\n│   ├── engine/             # Wasm worker pools, quantizers, and encoders\n│   ├── features/           # Shared business logic and UI (Splitter, Batch, SEO Audit)\n│   ├── stores/             # Global Zustand state management\n│   └── ui/                 # Design system (Radix, dnd-kit, Theme engines)\n```\n\n## 🚀 Getting Started\n\n### Prerequisites\n\n* [Node.js](https://nodejs.org/) (v18 or higher)\n* [pnpm](https://pnpm.io/) (Recommended package manager)\n\n### Installation\n\n1. Clone the repository:\n   \n   ```bash\n   git clone https://github.com/trongajtt/imify.git\n   cd imify\n   ```\n\n2. Install dependencies:\n   \n   ```bash\n   pnpm install\n   ```\n\n### Development\n\nWe use Turborepo and root-level scripts to manage tasks across the monorepo.\n\n```bash\n# Sync package versions and metadata from root to all packages\npnpm sync:package\n\n# Start all development servers (Web app + Extension on Chrome)\npnpm dev\n\n# Start only the Web app (automatically syncs assets)\npnpm dev:web\n\n# Start only the Extension (Targeting specific browsers, automatically syncs assets)\npnpm dev:chrome\npnpm dev:firefox\n```\n\n### Loading the Extension\n\n1. Open your browser and navigate to:\n   * Chrome: `chrome://extensions/`\n   * Firefox: `about:debugging#/runtime/this-extension`\n2. Enable **Developer mode** (for Chrome).\n3. Click **Load unpacked** (Chrome) or **Load Temporary Add-on** (Firefox).\n4. Select the build directory (e.g., `build/chrome-mv3-dev` or `build/firefox-mv3-dev`).\n\n## 📦 Building for Production\n\nTo create production-ready, optimized builds:\n\n```bash\n# Build all and verify (CI mode)\npnpm build:ci\n\n# Build specific target\npnpm build:chrome\npnpm build:edge\npnpm build:firefox\n```\n\n## 🚀 Packaging for Distribution\n\nTo generate `.zip` files for the Web Store or AMO:\n\n```bash\npnpm package:chrome     # Output: apps/extension/build/chrome-mv3-prod/\npnpm package:edge       # Output: apps/extension/build/edge-mv3-prod/\npnpm package:firefox    # Output: apps/extension/build/firefox-mv3-prod.zip\npnpm package:all\n```\n\nTo build the web application:\n\n```bash\npnpm build:web          # Output: apps/web/out/ (Static Export)\n```\n\nThis will generate a zip-ready folder in `build/chrome-mv3-prod` which you can upload directly to the Chrome Web Store.\n\n### 🦊 Note for Mozilla AMO Reviewers\n\nIf you are reviewing this extension for the Mozilla Add-ons Store, please follow these steps to reproduce the exact build:\n\n1. Install dependencies: `pnpm install`\n2. Generate the Firefox package: `pnpm package:firefox` (This command automatically handles asset synchronization and manifest sanitation).\n3. The generated add-on will be an archive located in the output build directory (e.g., `apps/extension/build/firefox-mv3-prod.zip`).\n\n**Compliance Declaration regarding WebAssembly (WASM) \u0026 Minification:**\n- **WASM Origin:** All `.wasm` binaries used in this project for image encoding, decoding, and processing (AVIF, JXL, OxiPNG, MozJPEG, WebP, and Resampling) are sourced standardly via official open-source NPM packages (such as `@jsquash/avif`, `@jsquash/jxl`, `@jsquash/oxipng`, `@jsquash/mozjpeg`, `@jsquash/webp`, and `@jsquash/resize`) as declared in `package.json`. There are no privately built or obfuscated custom WASM payloads.\n- **Local Bundling:** During the build process (`pnpm build`), these WASM binaries are synchronized from `node_modules` into the extension's local `assets/wasm` directory via internal build scripts (`scripts/sync-wasm.mjs`). \n- **Zero Remote Execution:** The extension processes all images 100% locally and does not fetch any executable code, scripts, or WASM files from remote servers. All resources are bundled within the final `.zip` package.\n\n\u003e **Note for Firefox Reviewers**: Our build pipeline includes a dedicated sanitation script (`scripts/sanitize-firefox-manifest.mjs`). This script automatically adjusts the production manifest for Firefox to ensure compliance with current Gecko MV3 support:\n\u003e 1. **Permission Cleanup**: Removes `offscreen` and `sidePanel` permissions which are currently unsupported or restricted in Firefox.\n\u003e 2. **UI Adjustments**: Removes the `side_panel` and `action.default_popup` keys. Removing the popup allows the extension to use a fallback behavior (handled in `apps/extension/src/background/index.ts`) that opens the Options page directly when the user clicks the extension icon, providing a seamless experience despite the lack of Side Panel support.\n\n## 🔒 Privacy \u0026 Security\n\nThis extension is explicitly designed to respect user privacy:\n\n- **No Analytics/Tracking**: We do not track what images you convert.\n- **No Cloud Servers**: The extension does not make any external API calls to process your files. Every byte of image data is processed inside your local browser memory and discarded immediately after download.\n- **Cross-Origin Restrictions**: The extension fetches image blobs using its native MV3 permissions, meaning it securely bypasses standard web CORS limitations without exposing your browser to malicious scripts.\n\n## 📄 License\n\nThis project is licensed under the Apache 2.0 License - see the [LICENSE](./LICENSE) file for details.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrongajtt%2Fimify","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftrongajtt%2Fimify","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrongajtt%2Fimify/lists"}