Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cli_anything_inkscape-1.0.0.tar.gz (55.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cli_anything_inkscape-1.0.0-py3-none-any.whl (65.0 kB view details)

Uploaded Python 3

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

Hashes for cli_anything_inkscape-1.0.0.tar.gz
Algorithm Hash digest
SHA256 9c24b9a03ff5b621c3a37e7642137269e4feff802bc66cbc7c0e9253d9753a57
MD5 ea03f89ad49306b7aebdd77e9dfa7d61
BLAKE2b-256 17222828be198e4281ea03086e3f6e3aadd50048fe90585706a18de515601b1b

See more details on using hashes here.

File details

Details for the file cli_anything_inkscape-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for cli_anything_inkscape-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3767f3063bf097507fa266dce23064f1acaadb5c9bcc38353c800619e9964544
MD5 60d23ad2773ceb53127a22d843689752
BLAKE2b-256 f9d45985051819693ecbacb4fe4d3f54b61d242149539b67fc09b01db06f7d45

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page