cd /news/developer-tools/how-i-built-a-free-online-image-pdf-… · home topics developer-tools article
[ARTICLE · art-46246] src=dev.to ↗ pub= topic=developer-tools verified=true sentiment=↑ positive

How I Built a Free Online Image & PDF Processing Platform with Vue 3 + FastAPI

A developer built iamuu, a free online image and PDF processing platform using Vue 3, FastAPI, Celery, and MinIO, offering over 100 image format conversions, 40 PDF tools, AI background removal, OCR, and digital signatures without registration or watermarks. The platform handles large files up to 5GB via streaming, preserves CMYK color profiles, and supports HEIC/RAW conversion. It also implements PKCS#12-based digital signatures and 10-language internationalization with prerendering for fast load times.

read3 min views1 publishedJul 1, 2026

I was tired of online file tools that watermarked my output, forced me to create an account, or secretly limited "free" to 2 files per day. So I spent 6 months building my own.

The result is iamuu — a free platform with 100+ image format conversions, 40+ PDF tools, AI background removal, OCR, and digital signatures. No registration required for basic use, no watermarks, files auto-deleted after processing.

Layer Choice Why
Frontend Vue 3 + TypeScript + Vite + Pinia Composition API, great DX, small bundle
Backend Python 3.12 + FastAPI Async by default, Pydantic validation, excellent performance
Queue Celery + Redis Image/PDF processing is CPU-heavy — must be async
Storage MinIO (S3-compatible) Self-hosted object storage, no vendor lock-in
DB PostgreSQL + SQLAlchemy 2.0 async Battle-tested, full async support
Deployment Docker Compose + Nginx Single server, cost-efficient for MVP stage

CMYK color profiles. Most online converters silently convert CMYK to RGB, destroying print-ready color information. Pillow can read CMYK, but saving to PNG/JPEG requires careful mode management. We preserve CMYK when converting between formats that support it (TIFF, PDF, JPEG), and only convert to RGB when the target format demands it. Getting this right took weeks of edge-case testing.

Large file streaming. Users upload files up to 5GB. You cannot load a 5GB file into memory. The upload service streams chunks directly to MinIO via presigned URLs, and workers stream-process from there. Celery task chains handle preprocessing → main processing → postprocessing without keeping the full file in memory.

HEIC/RAW conversion without codecs. HEIC is Apple's format based on HEVC compression. RAW files are proprietary camera formats. Both require native libraries (libheif, libraw) that are painful to install and version. We compile specific versions into our Docker image and wrap them behind a clean Python interface so the application code never touches native bindings directly.

PDF digital signatures. A real PKCS#12 certificate-based digital signature is completely different from pasting a signature image onto a page. The signature must be cryptographically embedded in the PDF structure per ISO 32000. pyHanko handles the heavy lifting, but configuring certificate chains, timestamp authorities, and signature appearances (visible vs. invisible) was a deep rabbit hole.

10-language i18n without flash. Vue i18n loads asynchronously. If you mount the app before the locale bundle arrives, users briefly see Chinese (the fallback) before switching to their language. The fix: resolve locale synchronously from the URL path before creating the i18n instance, preload the target locale, and only mount afterwards. Prerendered pages (830 routes × 10 languages) made this extra tricky — every page shares the same localhost

origin during prerender, so localStorage and cookies cross-contaminate locale detection.

Prerendering is both a blessing and a curse. Vite + vite-plugin-prerender generates static HTML for every route, giving near-instant TTFB (1ms from nginx). But it introduces problems you do not have in a pure SPA: locale detection cannot rely on cookies, flash-of-unstyled-content requires inline critical CSS, and a single prerender failure silently produces empty HTML without failing the build.

User trust matters more than features. The most common question I get is "what happens to my files?" A clear privacy policy, a visible "files auto-deleted" notice, and TLS 1.3 everywhere matter more to users than having one more format option.

Online processing is genuinely useful infrastructure. Most people cannot install desktop software on their work computer, and even fewer have the right codecs and tools. A reliable online tool that just works — with generous free limits and no dark patterns — actually helps people get work done.

Try it: [https://www.iamuu.com](https://www.iamuu.com)

Source: [GitHub](https://github.com/beenkevin25/xyzenith-xyz) (README only — the platform is not open source)

Happy to answer questions about the stack, the file processing pipeline, or running a production online tool platform.

── more in #developer-tools 4 stories · sorted by recency
── more on @iamuu 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/how-i-built-a-free-o…] indexed:0 read:3min 2026-07-01 ·