Complete minimal plugin
This example registers one working video effect with a stable package ID, one numeric parameter and two presets.
Package files
Create this directory:
woaby.minimal/
├── plugin.json
└── plugin.py
plugin.json
{
"id": "woaby.minimal",
"name": "Minimal Example",
"version": "1.0.0",
"author": "Woaby",
"description": "Minimal video-effect example.",
"entrypoint": "plugin.py",
"enabled": true
}plugin.py
import numpy as np
from editor.plugin_api import PluginParameterDefinition
def process(frame, parameters, context):
del context
amount = float(parameters["amount"])
if amount == 1.0:
return frame
output = frame.astype(np.float32) * amount
return np.clip(output, 0, 255).astype(np.uint8)
def register(api):
api.register_video_effect(
effect_id="brightness_gain",
name="Brightness Gain",
processor=process,
description="Multiplies RGB values by a constant amount.",
parameters=(
PluginParameterDefinition(
key="amount",
label="Amount",
control="slider",
default=1.0,
minimum=0.0,
maximum=2.0,
step=0.01,
unit="x",
),
),
presets={
"Neutral": {"amount": 1.0},
"Lift": {"amount": 1.15},
},
)Package and test the plugin
- Save both files in the plugin directory.
- Zip the directory.
- Install the ZIP through Plugin Manager.
- Add Brightness Gain to a compatible Track or Master FX chain.
- Change Amount and confirm that Preview and Render use the same effect behavior.
Tip: Add a
bypass_whenpredicate foramount == 1.0in a production version so the host can skip the neutral state before processing the frame.