Build the tools you wish Grapple had.

A plugin is a tool you pick up like the Pen. It draws its own handles on the Viewer and the Timeline, puts its settings in the Inspector, and sends every edit through History. Write one in Python, or describe it to Ape and let Ape write it.

Grapple with the Ape panel open. The request reads: Make a plugin called Nudge with one number, Distance in pixels, and a button that moves the selected layers right by that distance. Ape reports it created, validated and installed Nudge, and Grapple's dialog asks: Allow Nudge to run? Nudge right edits your project. Its code runs isolated from your files, other apps and the network.
An armed plugin called Arrange Selection. Its blue box with handles is drawn on the Viewer around three rectangles, its glyph sits at the end of the tool rail, and its section in the Inspector shows Objects, 3 selected layers, Use selection, Gap between slots and an Arrange button.
Ape wrote Nudge from one sentence, and Grapple asks before its code runs. Then a layout plugin draws its box on the Viewer.

The small job you do every week.

A plugin turns a chore you repeat into a single press, or a drag on the frame.

Every ratio, one drag each

If you make social videos, you lay out the same product shots in the square, vertical and wide versions. Your plugin can draw a box on the Viewer and space the selected layers evenly inside it, with the gap as a setting in the Inspector.

The nudge you always type

You move layers by the same distance all day. Nudge has one number and one button, and each press is one row in History called Nudge right.

It works where you work.

Click a plugin's card in the Plugins tab and its icon joins the tool rail beside the Stage. Its section opens at the top of the Inspector with a row for what it acts on, such as “3 selected layers”, and a Use selection button.

While it's in your hand, its shapes on the Viewer and the Timeline draw and take your drags. A click outside them still selects as usual. Choose another tool and it steps aside, and it remembers its settings for next time.

A layout plugin in use. Its blue box with handles is drawn on the Viewer around three rectangles, its icon sits at the end of the tool rail, and its Inspector section shows Objects, 3 selected layers, Use selection, Gap between slots and an Arrange button.
A layout plugin's box on the Viewer, and its settings in the Inspector.

Describe it, and Ape writes it.

Choose Make with Ape in the Plugins tab, or just ask in the chat. Ape writes the plugin, checks it, and installs it in your library.

This request made Nudge, start to finish: Make a plugin called Nudge with one number, Distance in pixels, and a button that moves the selected layers right by that distance.

You approve the code, not Ape

The first time a plugin runs code, Grapple shows its own dialog, titled with the plugin's name. It lists each action as “Edits your project” or “Reads your project”, and Cancel is the default.

Its code can't reach your files

Plugin code runs isolated from your files, your other apps and the network. Approval covers that exact version, so a plugin that changes asks again.

Or write it yourself.

A plugin is a manifest, a small interface file and a Python file. Grapple draws the interface with its own controls, so a plugin looks and behaves like the rest of the app.

{"schemaVersion": 2, "id": "personal.nudge", "version": "1", "label": "Nudge",
 "description": "Moves the selected layers right by a chosen distance.",
 "ui": "ui.json", "python": "main.py",
 "capabilities": ["project.read", "project.edit"],
 "settings": [{"id": "distance", "label": "Distance in pixels",
               "valueType": "number", "default": 10}],
 "actions": [{"id": "nudge_right", "label": "Nudge right",
              "effect": "projectEdit", "arguments": ["distance"]}]}
import grapple as gp

def nudge_right(ctx, distance):
    for layer in ctx.selection:
        position = layer.get("Position")
        layer.set("Position", gp.Vec2(position.x + distance, position.y))

One action, one History row

Each action is one function named after it. Its row in History takes the action's label, and one undo takes it back.

Told what to write, before it runs

If something is missing, Grapple says exactly what without running your code: main.py: define def nudge_right(ctx, distance): for the action nudge_right.

Keep them, share them.

The Plugins tab sits beside Project and History. Each plugin is a card that says what it does and where it works: a panel, the Viewer or the Timeline.

Import a .grapple-tool file or a plugin folder, export your own to pass on, or open one with Edit with Ape. Each project keeps its own copy of the plugins it uses, so tidying your library never breaks an old project.

Make your next video with Ape.

Grapple is free during the public preview. It runs on Windows and keeps itself up to date, and the Mac version is coming very soon.