https://github.com/trongajtt/imify
A privacy-first, 100% client-side browser extension that allows users to seamlessly convert, resize, and format images directly from the browser
https://github.com/trongajtt/imify
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
Last synced: 20 days ago
JSON representation
A privacy-first, 100% client-side browser extension that allows users to seamlessly convert, resize, and format images directly from the browser
- Host: GitHub
- URL: https://github.com/trongajtt/imify
- Owner: TrongAJTT
- License: apache-2.0
- Created: 2026-03-19T07:40:55.000Z (2 months ago)
- Default Branch: main
- Last Pushed: 2026-04-30T18:07:43.000Z (21 days ago)
- Last Synced: 2026-04-30T19:12:35.155Z (21 days ago)
- 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
- Language: TypeScript
- Homepage: https://imify.trongajtt.com/
- Size: 3.42 MB
- Stars: 6
- Watchers: 0
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
- Agents: AGENTS.md
Awesome Lists containing this project
README
#
Imify - Powerful Image Toolkit
> 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.

[](./LICENSE)
[](https://reactjs.org/)
[](https://www.plasmo.com/)
## ✨ Key Features (v2 Suite)
* **Dual Platforms**: Use Imify as a standalone web application or as a tightly integrated browser extension.
* **100% Client-Side Processing**: Zero server dependencies. Complete data privacy using WebAssembly and Web Workers.
* **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`.
* **Advanced Processing Tools (Available in both the web application and the browser extension)**:
* **Batch Processor**: Drag-and-drop multiple files to convert them in bulk. Includes ZIP packaging.
* **Image Splitter**: Slice images via grid systems or custom percentage/pixel sequences with a reorderable guide UI.
* **Image Splicing**: Vertically or horizontally stitch multiple images together with gap controls.
* **Pattern & Fill**: Generate seamless patterns and use symmetric edge-filling techniques.
* **Difference Checker**: Pixel-perfect visual comparison tool for QA and analysis.
* **Image Inspector**: Deep dive into image metadata and EXIF data.
* **Extension-Exclusive Features**:
* **Right-Click Context Menu**: Instantly convert and download any web image using your preferred presets.
* **SEO Audit (Chrome & 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).
* **Smart Resizing Engine**: Scale by dimension, percentage, or match standard physical paper sizes (A4, Letter) with DPI controls.
* **Modern Workspace UI**: A unified, desktop-like layout with collapsible navigation, reorderable sidebar configurations (`dnd-kit`), and dark mode support.
## 📸 Screenshots
## 💝 Support & Donate
If you find Imify useful, please consider supporting its development:
[](https://github.com/sponsors/TrongAJTT)
[](https://buymeacoffee.com/trongajtt)
## 📥 Installation
Imify 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:
[](https://chromewebstore.google.com/detail/imify-powerful-image-tool/ilhbmbkcakhlelcifilnlcmpklkafabg?authuser=0&hl=en)
[](https://microsoftedge.microsoft.com/addons/detail/jgdgjoioljlhigbnifkjeniojoeianfm)
[](https://addons.mozilla.org/en-US/firefox/addon/imify-save-process-images/)
> [!IMPORTANT]
> 🛡️ **Note for Chrome Users (Enhanced Safe Browsing):**
> - 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."*
> - 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".
## 🛠️ Tech Stack
* **Monorepo**: [Turborepo](https://turbo.build/)
* **Web App**: [Next.js](https://nextjs.org/) (App Router, Pure Static Export)
* **Extension Framework**: [Plasmo](https://docs.plasmo.com/) (Manifest V3)
* **UI/Styling**: React, Tailwind CSS, Radix UI, dnd-kit, Lucide React
* **State Management**: Zustand
* **Core Image Processing**: Native `OffscreenCanvas` API, Web Workers
* **Advanced Encoders**: WebAssembly (Wasm) via `@jsquash/avif`, `@jsquash/jxl`, `@jsquash/oxipng`; plus `image-q`, `UPNG.js`, `UTIF.js`, `fflate`
* **Language**: TypeScript (Strict typing)
## 📂 Monorepo Structure
```text
imify/
├── apps/
│ ├── extension/ # Plasmo browser extension (Background, Popup, Sidepanel, Options)
│ └── web/ # Next.js web application
├── packages/
│ ├── config/ # Shared build, lint, and Tailwind presets
│ ├── core/ # Platform-agnostic types, math, and pure utilities
│ ├── engine/ # Wasm worker pools, quantizers, and encoders
│ ├── features/ # Shared business logic and UI (Splitter, Batch, SEO Audit)
│ ├── stores/ # Global Zustand state management
│ └── ui/ # Design system (Radix, dnd-kit, Theme engines)
```
## 🚀 Getting Started
### Prerequisites
* [Node.js](https://nodejs.org/) (v18 or higher)
* [pnpm](https://pnpm.io/) (Recommended package manager)
### Installation
1. Clone the repository:
```bash
git clone https://github.com/trongajtt/imify.git
cd imify
```
2. Install dependencies:
```bash
pnpm install
```
### Development
We use Turborepo and root-level scripts to manage tasks across the monorepo.
```bash
# Sync package versions and metadata from root to all packages
pnpm sync:package
# Start all development servers (Web app + Extension on Chrome)
pnpm dev
# Start only the Web app (automatically syncs assets)
pnpm dev:web
# Start only the Extension (Targeting specific browsers, automatically syncs assets)
pnpm dev:chrome
pnpm dev:firefox
```
### Loading the Extension
1. Open your browser and navigate to:
* Chrome: `chrome://extensions/`
* Firefox: `about:debugging#/runtime/this-extension`
2. Enable **Developer mode** (for Chrome).
3. Click **Load unpacked** (Chrome) or **Load Temporary Add-on** (Firefox).
4. Select the build directory (e.g., `build/chrome-mv3-dev` or `build/firefox-mv3-dev`).
## 📦 Building for Production
To create production-ready, optimized builds:
```bash
# Build all and verify (CI mode)
pnpm build:ci
# Build specific target
pnpm build:chrome
pnpm build:edge
pnpm build:firefox
```
## 🚀 Packaging for Distribution
To generate `.zip` files for the Web Store or AMO:
```bash
pnpm package:chrome # Output: apps/extension/build/chrome-mv3-prod/
pnpm package:edge # Output: apps/extension/build/edge-mv3-prod/
pnpm package:firefox # Output: apps/extension/build/firefox-mv3-prod.zip
pnpm package:all
```
To build the web application:
```bash
pnpm build:web # Output: apps/web/out/ (Static Export)
```
This will generate a zip-ready folder in `build/chrome-mv3-prod` which you can upload directly to the Chrome Web Store.
### 🦊 Note for Mozilla AMO Reviewers
If you are reviewing this extension for the Mozilla Add-ons Store, please follow these steps to reproduce the exact build:
1. Install dependencies: `pnpm install`
2. Generate the Firefox package: `pnpm package:firefox` (This command automatically handles asset synchronization and manifest sanitation).
3. The generated add-on will be an archive located in the output build directory (e.g., `apps/extension/build/firefox-mv3-prod.zip`).
**Compliance Declaration regarding WebAssembly (WASM) & Minification:**
- **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.
- **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`).
- **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.
> **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:
> 1. **Permission Cleanup**: Removes `offscreen` and `sidePanel` permissions which are currently unsupported or restricted in Firefox.
> 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.
## 🔒 Privacy & Security
This extension is explicitly designed to respect user privacy:
- **No Analytics/Tracking**: We do not track what images you convert.
- **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.
- **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.
## 📄 License
This project is licensed under the Apache 2.0 License - see the [LICENSE](./LICENSE) file for details.