Self-Hosted File Converter: ConvertX's 1000+ Format Support (Complete Docker Deployment)
You upload a DOCX to an online converter. It says "file too large." You try another—it wants $9/month for batch processing. A third works, but now your sensitive client document lives on someone else's server. Forever.
ConvertX takes a different approach: it's a self-hosted, open-source file conversion platform supporting 1000+ formats across video, audio, images, documents, e-books, vector graphics, and 3D models.[388][156][393] One Docker container. Zero file size limits. Complete privacy. And it's free.
With 9.2k GitHub stars, 442 forks, and 18 integrated converters (FFmpeg, ImageMagick, Pandoc, LibreOffice, Calibre, Inkscape, and more), ConvertX is the universal file translator you've been looking for.[388][165] This guide walks through the complete architecture, deployment strategies, security hardening, and production best practices—everything you need to replace your scattered conversion workflows with a single, self-hosted hub.
TL;DR: What ConvertX Actually Does
ConvertX is a web-based conversion service that runs on your own infrastructure, handling 1000+ file format conversions without ever sending data to third parties.[388][156][393]
Quick Facts
| Feature | Details |
|---|---|
| Format support | 1000+ formats (18 converters)[388] |
| Tech stack | TypeScript (90%), Bun runtime, Elysia framework[388][392] |
| License | AGPL-3.0 (open source)[388] |
| Deployment | Single Docker container[388][394] |
| GitHub stars | 9.2k[388] |
| File size limits | Only limited by your disk space[156][393] |
| Privacy | Self-hosted, data never leaves your server[156][393][396] |
| Cost | $0 for software + your infrastructure[156][393] |
The 18 Converters Under the Hood
ConvertX isn't a single tool—it's an orchestration layer that wires together 18 professional-grade conversion engines:[388][165]
| Converter | Use Case | Input Formats | Output Formats |
|---|---|---|---|
| FFmpeg | Video/Audio | ~472 | ~199 |
| ImageMagick | Images | 245 | 183 |
| GraphicsMagick | Images | 167 | 130 |
| Assimp | 3D Assets | 77 | 23 |
| Pandoc | Documents | 43 | 65 |
| LibreOffice | Documents | 41 | 22 |
| Calibre | E-books | 26 | 19 |
| Vips | Images (fast) | 45 | 23 |
| Inkscape | Vector graphics | 7 | 17 |
| libjxl | JPEG XL | 11 | 11 |
| Potrace | Raster → vector | 4 | 11 |
| VTracer | Raster → vector | 8 | 1 |
| Dasel | Data files | 5 | 4 |
| dvisvgm | Vector images | 4 | 2 |
| libheif | HEIF images | 2 | 4 |
| resvg | SVG rendering | 1 | 1 |
| msgconvert | Outlook emails | 1 | 1 |
| XeLaTeX | LaTeX documents | 1 | 1 |
Total theoretical combinations: 166,000+ unique conversion paths.[388]
Why Self-Host Instead of Using Online Converters?
The Problem with Online Tools
CloudConvert, Zamzar, OnlineConvert, and similar services all suffer from:
- File size caps: 100MB-1GB limits (CloudConvert free tier: 25 files/day)[156][393]
- Privacy risks: You upload sensitive files to third-party servers
- Subscription costs: $8-25/month for batch processing and higher limits
- Ads: Free tiers inject ads into the conversion flow
- API restrictions: Paid-only API access for automation
- Internet dependency: No offline use
ConvertX Advantages
| Dimension | ConvertX | Online Converters |
|---|---|---|
| Privacy | ✅ Data never leaves your server[156][393][396] | ⌠Third-party upload |
| File size | ✅ Only limited by disk space[156][393] | ⌠100MB-1GB caps |
| Cost | ✅ $0 for software[156][393] | ⌠$8-25/month |
| Format support | ✅ 1000+ (18 converters)[388][156] | âš ï¸ 200-500 formats |
| Ads | ✅ None | ⌠Ads on free tiers |
| Batch processing | ✅ Built-in[388] | âš ï¸ Premium only |
| API | ✅ Self-hosted API | ⌠Paid API tiers |
| Offline | ✅ Works without internet[156] | ⌠Internet required |
Break-even cost analysis (12 months):
- ConvertX (VPS): $24/month × 12 = $288/year (unlimited conversions)
- CloudConvert (Paid): $9/month × 12 = $108/year (12,000 conversions total, ~33/day)
- Overage: $8 per 500 conversions beyond limit
If you convert >15,000 files/year, ConvertX is cheaper. Plus: no privacy risk, no file size limits.[156][393][396]

Complete Docker Deployment Guide
Quick Start (5 Minutes)
The fastest way to get ConvertX running:[388][394]
docker run -d \
--name convertx \
-p 3000:3000 \
-v ~/convertx-data:/app/data \
ghcr.io/c4illin/convertx
Then visit http://localhost:3000 in your browser. First visitor automatically becomes admin—create your account immediately.[388][394]
âš ï¸ Security warning: Don't leave ConvertX unconfigured and publicly accessible. Anyone can register the first account.[388]
Production Deployment (Docker Compose)
For teams and persistent deployments, use Docker Compose:[388][392]
# docker-compose.yml
services:
convertx:
image: ghcr.io/c4illin/convertx
container_name: convertx
restart: unless-stopped
ports:
- "127.0.0.1:3000:3000" # Only expose to localhost
environment:
- JWT_SECRET=aLongAndSecretStringUsedToSignTheJSONWebToken1234
# - HTTP_ALLOWED=true # Uncomment ONLY for local development
volumes:
- ./data:/app/data
Start the service:
docker-compose up -d
Check logs:
docker logs -f convertx
Environment Variables: Full Configuration Reference
ConvertX supports 11 environment variables for customization:[388][392]
| Variable | Default | Description | Production Recommendation |
|---|---|---|---|
| JWT_SECRET | randomUUID() | Secret for signing JSON Web Tokens | REQUIRED: Set to a long, random string (50+ characters) |
| ACCOUNT_REGISTRATION | false | Allow user registration | false (invite-only) or true (public) |
| HTTP_ALLOWED | false | Allow HTTP connections | false (HTTPS only in production) |
| ALLOW_UNAUTHENTICATED | false | Allow unauthenticated users | false (production) or true (local dev) |
| AUTO_DELETE_EVERY_N_HOURS | 24 | Auto-delete files older than N hours | 6 or 12 (aggressive cleanup) |
| WEBROOT | / | Base path for application | /convert for subdirectory hosting |
| FFMPEG_ARGS | (empty) | Custom FFmpeg arguments | -preset veryfast -crf 28 for speed |
| HIDE_HISTORY | false | Hide conversion history page | false (useful for auditing) |
| LANGUAGE | en | Language for date formatting (BCP 47) | en, fr, de, etc. |
| UNAUTHENTICATED_USER_SHARING | false | Share history between anonymous users | false (privacy) |
| MAX_CONVERT_PROCESS | 0 | Max concurrent conversions (0 = unlimited) | 5-10 (prevent CPU exhaustion) |
Recommended Production Config
services:
convertx:
image: ghcr.io/c4illin/convertx
container_name: convertx
restart: unless-stopped
ports:
- "127.0.0.1:3000:3000"
environment:
- JWT_SECRET=${JWT_SECRET} # Store in .env file
- ACCOUNT_REGISTRATION=false
- AUTO_DELETE_EVERY_N_HOURS=12
- MAX_CONVERT_PROCESS=10
- FFMPEG_ARGS=-preset veryfast -crf 28
volumes:
- ./data:/app/data
Create .env file:
# .env
JWT_SECRET=$(openssl rand -hex 32)
Security Hardening: HTTPS, Reverse Proxy, and Best Practices
The HTTPS Requirement
âš ï¸ CRITICAL: ConvertX login only works over:[388][392]
- HTTPS (TLS/SSL)
- localhost (127.0.0.1)
- HTTP_ALLOWED=true (development only, NOT recommended)
If you access ConvertX over HTTP from a non-localhost address, login will fail silently.
Reverse Proxy Setup (nginx)
For production, place ConvertX behind a reverse proxy with HTTPS:[405][408][411]
nginx configuration:
# /etc/nginx/sites-available/convertx
server {
listen 80;
server_name convert.yourdomain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name convert.yourdomain.com;
# SSL certificates (Let's Encrypt)
ssl_certificate /etc/letsencrypt/live/convert.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/convert.yourdomain.com/privkey.pem;
# Allow large file uploads
client_max_body_size 1000M;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Increase timeout for large conversions
proxy_connect_timeout 600s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
}
}
Enable and reload:
sudo ln -s /etc/nginx/sites-available/convertx /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Reverse Proxy Setup (Caddy)
Caddy is simpler and handles HTTPS automatically:[405]
# /etc/caddy/Caddyfile
convert.yourdomain.com {
reverse_proxy localhost:3000
request_body {
max_size 1GB
}
timeouts {
read 10m
write 10m
}
}
Reload Caddy:
sudo systemctl reload caddy
Additional Security Measures
1. Disable public registration:
environment:
- ACCOUNT_REGISTRATION=false
Create accounts manually via the admin panel.
2. Aggressive file cleanup:
environment:
- AUTO_DELETE_EVERY_N_HOURS=6
Prevents disk exhaustion from abandoned conversions.
3. Limit concurrent conversions:
environment:
- MAX_CONVERT_PROCESS=5
Prevents CPU/memory exhaustion under load.
4. Use secrets management:
environment:
- JWT_SECRET=${JWT_SECRET}
Store secrets in .env (add to .gitignore).
5. Monitor logs:
docker logs -f --tail 100 convertx
Watch for failed conversions, authentication attempts, errors.
File Storage and Disk Management
Data Directory Structure
ConvertX stores all data in /app/data/ inside the container:[388][392]
/app/data/
├── database.db # SQLite (user accounts, history)
├── uploads/ # Temporary uploaded files
├── conversions/ # Converted output files
└── temp/ # Conversion working directory
Volume mount (host → container):
volumes:
- ./data:/app/data
On the host machine, data lives in ./data/ (relative to docker-compose.yml).
Disk Space Management
Conversions accumulate quickly. Without cleanup:[388][392]
- Video conversions: 1-10GB per file
- Batch image processing: 100MB-1GB per job
- Document conversions: 10-100MB per file
AUTO_DELETE_EVERY_N_HOURS automatically purges old files:[388][392]
environment:
- AUTO_DELETE_EVERY_N_HOURS=12
- Checks every 12 hours
- Deletes files older than 12 hours
- Set to
0to disable (manual cleanup only)
Manual cleanup:
# Delete all conversions (keep database)
sudo rm -rf ./data/conversions/*
sudo rm -rf ./data/uploads/*
sudo rm -rf ./data/temp/*
# Check disk usage
df -h ./data
Production recommendation: AUTO_DELETE_EVERY_N_HOURS=6 (aggressive) or 12 (balanced).[392]
Docker Images and Architectures
ConvertX publishes images to GitHub Container Registry (GHCR) and Docker Hub:[388][398]
| Image | Description | Use Case |
|---|---|---|
ghcr.io/c4illin/convertx:latest |
Latest stable release (GHCR) | Recommended for production |
ghcr.io/c4illin/convertx:main |
Latest commit on main branch (GHCR) | Bleeding edge, testing |
c4illin/convertx:latest |
Latest stable release (Docker Hub) | Alternative registry |
c4illin/convertx:main |
Latest commit (Docker Hub) | Bleeding edge, testing |
Architecture support:[392][398]
- linux/amd64 (Intel/AMD x86-64)
- linux/arm64 (Raspberry Pi 4, Apple Silicon)
Docker automatically pulls the correct image for your architecture.
Use Cases: When to Deploy ConvertX
1. Video & Audio Workflows
FFmpeg integration (~472 input formats → ~199 output formats):[388][156]
- Video transcoding: MP4 → WebM, MKV, AVI, MOV, FLV
- Audio extraction: MP4 → MP3, AAC, FLAC, OGG
- Compression:
-preset veryfast -crf 28viaFFMPEG_ARGS - Format normalization: Convert all uploads to H.264 + AAC for web
Example: Media production company converting client deliverables to standardized formats (MP4 for web, ProRes for editing, AVI for archive).
2. Document Processing Pipelines
LibreOffice (41 → 22) + Pandoc (43 → 65):[388][156]
- Office compatibility: DOCX ↔ ODT ↔ PDF ↔ RTF
- Presentations: PPTX ↔ ODP ↔ PDF
- Spreadsheets: XLSX ↔ ODS ↔ CSV
- Markdown workflows: MD → DOCX, MD → PDF (via Pandoc)
- LaTeX publishing: TEX → PDF (via XeLaTeX)
Example: Legal firm converting client contracts (DOCX) to archival PDFs with watermarks, then to HTML for web publishing.
3. Image Optimization for Web
Vips (45 → 23) + ImageMagick (245 → 183) + GraphicsMagick (167 → 130):[388][156]
- Format modernization: JPEG/PNG → WebP (20-40% smaller)
- Responsive images: Generate 1x, 2x, 3x variants
- Bulk resizing: Standardize dimensions across product catalogs
- High-resolution support: 4K, 8K image processing
Example: E-commerce site batch-converting 10,000 product images to WebP for faster page loads.
4. E-book Publishing
Calibre (26 → 19):[388][156][391]
- Multi-format distribution: EPUB ↔ MOBI ↔ PDF ↔ AZW3
- Kindle preparation: EPUB → MOBI with metadata preservation
- Library standardization: Convert mixed-format library to EPUB
Example: Indie publisher converting manuscripts to EPUB (iBooks), MOBI (Kindle), and PDF (print-on-demand).
5. Vector Graphics and Logo Assets
Inkscape (7 → 17) + resvg (SVG rendering):[388][156]
- Logo export: SVG → PNG (favicon), SVG → PDF (print)
- Design handoff: AI → SVG → PNG variants
- Icon generation: SVG → multi-resolution PNG sets
Example: Design agency exporting client logos to all requested formats (SVG for web, EPS for print, PNG for social media).
6. 3D Model Pipelines
Assimp (77 → 23):[388][156]
- Game engine prep: FBX → GLTF for Three.js
- 3D printing: OBJ → STL for slicing software
- CAD interop: STEP ↔ Collada ↔ OBJ
Example: Architecture firm converting Revit exports (FBX) to web-friendly GLTF for 3D portfolio viewer.
7. Raster-to-Vector Conversion
Potrace (4 → 11) + VTracer (8 → 1):[388][156]
- Logo vectorization: Bitmap logo → SVG (scalable)
- Scan cleanup: Paper sketch → vector outline
- Embroidery prep: Image → vector path for CNC machines
Example: T-shirt printing service converting customer-uploaded JPG logos to SVG for scalable printing.
Performance Optimization and Resource Planning
Resource Requirements
| Workload | CPU | RAM | Disk | Network |
|---|---|---|---|---|
| Light (10-50 conversions/day) | 2 vCPU | 2GB | 50GB SSD | 100Mbps |
| Medium (100-500 conversions/day) | 4 vCPU | 8GB | 200GB SSD | 1Gbps |
| Heavy (1000+ conversions/day) | 8+ vCPU | 16GB+ | 500GB+ SSD | 1Gbps |
Converter-specific demands:[392][156]
- FFmpeg (video): CPU-intensive (multi-core scaling), 1-10GB disk per conversion
- ImageMagick (images): RAM-intensive (large images), fast I/O
- LibreOffice (docs): Moderate CPU/RAM, headless rendering
- Assimp (3D): High RAM (complex models), CPU for mesh processing
Optimization Strategies
1. Limit concurrent conversions:
environment:
- MAX_CONVERT_PROCESS=5
Prevents CPU/RAM exhaustion. Adjust based on available resources.[388][392]
2. Fast FFmpeg presets:
environment:
- FFMPEG_ARGS=-preset veryfast -crf 28
Sacrifices compression efficiency for speed (acceptable for most use cases).
3. Aggressive file cleanup:
environment:
- AUTO_DELETE_EVERY_N_HOURS=6
Frees disk space quickly.[388][392]
4. Reverse proxy caching (nginx):
location /assets/ {
proxy_pass http://localhost:3000/assets/;
proxy_cache_valid 200 30d;
expires 30d;
}
Cache static assets (CSS, JS) to reduce load on ConvertX.
5. CDN offload:
After conversion, upload results to S3/CloudFront and serve from CDN instead of ConvertX server.
Troubleshooting Common Issues
Issue 1: Can't Login
Symptoms: Login page loads but login fails silently.
Causes:[388][392]
- Accessing over HTTP (not localhost)
- Missing HTTPS certificate
Solutions:
- Access via
http://localhost:3000(if local) - Set
HTTP_ALLOWED=true(development only) - Set up HTTPS reverse proxy (production)
Verify:
curl -I https://convert.yourdomain.com
# Should return: HTTP/2 200
Issue 2: Permission Denied on Database
Symptoms: unable to open database file error in logs.[388]
Cause: Docker container can't write to mounted volume due to file ownership mismatch.
Solution:
# Option 1: Change ownership to Docker user (UID 1000)
sudo chown -R 1000:1000 ./data
# Option 2: Change permissions (less secure)
sudo chmod -R 755 ./data
Verify:
ls -la ./data
# Should show: drwxr-xr-x ... 1000 1000 ... database.db
Issue 3: Conversion Hangs or Fails
Symptoms: Upload succeeds but conversion hangs indefinitely or fails with cryptic error.
Causes:
- Unsupported format variant
- Corrupted source file
- Resource exhaustion (CPU/RAM)
Solutions:
1. Check converter logs:
docker logs -f convertx
Look for FFmpeg errors, LibreOffice crashes, or OOM (out-of-memory) kills.
2. Verify format support:
Check the converter table (Section 1.1) to confirm your format is supported.
3. Increase Docker memory limit:
services:
convertx:
mem_limit: 8g
memswap_limit: 8g
Or via docker run:
docker run --memory=8g --memory-swap=8g ...
4. Test file manually:
docker exec -it convertx sh
ffmpeg -i /app/data/uploads/test-video.mp4 -c copy /tmp/output.mp4
If manual conversion works, issue is in ConvertX orchestration. File a GitHub issue.[388]
Issue 4: Disk Space Exhaustion
Symptoms: Conversions fail, df -h shows 100% disk usage.
Cause: Conversions accumulating faster than auto-delete cleanup.
Solutions:
1. Lower auto-delete threshold:
environment:
- AUTO_DELETE_EVERY_N_HOURS=6
More aggressive cleanup.[388][392]
2. Manual cleanup:
sudo rm -rf ./data/conversions/*
sudo rm -rf ./data/uploads/*
sudo rm -rf ./data/temp/*
3. Monitor disk usage:
# Set up cron job to alert at 80% usage
df -h ./data | awk 'NR==2 {if ($5+0 > 80) print "ALERT: ConvertX disk usage at " $5}'
4. Add more storage:
- Resize VPS disk
- Mount external volume to
./data
Advanced Deployment Scenarios
Scenario 1: Personal Use (Local Development)
Goal: Quick setup for local file conversions.
docker run -d \
--name convertx \
-p 3000:3000 \
-v ~/convertx-data:/app/data \
-e HTTP_ALLOWED=true \
-e ALLOW_UNAUTHENTICATED=true \
ghcr.io/c4illin/convertx
- HTTP_ALLOWED: Skip HTTPS requirement (local only)
- ALLOW_UNAUTHENTICATED: Skip login (single-user)
- Access:
http://localhost:3000
Scenario 2: Team Deployment (VPS + HTTPS)
Goal: Secure multi-user deployment for small team.
docker-compose.yml:
services:
convertx:
image: ghcr.io/c4illin/convertx
container_name: convertx
restart: unless-stopped
ports:
- "127.0.0.1:3000:3000"
environment:
- JWT_SECRET=${JWT_SECRET}
- ACCOUNT_REGISTRATION=true
- AUTO_DELETE_EVERY_N_HOURS=12
- MAX_CONVERT_PROCESS=10
volumes:
- ./data:/app/data
nginx reverse proxy (see Section 4.2).
Cloudflare DNS:
- Point
convert.yourdomain.comto VPS IP - Enable "Proxied" for DDoS protection
Scenario 3: Enterprise (Cloud PaaS)
Goal: One-click deploy on managed platform.
Railway (one-click deploy):[390]
- Visit https://railway.com/deploy/convertx
- Click "Deploy Now"
- Railway provisions container + subdomain automatically
Hostinger VPS (one-click Docker):[396]
- Select "Docker" template in VPS dashboard
- Paste
ghcr.io/c4illin/convertximage - Hostinger auto-configures networking + SSL
Render.com (Docker deploy):
- Create new "Web Service"
- Connect GitHub repo or use image:
ghcr.io/c4illin/convertx - Set environment variables via dashboard
- Render auto-provisions HTTPS domain
Scenario 4: High-Availability (Multi-Instance)
Goal: Load-balanced, redundant deployment for enterprise.
Architecture:
- 2+ ConvertX instances (separate containers/VMs)
- Shared storage (NFS, S3, MinIO) for
/app/data - Load balancer (nginx, HAProxy, or cloud LB)
- Database replication (SQLite → PostgreSQL for multi-instance)
Challenge: ConvertX uses SQLite (single-file DB), which doesn't support multi-writer replication. For HA, you'd need to:
- Fork ConvertX and replace SQLite with PostgreSQL
- Use shared NFS volume for database (not recommended)
- OR: Deploy multiple single-instance ConvertX services behind load balancer with sticky sessions
Cost Analysis: ConvertX vs Alternatives
12-Month Total Cost of Ownership
| Solution | Upfront Cost | Monthly Cost | Annual Cost | Notes |
|---|---|---|---|---|
| ConvertX (VPS) | $0 | $24 (4GB RAM VPS) | $288 | Unlimited conversions[156][393] |
| ConvertX (Cloud) | $0 | $50 (Railway/Render) | $600 | Managed platform[390] |
| CloudConvert (Free) | $0 | $0 | $0 | 25 files/day, 100MB limit |
| CloudConvert (Standard) | $0 | $9 | $108 | 1,000 conversions/month |
| CloudConvert (Pro) | $0 | $25 | $300 | 5,000 conversions/month |
| Adobe Acrobat Pro | $0 | $20 | $240 | PDF-only, single user |
| HandBrake + GIMP + ... | $0 | $0 | $0 | Free desktop apps, fragmented UX |
Break-even analysis:
- If you convert >15,000 files/year, ConvertX VPS ($288) beats CloudConvert Standard ($108 + overage)
- If you convert <1,000 files/month, CloudConvert Standard ($108) is cheaper
- If you need privacy or unlimited file sizes, ConvertX is the only viable option[156][393][396]
When NOT to Use ConvertX
ConvertX isn't always the right choice:
⌠Low-frequency conversions (<10 files/month): Online tools faster, no setup
⌠No infrastructure available: Can't run Docker, no VPS budget
⌠Mobile-first workflows: ConvertX is web-only, no native mobile apps
⌠No technical expertise: Setup requires Docker, CLI, reverse proxy knowledge
⌠Specialized formats: Niche converters (e.g., CAD, GIS) may need dedicated tools
Future Roadmap and Community
Requested Features (Open Issues)[388]
- S3/MinIO backend: Distributed storage for multi-instance deployments
- WebSocket progress streaming: Real-time conversion progress
- Batch API endpoints: Programmatic bulk conversions
- Conversion presets: "Web Optimized", "Print Quality", etc.
- More converters: Check GitHub issues tagged "converter request" (easy contributions)
Community Stats[388]
- 28 contributors
- 442 forks
- 9.2k stars
- 27 releases (v0.15.1 latest as of January 2026)
Contributing
Pull requests welcome![388] Easy entry points:
- Add converters (tagged "converter request")
- Improve documentation
- Fix bugs and cleanup issues
- Use conventional commits for commit messages
Key Takeaways
When to Deploy ConvertX
✅ Privacy-sensitive conversions (legal, medical, financial documents)[156][393][396]
✅ High-volume batch processing (no per-conversion fees)[156][393]
✅ Large file support (multi-GB videos, high-res images)[156][393]
✅ Unified conversion hub (1000+ formats, 18 converters)[388][156]
✅ Team collaboration (multi-account system)[388]
✅ Offline/air-gapped environments[156]
✅ API integration for automation[156][393]
Production Checklist
Before deploying ConvertX to production:[388][392]
- Set JWT_SECRET to long, random string (50+ characters)
- Disable ACCOUNT_REGISTRATION or use invite-only
- Set AUTO_DELETE_EVERY_N_HOURS to 6-12 (disk cleanup)
- Limit MAX_CONVERT_PROCESS to 5-10 (prevent CPU exhaustion)
- Deploy HTTPS reverse proxy (nginx/Caddy + Let's Encrypt)
- Monitor disk usage (
df -h ./data) - Set up backup strategy (daily backup of
./data/database.db) - Test conversion workflows for your specific formats
- Document recovery procedures (restore from backup)
Final Verdict
ConvertX is the self-hosted alternative to CloudConvert, Zamzar, and other online converters—offering 1000+ format support, zero file size limits, complete privacy, and unlimited conversions for the cost of a $24/month VPS.[388][156][393][396]
If you're converting files regularly, dealing with sensitive data, or frustrated by online converter limitations, ConvertX is worth the 10-minute Docker setup. The open-source community backing (9.2k stars, 442 forks, 28 contributors) ensures ongoing development and support.[388]
Get started:
docker run -p 3000:3000 -v ./data:/app/data ghcr.io/c4illin/convertx
Visit http://localhost:3000 and convert your first file.
Further Resources
- GitHub: https://github.com/C4illin/ConvertX[388]
- Docker Hub: https://hub.docker.com/r/c4illin/convertx
- GHCR: https://github.com/C4illin/ConvertX/pkgs/container/convertx[398]
- Railway Deploy: https://railway.com/deploy/convertx[390]
- Documentation: See README.md in GitHub repo[388]
- Community Support: GitHub Issues and Discussions[388]
Last updated: January 29, 2026. Versions, pricing, and features subject to change. All data verified against official ConvertX repository and deployment guides.