Skip to content
Aphelion

Aphelion Editor plugins

A plugin adds a node type to the editor. It is an ordinary Python class that receives a frame and returns a modified one, and once it is in the right folder it appears in the node menu next to the built-ins — with its own inspector properties and its own entry in the search palette.

What a plugin can do

  • Add an effect nodeCustom image processing that is not in the built-in library: a specific blur, a bespoke colour transform, a procedural pattern, an analysis pass.
  • Add a generatorA node that produces a frame from nothing, such as a pattern, a chart or a procedurally drawn element.
  • Expose propertiesNumber, slider, toggle, choice, colour and text properties, all of which the inspector renders and the timeline can keyframe.
  • Publish status and errorsA plugin can report a problem through the same error path a built-in node uses, so a failure surfaces in the editor rather than as a silent black frame.
  • Ship as a packageA plugin can be a single Python file or a packaged wheel with its own dependencies, which matters as soon as it needs a library the editor does not bundle.
  • Be enabled per projectPlugins are enabled, disabled and reloaded from Preferences without restarting the editor, so iterating on one is a save-and-reload loop.

What a plugin looks like

Plugins import aphelion_sdk and subclass the same effect base the built-in nodes use. The base handles socket setup, property registration and the frame contract, so a plugin author writes the operation and nothing else.

The frame contract is deliberately narrow: a plugin receives a frame as a NumPy array and returns one of the same shape. That is the whole surface a plugin has to agree on, which is why the same class works whether it is processing a 960px proxy during playback or a full-resolution frame during export.

SDK install steps and API surface · Authoring plugins

examples/grayscale_effect.pyPython
import aphelion_sdk


@aphelion_sdk.register_plugin
class GrayscaleEffect(aphelion_sdk.VideoEffectPlugin):
    plugin_name = "Grayscale"

    def setup_effect_properties(self) -> None:
        self.set_property(
            "amount",
            aphelion_sdk.slider_property(100, 0, 100, label="Amount", suffix="%"),
        )

    def process_frame(
        self,
        frame: aphelion_sdk.Frame,
        _frame_num: int,
    ) -> aphelion_sdk.Frame:
        amount = self.float_value("amount", 100.0) / 100.0
        luma = (
            frame[..., 0] * 0.2126 + frame[..., 1] * 0.7152 + frame[..., 2] * 0.0722
        )
        gray = luma[..., None].repeat(3, axis=2)
        return frame * (1.0 - amount) + gray * amount

Installing a plugin

A single file or folder

Drop the Python module into the editor's plugins/ directory, or into userdata/plugins/ to keep it out of the application folder. The user location is the better choice for anything you want to survive an upgrade.

A packaged plugin

If the plugin ships as a wheel — for instance because it depends on a library the editor does not bundle — install it into the editor's environment and the loader picks it up on the next scan.

Install the SDK into the editor's environment

Command
pip install aphelion-plugin-sdk

Or install from a checkout of the SDK repository

Command
pip install -e ./aphelion-sdk

The Windows installer already bundles the SDK wheel and a helper script, so plugin authors on Windows do not need a separate download.

How plugins are found and loaded

The editor scans its plugin directories at startup and builds a list of available plugins. Each one is listed in Preferences under Plugins with an enable toggle and a reload action. Disabling a plugin removes its nodes from the menu; reloading re-imports the module so a change to the file takes effect without restarting.

A plugin that fails to import is reported as a failed plugin rather than crashing the editor, so a broken third-party file does not take the whole application with it.

Plugin discovery order and Preferences · Packaging plugins for distribution · Architecture: how nodes are registered

Getting the SDK

The SDK is published as aphelion-plugin-sdk. Its documentation covers the video-effect base classes, the widget primitives plugin UIs are built from, and how to package a plugin so someone else can install it.