Scissor

Automation

Three tools in Scissor do the repetitive work for you: Actions record a sequence of commands and replay it, Variables swap text and visibility from a table of data so one design becomes many, and Scripts drive the whole editor from JavaScript. None of them needs an account or a server — like the rest of Scissor they run on your own machine.

Actions: record once, replay anywhere

The Actions panel (Window › Actions) records what you do and plays it back on a new selection. Press Record, run the commands you want to capture — align, offset, add a shadow, whatever the sequence is — then press Stop and give the action a name. It joins the list, showing how many steps it holds.

Click an action to play it on whatever is selected now; ⌥-click one to delete it. Because an action is just a list of commands, it repeats an exact routine across many objects without you clicking through it each time.

Variables: one design, many versions

The Variables panel (Window › Variables) turns a fixed design into a template driven by data. Two things on an object can be made dynamic:

Make Text Dynamic
Binds a type object's words to a variable, so different data sets can put different text in the same place.
Make Visibility Dynamic
Binds whether an object shows, so a set can turn parts of the design on or off.

Unbind makes a bound object fixed again.

Data sets

A data set is one row of values for those variables — one badge, one card, one frame. Capture saves the current values as a new set; the arrows step from one set to the next and the design updates to match. Import CSV… reads a whole batch at once — one column per variable, one row per set — and Export CSV writes the sets back out to edit in a spreadsheet.

Exporting every set at once

Export Data Sets… renders the active board once for every data set and writes them all in a single pass, as PNG, JPEG, WebP or SVG. A sheet of name badges, a set of localized banners or a run of social cards comes out as a tidy batch of files, each with its own data filled in.

Scripts: drive Scissor from JavaScript

For anything a menu cannot express, a script can. File › Scripts › Script Console… opens an editor where you write JavaScript and run it against the open document; Other Script… (⌘F12) runs a .js file from disk. A script runs in a Web Worker, away from the page, so it cannot touch the interface or your files except through the scissor object it is given — every call is carried out on the engine and answered back.

The scissor object covers the common ground:

Make shapes and type
scissor.rect, roundedRect, ellipse, polygon, star, path and text draw artwork; each takes a position and size and an options object for fill, stroke and strokeWidth (colours are any CSS colour).
Read the document
await scissor.document() returns the app, selection, layers and artboards as the panels see them; scissor.selection() returns just what is selected.
Act on it
scissor.select, group and undo, and scissor.run(command) for any engine command at all — the same commands the menus send.
Talk back
scissor.log prints to the console; scissor.alert shows a message.

A short example — a ring of coloured dots and a caption:

const doc = await scissor.document();
scissor.log('Boards:', doc.artboards.length);
for (let i = 0; i < 12; i++) {
  const a = (i / 12) * Math.PI * 2;
  await scissor.ellipse(300 + Math.cos(a) * 120, 260 + Math.sin(a) * 120, 36, 36,
    { fill: `hsl(${i * 30} 80% 60%)` });
}
await scissor.text(230, 270, 'Hello, Scissor', { size: 24 });

The Script Console keeps the last code you ran, so a working script is there when you come back to it.