Skip to main content

Plugin System - Complete Guide

Extend Scribe Animator with plugins that add new features, processors, exporters, and UI panels. This guide covers the Plugin Manager interface and understanding how plugins enhance your workflow.


Overview

The plugin system allows modular extension of Scribe Animator through two execution models:

PLUGIN SYSTEM ARCHITECTURE
┌─────────────────────────────────────────────────────────────────────────┐
│ │
│ SCRIBE ANIMATOR HOST │
│ │
│ ┌─────────────────────────┐ ┌─────────────────────────────────┐ │
│ │ Plugin Manager UI │────│ Plugin Registry │ │
│ │ │ │ │ │
│ │ • Enable/Disable │ │ • Host plugins (direct) │ │
│ │ • View details │ │ • Sandboxed plugins (isolated) │ │
│ │ • Monitor health │ │ • Permissions & capabilities │ │
│ │ • Manage permissions │ │ │ │
│ └─────────────────────────┘ └─────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ HOST PLUGINS SANDBOXED PLUGINS │ │
│ │ ┌─────────┐ ┌─────────────────────────────────┐ │ │
│ │ │ Direct │ │ ┌─────────┐ ┌─────────┐ │ │ │
│ │ │ Access │ │ │ iframe │ │ Worker │ │ │ │
│ │ │ │ │ │ (UI) │ │ (Proc) │ │ │ │
│ │ └─────────┘ │ └─────────┘ └─────────┘ │ │ │
│ │ │ │ │ │
│ │ • Timeline Panel │ • Inspector Modal │ │ │
│ │ • Scene Manager │ • Vector Processor │ │ │
│ │ • Audio Processor │ • SVG Exporter │ │ │
│ │ • Hand Animator │ • Video Exporter │ │ │
│ │ └─────────────────────────────────┘ │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Opening Plugin Manager

Method 1: Menu

View → Plugin Manager or Settings → Plugins

Method 2: Keyboard Shortcut

PlatformShortcut
Windows/LinuxCtrl+Shift+P
macOS⌘+Shift+P

Plugin Manager Interface

Main Panel

┌──────────────────────────────────────────────────────────────────────────┐
│ Plugin Manager [X] │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ PLUGIN TYPE VERSION STATUS TOGGLE │ │
│ ├────────────────────────────────────────────────────────────────────┤ │
│ │ │ │
│ │ Hand Animator Animator 1.0.0 ● Active [████████] │ │
│ │ LUT-based hand follower for draw animations │ │
│ │ │ │
│ │ Timeline Panel UI 1.0.0 ● Active [████████] │ │
│ │ Main timeline interface for animation control │ │
│ │ │ │
│ │ Audio Processor UI 1.0.0 ● Active [████████] │ │
│ │ Web Audio API based audio processing │ │
│ │ │ │
│ │ Vector Processor Processor 1.0.0 ● Active [████████] │ │
│ │ Default vector path processor for SVG handling │ │
│ │ │ │
│ │ Inspector Modal UI 1.0.0 ● Active [████████] │ │
│ │ Properties panel for selected objects │ │
│ │ │ │
│ │ SVG Exporter Exporter 1.0.0 ● Active [████████] │ │
│ │ Static SVG export capability │ │
│ │ │ │
│ │ Video Exporter Exporter 1.0.0 ● Active [████████] │ │
│ │ MP4/WebM video rendering with hidden stage │ │
│ │ │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │
├──────────────────────────────────────────────────────────────────────────┤
│ 🔒 Security Log [ Clear ] │
│ └─ No security events │
└──────────────────────────────────────────────────────────────────────────┘

Plugin Status Indicators

StatusIconDescription
Active● (green)Plugin running normally
Disabled○ (gray)Plugin turned off
Warning⚠ (yellow)Plugin experiencing issues
Error✕ (red)Plugin failed to load/run
Pending◐ (spinning)Action in progress

Enabling/Disabling Plugins

Toggle Switch

Click the toggle switch next to any plugin to enable or disable it:

TOGGLE STATES
┌─────────────────────────────────────────────────────────────────────────┐
│ │
│ ENABLED DISABLED │
│ ┌────────────────────┐ ┌────────────────────┐ │
│ │ █████████████████ │ │ ░░░░░░░░░░░░░░░░░░ │ │
│ └────────────────────┘ └────────────────────┘ │
│ │
│ Plugin features active Plugin features hidden │
│ Resources allocated Resources released │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Effect of Disabling

Plugin TypeWhat Happens
UI PluginsPanel/UI element hidden
ProcessorsProcessing capability disabled
ExportersExport format unavailable
AnimatorsAnimation feature disabled
warning

Disabling core plugins like Timeline Panel or Hand Animator will remove key features from the interface. You can re-enable them at any time.


Plugin Details Drawer

Click on a plugin row to open the details drawer:

┌──────────────────────────────────────────────────────────────────────────┐
│ Plugin Manager [X] │
├────────────────────────────────────┬─────────────────────────────────────┤
│ │ │
│ PLUGIN LIST │ PLUGIN DETAILS │
│ │ │
│ ┌────────────────────────────┐ │ Hand Animator │
│ │ ► Hand Animator ● │ │ ───────────────────────────────── │
│ │ Timeline Panel ● │ │ │
│ │ Audio Processor ● │ │ ID: animator.hand.lut │
│ │ Vector Processor ● │ │ Version: 1.0.0 │
│ │ Inspector Modal ● │ │ Type: Animator (Host) │
│ │ SVG Exporter ● │ │ Publisher: Core Team │
│ │ Video Exporter ● │ │ │
│ └────────────────────────────┘ │ DESCRIPTION │
│ │ LUT-based hand follower system │
│ │ for realistic draw-in animations │
│ │ with configurable presets. │
│ │ │
│ │ CAPABILITIES │
│ │ ├ core.scene.read │
│ │ ├ telemetry.emit │
│ │ └ ui.panel.register │
│ │ │
│ │ PERMISSIONS │
│ │ ├ telemetry │
│ │ └ timeline.read │
│ │ │
│ │ [ Reload ] [ Repair ] │
│ │ │
└────────────────────────────────────┴─────────────────────────────────────┘

Detail Sections

SectionDescription
Basic InfoID, version, type, publisher
DescriptionWhat the plugin does
CapabilitiesFeatures the plugin can access
PermissionsSystem permissions granted
ActionsReload, Repair, Revoke buttons

Built-in Plugins

Core Plugins

These plugins provide essential functionality:

PluginTypeDescription
Hand AnimatorAnimatorLUT-based hand follower for draw animations
Timeline PanelUIMain timeline interface with playback controls
Scene ManagerUIScene list, transitions, and organization
Audio ProcessorUIBackground music and voiceover support

Processing Plugins

PluginTypeDescription
Vector ProcessorProcessorSVG path processing and optimization

Export Plugins

PluginTypeDescription
SVG ExporterExporterExport static SVG files
Video ExporterExporterExport MP4/WebM videos

UI Plugins

PluginTypeDescription
Inspector ModalUIProperties panel for object editing

Plugin Types

Host Plugins

Run directly in the main application:

HOST PLUGIN CHARACTERISTICS
┌─────────────────────────────────────────────────────────────────────────┐
│ │
│ ✓ Direct access to application state │
│ ✓ No performance overhead from message passing │
│ ✓ Can use React components directly │
│ ✓ Full access to FIG domain services │
│ │
│ Examples: Timeline Panel, Scene Manager, Hand Animator │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Sandboxed Plugins

Run in isolated environments (iframe or worker):

SANDBOXED PLUGIN CHARACTERISTICS
┌─────────────────────────────────────────────────────────────────────────┐
│ │
│ IFRAME SANDBOX WORKER SANDBOX │
│ ┌───────────────────────────┐ ┌───────────────────────────┐ │
│ │ ✓ Full DOM access │ │ ✓ Heavy computation │ │
│ │ ✓ React UI rendering │ │ ✓ No DOM (pure logic) │ │
│ │ ✓ Isolated document │ │ ✓ Better isolation │ │
│ │ │ │ │ │
│ │ Inspector Modal │ │ Vector Processor │ │
│ │ SVG Exporter │ │ Video Exporter │ │
│ └───────────────────────────┘ └───────────────────────────┘ │
│ │
│ Both types communicate via RPC messages with budget enforcement │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Permissions System

Permission Types

PermissionDescriptionAuto-Granted
telemetryEmit performance metrics✓ Yes
timeline.readRead timeline state✓ Yes
workersUse Web Workers✓ Yes
dom.iframeRender iframe UIPrompt
theme.accessAccess theme tokensPrompt
filesystemFile system access✓ Yes

Permission Prompt

When a plugin requests a permission that requires user consent:

┌──────────────────────────────────────────────────────────────────────────┐
│ Permission Request │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ "Inspector Modal" is requesting: │
│ │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ 📋 dom.iframe │ │
│ │ Allow this plugin to render an iframe interface. │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │
│ This permission allows the plugin to display its user interface. │
│ │
├──────────────────────────────────────────────────────────────────────────┤
│ [ Deny ] [ Allow ] │
└──────────────────────────────────────────────────────────────────────────┘

Revoking Permissions

In the plugin details drawer, you can revoke previously granted permissions:

  1. Open Plugin Manager
  2. Click on plugin row to open details
  3. Find the permission in the Permissions section
  4. Click Revoke next to the permission

Resource Budgets

Sandboxed plugins have resource limits:

PLUGIN BUDGETS
┌─────────────────────────────────────────────────────────────────────────┐
│ │
│ Resource Budget Warning Critical │
│ ───────────────────────────────────────────────────────────────────── │
│ CPU per frame 5ms 3x budget exceeded │
│ CPU per operation 6ms 3x budget exceeded │
│ Memory 79 MB 3x budget 2x budget │
│ Messages/second 96 3x budget 2x budget │
│ │
│ When a plugin exceeds its budget: │
│ • Warning → Yellow status in Plugin Manager │
│ • Critical → Plugin may be throttled or disabled │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Telemetry Dashboard

Click the 📊 icon in the plugin details to view telemetry:

┌──────────────────────────────────────────────────────────────────────────┐
│ Telemetry Dashboard [X] │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ [ Runtime ] [ UI ] │
│ │
│ RUNTIME METRICS │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ CPU Usage (per frame) │
│ ████████████░░░░░░░░░░░░░░░░░░ 2.4ms / 5ms budget │
│ │
│ Memory │
│ ██████░░░░░░░░░░░░░░░░░░░░░░░░ 18 MB / 79 MB budget │
│ │
│ Messages/second │
│ ████░░░░░░░░░░░░░░░░░░░░░░░░░░ 12 / 96 budget │
│ │
│ ───────────────────────────────────────────────────────────────────── │
│ │
│ RECENT EVENTS │
│ 12:45:32 plugin.initialized { pluginId: "inspector.modal.shell" } │
│ 12:45:33 panel.registered { panelId: "inspector-panel" } │
│ 12:46:01 scene.read { sceneId: "scene-1", objects: 5 } │
│ │
└──────────────────────────────────────────────────────────────────────────┘

Security Log

The security log tracks plugin-related security events:

SECURITY LOG
┌─────────────────────────────────────────────────────────────────────────┐
│ │
│ 🔒 Security Log [ Clear ] │
│ ─────────────────────────────────────────────────────────────────── │
│ │
│ 12:45:32 ⚠ Warning inspector.modal.shell │
│ Budget warning: CPU usage at 4.2ms (budget: 5ms) │
│ │
│ 12:46:01 ⚠ Warning processor.vector.default │
│ High message rate: 85/sec (budget: 96/sec) │
│ │
│ ─── No violations ─── │
│ │
└─────────────────────────────────────────────────────────────────────────┘

Event Types

TypeIconDescription
Violation🚫Security rule broken
WarningApproaching limits

Plugin Actions

Reload

Restart a plugin without disabling it:

  1. Open plugin details drawer
  2. Click Reload
  3. Plugin reinitializes with fresh state

Use when: Plugin is behaving unexpectedly

Repair

Attempt to fix a broken plugin:

  1. Open plugin details drawer
  2. Click Repair
  3. System attempts to recover plugin state

Use when: Plugin shows error status

Revoke (Admin)

Permanently block a plugin version:

  1. Open plugin details drawer
  2. Click Revoke (requires admin rights)
  3. Enter reason for revocation
  4. Plugin cannot be enabled until updated

Keyboard Navigation

ShortcutAction
↑ / ↓Navigate plugin list
EnterOpen plugin details
SpaceToggle plugin enable/disable
EscapeClose drawer / Close panel
TabMove focus to next element
HomeJump to first plugin
EndJump to last plugin

Troubleshooting

Plugin Won't Enable

CauseSolution
Missing permissionsGrant required permissions
Version incompatibleUpdate plugin or app
Dependency missingEnable required plugins first
Corrupted stateTry Repair action

Plugin Shows Error

CauseSolution
Load failureCheck console for errors
Manifest invalidPlugin needs update
Signature invalidContact plugin author
Budget exceededReduce plugin usage

Plugin UI Not Showing

CauseSolution
Plugin disabledEnable in Plugin Manager
Permission deniedGrant dom.iframe permission
Feature flag offCheck feature flags
Panel collapsedExpand the panel

Performance Issues

CauseSolution
Too many pluginsDisable unused plugins
Budget exhaustionCheck telemetry dashboard
Memory leakReload the plugin
Heavy processingWait for operation to complete

Best Practices

For Users

  1. Keep plugins updated — Updates include bug fixes and performance improvements
  2. Disable unused plugins — Free up resources for plugins you use
  3. Monitor telemetry — Check for budget warnings periodically
  4. Grant minimum permissions — Only allow what plugins need

For Performance

  1. Limit active processors — Only one vector processor needed
  2. Watch security log — Warnings indicate potential issues
  3. Reload periodically — Clears accumulated state
  4. Close Plugin Manager — Don't leave it open during work

Plugin Categories

By Function

CategoryExamples
UI PanelsTimeline, Inspector, Scene Manager
AnimatorsHand Animator
ProcessorsVector Processor
ExportersSVG Exporter, Video Exporter

By Sandbox Type

TypeExamples
HostTimeline Panel, Hand Animator, Audio Processor
IframeInspector Modal, SVG Exporter
WorkerVector Processor, Video Exporter

Default Plugin States

On first launch, these plugins are enabled by default:

PluginDefaultCritical
Hand Animator✓ EnabledYes
Timeline Panel✓ EnabledYes
Scene Manager✓ EnabledYes
Audio Processor✓ EnabledNo
Inspector Modal✓ EnabledYes
Vector Processor✓ EnabledYes
SVG Exporter✓ EnabledNo
Video Exporter✓ EnabledNo
note

Critical plugins are required for basic functionality. Disabling them will significantly reduce application capabilities.


File Locations

ComponentPath
Plugin Manager Panelfrontend/src/features/plugin-manager/ui/PluginManagerPanel.tsx
Plugin Hostfrontend/src/plugins/host.ts
Plugin Registry Statefrontend/src/features/plugin-manager/state/pluginRegistryState.ts
Architecture Docsdocs/architecture/PLUGIN_SYSTEM_ARCHITECTURE.md
Host Pluginsfrontend/src/plugins/
Sandboxed Pluginsplugins/