Universal Image Converter
661
v1.0.0 — Blazing Fast Bulk Image Optimization API & UI
Self-hosted, privacy-first bulk image converter. Convert, compress, resize, and watermark hundreds of images instantly via an elegant Web UI or robust REST API.
Universal Image Converter offers a beautiful Frontend UI alongside a powerful REST API for developers. Supported formats: WebP, AVIF, JPEG, PNG, GIF, TIFF.
| Endpoint | Purpose | Method | Input |
|---|---|---|---|
/api/convert | Optimize a single image & return JSON/Base64 | POST | multipart/form-data |
/api/convert-bulk | Process up to 100 images and return a ZIP file | POST | multipart/form-data |
Pull from Docker Hub:
docker pull bagose/image-converter:latest
Running via Docker:
docker run -d -p 3456:3456 --name image-converter bagose/image-converter:latest
The Web UI and API will be available at http://localhost:3456.
# Install dependencies
npm install
# Start production/development server
npm start
The application requires minimal configuration:
# Server
PORT=3456
| Feature | Description |
|---|---|
| Multi-Format Processing | Input and output in webp, avif, jpeg, png, gif, and tiff. |
| Blazing Fast (Sharp) | Powered by the libvips engine, achieving speeds 4-5x faster than ImageMagick. |
| Bulk Optimization | Drag and drop up to 100 images into the UI, or send arrays via API. Downloads as a single ZIP. |
| Smart Resizing | Auto-calculate aspect ratios given maxWidth and/or maxHeight. |
| EXIF Preservation | Options to strip metadata for the smallest possible size, or keep EXIF/GPS data. |
| Batch Watermarking | Apply text watermarks to all images at once. Configurable position, text, and color (dark/light adaptation). |
| Premium UI/UX | Glassmorphism design with Tailwind CSS. Beautiful, responsive, and completely client-side driven. |
POST /api/convert — Single Image ConverterConvert and compress a single uploaded image. Returns optimized base64 data along with statistics.
| Field | Type | Required | Description |
|---|---|---|---|
image | File | ✅ | The image file to convert (Max 50MB) |
format | string | Target format: webp (default), avif, jpeg, png, gif, tiff | |
quality | integer | Compression quality 1 to 100 (Default: 80) | |
maxWidth | integer | Resize max width in px | |
maxHeight | integer | Resize max height in px | |
keepMetadata | boolean | Pass 'true' to preserve EXIF data | |
watermarkText | string | Text to overlay on the image | |
watermarkPosition | string | bottom-right, bottom-left, top-right, top-left, center | |
watermarkColor | string | white or black |
{
"success": true,
"filename": "photo.webp",
"originalSize": 2500000,
"convertedSize": 450000,
"savings": 82,
"width": 1920,
"height": 1080,
"format": "webp",
"base64": "UklGRhoAAABXRUJQVlA4TA0AAAAvAAAAAAfQ//73v/+BiOh/AAA="
}
POST /api/convert-bulk — Bulk Processor & ZipperProcess up to 100 images in a single request. Returns a downloadable .zip file containing all optimized images.
Accepts the exact same configuration fields as /api/convert, but replace image with an array of files:
| Field | Type | Required | Description |
|---|---|---|---|
images | File[] | ✅ | Array of image files (Max 100 files, 50MB each) |
The response will be a binary stream application/zip with the header Content-Disposition: attachment; filename="converted-to-{format}.zip".
version: "3.8"
services:
image-converter:
image: bagose/image-converter:latest
container_name: image-converter
ports:
- "3456:3456"
restart: unless-stopped
deploy:
resources:
limits:
memory: 512M
Built with ❤️ by volumeee
Content type
Image
Digest
sha256:1fc431cd0…
Size
100.9 MB
Last updated
5 months ago
docker pull bagose/image-converter