Skip to main content

vexy-lines-cli

Command-line interface and MCP passthrough server for Vexy Lines, the macOS vector art app.

Parse .lines files, batch export to PDF/SVG/PNG, apply styles to images and video, and connect Claude Desktop or Cursor directly to the Vexy Lines MCP API.

Install

pip install vexy-lines-cli

Requires Python 3.11+. Pulls in vexy-lines-apy (MCP client, style engine) and vexy-lines-py (parser) automatically.

For video processing and the GUI: pip install vexy-lines-run (all dependencies are included).

Quick start

# Inspect a file without opening the app
vexy-lines-cli info artwork.lines

# Show the layer/group/fill tree
vexy-lines-cli file-tree artwork.lines

# Export a folder of .lines files to PDF (auto-launches the app)
vexy-lines-cli export ./my-art/ --format pdf

# Apply a style template to a folder of photos
vexy-lines-cli style-transfer --style template.lines --input-dir ./photos/ --output-dir ./out/

# Check MCP connectivity
vexy-lines-cli mcp-status

Subcommand reference

Parser — no app required

Command What it does
info <file> Show caption, DPI, dimensions, layer/fill/filter counts
file-tree <file> Print the layer/group/fill hierarchy, including image filters
extract-source <file> Save the embedded source image to disk
extract-sources <file> Save the document source plus all group source images
extract-preview <file> Save the embedded preview image to disk
batch-convert Extract preview or source images from a directory of .lines files

All parser commands accept --json-output for machine-readable output.

vexy-lines-cli info artwork.lines --json-output
vexy-lines-cli extract-sources artwork.lines --output-dir ./sources/
vexy-lines-cli batch-convert --input-dir ./art/ --output-dir ./thumbs/ --what preview --format jpg

Export — auto-launches app

The command injects export settings into macOS preferences, triggers File > Export, then restores the original preferences. No save dialog appears. Input can be a single file or a directory.

vexy-lines-cli export ./art/ --format svg --output ./svg-out/
vexy-lines-cli export artwork.lines --format pdf --dry-run   # preview without exporting
vexy-lines-cli export ./art/ --force --timeout-multiplier 2

Options: --format (pdf/svg/png), --force, --dry-run, --timeout-multiplier (0.1–10.0), --max-retries (0–10), --say-summary.

Export bundle - auto-launches app

Export one file or a directory to several formats in one pass and optionally extract the embedded source image.

vexy-lines-cli export-bundle artwork.lines
vexy-lines-cli export-bundle ./art/ --output ./bundle-out/
vexy-lines-cli export-bundle artwork.lines --formats pdf,svg --source=False

Options: --formats (pdf,svg,png by default), --source, --dpi, --render-timeout.

Style — app must be running

# Single style across all images
vexy-lines-cli style-transfer --style look.lines --input-dir ./frames/ --format svg

# Interpolate between two styles across the sequence
vexy-lines-cli style-transfer --style start.lines --end-style end.lines \
    --input-dir ./frames/ --output-dir ./out/

# Apply style to video
vexy-lines-cli style-video --style look.lines --input clip.mp4 --output result.mp4

# Resume an interrupted video job (automatic — just re-run the same command)
vexy-lines-cli style-video --style look.lines --input clip.mp4 --output result.mp4

# Force restart (discard cached frames)
vexy-lines-cli style-video --style look.lines --input clip.mp4 --output result.mp4 --force

# Auto-clean job folder after completion
vexy-lines-cli style-transfer --style look.lines --input-dir ./frames/ --cleanup

All style commands create a job folder ({output}-vljob/) that stores intermediate .lines, .svg, and raster files. If the process is interrupted, re-running the same command skips already-completed items. Use --force to start fresh or --cleanup to remove the job folder after completion.

Interpolation

# One explicit intermediate .lines file, no app required
vexy-lines-cli interpolate start.lines end.lines --t 0.5 --output mid.lines

# Render the full interpolation timeline through the app
vexy-lines-cli interpolate-video start.lines end.lines \
    --output blend.mp4 --frames 120 --fps 30

# Capture the Vexy Lines GUI while stepping through the interpolation
vexy-lines-cli record-interpolation-screen start.lines end.lines \
    --output ./screen-frames --frames 120 --fps 30 --zoom-steps 2 \
    --video screen-recording.mp4

interpolate writes a real .lines document between two files with the same group/layer/fill structure, blending matching numeric XML attributes and native .lines colours while preserving IDs, captions, flags, and enum-like modes. interpolate-video renders generated intermediate .lines documents via MCP, rasterizes app-exported SVG frames locally, and assembles MP4. record-interpolation-screen opens the start document in the GUI, applies optional macOS zoom keystrokes, captures the Vexy Lines window once per interpolation frame, and can assemble those screenshots into a video. The JSON result reports requested frames separately from retained temporary artifacts; use --keep-work or --work-dir when you need intermediate paths.

MCP — app must be running

Direct JSON-RPC calls to the Vexy Lines embedded server (localhost:47384).

Command What it does
mcp-status Check if the MCP server is reachable
tree Print the live document layer tree
new-document Create a new document
open <file> Open a .lines file
add-fill <layer-id> <fill-type> Add a fill to a layer
get-image-filters <fill-id> Read a fill's image-filter chain
set-image-filters <fill-id> <filters-json> Replace a fill's image-filter chain
add-image-filter <fill-id> <filter-type> Add one image filter to a fill
remove-image-filter <fill-id> <index> Remove one image filter from a fill
render Trigger a full render
vexy-lines-cli mcp-status
vexy-lines-cli tree --json-output
vexy-lines-cli new-document --width 210 --height 297 --dpi 300
vexy-lines-cli add-fill 42 linear --color "#ff0000"
vexy-lines-cli get-image-filters 99
vexy-lines-cli set-image-filters 99 '[{"type":"brightness","params":{"value":25}}]'
vexy-lines-cli add-image-filter 99 levels --params '{"left":10,"right":240}'

All MCP commands accept --host and --port (defaults: 127.0.0.1:47384).

MCP bridge

Command What it does
mcp-serve Start the stdio-to-TCP bridge (same as running vexy-lines-mcp)

AI rename — auto-launches app + needs a vision model

Rename a .lines file's layers and fills with a vision-language model. Each fill is rendered in isolation, boxed over a faint copy of the full artwork, and given a short descriptive caption; layers are named from their fills. Only captions change: every fill parameter and embedded image is preserved.

pip install "vexy-lines-cli[ai]"          # openai + pathvalidate + python-slugify

vexy-lines-cli ai-rename road-12.lines              # -> road-12-renamed.lines
vexy-lines-cli ai-rename road-12.lines --dry-run    # preview names, write nothing
vexy-lines-cli ai-rename road-12.lines --json-output
vexy-lines-cli ai-rename road-12.lines \
    --llm-api-url http://127.0.0.1:1234/v1 --llm-model-vision my-vision-model

The endpoint is an OpenAI-compatible /v1 server, configured from the environment (VEXY_LINES_LLM_API_URL, VEXY_LINES_LLM_API_KEY, VEXY_LINES_LLM_MODEL_VISION for vision, VEXY_LINES_VLM_MODEL for text) and overridable with --llm-api-url, --llm-api-key, --llm-model-vision, --llm-model. See the full AI rename guide.

MCP server setup

vexy-lines-mcp bridges Claude Desktop and Cursor to the Vexy Lines TCP server. It reads newline-delimited JSON-RPC from stdin, forwards over TCP, and writes responses to stdout.

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "vexy-lines": {
      "command": "vexy-lines-mcp"
    }
  }
}

For Cursor, add the same block under mcp.servers in .cursor/mcp.json.

The bridge auto-launches the Vexy Lines app on first connection. Pass --no-launch to disable:

vexy-lines-cli mcp-serve --no-launch
vexy-lines-cli mcp-serve --host 127.0.0.1 --port 47384

Full documentation

Read the docs for the complete CLI reference, export pipeline internals, and more examples.

License

MIT

Release files for vexy-lines-cli 1.0.37

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for vexy-lines-cli 1.0.37
File Size Uploaded
vexy_lines_cli-1.0.37.tar.gz 12.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for vexy-lines-cli 1.0.37
File Interpreter ABI Platform
vexy_lines_cli-1.0.37-py3-none-any.whl Python 3 none any Details

Total release size: 51.8 kB

Release files / vexy_lines_cli-1.0.37.tar.gz

Download URL vexy_lines_cli-1.0.37.tar.gz
Size 12.0 kB
Tags Source
SHA-256 checksum
How to use checksums
c62720bc62fb0a3dbb0d614c433ba4c6d7bbbf10de56480627e90dc5bfb8609c
BLAKE2b-256 checksum
How to use checksums
6e1a4a8a534bcbc9d39fe09034688ab6fe32c797197ae8bcd3c54cf9e4741b22
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_cli-1.0.37-py3-none-any.whl

Download URL vexy_lines_cli-1.0.37-py3-none-any.whl
Size 39.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e8527074015fa1286372084a5e9b4dee894acb43b0216cd69dc746171d42dde4
BLAKE2b-256 checksum
How to use checksums
2be7bba38a16bdc6b64bad5dd999a9b021493d0b5afffecc96faef79dfcecc26
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 history Release notifications | RSS feed

This release

1.0.37 This release

2 release files

1.0.35

2 release files

1.0.34

2 release files

1.0.33

2 release files

1.0.32

2 release files

1.0.19

2 release files

1.0.18

2 release files

1.0.17

2 release files

1.0.16

2 release files

1.0.14

2 release files

1.0.12

2 release files

1.0.11

2 release files

1.0.10

2 release files

1.0.9

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page