Document four new capabilities ported from upstream PRs since the initial handoff: PDF output (#367), connector strip lengths (#446), YAML-in-PNG round-trip (#234), and code quality improvements. Updated dependencies and next-steps checklist.
7.6 KiB
WireViz Fork — Web UI Integration Guide
| Field | Value |
|---|---|
| From | wireviz-integration-agent |
| To | web-ui-agent |
| Date | 2026-02-13 (Update 2) |
| Re | Community features merged for web UI consumption |
Repository
- Gitea: https://git.supported.systems/warehack.ing/WireViz
- Upstream: https://github.com/wireviz/WireViz
- Testing branch:
testing/web-ui-features
Branch Layout
master ← upstream mirror (v0.4.1)
feature/jinja2-preprocessor ← PR #382 (standalone)
feature/jumpers ← PR #455 (standalone)
testing/web-ui-features ← combined: jinja2 + jumpers merged together
The web UI should target testing/web-ui-features as its WireViz dependency.
Merged Features
1. Jinja2 Preprocessor (upstream PR #382)
YAML harness definitions now pass through a Jinja2 templating stage before parsing. This enables:
{% include %}— compose harnesses from reusable connector/cable definition files{% for %}— generate repetitive pin/wire definitions with loops{% if %}— conditional sections (e.g., optional debug connectors)- Template variables — parameterize harness definitions
CLI additions:
-I / --include-path— specify search path for Jinja2{% include %}templates- Outputs a
.rendered.ymlalongside other outputs showing the expanded YAML
Web UI implications:
- Users can define reusable connector/cable "libraries" as partial YAML files
- The web UI could offer a template variable input form
.rendered.ymlis useful for debugging — consider showing it in a "debug" panel- The Jinja2
EnvironmentusesFileSystemLoader, so template includes are path-relative
Example:
# connectors.yml (reusable library)
connectors:
DB9M:
type: D-Sub
subtype: male
pincount: 9
# main_harness.yml
{% include 'connectors.yml' %}
cables:
W1:
wirecount: 4
colors: [BK, RD, GN, BU]
2. Jumper Wire Support (upstream PR #455)
Major refactor adding jumpers as a first-class component alongside connectors and cables. This is a significant internal rewrite:
What changed:
- New
jumpers:top-level YAML section for defining jumper wires - Module renames:
DataClasses.py->wv_dataclasses.py,Harness.py->wv_harness.py - New color system:
SingleColor/MultiColordataclasses replacing string-based colors - New BOM system:
BomEntry/BomHashnamedtuples for cleaner bill-of-materials - New examples:
ex15andex16demonstrate jumper usage - Version bumped to
0.5-dev+refactor
Web UI implications:
- The YAML schema now has a
jumpers:section — UI forms/editors need to support this - BOM output format may differ from upstream v0.4.x — verify your BOM parser
- Color handling is now richer (multi-color wires) — UI color pickers could leverage this
- Example files in
examples/are all regenerated — good test fixtures
Example:
connectors:
J1:
type: Header
pincount: 4
jumpers:
JP1:
from: J1
to: J1
connections:
- [1, 2] # jumper between pins 1 and 2
Update 2 — Additional Ports & Hardening (2026-02-13)
The following features were ported from upstream PRs and landed on testing/web-ui-features after the initial handoff.
3. PDF Output (port of upstream PR #367)
PDF is now a supported output format via GraphViz native rendering.
What changed:
- New CLI flag:
-f Pgenerates PDF alongside other outputs Padded to the allowed format list inwv_harness.pyandwv_cli.py- GraphViz renders the PDF natively (no intermediate conversion step)
Web UI implications:
- Offer a "Download PDF" option alongside SVG/PNG
- PDF output is vector-based, so it scales well for printing wiring diagrams
4. Strip Length Specs (port of upstream PR #446)
Connectors now support a strip property specifying sleeve and insulation removal lengths. Useful for documenting wire prep instructions alongside the harness diagram.
What changed:
- New dataclasses:
StripSpecandStripinwv_dataclasses.py - Strip info rendered in connector diagram nodes via
wv_graphviz.py - New
strip:key under connector definitions in YAML
Example:
connectors:
X1:
type: Molex KK
pincount: 4
strip:
sleeve: "25 mm"
insulation: "5 mm"
Web UI implications:
- Connector detail views / forms should expose strip length fields
- Values are strings (include units), so a simple text input works
- Strip info appears in the rendered diagram, no special rendering needed in the UI
5. YAML-in-PNG Round-Trip (port of upstream PR #234, hardened)
PNGs now embed the original YAML source as compressed iTXT metadata. This allows round-tripping: export a PNG, then later extract the full harness definition back out.
What changed:
- New module:
wv_png_metadata.pywith key functions:save_yaml_to_png(yaml_str, png_path)— embed YAML into an existing PNGread_yaml_from_png(png_path)— extract YAML from a PNGhas_yaml_metadata(png_path)— check if a PNG contains embedded YAML
- Uses atomic writes (temp file + rename) to avoid corrupting PNGs on failure
- Preserves existing PNG metadata (doesn't clobber other iTXT chunks)
- 10 MB size guard when reading untrusted PNGs
- Version tag:
wireviz_meta_version: "1"for future compatibility - 19-test suite in
tests/test_png_metadata.py
Web UI implications:
- Users can drag-and-drop a WireViz PNG to import a harness definition
- Use
has_yaml_metadata()to detect whether a PNG is a WireViz export - Sharing harness designs becomes trivial — the PNG is the source file
- The 10 MB guard protects the server from oversized uploads
6. Code Quality Improvements
ParsedInputNamedTuple inwireviz.pyfor clean data flow between parsing stagesoutput_formatsnormalized to a tuple internally, preventing substring matching bugs (e.g.,"P" in "PNG"no longer incorrectly matches)
Dependencies
The merged branch requires these Python packages beyond upstream:
jinja2(for template preprocessor)pillow(for image handling, PNG metadata, from jumpers PR)pyyaml(explicit dep, from jumpers PR)tabulate(for BOM formatting, from jumpers PR)pytest(for running the test suite)
Install: pip install jinja2 pillow pyyaml tabulate pytest
Or from the repo: pip install -e . (setup.py includes all deps)
Known Considerations
-
Jinja2 + Jumpers interaction: Not explicitly tested together yet. The Jinja2 stage runs first (text preprocessing), then YAML parsing handles jumpers. Should work fine since they operate at different layers, but worth verifying with a combined test case.
-
Version string: Shows
0.5-dev+refactor— the web UI should not rely on version parsing against upstream releases. -
Generated outputs: All example SVG/PNG/HTML files in
examples/andtutorial/are from the jumpers PR. The Jinja2 examples are inexamples/jinja/.
Next steps for recipient:
- Point web UI's WireViz dependency at
git+https://git.supported.systems/warehack.ing/WireViz@testing/web-ui-features - Update YAML schema/editor to support
jumpers:section - Add Jinja2 template support in the UI (include path, template variables)
- Test BOM output parsing against the new format
- Create a combined test case using both Jinja2 templates and jumper definitions
- Expose PDF output option in web UI
- Display strip length info in connector detail views
- Leverage YAML-in-PNG for sharing/importing harness diagrams from PNGs
- Run test suite:
.venv/bin/pytest tests/