CLI harness for Inkscape - SVG vector graphics with export via inkscape --export-filename. Requires: inkscape (apt install inkscape)
Project description
Inkscape CLI - Agent Harness
A stateful command-line interface for vector graphics editing, following the same patterns as the GIMP and Blender CLI harnesses. Directly manipulates SVG (XML) documents with a JSON project format for state tracking.
Installation
# From the agent-harness directory:
pip install click pillow
# No Inkscape installation required for SVG editing.
# Inkscape is only needed for PDF export and advanced rendering.
Quick Start
# Create a new document
python3 -m cli.inkscape_cli document new --name "MyDrawing" -o drawing.json
# Add shapes
python3 -m cli.inkscape_cli --project drawing.json shape add-rect --x 100 --y 100 --width 200 --height 150
python3 -m cli.inkscape_cli --project drawing.json shape add-circle --cx 400 --cy 300 --r 80
python3 -m cli.inkscape_cli --project drawing.json shape add-star --cx 700 --cy 300 --points 5 --outer-r 100
# Style objects
python3 -m cli.inkscape_cli --project drawing.json style set-fill 0 "#ff0000"
python3 -m cli.inkscape_cli --project drawing.json style set-stroke 1 "#000000" --width 3
# Add text
python3 -m cli.inkscape_cli --project drawing.json text add --text "Hello World" --x 100 --y 50 --font-size 36
# Transform objects
python3 -m cli.inkscape_cli --project drawing.json transform translate 0 50 --ty 25
python3 -m cli.inkscape_cli --project drawing.json transform rotate 1 45
# Add gradients
python3 -m cli.inkscape_cli --project drawing.json gradient add-linear --color1 "#ff0000" --color2 "#0000ff"
python3 -m cli.inkscape_cli --project drawing.json gradient apply 0 0
# Export
python3 -m cli.inkscape_cli --project drawing.json export svg output.svg --overwrite
python3 -m cli.inkscape_cli --project drawing.json export png output.png --overwrite
JSON Output Mode
All commands support --json for machine-readable output:
python3 -m cli.inkscape_cli --json document new -o doc.json
python3 -m cli.inkscape_cli --json --project doc.json shape list
Interactive REPL
python3 -m cli.inkscape_cli repl
# or with existing project:
python3 -m cli.inkscape_cli repl --project doc.json
Command Groups
Document Management
document new - Create a new document
document open - Open an existing project file
document save - Save the current project
document info - Show document information
document profiles - List available document profiles
document canvas-size - Set canvas dimensions
document units - Set document units (px, mm, cm, in, pt, pc)
document json - Print raw project JSON
Shape Management
shape add-rect - Add a rectangle
shape add-circle - Add a circle
shape add-ellipse - Add an ellipse
shape add-line - Add a line
shape add-polygon - Add a polygon
shape add-path - Add an SVG path
shape add-star - Add a star
shape remove - Remove a shape by index
shape duplicate - Duplicate a shape
shape list - List all shapes
shape get - Get detailed shape info
Text Management
text add - Add a text element
text set - Set a text property
text list - List all text objects
Style Management
style set-fill - Set fill color
style set-stroke - Set stroke color/width
style set-opacity - Set overall opacity
style set - Set any style property
style get - Get an object's style
style list-properties - List available style properties
Transform Operations
transform translate - Move an object
transform rotate - Rotate an object
transform scale - Scale an object
transform skew-x - Horizontal skew
transform skew-y - Vertical skew
transform get - Get current transform
transform clear - Clear all transforms
Layer Management
layer add - Add a new layer
layer remove - Remove a layer
layer move-object - Move object to layer
layer set - Set layer property
layer list - List all layers
layer reorder - Reorder layers
layer get - Get layer details
Path Operations
path union - Boolean union of two shapes
path intersection - Boolean intersection
path difference - Boolean difference (A-B)
path exclusion - Boolean exclusion (XOR)
path convert - Convert shape to path
path list-operations - List available operations
Gradient Management
gradient add-linear - Add linear gradient
gradient add-radial - Add radial gradient
gradient apply - Apply gradient to object
gradient list - List all gradients
Export
export png - Render to PNG (via Pillow)
export svg - Export as SVG
export pdf - Export as PDF (needs Inkscape)
export presets - List export presets
Session Management
session status - Show session status
session undo - Undo last operation
session redo - Redo last undone operation
session history - Show undo history
Running Tests
# From the agent-harness directory:
# Run all tests
python3 -m pytest cli/tests/ -v
# Run unit tests only
python3 -m pytest cli/tests/test_core.py -v
# Run E2E tests only
python3 -m pytest cli/tests/test_full_e2e.py -v
# Run with short traceback
python3 -m pytest cli/tests/ -v --tb=short
Architecture
cli/
├── __init__.py
├── __main__.py # python3 -m cli.inkscape_cli
├── inkscape_cli.py # Main CLI entry point (Click + REPL)
├── core/
│ ├── __init__.py
│ ├── document.py # Document create/open/save/info, SVG generation
│ ├── shapes.py # Shape operations (rect, circle, path, star, etc.)
│ ├── text.py # Text element management
│ ├── styles.py # CSS style management (fill, stroke, opacity)
│ ├── transforms.py # Transform operations (translate, rotate, scale)
│ ├── layers.py # Layer/group management
│ ├── paths.py # Path boolean operations (union, diff, etc.)
│ ├── gradients.py # Gradient management (linear, radial)
│ ├── export.py # Export (PNG via Pillow, SVG, PDF)
│ └── session.py # Stateful session with undo/redo
├── utils/
│ ├── __init__.py
│ └── svg_utils.py # SVG XML helpers, namespace constants
└── tests/
├── __init__.py
├── test_core.py # Unit tests (100+ tests, synthetic data)
└── test_full_e2e.py # E2E tests (SVG validation, workflows, CLI)
Key Design: Direct SVG Manipulation
Since SVG is XML, we directly manipulate the document structure:
- JSON project file (.inkscape-cli.json) tracks all objects, layers, gradients, and metadata for state management and undo/redo.
- SVG file is generated from the project state on export, producing valid SVG that can be opened in Inkscape, browsers, or any SVG viewer.
- Inkscape namespaces (inkscape:, sodipodi:) are included for compatibility with Inkscape's layer system and other features.
This means no binary format parsing is needed -- everything is human-readable XML and JSON.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cli_anything_inkscape-1.0.0.tar.gz.
File metadata
- Download URL: cli_anything_inkscape-1.0.0.tar.gz
- Upload date:
- Size: 55.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9c24b9a03ff5b621c3a37e7642137269e4feff802bc66cbc7c0e9253d9753a57
|
|
| MD5 |
ea03f89ad49306b7aebdd77e9dfa7d61
|
|
| BLAKE2b-256 |
17222828be198e4281ea03086e3f6e3aadd50048fe90585706a18de515601b1b
|
File details
Details for the file cli_anything_inkscape-1.0.0-py3-none-any.whl.
File metadata
- Download URL: cli_anything_inkscape-1.0.0-py3-none-any.whl
- Upload date:
- Size: 65.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3767f3063bf097507fa266dce23064f1acaadb5c9bcc38353c800619e9964544
|
|
| MD5 |
60d23ad2773ceb53127a22d843689752
|
|
| BLAKE2b-256 |
f9d45985051819693ecbacb4fe4d3f54b61d242149539b67fc09b01db06f7d45
|