Stampify is a powerful, client-side web application designed for high-performance image manipulation, layer-based compositing, and automated batch processing. Perfect for creating social media assets, watermarking bulk photos, or designing complex layouts seamlessly in your browser.
Launch into single-image editing or deploy a 1-click batch processing job.
A sleek, professional dark mode UI with comprehensive layer controls and adjustment properties.
- Advanced Rendering Engine: Powered by Konva.js, rendering a robust HTML5 Canvas layered architecture.
- Dynamic Layer Management: Full support for Images, Text overlays, interactive Vector Shapes, Emojis, and auto-tiling Watermarks.
- Professional Mechanics: Includes Figma-style corner rotation, automatic AABB marquee box selection, snap-to-grid alignment, and dragging guides.
- Native Blend Modes: Utilize all standard compositing modes (
multiply,screen,overlay,color-burn, etc.) instantly mapped to your canvas. - Smart Image Filtering: Apply native non-destructive adjustments (Brightness, Contrast, Saturation, Blur, Sepia, Invert, Hue) completely live.
- 1-Click Batch Processing:
- Save your active workspace as a
.jsonTemplate layout. - Upload your template alongside a folder of new images to instantly pipe out individually composited ZIP files.
- Features smart geometry tracking (
fillvsfitaspect ratio handling) for unmatched automation.
- Save your active workspace as a
- Premium UI: Designed with an ultra-responsive, professional Slate & Blue theme utilizing
shadcn/uicomponents and Tailwind CSS. - Local Persistence: Zero-database architecture. Workspace layouts, histories, and settings sync securely to local device storage.
Ensure you have Node.js installed, then follow these steps:
-
Clone the repository:
git clone https://github.com/Zan-getsu/stampify.git cd stampify -
Install dependencies:
bun install
-
Start the development server:
bun run dev
The application will boot up at
http://localhost:5173.
Stampify includes a multi-stage Dockerfile optimized for oven/bun and deployed behind a lightweight nginx:alpine server. You can use either Docker or Podman to build and run the application.
- Build the image:
docker build -t stampify:latest . - Run the container:
The application will be accessible at
docker run -d -p 8080:80 --name stampify-app stampify:latest
http://localhost:8080.
Podman is a daemonless, rootless alternative to Docker. The commands are natively compatible:
- Build the image:
podman build -t stampify:latest . - Run the container:
The application will be accessible at
podman run -d -p 8080:80 --name stampify-app stampify:latest
http://localhost:8080.
Stampify enforces a strict, decoupled component foundation.
| Layer | Technology Used |
|---|---|
| Framework | React 18, Vite (Fast HMR) |
| Global State | Zustand (canvasStore.ts), strictly typed payload models |
| Canvas Engine | Konva.js / react-konva (Stage, Layers, Groups, Fast Native Rendering) |
| Styling & UI | Tailwind CSS (v4 inline), Radix Primitives, Custom shadcn/ui port |
| Export/Zipping | File-Saver, JSZip, and Konva.Stage.toDataURL() off-screen rendering pipelines |
- Invisible Bounding Groups: Complex SVG elements (like ellipses) are wrapped in invisible top-left coordinate groups bridging Konva's geometric origins with user-friendly GUI anchors.
- Off-screen Generators: The Batch processing workflow spawns a "Ghost Canvas" allowing the engine to calculate and export 100+ templated renders per minute without locking the active viewing window.
- Autofitting Resize-Observer: Hooks directly to DOM mutations natively shifting the active zoom matrix ensuring your workspace constantly reflects pixel-perfect editing.
Contributions are more than welcome!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the GNU General Public License v3.0 (GPL-3.0) - see the LICENSE file for details.