disguise developers

Designer Plugins

Plugins for Disguise Designer software.

Publish

The DesignerPlugin class publishes your plugin via DNS-SD (Bonjour/mDNS), making it discoverable by Disguise Designer on the local network. Once published, Designer can find and connect to the plugin automatically.

The port parameter corresponds to the HTTP server that hosts your plugin’s web user interface.

Configuration File

Place a d3plugin.json file in your plugin’s working directory (usually alongside the plugin script). Designer reads this file to identify the plugin.

{
    "name": "MyPlugin",
    "requiresSession": true
}

See the developer documentation for the full list of supported fields.


Usage

Use DesignerPlugin.default_init(port) to load plugin metadata from d3plugin.json and publish on the given port. Both synchronous and asynchronous usage are supported:

Synchronous

from designer_plugin import DesignerPlugin
from time import sleep

with DesignerPlugin.default_init(12345) as plugin:
    print("Plugin is published. Press Ctrl+C to stop.")
    try:
        while True:
            sleep(3600)
    except KeyboardInterrupt:
        pass

Asynchronous

from designer_plugin import DesignerPlugin
import asyncio

async def main():
    async with DesignerPlugin.default_init(port=12345) as plugin:
        print("Plugin is published. Press Ctrl+C to stop.")
        try:
            await asyncio.Event().wait()
        except asyncio.CancelledError:
            pass

asyncio.run(main())

Publish Options

If you prefer not to use d3plugin.json, construct DesignerPlugin directly. The plugin name and port are required. You can also supply hostname to direct Designer to a specific machine when opening the plugin’s web UI, along with other metadata:

from designer_plugin import DesignerPlugin

plugin = DesignerPlugin(
    name="MyPlugin",
    port=12345,
    hostname="my-machine.local",   # optional — defaults to machine hostname
    requires_session=True,         # optional
)

with plugin:
    input("Press Enter to stop...")

To load configuration from a JSON file at a custom path, use from_json_file:

with DesignerPlugin.from_json_file("config/my_plugin.json", port=12345) as plugin:
    input("Press Enter to stop...")

Next Steps

Once your plugin is published and discoverable, connect to Designer and execute Python code remotely: