Examples¶
Inspect a .lines file¶
$ vexy-lines-cli info artwork.lines
{'caption': 'Landscape', 'version': '4.0', 'dpi': 300,
'width_mm': 210.0, 'height_mm': 148.0,
'groups': 2, 'layers': 5, 'fills': 8,
'has_source_image': True, 'has_preview_image': True}
JSON output for scripting:
$ vexy-lines-cli info artwork.lines --json-output
{
"caption": "Landscape",
"version": "4.0",
"dpi": 300,
...
}
Browse the layer tree¶
$ vexy-lines-cli file-tree artwork.lines
group: Background
layer: Sky
fill: Blue gradient [linear]
fill: Cloud texture [scribble]
layer: Ground
fill: Grass [wave]
group: Foreground
layer: Tree [hidden]
fill: Bark [handmade]
fill: Leaves [fractals]
Extract embedded images¶
# Source image (the original photo)
$ vexy-lines-cli extract-source artwork.lines
{'status': 'ok', 'output': 'artwork-src.jpg'}
# Preview image (the rendered thumbnail)
$ vexy-lines-cli extract-preview artwork.lines
{'status': 'ok', 'output': 'artwork-preview.png'}
Batch extract previews¶
$ vexy-lines-cli batch-convert --input-dir ./artwork/ --output-dir ./thumbnails/ --what preview --format jpg
{'total': 42, 'successes': 40, 'failures': 2, 'output_dir': './thumbnails/'}
Export to PDF¶
Single file:
$ vexy-lines-cli export artwork.lines --format pdf
Entire directory:
$ vexy-lines-cli export ./artwork/ --format svg --output ./exports/
Preview without exporting:
$ vexy-lines-cli export ./artwork/ --dry-run
Force re-export with longer timeouts:
$ vexy-lines-cli export ./artwork/ --force --timeout-multiplier 2.5
Style transfer¶
Apply one style to a folder of photos:
$ vexy-lines-cli style-transfer --style watercolor.lines --input-dir ./photos/ --output-dir ./styled/
{'total': 10, 'successes': 10, 'failures': 0, 'output_dir': './styled/'}
Interpolate between two styles across the sequence:
$ vexy-lines-cli style-transfer \
--style soft.lines --end-style bold.lines \
--input-dir ./frames/ --output-dir ./animated/
The first image gets soft.lines, the last gets bold.lines, and everything in between is a linear blend.
Style video¶
$ vexy-lines-cli style-video --style sketch.lines --input clip.mp4 --output styled.mp4
{'status': 'ok', 'input': 'clip.mp4', 'output': 'styled.mp4',
'width': 1920, 'height': 1080, 'fps': 30.0, 'total_frames': 150}
With style interpolation across the video:
$ vexy-lines-cli style-video \
--style start.lines --end-style end.lines \
--input clip.mp4 --output morphing.mp4
AI rename layers & fills¶
Preview the names without writing anything:
$ vexy-lines-cli ai-rename road-12.lines --dry-run
fill 31: 'Linear' -> 'foreground-road-surface' (foreground road surface)
fill 32: 'Blended' -> 'car-on-road' (red car on road)
fill 40: 'Layer 2' -> 'top-sky-bridge' (distant bridge in sky)
layer 12: 'Layer' -> 'road-and-car'
layer 18: 'Layer 2' -> 'sky-and-bridge'
(dry run -- nothing written)
Run for real (writes road-12-renamed.lines beside the input):
$ vexy-lines-cli ai-rename road-12.lines
...
output: road-12-renamed.lines
Point at a specific endpoint/models and write to a chosen path:
$ vexy-lines-cli ai-rename road-12.lines road-12-named.lines \
--llm-api-url http://127.0.0.1:1234/v1 \
--llm-model-vision my-vision-model --llm-model my-text-model
The command auto-launches the app and talks to an OpenAI-compatible /v1 endpoint, configured from the environment (VEXY_LINES_LLM_API_URL, VEXY_LINES_LLM_API_KEY, VEXY_LINES_LLM_MODEL_VISION, VEXY_LINES_VLM_MODEL) or via the --llm-* flags. See the full guide and the Layers Panel help article.
MCP status check¶
$ vexy-lines-cli mcp-status
{'status': 'ok', 'server_info': {'width_mm': 210.0, ...}}
MCP bridge for Claude Desktop¶
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"vexy-lines-cli": {
"command": "vexy-lines-mcp"
}
}
}
Now Claude can open, edit, render, and export Vexy Lines documents directly.
Python scripting¶
from vexy_lines_cli import VexyLinesCLI
cli = VexyLinesCLI()
# Inspect
info = cli.info("artwork.lines")
print(f"{info['caption']}: {info['layers']} layers, {info['fills']} fills")
# Export
stats = cli.export("./artwork/", format="pdf", verbose=True)
print(f"Exported {stats['success']} files in {stats['total_time']:.1f}s")