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
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 | |
|---|---|---|---|
| vexy_lines_run-1.0.53.tar.gz | 10.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| vexy_lines_run-1.0.53-py3-none-any.whl | Python 3 | none | any | Details |
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}
|