Skip to main content

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.

Release files for cli-anything-inkscape 1.0.0

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

Source distribution (sdist)

Source distribution for cli-anything-inkscape 1.0.0
File Size Uploaded
cli_anything_inkscape-1.0.0.tar.gz 55.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for cli-anything-inkscape 1.0.0
File Interpreter ABI Platform
cli_anything_inkscape-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 120.5 kB

Release files / cli_anything_inkscape-1.0.0.tar.gz

Download URL cli_anything_inkscape-1.0.0.tar.gz
Size 55.5 kB
Tags Source
SHA-256 checksum
How to use checksums
9c24b9a03ff5b621c3a37e7642137269e4feff802bc66cbc7c0e9253d9753a57
BLAKE2b-256 checksum
How to use checksums
17222828be198e4281ea03086e3f6e3aadd50048fe90585706a18de515601b1b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.12

Release files / cli_anything_inkscape-1.0.0-py3-none-any.whl

Download URL cli_anything_inkscape-1.0.0-py3-none-any.whl
Size 65.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3767f3063bf097507fa266dce23064f1acaadb5c9bcc38353c800619e9964544
BLAKE2b-256 checksum
How to use checksums
f9d45985051819693ecbacb4fe4d3f54b61d242149539b67fc09b01db06f7d45
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.12

Release history Release notifications | RSS feed

This release

1.0.0 This release

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