Skip to main content

Simple Annotation Whiteboard — pen, line, arrow, circle, square, and text annotation for topology diagrams

Project description

pywboard

Simple Annotation Whiteboard — a lightweight desktop tool for annotating network topology diagrams and screenshots with pen, lines, arrows, shapes, and text labels.

Built with PyQt6 + QWebEngine. Zero CDN dependencies. Fully offline.

pywboard screenshot

Install

pip install pywboard

Or from source:

git clone https://github.com/scottpeterman/pywboard.git
cd pywboard
pip install -e .

Requirements

  • Python 3.9+
  • PyQt6 >= 6.5
  • PyQt6-WebEngine >= 6.5

Usage

# Launch empty canvas
pywboard

# Open with a topology image
pywboard topology.png

# Module execution
python -m pywboard
python -m pywboard screenshot.png

Features

Drawing Tools

Tool Key Description
Pen P Freehand drawing
Line L Straight lines
Arrow A Directional arrows
Rectangle R Rectangles and boxes
Ellipse O Ellipses and circles
Text T Click to place text labels
Eraser E Remove annotations
Pan H Move the background image

Canvas Sizes

Preset sizes from the toolbar dropdown:

  • XGA — 1024 × 768
  • Full HD — 1920 × 1080
  • QHD — 2560 × 1440
  • 4K UHD — 3840 × 2160
  • Large Topo — 2400 × 1600
  • XL Topo — 3200 × 2400
  • XXL Topo — 4000 × 3000
  • Custom — up to 8000 × 8000

View Modes

  • FIT — scales canvas to fit the window (default)
  • 1:1 — actual pixel size with scroll navigation

Toggle with F key, or Ctrl+0 (fit) / Ctrl+1 (actual size).

Keyboard Shortcuts

Shortcut Action
Ctrl+N New canvas (reset all)
Ctrl+O Open image (native dialog)
Ctrl+Shift+S Export PNG (native save dialog)
Ctrl+V Paste image from clipboard
Ctrl+Z Undo last annotation
Ctrl+Q Quit
Ctrl+0 Fit to window
Ctrl+1 Actual size (1:1)
F Toggle FIT / 1:1

Other Features

  • New canvas — reset everything and start fresh without restarting
  • Drag & drop images onto the canvas
  • 9 colors with 4 stroke widths
  • Native file dialogs for open/save (via PyQt6 bridge)
  • Dark theme throughout — toolbar, menus, scrollbars
  • Export full-resolution annotated PNG

Architecture

pywboard/
├── pyproject.toml
├── README.md
├── LICENSE
└── pywboard/
    ├── __init__.py
    ├── __main__.py          # python -m pywboard
    ├── app.py               # PyQt6 QWebEngineView wrapper
    └── assets/
        └── annotate.html    # Self-contained HTML/CSS/JS canvas app

The HTML annotation engine is entirely self-contained — no external fonts, no CDN JavaScript, no build step. The PyQt6 wrapper adds native file dialogs, menu bar, CLI image loading, and dark window chrome via a QWebChannel bridge.

The HTML also works standalone in any browser for quick use without Python.

License

GPLv3

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pywboard-0.1.2.tar.gz (18.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pywboard-0.1.2-py3-none-any.whl (17.2 kB view details)

Uploaded Python 3

File details

Details for the file pywboard-0.1.2.tar.gz.

File metadata

  • Download URL: pywboard-0.1.2.tar.gz
  • Upload date:
  • Size: 18.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for pywboard-0.1.2.tar.gz
Algorithm Hash digest
SHA256 13c018f04e82e361f536920a259cfbb148a90f02c5266bfaf41cd9159f655b8b
MD5 cc25162d480d1ee92531bea6bdce22b7
BLAKE2b-256 bd0e4b5d7fdcf909fc21b1526075144b5983d255bcfe731e3f993dcf60ac8127

See more details on using hashes here.

File details

Details for the file pywboard-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: pywboard-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 17.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for pywboard-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 6470b0b118a01d26c500dcde0beeb63c710b1f4a84886a7035199b5ca82c918c
MD5 eb8e1c079979afb3bcb47f62b5d0bc42
BLAKE2b-256 0e05e7211a39973fe9eb742edc1dc75714ff071dbc72216ce1961b0dfeb9196f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page