vexy-lines-run
Desktop GUI for Vexy Lines style transfer: load images, .lines files, or video, pick a style, export.
Built with CustomTkinter. Runs on macOS, Windows, and Linux wherever Tk is available.
Install
pip install vexy-lines-run
Core dependencies (CustomTkinter, tkinterdnd2, CTkMenuBarPlus, Pillow, loguru)
install automatically. Video processing dependencies (OpenCV, PyAV) are pulled
in transitively by vexy-lines-apy. To pin them explicitly:
pip install "vexy-lines-run[video]"
For AI-assisted layer rename:
pip install "vexy-lines-run[ai]"
Launch
vexy-lines-run
Or:
python -m vexy_lines_run
From Python:
from vexy_lines_run import launch
launch()
Features
Three input tabs
- Lines: load
.linesfiles; export embedded previews or apply a new style - Images: load PNG, JPG, WEBP, and other rasters; the app applies the style via the MCP API
- Video: load MP4, MOV, MKV, or similar; per-frame style transfer with audio passthrough
Style picker
Select a primary style from any .lines file. Optionally select an end style: the app interpolates the two linearly across the input sequence. Both show inline thumbnail previews.
The app preserves matching image-filter chains on fills and interpolates them as part of the style.
AI Rename Layers & Fills
Lines ▸ AI Rename Layers & Fills… renames a .lines document's generic
captions (Layer, Blended, Linear) to describe what each
fill actually draws,
then names each layer from
its fills. Only the captions change. After a confirmation and a Save dialog,
each fill is rendered in Vexy Lines and described by a vision model on a
background thread (progress shows in the title bar); the renamed copy defaults to
<stem>-renamed.lines. Needs the [ai] extra (pip install "vexy-lines-run[ai]"),
the Vexy Lines app, and an OpenAI-compatible /v1 LLM endpoint. Set it in
Lines ▸ AI Rename Settings… or via VEXY_LINES_LLM_API_URL,
VEXY_LINES_LLM_API_KEY, VEXY_LINES_LLM_MODEL_VISION, and VEXY_LINES_VLM_MODEL.
See the full guide.
Export formats
| Format | Notes |
|---|---|
| SVG | Vector output from the style engine |
| PNG / JPG | Raster, with optional 2× upscale |
| MP4 | Re-encoded video with styled frames, optional audio |
| LINES | Copy .lines files directly (Lines tab only) |
Drag-and-drop onto any input list (via tkinterdnd2)
Background processing: export runs on a daemon thread; the progress bar updates live and the UI stays responsive
Architecture
app.py App(CTk) — window, three tabs, style pickers, export bar
processing.py process_export() — background thread dispatcher for lines/images/video
video.py probe() — PyAV-based video metadata and per-frame processing
widgets.py CTkRangeSlider — dual-handle range slider for video frame selection
Style transfer calls into vexy-lines-apy (MCPClient, apply_style, interpolate_style). Video uses PyAV for mux/demux and OpenCV for frame extraction.
Job folders (crash-safe exports)
All exports create a persistent job folder alongside the output directory. Every intermediate artifact (.lines documents, .svg exports, rasterized frames) is saved there. If the app quits or the process is interrupted mid-export, re-running the export resumes from where it left off.
The GUI never deletes job folders automatically. Use the CLI with --force to start fresh or --cleanup to remove the folder after completion.
Full documentation
Read the docs for the complete GUI guide, API reference, and more examples.
License
MIT
Metadata
Release files for vexy-lines-run 1.0.53
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| vexy_lines_run-1.0.53.tar.gz | 10.9 kB | Without provenance | Details for vexy_lines_run-1.0.53.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| vexy_lines_run-1.0.53-py3-none-any.whl | Python 3 | none | any | Details for vexy_lines_run-1.0.53-py3-none-any.whl |
Total release size: 49.5 kB
Release files / vexy_lines_run-1.0.53.tar.gz
| Download URL | vexy_lines_run-1.0.53.tar.gz |
|---|---|
| Size | 10.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2e304758d49f0f93959cb99445f5eaa1210a8fc39a16b8ede145c2e83640c397
|
|
BLAKE2b-256 checksum How to use checksums |
eea8bb264dca3ff6dc482607100ea0cf56463db586581ba624a00597069085d5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.18 {"installer":{"name":"uv","version":"0.12.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / vexy_lines_run-1.0.53-py3-none-any.whl
| Download URL | vexy_lines_run-1.0.53-py3-none-any.whl |
|---|---|
| Size | 38.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ac67b9180cdba09bdfcd1096aa6778bc3aa34f6eb18f66a095eb1fc8657e069f
|
|
BLAKE2b-256 checksum How to use checksums |
b95b0ba83cfd82654205566ed11f27b4107a6bbb8f63b2e55dd257c710f680a8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.18 {"installer":{"name":"uv","version":"0.12.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for vexy-lines-run 1.0.53
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.