Skip to main content

A pygame-based editor and Pillow renderer for HomLab JSON diagrams.

Project description

HomLab Editor

HomLab Editor is a pygame-based graphical editor for HomLab JSON diagrams, with a Pillow-based static renderer for producing image files without opening the editor window. It edits genus handles, border handles, ordinary nodes, edges, crossings, and the saved view parameters directly in the JSON file.

Chinese manual: docs/user-guide.zh-CN.md

Features

  • Creates a default HomLab JSON file when the target path does not exist.
  • Adds, drags, deletes, and connects ordinary nodes in the graphical editor.
  • Connects ordinary nodes to genus handles or border handles.
  • Adjusts genus count, view scale, window size, view center, and border spacing.
  • Detects crossings between non-adjacent line segments and lets the user swap the crossing order by clicking a crossing.
  • Supports read-only mode and a read-only crossing-pick mode for integration workflows.
  • Saves through a soft file lock next to the JSON file.
  • Provides command line entry points and a Python API.
  • Renders JSON diagrams to static images with Pillow through homlab-render.

Installation

Python 3.9 or newer is required.

For local development:

python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e .

For a normal package installation:

python -m pip install homlab-editor

Run The Editor

Open or create a HomLab JSON file:

homlab-editor data/example.json

The module entry point is equivalent:

python -m homlab_editor data/example.json

Open without allowing topology edits:

homlab-editor data/example.json --readonly

Open in read-only crossing-pick mode:

homlab-editor data/example.json --pick-crossing data/selected-crossing.json

In crossing-pick mode the user can still move and scale the view, but cannot edit nodes, edges, genus count, border spacing, or crossing order. Clicking a crossing closes the editor and writes the selected edge pair and crossing coordinates to the output JSON file.

Static Rendering

Render a HomLab JSON file to an image without opening a pygame window:

homlab-render data/example.json data/example.png --size 1000

--size sets the square output width and height in pixels. Static rendering auto-fits the drawn content by default and does not draw the editor toolbar.

Use the saved JSON view instead of auto-fitting:

homlab-render data/example.json data/example.png --size 1000 --use-json-view

Basic Editing

Left-click empty canvas space to create a node. Hold and drag a node to move it. Light-click a node or a handle to enter drawing mode. In drawing mode, click empty space to create and connect another node while staying in drawing mode; click an existing node or handle to connect and return to free mode.

Right-click an ordinary node to delete it. Right-click a hit-testable ordinary node-to-node edge to delete it. Left-click an ordinary node-to-node edge to split it by inserting a node at the cursor. Click a crossing to swap which of the two crossing edges is drawn on top.

Python API

from homlab_editor import HomologyLabEditor

editor = HomologyLabEditor("data/example.json", readonly=True)
editor.mainloop()

Static image rendering API:

from homlab_editor.static_image import render_homlab_file

render_homlab_file("data/example.json", "data/example.png", size=1000)

Documentation

Build

Build the source distribution and wheel:

python -m pip install build
python -m build

Build artifacts are written to dist/.

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

homlab_editor-0.1.3.tar.gz (30.9 kB view details)

Uploaded Source

Built Distribution

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

homlab_editor-0.1.3-py3-none-any.whl (34.7 kB view details)

Uploaded Python 3

File details

Details for the file homlab_editor-0.1.3.tar.gz.

File metadata

  • Download URL: homlab_editor-0.1.3.tar.gz
  • Upload date:
  • Size: 30.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.4.1 CPython/3.11.15 Windows/10

File hashes

Hashes for homlab_editor-0.1.3.tar.gz
Algorithm Hash digest
SHA256 782ebc78470395747ba2cd380e6d78dd2456efeb52ea51fa2a332c7ecebfe003
MD5 e717ef1b4dcb9e799fc21f09a1d71a3d
BLAKE2b-256 9eab5c48d06101786c8899dd9783d63fd4e99bee55f62437f2e9a46e8e111d86

See more details on using hashes here.

File details

Details for the file homlab_editor-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: homlab_editor-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 34.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.4.1 CPython/3.11.15 Windows/10

File hashes

Hashes for homlab_editor-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 b44deb188471c0e77ba539ecd1fc05f713a11aa0cf00b39ffe78013577614dcc
MD5 c2c2d1066f1b11f309921048ded0530f
BLAKE2b-256 b28f8a99f2b87eb0987ef2faaa673be80de71fa6362e887e7b7dae5fbc31e1f7

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