omnigraffle-stencil icon indicating copy to clipboard operation
omnigraffle-stencil copied to clipboard

Tool to create OmniGraffle stencils from SVG icons

OmniGraffle Stencil generator

Important: this repository is archived. Its functionality was merged into icons-asset-generator


Tool to create OmniGraffle stencils from SVG icons.

Features:

  • create multiple sheets by directory
  • parametrize object magnets
  • filter images and format icon names

Idea based on script from AWS-OmniGraffle-Stencils

Usage

Requires Python 3.8+.

Install:

pip3 install omnigraffle-stencil

Run:

omnigraffle-stencil --help

to see all options:

usage: omnigraffle-stencil [-h] [--svg-dir SVG_DIR] [--stencil-file STENCIL_FILE] [--filename-includes [FILENAME_INCLUDES [FILENAME_INCLUDES ...]]] [--filename-excludes [FILENAME_EXCLUDES [FILENAME_EXCLUDES ...]]]
                           [--stencil-name-remove [STENCIL_NAME_REMOVE [STENCIL_NAME_REMOVE ...]]] [--no-vertex-magnets] [--side-magnets SIDE_MAGNETS] [--text-output]

Convert SVG files into OmniGraffle stencil

optional arguments:
  -h, --help            show this help message and exit
  --svg-dir SVG_DIR     svg files directory path (default: ./svg)
  --stencil-file STENCIL_FILE
                        name of output stencil file (default: output.gstencil)
  --filename-includes [FILENAME_INCLUDES [FILENAME_INCLUDES ...]]
                        strings to filter image file name by, taking only those which contains them all
  --filename-excludes [FILENAME_EXCLUDES [FILENAME_EXCLUDES ...]]
                        strings to filter image file name by, taking only those which do not contain any of them
  --stencil-name-remove [STENCIL_NAME_REMOVE [STENCIL_NAME_REMOVE ...]]
                        strings to be removed from image file name when creating stencil name (default: . - _)
  --group-name-remove GROUP_NAME_REMOVE [GROUP_NAME_REMOVE ...]
                        strings to be removed from group (sheet) name (default: . - _)
  --no-vertex-magnets   don't create magnets on vertices (NE, NW, SE, SW)
  --side-magnets SIDE_MAGNETS
                        number of magnets for each side (default: 5)
  --text-output         write OmniGraffle data file as text instead of binary

Input files are taken from the given location (./svg by default) and should be grouped into directories. Every directory will be parsed to a separate canvas in output stencil.

SVG directories structure example:

svg/
├── Group 1/
│   ├── icon1.svg
│   ├── icon2.svg
│   ├── icon3.svg
└── Group 2/
    ├── icon4.svg
    └── icon5.svg

AWS Architecture Icons example

As an example, we can generate stencil from AWS Architecture Icons.

New AWS Icons are published from time to time. Different versions have different directories structure.

v20210131

Download AWS-Architecture_Asset-Package_20210131 and unpack it.

It contains 3 more zip files. Service, Category, and Resource icons are in separate packages. Unpack Architecture-Service-Icons_01-31-2021.zip.

Run script with options:

omnigraffle-stencil \
    --svg-dir "Asset-Package_20210131/Architecture-Service-Icons_01-31-2021" \
    --stencil-file AWS_20210131_Services.gstencil \
    --filename-includes _48 \
    --stencil-name-remove Arch_ _48 . - _ \
    --group-name-remove Arch_ . - _

Output stencil will be created as AWS_20210131_Services.gstencil.

Check out the AWS 2021-01-31 stencil in Stenciltown - it contains all Category, Service, and Resource icons.

v20200911

Download AWS-Architecture-Assets-For-Light-and-Dark-BG_20200911 and unpack it.

Run script with options:

omnigraffle-stencil \
    --svg-dir "AWS-Architecture-Assets-For-Light-and-Dark-BG_20200911/AWS-Architecture-Service-Icons_20200911" \
    --stencil-file AWS_20200911_Services.gstencil \
    --filename-includes _48 \
    --stencil-name-remove Arch_ _48 . - _ \
    --group-name-remove Arch_ . - _

Output stencil will be created as AWS_20200911_Services.gstencil.

Check out the AWS 2020-09-11 stencil in Stenciltown - it contains all Service and Resource icons.

Development

Requires Python 3.8+ and Poetry.

Install dependencies in virtual env:

poetry shell
poetry install

Troubleshooting installing pillow library on MacOS: https://akrabat.com/installing-pillow-on-macos-10-15-calatalina/

Get virtual env path for the IDE:

poetry env info -p

Run script:

poetry run omnigraffle-stencil

Publishing

Build and publish package:

poetry build
poetry publish