Skip to main content

classfactory.xml

Script registration, entry points, and attributes.

<?xml version="1.0" encoding="UTF-8"?>
<ClassFactory>
<ScriptClass
classID="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
metaClassID="{YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY}"
category="EditTask"
subCategory="TrackEdit"
name="My Script Name"
sourceFile="scriptname.js"
functionName="createInstance">
<Attribute id="menuPriority" value="0"/>
<Attribute id="commandCategory" value="MyCategory"/>
</ScriptClass>
</ClassFactory>

Core attributes

AttributeDescription
classIDUnique GUID — generate with any GUID tool
categoryScript class type
subCategoryHost context selector
nameDisplay name in menus
sourceFileJS filename (relative to package root)
functionNameFunction exported by the JS file

Optional attributes

IDDescription
argumentsComma-separated param names (e.g., "Volume,Pan")
alwaysEnabled"1" keeps the command enabled regardless of normal prepareEdit gating
commandCategoryCategory in macro/key binding system
formNameUser-defined skin.xml Form name (for EditAddIn panels)
groupNamePanel group location (e.g., "Song.AddInPanel")
hidden"1" hides from menus; accessible via command system only
menuGroupGroup name for menu bar, right-click and action menu categorization.
menuPriorityInteger sort order; -1 hides from menu
menuFollow"1"
metaClassIDOptional unique GUID for internal metadata binding, such as ScriptMetaClass
allowPatternParts"1"
ignoreAudioEvents"1"
ignoreEventLock"1"
ignoreTrackLock"1"
musicEditorOnly"1" restricts to music editor context
supportsLauncher"1"
supportsProject"1" for project-level operation
useChannelSelection"1"
useEventSelection"1"
useLayerSegments"1"
useTimeSelection"1"
useTrackSelection"1"
TrackContextMenu"1" adds to track right-click menu
TrackSourceContextMenu"1"
wantAudioParts"1" to include audio clips in iteration

category values

ValueContext
"EditTask"Command/action script
"EditAddIn"Native add-in panel or toolbar integration
"ExtensionHandler"Extension lifecycle handler
"FrameworkService"Host-managed service surface, not shown in menus
"Gadget"-

See docs/script_interface.md for the interface and lifecycle associated with each category.

subCategory values

ValueContext
"AudioEdit"Audio editor
"EventEdit"Arrangement editor events
"Engine"Song add-in toolbar panels
"FrameworkService"Host-managed service surface, not shown in menus
"MusicEdit"Piano view / Note editor
"MusicPartEdit"Instrument Part operations
"Project"Project add-in toolbar panels
"ProjectEdit"Project-level operations
"Show"Show add-in toolbar panels
"ShowEdit"Show page operations
"TrackEdit"Track operations

groupName values

ValueContext
"Song.AddInPanel"Song add-in panel strip
"SongOnly.AddInPanel"Arrangement-only add-in panel strip
"MusicOnly.AddInPanel"Music editor add-in panel strip
"AudioOnly.AddInPanel"Audio editor add-in panel strip
"Project.AddInPanel"Project page add-in panel strip
"Show.AddInPanel"Show page add-in panel strip
ValueMenusubCategoryGrouping
"AudioProcess"AudioAudioEditAudio Processing category
"AudioVolume"AudioAudioEditVolume Curve category
"AudioBend"AudioAudioEditAudio Bend category
"AudioChords"AudioAudioEditChords category
"AudioParts"AudioAudioEditAudio Parts category
"EventGeneral"EventEventEditFirst non-header category
"EventMute"EventEventEditSecond non-header category
"EventOther"EventEventEditThird non-header category
"EventQuantize"Event, Musical FunctionsEventEdit, MusicEditQuantize category
"MusicMute"Event, Musical FunctionsEventEdit, MusicEditMute category
"MusicGlobal"Musical FunctionsMusicEditGlobal category
"MusicPitch"Musical FunctionsMusicEditPitch category
"MusicVelocity"Musical FunctionsMusicEditVelocity category
"MusicTime"Musical FunctionsMusicEditTime category
"MusicProcess"Musical FunctionsMusicEditProcess category

ScriptMetaClass (Icon and Resource Binding)

ScriptMetaClass binds an icon resource to a script class. The binding is declared in classfactory.xml using <ScriptClassResource>.

Icon binding (toolbar buttons and menu items):

For EditAddIn toolbar buttons, the script class uses subCategory="Engine" with groupName for panel location. For EditTask menu items, use menuGroup for menu categorization.

The image is declared in skin.xml as an <Image> and referenced from classfactory.xml with theme://$package/....

<!-- skin.xml -->
<Image name="IconName" url="images/IconName.png"/>
<!-- classfactory.xml -->
<ScriptMetaClass classID="{your-metaClassID}">
<ScriptClassResource id="Class:ImageResource"
url="theme://$package/IconName"/>
</ScriptMetaClass>

Multiple commands from one JS file

See docs/script_interface.md for the pattern of exporting multiple factory functions from a single JS file.