# XML File

> How to define a plugin user interface using an XML file in Asset Transformer Studio

## User Interface creation

A plugin user interface is defined in an XML file. Here is a basic example:

![XML file example](/api/media?file=/asset-transformer-studio/2026.5.0/media/NewItem145.png)

![Resulting interface](/api/media?file=/asset-transformer-studio/2026.5.0/media/NewItem32.png)

## More about Types

### Parameter types

Please refer to the [API Reference](/asset-transformer-studio/2026.5.0/api/python/studio_functions.md) or the [Function List](../../../../user-interface/menu-bar/edit-menu/function-list) to find all the parameter types available in the Python API, and to see a preview of the associated GUI widget.

### Structures

Declare your own structured types using the `decltype` and `struct` keywords:

```xml
<decltype name="Structure">
    <struct>
        <field name="BoolParameter" type="Bool" default="True"/>
        <field name="AngleParameter" type="Angle" default="0.1"/>
    </struct>
</decltype>
…
<parameter name="Structure" type="Structure" description=""/>
```

![Structure widget](/api/media?file=/asset-transformer-studio/2026.5.0/media/NewItem30.png)

### Lists

Some types also exist as lists (e.g. `String` and `StringList`). Declare your own lists of structured types using the `decltype` and `list` keywords:

```xml
<decltype name="Structure">
    <struct>
        <field name="BoolParameter" type="Bool" default="True"/>
        <field name="AngleParameter" type="Angle" default="0.1"/>
    </struct>
</decltype>
…
<decltype name="StructureList">
    <list type ="Structure"/>
</decltype>
…
<parameter name="structureList" type="StructureList" description=""/>
```

![List widget](/api/media?file=/asset-transformer-studio/2026.5.0/media/NewItem154.png)

### Enumerators

Declare Enumerator types using the `enum` keyword. Enumerators take the form of dropdown menus:

```xml
<decltype name="Enumerator">
    <enum type="Int">
      <value name="Enum_1" value="1"/>
      <value name="Enum_2" value="2"/>
    </enum>
 </decltype>
…
<parameter name="Enumerator" type="Enumerator" description=""/>
```

![Enumerator widget](/api/media?file=/asset-transformer-studio/2026.5.0/media/NewItem29.png)

### Selectors

Use the **select** keyword to create dropdown selection menus giving inputs choice:

```xml
<decltype name="DropDownMenu">
    <select>
      <type name="FirstChoice" type="Structure"/>
      <type name="SecondChoice" type="ComponentType"/>
    </select>
</decltype>
…
<parameter name="dropDownMenu" type="DropDown" description=""/>
```

![Selector widget 1](/api/media?file=/asset-transformer-studio/2026.5.0/media/NewItem25.png)

![Selector widget 2](/api/media?file=/asset-transformer-studio/2026.5.0/media/NewItem23.png)

### Advanced use cases

* Optional parameters: `optional="True"`

  ```xml
  <parameter name="OptionalParameter" type="OutputDirectoryPath" optional="True" description=""/>
  ```

* Disabled parameters: `disableValue="-1"`

  ```xml
  <parameter name="DisabledValue" type="Int" disableValue="-1" description=""/>
  ```

  ![Disabled parameter enabled](/api/media?file=/asset-transformer-studio/2026.5.0/media/NewItem19.png) ![Disabled parameter disabled](/api/media?file=/asset-transformer-studio/2026.5.0/media/NewItem18.png)

* Customize `FilePath` type so it browses only specified formats:

  ```xml
  <decltype name="InputFilePath" type="FilePath" attributes="extensions:*.pxz"/>

  …
  <parameter name="input" type="InputFilePath" description=""/>
  ```

  ![FilePath widget](/api/media?file=/asset-transformer-studio/2026.5.0/media/NewItem148.png)

* Selectable `OccurrenceList` parameters (input filled with current scene selection): `selection="true"`

  ```xml
  <parameter name="occurrences" type="OccurrenceList" selection="true"/>
  ```

  ![OccurrenceList widget](/api/media?file=/asset-transformer-studio/2026.5.0/media/NewItem153.png)
