kelwynOliveira/Morfeu-file-converter
A sleek and self-hosted file converter built with HTML, CSS, and JavaScript. Easily convert images, videos, audio, and spreadsheets using a clean drag-and-drop interface. Powered by Docker and built for local privacy-first use.
๐ Morfeu โ Universal File Converter
A fully self-hosted file conversion interface that lets you drag and drop images, media, spreadsheets, and more โ and convert them in one click.
๐ก About the Project
Morfeu is a lightweight, containerized frontend for converting files of various types. Built entirely with HTML, CSS, and JavaScript, it interfaces with dedicated backend APIs (image, spreadsheet, media) to process conversions and offer instant downloads.
Inspired by limitations of online tools, this was created to:
- Handle multiple file types in one place.
- Offer offline/private usage.
- Be fast, clean, and easy to use.
๐ฏ Purpose
- โ Personal: A secure, intuitive tool for our home server to convert files with full control.
- ๐ Professional: A demonstration of frontend skills, Docker setup, and seamless UX focused on performance and usability.
๐ผ๏ธ Preview
๐ง Features
- Drag & Drop Interface โ Easily select or drop multiple files.
- Automatic Detection โ Detects type (image, audio, video, spreadsheet) and shows format options.
- Batch Conversion โ Convert all files at once or individually.
- Progress Feedback โ Real-time progress bar and estimated time.
- Abort + Remove Options โ Cancel any ongoing conversion.
- Multi-format Support โ Convert to dozens of formats per type.
- ZIP Download โ Download all results in one ZIP file.
- Toast Notifications โ Clean and responsive user feedback.
๐งช Supported File Types
- Images: JPG, PNG, TIFF, BMP, WEBP, ICO, HEIC, PSD, etc.
- Audio: MP3, WAV, FLAC, M4A, OGG, AAC, AMR, etc.
- Video: MP4, MKV, AVI, MOV, WEBM, etc.
- Spreadsheets: CSV, XLSX, JSON, XML, Parquet, HDF5, etc.
๐ Running Locally with Docker
Requirements
-
Docker
-
A reverse proxy (e.g. Traefik) listening on
traefik-net -
Backend APIs running on ports:
3000โ Image converter github/image_converter3001โ Spreadsheet converter github/image_converter3002โ Media converter github/image_converter
docker-compose.yml
services:
morfeu:
container_name: morfeu
restart: unless-stopped
build:
context: .
dockerfile: Dockerfile
labels:
- "traefik.enable=true"
- "traefik.http.routers.morfeu.rule=Host(`morfeu.like`)"
- "traefik.http.routers.morfeu.entrypoints=web"
- "traefik.http.services.morfeu.loadbalancer.server.port=80"
networks:
- traefik-net
ports:
- "2005:80"
volumes:
- .:/usr/share/nginx/html
networks:
traefik-net:
external: trueThen run:
docker-compose up -d --buildThe app will be available at:
http://morfeu.like
Or via localhost:
http://localhost:2005
๐๏ธ File Structure (Simplified)
โโโ index.html # Main interface
โโโ styles.css # UI styling
โโโ scripts.js # Conversion logic and interactions
โโโ Dockerfile # NGINX base setup
โโโ docker-compose.yml # Container configuration
โโโ assets/ # Logo, favicon, screenshots
๐ง How It Works
- The frontend reads dropped/selected files.
- Based on extension, it defines the file type.
- Sends file via
fetch()to the correct API endpoint. - Streams the response and updates the progress bar.
- On success, download becomes available (or bundled in a ZIP).
Example URL for image:
http://192.168.1.100:3000/convert_image/?output_format=png
๐ Privacy
- No external requests (besides Google Fonts and JSZip CDN).
- Runs entirely in your local network.
- Perfect for private use, schools, or offline environments.
๐ Notes
- You are free to connect your own backends.
- Easily adaptable to use FastAPI, Flask, or Node.js as APIs.
- Fully static โ no database or server logic required.
๐งฑ Technologies
- HTML5
- CSS3 (modern + responsive)
- Vanilla JavaScript (with
fetch,FileReader,Blob, etc.) - Docker + NGINX
- JSZip (via CDN)
