A personal media converter with a React frontend and an Express/FFmpeg processing server.
Supported image outputs include JPG, PNG, WEBP, AVIF, TIFF, and Windows ICO. ICO output is fitted and centred within a transparent 256×256 icon canvas.
- Node.js 20+
- FFmpeg and FFprobe available on
PATH
npm install
npm run devThe Vite frontend runs on port 5173 (or the next available port) and proxies /api
to the conversion server on port 8791.
npm run build
npm startThe production server serves both the API and the compiled site at
http://localhost:8791.
Environment variables:
PORT: HTTP port, defaults to8791HOST: listen address, defaults to0.0.0.0for local-network accessMAX_CONCURRENT_JOBS: simultaneous FFmpeg processes, defaults to2
Uploads are stored in the operating system's temporary directory. Input files are removed after conversion. Output files are removed after a successful download or after one hour.
Edit public/converter-config.json to control the
settings shown when the site first loads:
defaultFormats: default output format for video, audio, image, and GIF filesquality: number from10to100resolution:Original,4K,1080p,720p, or480pframeRate:Original,60 fps,30 fps,24 fps, or15 fpsbitrate:Auto,High,Medium,Low, orCustomsmartSizeLimit: enables or disables target-size optimisationtargetSizeMB: initial target file size in megabytes
The JSON file is loaded directly from public/converter-config.json at runtime in
both development and production. Restart the Node server once after introducing
this route; later config edits only require refreshing the browser and do not
require rebuilding the React bundle.
Production mode serves the website and API together on every network interface:
npm run build
npm startOpen the printed LAN access URL from another device on the same network. For
example, if the server computer is 192.168.1.33, use:
http://192.168.1.33:8791
Development mode also listens on the local network. Vite prints its network URL
after running npm run dev. Windows Firewall must allow inbound private-network
TCP traffic to the selected port.
To add the production firewall rule, open PowerShell as Administrator in the project directory and run:
powershell -ExecutionPolicy Bypass -File .\scripts\allow-lan-firewall.ps1The script permits TCP port 8791 only on the Windows Private profile and only
from LocalSubnet.