Files
mimaki/webui
Lukas Cremer cd846577a4 add webui
2026-02-03 22:41:29 +01:00
..
2026-02-03 22:41:29 +01:00
2026-02-03 22:41:29 +01:00
2026-02-03 22:41:29 +01:00
2026-02-03 22:41:29 +01:00
2026-02-03 22:41:29 +01:00

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)

  1. From the project root (mimaki/), install dependencies:

    If you get externally-managed-environment (Python 3.11+ / PEP 668) and dont want a venv, use:

    pip install --break-system-packages -r webui/requirements.txt
    

    Otherwise:

    pip install -r webui/requirements.txt
    

    Optional use a venv to avoid touching system Python:

    python3 -m venv venv
    source venv/bin/activate
    pip install -r webui/requirements.txt
    
  2. Config: Copy config.example.ini to config.ini and adjust (port, baudrate, web UI host/port, etc.). config.ini is gitignored.

    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://<raspi-ip>:5000 in a browser (e.g. http://192.168.1.10:5000).

  • Host: 0.0.0.0 so other devices on the network can connect.
  • Port: 5000 (override with PORT=8080 python webui/app.py if needed).

For production, run behind gunicorn and optionally a reverse proxy:

pip install --break-system-packages gunicorn   # or omit if not using system Python
gunicorn -w 1 -b 0.0.0.0:5000 "webui.app:app"

Usage

  1. Upload Choose an .hpgl or .plt file. It is validated and stored in webui/uploads/.
  2. Preview The drawing is converted to SVG and shown in the browser.
  3. Transform Flip, Rotate 90° / 180°, Scale + / , Center. Each action updates the stored program and the preview.
  4. Print Sends the current (transformed) program to the plotter: scale to fit, center, then write HPGL to serial.

API

  • POST /api/upload Upload HPGL file (form field file).
  • 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.