2.4 KiB
HPGL Plotter Web UI
Flask web interface for uploading HPGL files, previewing and transforming them (flip, rotate, scale, center), and sending to the plotter. Intended to run on a Raspberry Pi connected to the plotter via USB.
Setup (Raspberry Pi / Linux Mint / Debian)
From the project root (mimaki/), install dependencies. On Debian-based systems Python is externally managed (PEP 668), so use:
pip install --break-system-packages -r webui/requirements.txt
Then copy config.example.ini to config.ini and set the plotter port etc. (optional).
cp config.example.ini config.ini
Edit config.ini to set the plotter port (e.g. /dev/ttyUSB0) and optionally web UI port/host.
Run
From the project root (mimaki/):
python webui/app.py
Then open http://localhost:5000 (or http://<raspi-ip>:5000 from another device). Host is 0.0.0.0, port 5000 (see config.ini).
For production with gunicorn: pip install --break-system-packages gunicorn then gunicorn -w 1 -b 0.0.0.0:5000 "webui.app:app".
Usage
File tab
- Upload – Choose an
.hpglor.pltfile. It is validated and stored inwebui/uploads/. - Preview – The drawing is converted to SVG and shown in the browser.
- Transform – Flip, Rotate 90° / 180°, Scale + / −, Center, Scale to bounds. Each action updates the stored program and the preview.
- Print – Sends the current (transformed) program to the plotter: scale to fit, center, then write HPGL to serial.
Text tab
- Type text, select a font (from
font/or.git/font/, e.g.Melange-Bold.otf), set size (pt), then Generate HPGL. - The generated HPGL becomes the current program; use the same Preview, Transform, and Print as in the File tab.
Fonts: put .otf or .ttf files in the project font/ folder (or they are read from .git/font/ if present). The Text tab requires matplotlib (pip install matplotlib).
API
POST /api/upload– Upload HPGL file (form fieldfile).GET /api/svg– Get current program as SVG (query:width,height).POST /api/transform– Body:{"action": "flip"|"rotate"|"scale"|"centralize", "angle": 90, "factor": 1.25}.POST /api/print– Send current program to plotter.GET /api/status–has_file,filename,plotter_ready.
Session is used to keep the current file path; no database.