Skip to content

Download the complete guide JSON field reference Example JSON files

PropUI JSON authoring guide

Use this guide to create or edit PropUI setup files, entry presets and editor settings. It covers the JSON structure, supported fields and complete examples for Full, Free and Rigify. Start with an example for your edition, adjust its controls and source paths, then import it through PropUI's normal workflow.

Compatibility: Full 1.3.0, Free 1.1.6 and Rigify 1.7.0; JSON schema_version 1. All editions support Blender 5.0 or newer. Multiline strings and text links use native Blender 5.2 widgets, with ordinary string fields or URL buttons on earlier supported versions.

Authoring workflow

  1. Choose the edition: FULL, FREE or RIGIFY. Author for that edition's supported features to avoid losing settings during conversion.
  2. Identify the storage Object for Full/Free managed values. Use Blender's Copy Full Data Path or an existing export for source properties. For Rigify storage and visibility, use the actual metarig or generated control names from your file. Referenced scene data must exist in the receiving file, and operator IDs must be available in Blender.
  3. Create one complete JSON object with kind, integer schema_version and payload. Setup documents also include source_edition; preset/editor documents use the root fields in their envelopes below. Use JSON booleans and double quotes, without comments or trailing commas, and save the complete object as a .json file.
  4. Use only the fields and enum identifiers documented here. UI labels are not enum identifiers: Dropdown is ENUM, Integer is INT, and Operator Button is OPERATOR.
  5. Give entries and layout items unique, stable uid values. Every entry reference must point to an entry included in the setup. Keep parent graphs acyclic and list parents before their children.
  6. Put every intended visible entry into layout_items. The Entry List and Generated Layout are different. Use explicit rows even though some workflows can infer a layout.
  7. Keep entries concise: include identity, type, label and fields needed for the intended behavior. Omitted fields receive importer defaults. Leave out cached detection/error fields, obsolete widget selectors and raw icon IDs.
  8. Set izom_propui_replace_storage_on_generate to false for Full/Free unless you intend to replace storage. Leave automatic old-target cleanup off in a portable new setup. Imported defaults can differ from your current editor settings.
  9. Check IDs, links, rows/columns, enum choices, numeric limits, defaults and edition support before importing. All numeric values must be finite, and source names/paths must match your Blender file.
  10. Prepare required objects, drivers, nodes and constraints in Blender, and enable any add-ons needed by operator buttons. Setup JSON describes the controls and layout; it does not create the rest of the scene.

Plan a setup

For example, a Full setup for an existing Object named Cube could contain an Enable checkbox, a Gain slider from 0 to 1, and an integer Steps control visible only while Enable is on. A Display Link can provide a second view of Gain in a compact popover with keyframe buttons. Define the entries, their relationships and their layout placements separately. Keep storage replacement off to preserve unrelated properties. The complete examples below show the required document structure.

Import and use the file

  • Full: Editor Settings > JSON > full setup import. A setup import creates a UI Variant. Load that variant into the editor, check Property Storage, then Generate UI. Importing does not by itself run a generated panel.
  • Free: use setup JSON import or clipboard paste, review the conversion preview, confirm, check the Object, then Generate UI.
  • Rigify: first add/select a metarig bone whose Rigify Type is izom.PropUI. Import the full setup into that component, then generate through Rigify. The JSON does not create the component or choose an arbitrary metarig for you.
  • For a reusable entry preset, select a compatible entry and import with Entry Type scope. For editor settings, use Import Editor Settings JSON; that file also carries editor layout. The standalone editor_layout document is the saved-default format, not an ordinary setup/file import. To import an editor layout, place it under payload.layout in an editor_settings document and retain your existing settings. Choose the importer for the document's kind.
  • Full/Rigify Validate Setup checks current sources, groups and references. Regenerate after changing generated layout or appearance. Save the .blend to retain authored data and generated values.

Each example is independent. Reusing the same prop_id on an owner with existing incompatible properties can produce Blender's normal conflict prompt. When extending a design, start from its current export, preserve existing identities and choose unused property IDs for new values. Review conflicts before importing; leave Replace Storage off when you want to preserve the owner's other properties.

Document envelopes

Purpose kind Other root fields Payload
Full/Free panel setup propui_project_setup schema_version: 1, source_edition: FULL or FREE project_settings, entries, layout_rows, layout_items, layout_subpanels, layout_box_ranges
Rigify component setup rigify_host_bone_setup schema_version: 1, source_edition: RIGIFY host_settings, visible_on_bones, entries, layout arrays, optional editor_state and saved_type_defaults
One entry preset, Full/Rigify entry_type_preset schema_version: 1, prop_type Entry settings for that type; identity/parent/link-target are not preset fields.
Editor preferences, Full/Rigify editor_settings schema_version: 1 settings and layout
Saved editor-layout default, Full/Rigify editor_layout schema_version: 1 layout; for ordinary file import use editor_settings instead

The edition prefixes on settings are significant. Full settings use izom_propui_. Rigify host/editor settings use izom_propui_rigify_, except native passthrough keys listed later. Free setup files canonically use the portable izom_propui_ setting keys too, with source_edition: FREE; do not mechanically add _free to every key. Entry fields themselves are not edition-prefixed.

Entry types and meaningful uses

prop_type Meaning Important fields
FLOAT Managed floating-point value default_float, min_float, max_float, soft limits, step, precision, subtype, slider
INT Managed integer value; native animation default_int, min_int, max_int, soft limits, step; Free uses a plain field
BOOL Managed checkbox/toggle default_bool, state labels; Full/Rigify also offer toggle style/icons
ARRAY Fixed float/int/bool components array_element_type, array_size 1..32, matching default array, float subtype and component layout
TEXT Heading/label/divider/spacer text_role, alignment, icons, alert; Full/Rigify offer Dynamic Text and HTTP/HTTPS links
STRING Managed string default_string, optional multiline/visible-lines/placeholder
ENUM Managed dropdown stored as an integer enum_items_json, default_enum, enum_expanded
DATA_BLOCK Typed Blender data-block reference datablock_id_type, optional existing default_datablock_path/name
PYTHON Literal IDProperty content python_default_expression, a Python-literal string, not executable code
CUSTOM Existing property/native widget or internal UI switch custom_source, owner/property fields or custom_internal_control
DISPLAY_LINK A second view of an existing entry linked_entry_uid, label/tooltip mode, display overrides and optional component subset
OPERATOR Existing Blender operator or built-in action button operator_id plus property JSON, or native_action and its group/collection fields

Free supports only FLOAT, INT, BOOL, ARRAY and TEXT. It has one Object storage owner, a 3D Viewport sidebar panel, up to three columns per shared row, row height 1..2, fixed optional left indent, direct Dynamic Labels and child visibility. Sub-panels, Row Boxes, availability conditions, per-entry storage, popovers, foldouts, advanced text links, entry presets and saved defaults are outside Free's supported format.

enum_items_json, operator_props_json, display_link_component_subset_json and Full's visibility-target data are strings containing JSON, not nested JSON objects/arrays. Escape their quotes inside the outer file.

For a dropdown, the inner array contains objects with id, label, integer value, optional description, and optional retired. Keep id and value unique and stable; use an ASCII identifier such as DRAFT. Choices number 1..256, with at least one active choice. Retire old choices instead of reusing numbers. default_enum is a choice's integer value, not its ID or label. Managed dropdown conditions compare the stored integer with visibility_match_int/availability_match_int. A native RNA enum exposed by Custom uses its native string identifier.

A managed dropdown is a real custom property usable in conditions, labels, animation and Blender drivers. It does not automatically add a driver or connect itself to a scene setting.

Existing Blender sources and native widgets

CUSTOM uses split fields, not custom_full_path in setup JSON:

Original Blender path custom_owner_path custom_prop_name Component settings
bpy.data.scenes["Scene"].render.resolution_percentage bpy.data.scenes["Scene"].render resolution_percentage false / 1
bpy.data.objects["Cube"]["strength"] bpy.data.objects["Cube"] ["strength"] including brackets/quotes false / 1
bpy.data.objects["Cube"].location[0] bpy.data.objects["Cube"] location custom_use_component: true, custom_component_index: 1
bpy.data.materials["Material"].node_tree.nodes["Color Ramp"].color_ramp path through .nodes["Color Ramp"] color_ramp false / 1
bpy.data.materials["Material"].node_tree.nodes["RGB Curves"].mapping path through .nodes["RGB Curves"] mapping false / 1

Data-path component indexes are zero-based; stored component slots are one-based. Never enable component indexing for a scalar Boolean/int/float. All paths start with bpy. and use attributes or literal string/integer subscripts. No function calls, operators, arithmetic or arbitrary expressions.

Color Ramp/Curve Mapping widgets are detected from the existing source. Leave out native_widget; it cannot create or force a source type. The material/node must already exist. A fixed pointer does not necessarily prevent editing local ramp/curve contents; linked data follows Blender's restrictions. A collection or unsupported pointer can be a summary rather than an editable scalar.

For custom_source: INTERNAL, use custom_internal_control = GENERATED_UI_ENABLED, DISABLE_WHILE_TRANSFORMING or DISABLE_WHILE_PLAYBACK; omit RNA paths. These affect generated output, not the authoring editor.

Storage and Rigify

Full's izom_propui_default_target_owner_path names the owner of managed properties, for example bpy.data.objects["Cube"] or bpy.data.scenes["Scene"]. entry_target_owner_path overrides it for one entry. Use the owner path, not an individual property's path. No storage is required for a setup containing only external Custom sources, Text and ordinary operators.

Free requires an Object owner and has no entry override. Full can use other supported owners, subject to Blender editability. JSON does not create missing data. Leave Replace Storage off for linked/overridden owners and resolve incompatible storage before generating.

Rigify normally stores managed values on the generated host. Set izom_propui_rigify_use_one_prop_bone: true and izom_propui_rigify_one_prop_bone to use shared bone storage. For an entry override, set both entry_prop_bone_override_enabled: true and entry_prop_bone to an actual supported bone name. A saved bone name with override false is dormant. entry_target_owner_path is not the Rigify bone-storage control.

visible_on_bones is an array of bone-name strings. Exact generated controls and mapped metarig names are supported. Always Visible bypasses selection filtering. KEEP_HOST preserves the generated host; METARIG_ONLY omits it and requires external storage for managed values and external visibility targets unless Always Visible. Reparent metarig children before omitting a host. Use normal Rigify generation; this JSON does not replace rig_ui.py or create UI Variants.

Layout, parenting and conditions

  • entries hold controls. layout_items place controls. entry_uid references an entry, while the layout item's own uid identifies that placement.
  • row_index and column_index are one-based. Use global row numbers across the whole setup, not a fresh row 1 per sub-panel. Put each row's columns consecutively from 1. Keep every shared row inside one container.
  • layout_rows hold row height/insets; layout_items hold the entry, row/column, container and optional width/alignment. Omitted row options use defaults.
  • layout_subpanels contain uid, title, parent_uid, default_closed, ui_order. Here parent_uid refers to another sub-panel; on an entry it refers to another entry. Empty subpanel UID means the main panel.
  • layout_box_ranges contain uid, inclusive row_a/row_b, and subpanel_uid. A box stays inside one container. Nested ranges are allowed; partial overlaps are invalid.
  • Full/Rigify row height is 0.25..15; inset amounts 0.1..10. Free row height is 1..2; its left indent uses 1.5 and it has no right inset. Single-item width/column weight uses row_width_enabled and single_row_width (0.05..10); omit for normal fill. single_row_alignment is LEFT/CENTER/RIGHT.
  • Entry parenting is functional. On the child, set parent_uid and its conditions. Keep each parent's descendants together in the Entry List; generated placement is controlled separately by layout_items. For Boolean parents use bool_child_visibility/availability WHEN_TRUE or WHEN_FALSE. For numeric parents use number_child_visibility/availability EQUAL, GREATER (inclusive at least), LESS (inclusive at most), or RANGE and the matching typed value/range fields. ALWAYS disables that condition.
  • String/native enum comparisons use visibility_match_text/availability_match_text; managed dropdowns use integer values. Whole arrays use the matching typed array. Component conditions enable visibility_use_component/availability and a one-based component index. Inheritance depth chooses the watched ancestor; 1 means the direct parent.
  • Availability keeps a control visible but disabled; visibility removes it. shared_row_hidden_mode FILL_ROW repacks siblings or RESERVE_SLOT leaves an empty slot. Hiding an entry in the editor does not hide its generated output.

Labels, popovers and actions

Scalar value_label_layout is INLINE, SPLIT_LABEL or LABEL_ABOVE. Array layouts have their own identifiers in the table below: array label-above is INLINE_LABEL, not LABEL_ABOVE. multi_component_draw_mode WIDGET gives a native whole-value control where supported; COMPONENTS draws separate fields.

compact_control keeps the control/launcher at its natural width. native_popover moves the entry's control into a popup. Style DROPDOWN is Blender's attached dropdown; it needs a compact launcher to allow a compact popup. Style BUTTON permits a full-width launcher and compact popup independently. Choose native_popover_compact, icon, show-label and optional native_popover_show_keyframes to suit the control. The latter supplies native keyframe diamonds for animatable controls; whole ramps/curves are not one animatable property. native_foldout requires a full-width standalone row outside Row Boxes; Rigify also requires SEPARATE_PANEL output. Use sub-panels/boxes for larger sections.

Dynamic Label rows are first-match-wins. Use use_value_labels and value_labels for the entry's own value; match_mode EQUAL/GREATER/LESS/RANGE, typed value_* and range fields select the match. A FALLBACK rule returns the normal label. Full/Rigify other_value_labels can use source_entry_uid, source component/state and target match fields; enable use_other_entry_labels, or text_use_other_entry_labels for Dynamic Text. Source Boolean state and target Boolean scope use WHEN_TRUE/WHEN_FALSE; ANY means no target Boolean restriction. See the field tables for rule shapes.

For an ordinary OPERATOR use an existing operator_id such as wm.url_open, operator_context, and an object encoded in operator_props_json. Native actions instead use native_action: RESET_GROUP, KEY_GROUP, UNKEY_GROUP, SAVE_VALUES, APPLY_VALUES, SELECT_COLLECTION, DESELECT_COLLECTION. For group actions give member entries and the action entry the same control_group. Include managed members in Generated Layout. Key/Unkey use the current frame/Action slot and respect drivers, locked channels and editability. Strings support value presets but cannot be keyed.

Save/Apply Values use value_preset_name and live values stored on the group's first owning data-block inside the .blend. They are not setup defaults or JSON-embedded value-preset libraries. Rebinding sources requires a new live-value preset. Bone Collection actions require bone_collection_object_path to an armature Object and bone_collection_path to an existing collection, for example bpy.data.objects["Rig"].data.collections_all["Controls"]. Select/Deselect require that armature active in Pose Mode. Visibility/solo are Custom entries whose property is is_visible or is_solo on that collection.

Operator Emboss is normal button styling; Pressed Visual is appearance, not state. Translation options use Blender's available catalogues. Text Link URL must be valid HTTP/HTTPS. Multiline strings use 1..20 visible lines and fall back on older supported Blender versions.

Full panel selection filtering uses izom_propui_generated_visibility_mode: SELECTED_OBJECTS plus izom_propui_generated_visibility_targets_json, an encoded array of {"kind":"OBJECT","object_name":"Cube"} or {"kind":"POSE_BONE","object_name":"Rig","bone_name":"control"}. Sidebar/Properties placement and subtype filters are explicit project settings in the reference below. Do not use Full placement/branding keys for Rigify.

Complete minimal setup files

The Full/Free examples assume an existing Object named Cube. Replace that storage path with the Object in your file. The Rigify example uses the selected izom.PropUI host without requiring an explicit storage bone. Each example is a complete importable document.

Full minimal

{
  "kind": "propui_project_setup",
  "schema_version": 1,
  "source_edition": "FULL",
  "payload": {
    "entries": [
      {
        "uid": "gain",
        "prop_id": "gain",
        "label": "Gain",
        "prop_type": "FLOAT",
        "default_float": 0.5,
        "min_float": 0.0,
        "max_float": 1.0,
        "ui_order": 1,
        "display_order": 1
      }
    ],
    "layout_rows": [
      {
        "row_index": 1
      }
    ],
    "layout_items": [
      {
        "uid": "layout_gain",
        "entry_uid": "gain",
        "row_index": 1,
        "column_index": 1
      }
    ],
    "layout_subpanels": [],
    "layout_box_ranges": [],
    "project_settings": {
      "izom_propui_default_target_owner_path": "bpy.data.objects[\"Cube\"]",
      "izom_propui_generated_panel_title": "Example Controls",
      "izom_propui_generated_panel_tab": "PropUI",
      "izom_propui_replace_storage_on_generate": false,
      "izom_propui_clean_old_targets_on_generate": false
    }
  }
}

Free minimal

{
  "kind": "propui_project_setup",
  "schema_version": 1,
  "source_edition": "FREE",
  "payload": {
    "entries": [
      {
        "uid": "gain",
        "prop_id": "gain",
        "label": "Gain",
        "prop_type": "FLOAT",
        "default_float": 0.5,
        "min_float": 0.0,
        "max_float": 1.0,
        "ui_order": 1,
        "display_order": 1
      }
    ],
    "layout_rows": [
      {
        "row_index": 1
      }
    ],
    "layout_items": [
      {
        "uid": "layout_gain",
        "entry_uid": "gain",
        "row_index": 1,
        "column_index": 1
      }
    ],
    "layout_subpanels": [],
    "layout_box_ranges": [],
    "project_settings": {
      "izom_propui_default_target_owner_path": "bpy.data.objects[\"Cube\"]",
      "izom_propui_generated_panel_title": "Example Controls",
      "izom_propui_generated_panel_tab": "PropUI",
      "izom_propui_replace_storage_on_generate": false,
      "izom_propui_clean_old_targets_on_generate": false
    }
  }
}

Rigify minimal

{
  "kind": "rigify_host_bone_setup",
  "schema_version": 1,
  "source_edition": "RIGIFY",
  "payload": {
    "entries": [
      {
        "uid": "gain",
        "prop_id": "gain",
        "label": "Gain",
        "prop_type": "FLOAT",
        "default_float": 0.5,
        "min_float": 0.0,
        "max_float": 1.0,
        "ui_order": 1,
        "display_order": 1
      }
    ],
    "layout_rows": [
      {
        "row_index": 1
      }
    ],
    "layout_items": [
      {
        "uid": "layout_gain",
        "entry_uid": "gain",
        "row_index": 1,
        "column_index": 1
      }
    ],
    "layout_subpanels": [],
    "layout_box_ranges": [],
    "host_settings": {
      "izom_propui_rigify_host_output_mode": "KEEP_HOST",
      "izom_propui_rigify_use_one_prop_bone": false,
      "izom_propui_rigify_generated_ui_panel_location": "SEPARATE_PANEL",
      "izom_propui_rigify_generated_ui_panel_title": "Example Controls",
      "izom_propui_rigify_generated_ui_sidebar_tab": "PropUI",
      "izom_propui_rigify_generated_ui_always_visible": true
    },
    "visible_on_bones": [],
    "editor_state": {},
    "saved_type_defaults": {}
  }
}

The following Full file uses all 12 entry types, a parent visibility rule, stable dropdown choices, Dynamic Labels/Text, a sub-panel, Row Box, Control Group reset, styled label, multiline text and a popup Display Link with keyframe buttons. It assumes Cube storage and an existing Scene named Scene. No source data or drivers are created by importing it.

{
  "kind": "propui_project_setup",
  "schema_version": 1,
  "source_edition": "FULL",
  "payload": {
    "entries": [
      {
        "uid": "heading",
        "prop_id": "heading",
        "label": "Main controls",
        "prop_type": "TEXT",
        "text_alignment": "CENTER",
        "text_icon": "PREFERENCES",
        "ui_order": 1,
        "display_order": 1
      },
      {
        "uid": "master",
        "prop_id": "master",
        "label": "Enable details",
        "prop_type": "BOOL",
        "default_bool": true,
        "use_bool_state_labels": true,
        "bool_label_true": "Enabled",
        "bool_label_false": "Disabled",
        "control_group": "Main",
        "ui_order": 2,
        "display_order": 2
      },
      {
        "uid": "gain",
        "prop_id": "gain",
        "label": "Gain",
        "prop_type": "FLOAT",
        "default_float": 0.5,
        "min_float": 0.0,
        "max_float": 1.0,
        "value_label_layout": "LABEL_ABOVE",
        "stacked_label_use_text_style": true,
        "control_group": "Main",
        "use_value_labels": true,
        "value_labels": [
          {
            "uid": "gain_zero",
            "match_mode": "EQUAL",
            "value_float": 0.0,
            "label": "Muted"
          },
          {
            "uid": "gain_high",
            "match_mode": "GREATER",
            "value_float": 0.8,
            "label": "High gain"
          }
        ],
        "ui_order": 3,
        "display_order": 3
      },
      {
        "uid": "steps",
        "prop_id": "steps",
        "label": "Steps",
        "prop_type": "INT",
        "parent_uid": "master",
        "bool_child_visibility": "WHEN_TRUE",
        "default_int": 3,
        "min_int": 1,
        "max_int": 12,
        "control_group": "Main",
        "ui_order": 4,
        "display_order": 4
      },
      {
        "uid": "quality",
        "prop_id": "quality",
        "label": "Quality",
        "prop_type": "ENUM",
        "enum_items_json": "[{\"id\": \"DRAFT\", \"label\": \"Draft\", \"value\": 0}, {\"id\": \"FINAL\", \"label\": \"Final\", \"value\": 7}]",
        "default_enum": 0,
        "enum_expanded": false,
        "control_group": "Main",
        "ui_order": 5,
        "display_order": 5
      },
      {
        "uid": "color",
        "prop_id": "color",
        "label": "Tint",
        "prop_type": "ARRAY",
        "array_element_type": "FLOAT",
        "array_size": 4,
        "float_array_subtype": "COLOR",
        "default_float_array": [
          0.2,
          0.4,
          0.8,
          1.0
        ],
        "min_float": 0.0,
        "max_float": 1.0,
        "control_group": "Main",
        "ui_order": 6,
        "display_order": 6
      },
      {
        "uid": "notes",
        "prop_id": "notes",
        "label": "Notes",
        "prop_type": "STRING",
        "default_string": "Write notes here",
        "string_multiline": true,
        "string_visible_lines": 4,
        "string_placeholder": "Notes",
        "ui_order": 7,
        "display_order": 7
      },
      {
        "uid": "material",
        "prop_id": "material",
        "label": "Material",
        "prop_type": "DATA_BLOCK",
        "datablock_id_type": "MATERIAL",
        "ui_order": 8,
        "display_order": 8
      },
      {
        "uid": "config",
        "prop_id": "config",
        "label": "Configuration",
        "prop_type": "PYTHON",
        "python_default_expression": "{'enabled': True, 'weights': [0.25, 0.75]}",
        "ui_order": 9,
        "display_order": 9
      },
      {
        "uid": "resolution",
        "prop_id": "resolution",
        "label": "Resolution %",
        "prop_type": "CUSTOM",
        "custom_source": "RNA_PATH",
        "custom_owner_path": "bpy.data.scenes[\"Scene\"].render",
        "custom_prop_name": "resolution_percentage",
        "ui_order": 10,
        "display_order": 10
      },
      {
        "uid": "gain_popup",
        "prop_id": "gain_popup",
        "label": "Gain popup",
        "prop_type": "DISPLAY_LINK",
        "linked_entry_uid": "gain",
        "display_link_label_mode": "CUSTOM",
        "native_popover": true,
        "native_popover_style": "BUTTON",
        "native_popover_compact": true,
        "native_popover_icon": "PREFERENCES",
        "native_popover_show_label": false,
        "native_popover_show_keyframes": true,
        "ui_order": 11,
        "display_order": 11
      },
      {
        "uid": "reset",
        "prop_id": "reset",
        "label": "Reset Main",
        "prop_type": "OPERATOR",
        "native_action": "RESET_GROUP",
        "control_group": "Main",
        "operator_icon": "LOOP_BACK",
        "compact_control": true,
        "ui_order": 12,
        "display_order": 12
      },
      {
        "uid": "status",
        "prop_id": "status",
        "label": "Ready",
        "prop_type": "TEXT",
        "text_use_other_entry_labels": true,
        "other_value_labels": [
          {
            "uid": "status_off",
            "source_entry_uid": "master",
            "source_bool_state": "WHEN_FALSE",
            "label": "Details disabled"
          }
        ],
        "ui_order": 13,
        "display_order": 13
      }
    ],
    "layout_rows": [
      {
        "row_index": 1
      },
      {
        "row_index": 2
      },
      {
        "row_index": 3
      },
      {
        "row_index": 4
      },
      {
        "row_index": 5
      },
      {
        "row_index": 6
      },
      {
        "row_index": 7,
        "subpanel_uid": "details_panel"
      },
      {
        "row_index": 8,
        "subpanel_uid": "details_panel"
      },
      {
        "row_index": 9,
        "subpanel_uid": "details_panel"
      },
      {
        "row_index": 10
      },
      {
        "row_index": 11
      },
      {
        "row_index": 12
      },
      {
        "row_index": 13,
        "subpanel_uid": "details_panel"
      }
    ],
    "layout_items": [
      {
        "uid": "layout_heading",
        "entry_uid": "heading",
        "row_index": 1,
        "column_index": 1
      },
      {
        "uid": "layout_master",
        "entry_uid": "master",
        "row_index": 2,
        "column_index": 1
      },
      {
        "uid": "layout_gain",
        "entry_uid": "gain",
        "row_index": 3,
        "column_index": 1
      },
      {
        "uid": "layout_steps",
        "entry_uid": "steps",
        "row_index": 4,
        "column_index": 1
      },
      {
        "uid": "layout_quality",
        "entry_uid": "quality",
        "row_index": 5,
        "column_index": 1
      },
      {
        "uid": "layout_color",
        "entry_uid": "color",
        "row_index": 6,
        "column_index": 1
      },
      {
        "uid": "layout_notes",
        "entry_uid": "notes",
        "row_index": 7,
        "column_index": 1,
        "subpanel_uid": "details_panel"
      },
      {
        "uid": "layout_material",
        "entry_uid": "material",
        "row_index": 8,
        "column_index": 1,
        "subpanel_uid": "details_panel"
      },
      {
        "uid": "layout_config",
        "entry_uid": "config",
        "row_index": 9,
        "column_index": 1,
        "subpanel_uid": "details_panel"
      },
      {
        "uid": "layout_resolution",
        "entry_uid": "resolution",
        "row_index": 10,
        "column_index": 1
      },
      {
        "uid": "layout_gain_popup",
        "entry_uid": "gain_popup",
        "row_index": 11,
        "column_index": 1
      },
      {
        "uid": "layout_reset",
        "entry_uid": "reset",
        "row_index": 12,
        "column_index": 1
      },
      {
        "uid": "layout_status",
        "entry_uid": "status",
        "row_index": 13,
        "column_index": 1,
        "subpanel_uid": "details_panel"
      }
    ],
    "layout_subpanels": [
      {
        "uid": "details_panel",
        "title": "Details",
        "parent_uid": "",
        "ui_order": 1,
        "default_closed": false
      }
    ],
    "layout_box_ranges": [
      {
        "uid": "main_box",
        "row_a": 2,
        "row_b": 6,
        "subpanel_uid": ""
      }
    ],
    "project_settings": {
      "izom_propui_default_target_owner_path": "bpy.data.objects[\"Cube\"]",
      "izom_propui_generated_panel_title": "Control Gallery",
      "izom_propui_generated_panel_tab": "PropUI",
      "izom_propui_replace_storage_on_generate": false,
      "izom_propui_clean_old_targets_on_generate": false
    }
  }
}

The included rigify-controls.json uses the same entries/layout with the Rigify envelope and host settings. free-controls.json demonstrates every Free type without advanced fields. full-native-widgets.json requires a material named PropUI Example Material with nodes named Color Ramp and RGB Curves. Create those sources first or replace the example paths with matching sources in your file.

Complete field reference

Use the exact keys below. Defaults shown are the current importer baseline; sparse files should explicitly set important limits, storage replacement and appearance. Values written as 32 × value describe an array default; that notation is not JSON. For 32-slot array buffers, a shorter array is normalized/padded; include at least the visible array_size components with the intended values.

Shared entry fields

All fields in this table are available to Full/Rigify unless marked otherwise in their meaning. The final column identifies Free support. Omit fields irrelevant to the chosen type. Labels/tooltips for Custom RNA sources follow Blender; a JSON description cannot replace Blender's native source tooltip.

Field JSON type Default Allowed values / meaning
uid string "" Supply a unique stable non-empty identifier; the importer otherwise generates one. Free: Yes.
parent_uid string "" Internal parent link for Entry List hierarchy Free: Yes.
prop_id string "prop_1" Custom-property key stored on the resolved target owner. Property IDs must be unique per target; duplicate names are auto-suffixed Free: Yes.
label string "Property 1" User-facing label shown in the generated UI. You can also edit it directly in the Entry List Free: Yes.
editor_label string "" Optional editor-only name used in izom PropUI lists without changing generated labels or custom properties Free: Yes.
description string "" Static tooltip shown for this property in the generated UI Free: Yes.
prop_type string "FLOAT" Allowed: FLOAT, INT, BOOL, STRING, DATA_BLOCK, PYTHON, ARRAY, DISPLAY_LINK, CUSTOM, TEXT, OPERATOR, ENUM. Entry type used by the generated UI and property builder Free: Yes.
linked_entry_uid string "" Entry List item whose property this Display Link should draw Free: Full/Rigify.
display_link_label_mode string "SOURCE" Allowed: SOURCE, CUSTOM. Choose whether this Display Link uses the source entry label or its own custom label. Custom can be left blank to draw no label Free: Full/Rigify.
display_link_tooltip_mode string "SOURCE" Allowed: SOURCE, CUSTOM. Choose whether this Display Link uses the source entry tooltip or its own custom tooltip. Custom can be left blank to draw no tooltip Free: Full/Rigify.
display_link_use_component_subset boolean false Draw only selected source components through this Display Link Free: Full/Rigify.
display_link_component_subset_json string "[]" Internal serialized Display Link component subset Free: Full/Rigify.
text_alignment string "LEFT" Allowed: LEFT, CENTER, RIGHT. How this text block is aligned in the generated UI Free: Yes.
text_role string "TEXT" Allowed: TEXT, DIVIDER, SPACER. Choose whether this text entry draws text, a divider, or generated-row space Free: Yes.
text_alert boolean false Draw this text block with Blender's alert styling Free: Yes.
text_icon string "NONE" Optional Blender icon drawn before this text block Free: Yes.
text_icon_hug_text boolean true For centered text only, keep the before icon attached to the text instead of pinning it to the row edge; left and right aligned text always hugs icons Free: Yes.
text_icon_after string "NONE" Optional Blender icon drawn after this text block Free: Yes.
text_icon_after_hug_text boolean true For centered text only, keep the after icon attached to the text instead of pinning it to the row edge; left and right aligned text always hugs icons Free: Yes.
operator_id string "" Paste an operator ID like object.delete or a full bpy.ops call; keyword arguments are moved to Operator Properties JSON Free: Full/Rigify.
operator_icon string "PLAY" Optional Blender icon drawn on this operator button Free: Full/Rigify.
operator_emboss boolean true Draw the standard Blender button body Free: Full/Rigify.
operator_depress boolean false Draw the button as pressed without storing a toggle state Free: Full/Rigify.
operator_enabled boolean true Allow this generated operator button to be clickable Free: Full/Rigify.
operator_active boolean true Draw this generated operator button as active Free: Full/Rigify.
operator_context string "INVOKE_DEFAULT" Allowed: INVOKE_DEFAULT, EXEC_DEFAULT, INVOKE_REGION_WIN, EXEC_REGION_WIN, INVOKE_REGION_CHANNELS, EXEC_REGION_CHANNELS, INVOKE_REGION_PREVIEW, EXEC_REGION_PREVIEW, INVOKE_AREA, EXEC_AREA, INVOKE_SCREEN, EXEC_SCREEN. Blender operator context used when this generated button runs Free: Full/Rigify.
operator_translate boolean true Allow Blender UI translation for this button text Free: Full/Rigify.
operator_text_context string "" Optional Blender translation context for this button text Free: Full/Rigify.
operator_props_json string "{}" Optional JSON object of operator property values assigned when drawing the button Free: Full/Rigify.
operator_report_timing string "OFF" Allowed: OFF, ALWAYS, SUCCESS, FAILURE. Optional Blender report shown after this operator button is clicked Free: Full/Rigify.
operator_report_type string "INFO" Allowed: INFO, WARNING, ERROR. Native Blender report type used for this operator button notification Free: Full/Rigify.
operator_report_message string "" Notification message shown after this operator button is clicked Free: Full/Rigify.
default_float number 0.0 Default float value for this generated custom property Free: Yes.
enum_items_json string "[{\"id\":\"FIRST\",\"label\":\"First\",\"value\":0},{\"id\":\"SECOND\",\"label\":\"Second\",\"value\":1}]" Dropdown Choices Free: Full/Rigify.
default_enum integer 0 Default Choice Value Free: Full/Rigify.
enum_expanded boolean false Use native enum buttons instead of a dropdown Free: Full/Rigify.
control_group string "" Entries with the same name share Reset, Key/Unkey and Save/Apply Values actions. Add buttons through Entry Tools > Add Control Group Actions; naming a group does not change the layout Free: Full/Rigify.
native_action string "NONE" Allowed: NONE, RESET_GROUP, KEY_GROUP, UNKEY_GROUP, SAVE_VALUES, APPLY_VALUES, SELECT_COLLECTION, DESELECT_COLLECTION. Action Free: Full/Rigify.
value_preset_name string "Preset" Value Preset Free: Full/Rigify.
bone_collection_path string "" Validated full RNA path to a Bone Collection Free: Full/Rigify.
bone_collection_object_path string "" Collection Armature Path Free: Full/Rigify.
native_foldout boolean false Collapse this one control inside a native full-width foldout. Use Containers for sections of controls. Requires a single top-level row outside Row Boxes Free: Full/Rigify.
native_popover boolean false Offer this control in a native popover Free: Full/Rigify.
native_popover_compact boolean false Use a smaller popup. Dropdown also requires Compact Button: Blender keeps attached popovers at least as wide as their trigger. Button style allows independent popup width Free: Full/Rigify.
compact_control boolean false Use the control's natural width inside its layout cell instead of stretching it Free: Full/Rigify.
native_popover_style string "DROPDOWN" Allowed: DROPDOWN, BUTTON. Popover Button Style Free: Full/Rigify.
native_popover_icon string "NONE" Popover Icon Free: Full/Rigify.
native_popover_show_label boolean true Use the configured label layout inside the popup; disable to show only the control Free: Full/Rigify.
native_popover_show_keyframes boolean false Show Blender animation diamonds next to animatable values inside this popover Free: Full/Rigify.
default_int integer 0 Default integer value for this generated custom property Free: Yes.
default_bool boolean false Default boolean value for this generated custom property Free: Yes.
default_string string "" Default string value for this generated custom property Free: Full/Rigify.
string_multiline boolean false Use a multiline text editor when available; use a regular string field on older Blender versions Free: Full/Rigify.
string_visible_lines integer 4 Initial height of the multiline text editor Range 1..20. Free: Full/Rigify.
string_placeholder string "" Hint shown when the multiline string is empty Free: Full/Rigify.
text_link_url string "" Optional HTTP or HTTPS link for this Text entry; leave empty for ordinary text Free: Full/Rigify.
datablock_id_type string "OBJECT" Allowed: ACTION, ARMATURE, BRUSH, CACHEFILE, CAMERA, COLLECTION, CURVE, CURVES, FONT, GREASEPENCIL, GREASEPENCIL_V3, IMAGE, KEY, LATTICE, LIBRARY, LIGHT, LIGHT_PROBE, LINESTYLE, MASK, MATERIAL, MESH, META, MOVIECLIP, NODETREE, OBJECT, PAINTCURVE, PALETTE, PARTICLE, POINTCLOUD, SCENE, SCREEN, SOUND, SPEAKER, TEXT, TEXTURE, VOLUME, WINDOWMANAGER, WORKSPACE, WORLD. Data-block type accepted by this generated custom property Free: Full/Rigify.
default_datablock_name string "" Optional default data-block name for this generated custom property Free: Full/Rigify.
default_datablock_path string "" Internal resolved data-block path for this entry's default value Free: Full/Rigify.
python_default_expression string "{}" Python literal expression assigned as this generated custom property's default value Free: Full/Rigify.
default_float_array array 32 × 1.0 Default float values for this generated array custom property Free: Yes.
default_int_array array 32 × 0 Default integer values for this generated array custom property Free: Yes.
default_bool_array array 32 × false Default boolean values for this generated array custom property Free: Yes.
min_float number 0.0 Minimum float value for this generated custom property Free: Yes.
max_float number 1.0 Maximum float value for this generated custom property Free: Yes.
min_int integer 0 Minimum integer value for this generated custom property Free: Yes.
max_int integer 5 Maximum integer value for this generated custom property Free: Yes.
ui_order integer 1 Internal stored order used by the izom PropUI editor Free: Yes.
display_order integer 1 Internal generated row order used by the generated UI Free: Yes.
row_slot integer 1 1-based left-to-right column inside a shared generated row Free: Yes.
slider boolean true Show numeric generated properties and custom IDProperty paths as sliders. Enabling this turns off Soft Limits. Hidden for native RNA paths whose widget style Blender controls internally Free: Yes.
alert_style boolean false Draw this generated property control with Blender's alert styling Free: Yes.
bool_ui_style string "CHECKBOX" Allowed: CHECKBOX, TOGGLE_BUTTON. How this boolean should look in the generated UI Free: Full/Rigify.
bool_icon_true string "NONE" Optional Blender icon to draw while this toggle-style boolean is enabled Free: Full/Rigify.
bool_icon_false string "NONE" Optional Blender icon to draw while this toggle-style boolean is disabled Free: Full/Rigify.
value_label_layout string "INLINE" Allowed: INLINE, SPLIT_LABEL, LABEL_ABOVE. How scalar labels should be placed in the generated UI Free: Yes.
multi_component_layout string "INLINE" Allowed: INLINE, SPLIT_LABEL, INLINE_LABEL, STACKED, STACKED_SPLIT_LABEL, STACKED_COMPONENT_SPLIT_LABEL. How vector-like values should be drawn: inline, with split labels, with label above, or on separate lines inside the same cell Free: Yes.
multi_component_draw_mode string "WIDGET" Allowed: WIDGET, COMPONENTS. For color and direction subtypes, choose Blender's native whole-value control or individual component fields Free: Yes.
stacked_label_use_text_style boolean false Render the label above the control as a text block so role, alignment, icons, and alert styling can be edited Free: Full/Rigify.
array_component_label_style string "AUTO" Allowed: AUTO, NONE, NUMBERED, XYZ, ABC, GREEK, DEGREES, CUSTOM. Label style used for array, vector, and color components in the generated UI Free: Full/Rigify.
array_component_label_custom_base string "AUTO" Allowed: AUTO, NONE, NUMBERED, XYZ, ABC, GREEK, DEGREES. Base component-label style used before applying custom component label overrides Free: Full/Rigify.
array_component_label_01 string "" Custom generated UI label for array component 1. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_02 string "" Custom generated UI label for array component 2. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_03 string "" Custom generated UI label for array component 3. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_04 string "" Custom generated UI label for array component 4. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_05 string "" Custom generated UI label for array component 5. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_06 string "" Custom generated UI label for array component 6. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_07 string "" Custom generated UI label for array component 7. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_08 string "" Custom generated UI label for array component 8. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_09 string "" Custom generated UI label for array component 9. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_10 string "" Custom generated UI label for array component 10. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_11 string "" Custom generated UI label for array component 11. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_12 string "" Custom generated UI label for array component 12. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_13 string "" Custom generated UI label for array component 13. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_14 string "" Custom generated UI label for array component 14. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_15 string "" Custom generated UI label for array component 15. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_16 string "" Custom generated UI label for array component 16. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_17 string "" Custom generated UI label for array component 17. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_18 string "" Custom generated UI label for array component 18. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_19 string "" Custom generated UI label for array component 19. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_20 string "" Custom generated UI label for array component 20. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_21 string "" Custom generated UI label for array component 21. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_22 string "" Custom generated UI label for array component 22. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_23 string "" Custom generated UI label for array component 23. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_24 string "" Custom generated UI label for array component 24. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_25 string "" Custom generated UI label for array component 25. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_26 string "" Custom generated UI label for array component 26. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_27 string "" Custom generated UI label for array component 27. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_28 string "" Custom generated UI label for array component 28. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_29 string "" Custom generated UI label for array component 29. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_30 string "" Custom generated UI label for array component 30. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_31 string "" Custom generated UI label for array component 31. Leave empty to use the selected base style Free: Full/Rigify.
array_component_label_32 string "" Custom generated UI label for array component 32. Leave empty to use the selected base style Free: Full/Rigify.
hidden_in_editor boolean false Hide this entry from the izom PropUI editor list until you unhide entries Free: Full/Rigify.
use_value_labels boolean false Change the visible label based on this entry's current value Free: Yes.
value_labels_use_component boolean false For vector, color, integer-array, or boolean-array values, evaluate Dynamic Labels from one chosen component or channel instead of matching the whole value Free: Yes.
value_labels_component_index integer 1 1-based component or channel used by this entry's Dynamic Labels while Use One Component is enabled Range 1..32. Free: Yes.
use_bool_state_labels boolean false Change the visible label based on whether this boolean is on or off Free: Yes.
bool_label_true string "" Label to show when this boolean is on Free: Yes.
bool_label_false string "" Label to show when this boolean is off Free: Yes.
use_other_entry_labels boolean false Change this entry's visible label based on another entry's state or value Free: Full/Rigify.
text_use_other_entry_labels boolean false Change this text entry based on another entry's state or value Free: Full/Rigify.
use_soft_limits boolean false Use separate soft min/max limits in the UI. Enabling this turns off Use Slider Free: Yes.
soft_min_float number 0.0 Soft minimum float value used by the generated custom-property UI Free: Yes.
soft_max_float number 1.0 Soft maximum float value used by the generated custom-property UI Free: Yes.
soft_min_int integer 0 Soft minimum integer value used by the generated custom-property UI Free: Yes.
soft_max_int integer 5 Soft maximum integer value used by the generated custom-property UI Free: Yes.
step_float number 0.1 Native Blender float custom-property step metadata. This affects Blender's property metadata, not the generated row layout Range 0.009999999776482582..100.0. Free: Yes.
step_int integer 1 Native Blender integer custom-property step metadata. This affects Blender's property metadata, not the generated row layout Range 1..100. Free: Yes.
precision integer 3 Native Blender float custom-property precision metadata. This affects Blender's property metadata, not the generated row layout Range 0..6. Free: Yes.
array_element_type string "FLOAT" Allowed: FLOAT, INT, BOOL. Element type stored by this generated array property Free: Yes.
array_size integer 4 Number of visible elements in this array property Range 1..32. Free: Yes.
float_subtype string "NONE" Allowed: NONE, PIXEL, UNSIGNED, PERCENTAGE, FACTOR, ANGLE, TIME, TIME_ABSOLUTE, DISTANCE, DISTANCE_CAMERA, POWER, TEMPERATURE, WAVELENGTH, COLOR_TEMPERATURE, FREQUENCY. Native Blender float custom-property subtype Free: Yes.
float_array_subtype string "NONE" Allowed: NONE, COLOR, COLOR_GAMMA, TRANSLATION, DIRECTION, VELOCITY, ACCELERATION, EULER, QUATERNION, AXISANGLE, XYZ. Native Blender float array subtype applied to the generated custom property Free: Yes.
library_overridable boolean true Mark this generated custom property as library-overridable Free: Yes.
entry_target_owner_path string "" Internal resolved storage owner path for this entry. Empty uses Output Setup Property Storage Free: Full/Rigify.
custom_source string "RNA_PATH" Allowed: RNA_PATH, INTERNAL. Where this custom entry gets its generated UI value from Free: Full/Rigify.
custom_internal_control string "GENERATED_UI_ENABLED" Allowed: GENERATED_UI_ENABLED, DISABLE_WHILE_TRANSFORMING, DISABLE_WHILE_PLAYBACK. Built-in generated UI control drawn by this custom entry Free: Full/Rigify.
custom_owner_path string "" Stored owner path used by the custom entry runtime Free: Full/Rigify.
custom_prop_name string "" Stored property name used by the custom entry runtime Free: Full/Rigify.
custom_use_component boolean false Editor-only stored component selection parsed from an indexed custom path Free: Full/Rigify.
custom_component_index integer 1 Editor-only stored 1-based component selected by an indexed custom path Range 1..32. Free: Full/Rigify.
bool_child_visibility string "ALWAYS" Allowed: ALWAYS, WHEN_TRUE, WHEN_FALSE. When this child entry should be shown, based on its parent boolean value Free: Yes.
number_child_visibility string "ALWAYS" Allowed: ALWAYS, EQUAL, GREATER, LESS, RANGE. When this child entry should be shown, based on its parent numeric value Free: Yes.
visibility_inheritance_depth integer 1 How many visibility rules this entry uses in the generated UI chain. 1 = parent only, 2 = parent + parent's rule, higher numbers add upstream rules. The editor shows the full parent chain; the generated UI can only use ancestors that are actually present there Range 1..12. Free: Yes.
visibility_use_component boolean false For vector, color, or integer-array parents, evaluate Child Visibility from one chosen component or channel instead of matching the whole parent value Free: Yes.
visibility_component_index integer 1 1-based component or channel used by Child Visibility while Use One Component is enabled Range 1..32. Free: Yes.
shared_row_hidden_mode string "FILL_ROW" Allowed: FILL_ROW, RESERVE_SLOT. Choose whether this entry collapses out or keeps an empty slot when child visibility hides it in a shared generated row Free: Full/Rigify.
visibility_match_float number 0.0 Comparison value used against the parent float property Free: Yes.
visibility_match_int integer 0 Comparison value used against the parent integer property Free: Yes.
visibility_match_text string "" Exact value used against a parent enum, string, or vector-style property Free: Full/Rigify.
visibility_match_float_array array 32 × 1.0 Exact float-array value used against a parent array property Free: Yes.
visibility_match_int_array array 32 × 0 Exact integer-array value used against a parent array property Free: Yes.
visibility_match_bool_array array 32 × false Exact boolean-array value used against a parent array property Free: Yes.
visibility_range_max_float number 1.0 Upper bound of the visibility range for the parent float property Free: Yes.
visibility_range_max_int integer 0 Upper bound of the visibility range for the parent integer property Free: Yes.
bool_child_availability string "ALWAYS" Allowed: ALWAYS, WHEN_TRUE, WHEN_FALSE. When this child entry should be enabled, based on its parent boolean value. Disabled entries are visible but grayed out Free: Full/Rigify.
number_child_availability string "ALWAYS" Allowed: ALWAYS, EQUAL, GREATER, LESS, RANGE. When this child entry should be enabled, based on its parent numeric value. Disabled entries are visible but grayed out Free: Full/Rigify.
availability_inheritance_depth integer 1 How many availability rules this entry uses in the generated UI chain. 1 = parent only, 2 = parent + parent's rule, higher numbers add upstream rules. The editor shows the full parent chain; the generated UI can only use ancestors that are actually present there Range 1..12. Free: Full/Rigify.
availability_use_component boolean false For vector, color, or integer-array parents, evaluate Child Availability from one chosen component or channel instead of matching the whole parent value Free: Full/Rigify.
availability_component_index integer 1 1-based component or channel used by Child Availability while Use One Component is enabled Range 1..32. Free: Full/Rigify.
availability_match_float number 0.0 Comparison value used against the parent float property for availability Free: Full/Rigify.
availability_match_int integer 0 Comparison value used against the parent integer property for availability Free: Full/Rigify.
availability_match_text string "" Exact value used against a parent enum, string, or vector-style property for availability Free: Full/Rigify.
availability_match_float_array array 32 × 1.0 Exact float-array value used against a parent array property for availability Free: Full/Rigify.
availability_match_int_array array 32 × 0 Exact integer-array value used against a parent array property for availability Free: Full/Rigify.
availability_match_bool_array array 32 × false Exact boolean-array value used against a parent array property for availability Free: Full/Rigify.
availability_range_max_float number 1.0 Upper bound of the availability range for the parent float property Free: Full/Rigify.
availability_range_max_int integer 0 Upper bound of the availability range for the parent integer property Free: Full/Rigify.
value_labels array [] value_labels Free: Yes.
other_value_labels array [] other_value_labels Free: Full/Rigify.

Free entry fields

The following table gives the exact Free defaults and choices. Where a shared field has fewer choices or a narrower range in Free, this table takes precedence.

Field JSON type Default Allowed values / meaning
uid string "" Supply a unique stable non-empty identifier; the importer otherwise generates one.
parent_uid string "" Internal parent link for Entry List hierarchy
prop_id string "prop_1" Custom-property key stored on the resolved target owner. Property IDs must be unique per target; duplicate names are auto-suffixed
label string "Property 1" User-facing label shown in the generated UI. You can also edit it directly in the Entry List
editor_label string "" Optional editor-only name used in izom PropUI lists without changing generated labels or custom properties
description string "" Static tooltip shown for this property in the generated UI
prop_type string "FLOAT" Allowed: FLOAT, INT, BOOL, ARRAY, TEXT. Entry type used by the generated UI and property builder
text_alignment string "LEFT" Allowed: LEFT, CENTER, RIGHT. How this text block is aligned in the generated UI
text_role string "TEXT" Allowed: TEXT, DIVIDER, SPACER. Choose whether this text entry draws text, a divider, or generated-row space
text_alert boolean false Draw this text block with Blender's alert styling
text_icon string "NONE" Optional Blender icon drawn before this text block
text_icon_hug_text boolean true For centered text only, keep the before icon attached to the text instead of pinning it to the row edge; left and right aligned text always hugs icons
text_icon_after string "NONE" Optional Blender icon drawn after this text block
text_icon_after_hug_text boolean true For centered text only, keep the after icon attached to the text instead of pinning it to the row edge; left and right aligned text always hugs icons
default_float number 0.0 Default float value for this generated custom property
default_int integer 0 Default integer value for this generated custom property
default_bool boolean false Default boolean value for this generated custom property
default_float_array array 32 × 1.0 Default float values for this generated array custom property
default_int_array array 32 × 0 Default integer values for this generated array custom property
default_bool_array array 32 × false Default boolean values for this generated array custom property
min_float number 0.0 Minimum float value for this generated custom property
max_float number 1.0 Maximum float value for this generated custom property
min_int integer 0 Minimum integer value for this generated custom property
max_int integer 5 Maximum integer value for this generated custom property
ui_order integer 1 Internal stored order used by the izom PropUI editor
display_order integer 1 Internal generated row order used by the generated UI
row_slot integer 1 1-based left-to-right column inside a shared generated row
slider boolean true Show numeric generated properties and custom IDProperty paths as sliders. Enabling this turns off Soft Limits. Hidden for native RNA paths whose widget style Blender controls internally
alert_style boolean false Draw this generated property control with Blender's alert styling
value_label_layout string "INLINE" Allowed: INLINE, SPLIT_LABEL, LABEL_ABOVE. How scalar labels should be placed in the generated UI
multi_component_layout string "INLINE_LABEL" Allowed: INLINE, SPLIT_LABEL, INLINE_LABEL, STACKED, STACKED_SPLIT_LABEL, STACKED_COMPONENT_SPLIT_LABEL. How vector-like values should be drawn: inline, with split labels, with label above, or on separate lines inside the same cell
multi_component_draw_mode string "WIDGET" Allowed: WIDGET, COMPONENTS. For color and direction subtypes, choose Blender's native whole-value control or individual component fields
use_value_labels boolean false Change the visible label based on this entry's current value
value_labels_use_component boolean false For vector, color, integer-array, or boolean-array values, evaluate Dynamic Labels from one chosen component or channel instead of matching the whole value
value_labels_component_index integer 1 1-based component or channel used by this entry's Dynamic Labels while Use One Component is enabled Range 1..32.
use_bool_state_labels boolean false Change the visible label based on whether this boolean is on or off
bool_label_true string "" Label to show when this boolean is on
bool_label_false string "" Label to show when this boolean is off
use_soft_limits boolean false Use separate soft min/max limits in the UI. Enabling this turns off Use Slider
soft_min_float number 0.0 Soft minimum float value used by the generated custom-property UI
soft_max_float number 1.0 Soft maximum float value used by the generated custom-property UI
soft_min_int integer 0 Soft minimum integer value used by the generated custom-property UI
soft_max_int integer 5 Soft maximum integer value used by the generated custom-property UI
step_float number 0.1 Native Blender float custom-property step metadata. This affects Blender's property metadata, not the generated row layout Range 0.009999999776482582..100.0.
step_int integer 1 Native Blender integer custom-property step metadata. This affects Blender's property metadata, not the generated row layout Range 1..100.
precision integer 3 Native Blender float custom-property precision metadata. This affects Blender's property metadata, not the generated row layout Range 0..6.
array_element_type string "FLOAT" Allowed: FLOAT, INT, BOOL. Element type stored by this generated array property
array_size integer 4 Number of visible elements in this array property Range 1..32.
float_subtype string "NONE" Allowed: NONE, PIXEL, UNSIGNED, PERCENTAGE, FACTOR, ANGLE, TIME, TIME_ABSOLUTE, DISTANCE, DISTANCE_CAMERA, POWER, TEMPERATURE, WAVELENGTH, COLOR_TEMPERATURE, FREQUENCY. Native Blender float custom-property subtype
float_array_subtype string "NONE" Allowed: NONE, COLOR, COLOR_GAMMA, TRANSLATION, DIRECTION, VELOCITY, ACCELERATION, EULER, QUATERNION, AXISANGLE, XYZ. Native Blender float array subtype applied to the generated custom property
library_overridable boolean true Mark this generated custom property as library-overridable
bool_child_visibility string "ALWAYS" Allowed: ALWAYS, WHEN_TRUE, WHEN_FALSE. When this child entry should be shown, based on its parent boolean value
number_child_visibility string "ALWAYS" Allowed: ALWAYS, EQUAL, GREATER, LESS, RANGE. When this child entry should be shown, based on its parent numeric value
visibility_inheritance_depth integer 1 How many visibility rules this entry uses in the generated UI chain. 1 = parent only, 2 = parent + parent's rule, higher numbers add upstream rules. The editor shows the full parent chain; the generated UI can only use ancestors that are actually present there Range 1..12.
visibility_use_component boolean false For vector, color, or integer-array parents, evaluate Child Visibility from one chosen component or channel instead of matching the whole parent value
visibility_component_index integer 1 1-based component or channel used by Child Visibility while Use One Component is enabled Range 1..32.
visibility_match_float number 0.0 Comparison value used against the parent float property
visibility_match_int integer 0 Comparison value used against the parent integer property
visibility_match_float_array array 32 × 1.0 Exact float-array value used against a parent array property
visibility_match_int_array array 32 × 0 Exact integer-array value used against a parent array property
visibility_match_bool_array array 32 × false Exact boolean-array value used against a parent array property
visibility_range_max_float number 1.0 Upper bound of the visibility range for the parent float property
visibility_range_max_int integer 0 Upper bound of the visibility range for the parent integer property
value_labels array [] value_labels

Rigify entry storage additions

Field JSON type Default Allowed values / meaning
entry_prop_bone_override_enabled boolean false Store this entry on its own selected bone instead of following the shared Host or One Prop Bone setting
entry_prop_bone string "" Exact generated control or metarig bone used while Use Prop Bone Override is enabled

Dynamic Label rows

value_labels and Full/Rigify other_value_labels are arrays of row objects. The fields below are the complete shared row vocabulary. For Dynamic Text/conditional rows, omit all target_* fields and use_other_entry_labels; those belong to the value-label row form. Free supports only its direct own-value label fields, not cross-entry sources or text styling.

Field JSON type Default Allowed values / meaning
uid string "" Supply a unique stable non-empty identifier; the importer otherwise generates one.
rule_kind string "LABEL" Allowed: LABEL, FALLBACK. Choose whether this row applies a label override or resets to the current fallback label for this rule set
match_mode string "GREATER" Allowed: EQUAL, GREATER, LESS, RANGE. How this row compares numeric values. Dynamic Labels use the first matching row from top to bottom
label string "" Override label to use when this row matches
text_override_style boolean false When enabled, this conditional rule can override role, alignment, icons, icon attachment, and alert styling instead of only changing the text
text_alignment string "LEFT" Allowed: LEFT, CENTER, RIGHT. How this text block is aligned in the generated UI
text_role string "TEXT" Allowed: TEXT, DIVIDER, SPACER. Choose whether this text rule draws text, a divider, or generated-row space
text_alert boolean false Draw this text block with Blender's alert styling
text_icon string "NONE" Optional Blender icon drawn before this text block
text_icon_hug_text boolean true For centered text only, keep the before icon attached to the text instead of pinning it to the row edge; left and right aligned text always hugs icons
text_icon_after string "NONE" Optional Blender icon drawn after this text block
text_icon_after_hug_text boolean true For centered text only, keep the after icon attached to the text instead of pinning it to the row edge; left and right aligned text always hugs icons
value_float number 0.0 Primary comparison value for the chosen other float entry
value_int integer 0 Primary comparison value for the chosen other integer entry
value_range_float number 1.0 Second range value for the chosen other float entry when Match is In Range
value_range_int integer 0 Second range value for the chosen other integer entry when Match is In Range
value_text string "" Exact value to match when the chosen other entry is a string, enum, or vector-style custom entry
value_float_array array 32 × 1.0 Exact float array value to match when the chosen other entry resolves to a float array
value_int_array array 32 × 0 Exact integer-array value to match when the chosen other entry resolves to an integer array
value_bool_array array 32 × false Exact boolean-array value to match when the chosen other entry resolves to a boolean array
target_value_float number 0.0
target_value_int integer 0
target_value_range_float number 1.0
target_value_range_int integer 0
target_value_text string ""
target_value_float_array array 32 × 1.0
target_value_int_array array 32 × 0
target_value_bool_array array 32 × false
use_other_entry_labels boolean false
source_entry_uid string "" Internal source entry used by this conditional rule row
use_source_component boolean false For vector, color, integer-array, or boolean-array values, evaluate this rule from one chosen component or channel instead of matching the whole value
source_component_index integer 1 1-based component or channel used by this rule while Use One Component is enabled Range 1..32.
source_bool_state string "WHEN_TRUE" Allowed: WHEN_FALSE, WHEN_TRUE. Boolean state to match when the selected Other Entry is a boolean
target_bool_scope string "ANY"

Free Dynamic Label rows

Field JSON type Default Allowed values / meaning
uid string "" Supply a unique stable non-empty identifier; the importer otherwise generates one.
rule_kind string "LABEL" Allowed: LABEL, FALLBACK. Choose whether this row applies a label override or resets to the current fallback label for this rule set
match_mode string "GREATER" Allowed: EQUAL, GREATER, LESS, RANGE. How this row compares numeric values. Dynamic Labels use the first matching row from top to bottom
label string "" Label to use when this row matches
value_float number 0.0 Primary comparison value for this row
value_int integer 0 Primary comparison value for this row
value_range_float number 1.0 Second range value when Match is In Range
value_range_int integer 0 Second range value when Match is In Range
value_float_array array 32 × 1.0 Exact float array value to match when this entry resolves to a float array
value_int_array array 32 × 0 Exact integer-array value to match when this entry resolves to an integer array
value_bool_array array 32 × false Exact boolean-array value to match when this entry resolves to a boolean array
target_value_float number 0.0 Primary comparison value for this entry's own float value
target_value_int integer 0 Primary comparison value for this entry's own integer value
target_value_range_float number 1.0 Second range value for this entry's own float value when Match is In Range
target_value_range_int integer 0 Second range value for this entry's own integer value when Match is In Range
target_value_float_array array 32 × 1.0 Exact float array value this entry must have for the bucket to apply
target_value_int_array array 32 × 0 Exact integer-array value this entry must have for the bucket to apply
target_value_bool_array array 32 × false Exact boolean-array value this entry must have for the bucket to apply
use_source_component boolean false For vector, color, integer-array, or boolean-array values, evaluate this rule from one chosen component or channel instead of matching the whole value
source_component_index integer 1 1-based component or channel used by this rule while Use One Component is enabled Range 1..32.
source_bool_state string "WHEN_TRUE" Allowed: WHEN_FALSE, WHEN_TRUE. Boolean state to match when the selected component is a boolean

Full project settings

Field JSON type Default Allowed values / meaning
izom_propui_replace_storage_on_generate boolean true When enabled, Generate UI first removes every custom property from the Property Storage target, then recreates only the properties managed by the current PropUI setup. Disable this to keep other existing custom properties when generating
izom_propui_replace_storage_on_apply boolean false When enabled, Apply Properties > Apply All Managed first removes every custom property from the Property Storage target, then recreates only managed PropUI properties. Apply Selected never clears the full storage target
izom_propui_default_target_owner_path string "" Blender data path to the owner where generated managed custom properties live
izom_propui_generated_panel_tab string "Controls" Sidebar tab/category used when this generated UI appears in editor sidebars
izom_propui_generated_panel_title string "Custom Controls" Title shown on the generated panel
izom_propui_generated_text_name string "" Optional .py Text datablock name used when custom branding is enabled; the Text Datablock Prefix is prepended and duplicate generated UIs get a unique suffix
izom_propui_generated_branding_use_custom boolean false Use custom names and comments in generated UI scripts without changing PropUI's editor data
izom_propui_generated_branding_namespace_prefix string "izom_propui" Prefix used for generated registry keys, helper operators, and helper properties
izom_propui_generated_branding_panel_class_prefix string "IZOM_PROPUI_PT" Prefix used for generated Blender panel class names
izom_propui_generated_branding_text_datablock_prefix string "izom_propui_generated_ui" Prefix used for generated .py Text datablocks, including custom Text names
izom_propui_generated_branding_show_credit boolean true Include the generated-source credit comment
izom_propui_generated_branding_credit_comment string "Auto-generated by izom PropUI." Comment written near the top of generated .py output when credit comments are enabled
izom_propui_generated_panel_location string "SIDEBAR" Allowed: SIDEBAR, PROPERTIES, BOTH. Choose whether the generated panel lives in editor sidebars, in the Properties editor, or both
izom_propui_generated_mute_during_transform boolean false Skip drawing this generated UI while a Blender transform modal operator is running
izom_propui_generated_mute_during_playback boolean false Skip drawing this generated UI while animation playback is running
izom_propui_generated_ui_conflict_mode string "REPLACE_MATCHING" Allowed: REPLACE_ALL, REPLACE_MATCHING, ADD. Choose how Generate UI handles existing generated panels
izom_propui_generated_sidebar_mode string "SPECIFIC" Allowed: SPECIFIC, ALL. Choose which Blender editor sidebars receive the generated panel
izom_propui_generated_sidebar_view_3d boolean true 3D Viewport sidebar
izom_propui_generated_sidebar_graph_editor boolean false Graph Editor and Drivers sidebar
izom_propui_generated_sidebar_dopesheet_editor boolean false Dope Sheet sidebar
izom_propui_generated_sidebar_nla_editor boolean false NLA Editor sidebar
izom_propui_generated_sidebar_image_editor boolean false Image and UV Editor sidebar
izom_propui_generated_sidebar_node_editor boolean false Node Editor sidebar
izom_propui_generated_sidebar_sequence_editor boolean false Video Sequencer sidebar
izom_propui_generated_sidebar_clip_editor boolean false Movie Clip Editor sidebar
izom_propui_generated_sidebar_text_editor boolean false Text Editor sidebar
izom_propui_generated_sidebar_file_browser boolean false File Browser sidebar
izom_propui_generated_sidebar_spreadsheet boolean false Spreadsheet sidebar
izom_propui_generated_graph_editor_context_mode string "ALL" Allowed: ALL, SPECIFIC. Choose whether generated Graph Editor panels appear in Graph Editor and Drivers or only selected contexts
izom_propui_generated_graph_editor_graph boolean true Graph Editor F-Curves context
izom_propui_generated_graph_editor_drivers boolean true Drivers context
izom_propui_generated_image_editor_context_mode string "ALL" Allowed: ALL, SPECIFIC. Choose whether generated Image Editor panels appear in Image and UV contexts or only selected contexts
izom_propui_generated_image_editor_image boolean true Image editor, image paint, and mask contexts
izom_propui_generated_image_editor_uv boolean true UV editor context
izom_propui_generated_node_editor_context_mode string "ALL" Allowed: ALL, SPECIFIC. Choose whether generated Node Editor panels appear in every node editor context or only selected contexts
izom_propui_generated_node_editor_shader boolean true Shader node editor context
izom_propui_generated_node_editor_geometry boolean true Geometry Nodes editor context
izom_propui_generated_node_editor_compositor boolean true Compositor node editor context
izom_propui_generated_properties_mode string "SPECIFIC" Allowed: SPECIFIC, ALL. Choose which Properties editor tabs receive the generated panel
izom_propui_generated_properties_tool boolean false Active Tool and Workspace Settings tab
izom_propui_generated_properties_render boolean false Render Properties tab
izom_propui_generated_properties_output boolean false Output Properties tab
izom_propui_generated_properties_view_layer boolean false View Layer Properties tab
izom_propui_generated_properties_scene boolean false Scene Properties tab
izom_propui_generated_properties_world boolean false World Properties tab
izom_propui_generated_properties_collection boolean false Collection Properties tab
izom_propui_generated_properties_object boolean true Object Properties tab
izom_propui_generated_properties_constraint boolean false Object Constraint Properties tab
izom_propui_generated_properties_modifier boolean false Modifier Properties tab
izom_propui_generated_properties_data boolean false Object Data Properties tab
izom_propui_generated_properties_bone boolean false Bone Properties tab
izom_propui_generated_properties_bone_constraint boolean false Bone Constraint Properties tab
izom_propui_generated_properties_material boolean false Material Properties tab
izom_propui_generated_properties_texture boolean false Texture Properties tab
izom_propui_generated_properties_particle boolean false Particle Properties tab
izom_propui_generated_properties_physics boolean false Physics Properties tab
izom_propui_generated_visibility_mode string "ALWAYS" Allowed: ALWAYS, SELECTED_OBJECTS. Choose when the generated panel is visible
izom_propui_generated_visibility_targets_json string "[]" Internal selected 3D Viewport items used by generated panel visibility filtering
izom_propui_clean_old_targets_on_generate boolean true When enabled, Generate UI removes matching managed PropUI properties from old targets that no longer own those entries
izom_propui_clean_old_targets_on_apply boolean true When enabled, Apply Properties removes matching managed PropUI properties from old targets that no longer own those entries

Free portable project settings

Field JSON type Default Allowed values / meaning
izom_propui_generated_panel_tab string "Controls" Sidebar tab/category used when this generated UI appears in editor sidebars
izom_propui_generated_panel_title string "Custom Controls" Title shown on the generated panel
izom_propui_default_target_owner_path string "" Blender data path to the owner where generated managed custom properties live
izom_propui_replace_storage_on_generate boolean false When enabled, Generate UI first removes every custom property from the Property Storage target, then recreates only the properties managed by the current PropUI setup. Disable this to keep other existing custom properties when generating
izom_propui_clean_old_targets_on_generate boolean true When enabled, Generate UI removes matching managed PropUI properties from old targets that no longer own those entries

Rigify host settings

Field JSON type Default Allowed values / meaning
izom_propui_rigify_host_output_mode string "KEEP_HOST" Allowed: KEEP_HOST, METARIG_ONLY. Choose whether the PropUI host remains as a generated control or exists only on the metarig
izom_propui_rigify_use_one_prop_bone boolean false Store generated custom properties on one chosen Rigify output bone instead of using the host control
izom_propui_rigify_one_prop_bone string "" Exact generated control or metarig bone whose resolved control stores PropUI custom properties
izom_propui_rigify_generated_ui_position string "ABOVE_NATIVE" Allowed: ABOVE_NATIVE, BELOW_NATIVE. Place this generated PropUI above or below native Rigify UI for the selected visibility bones
izom_propui_rigify_generated_ui_panel_location string "RIG_MAIN" Allowed: RIG_MAIN, SEPARATE_PANEL. Choose whether this generated UI joins Rig Main Properties or receives its own panel
izom_propui_rigify_generated_ui_panel_title string "" Title of the separate generated panel; leave empty to use PropUI followed by the host bone name
izom_propui_rigify_generated_ui_sidebar_tab string "Item" Sidebar tab containing the separate generated panel; leave empty to use Item
izom_propui_rigify_generated_ui_always_visible boolean false Show this generated UI for the active generated rig regardless of which control bones are selected
izom_propui_rigify_move_matching_managed_props boolean true When syncing, move matching managed custom properties between currently active host and prop storage bones
izom_propui_rigify_clean_target_scope string "ALL" Allowed: HOST, PROP, ALL. Choose which currently active metarig storage bones normal Clean Metarig Props can modify
izom_propui_rigify_overwrite_native_custom_properties boolean true Replace unmanaged native custom properties on generated output bones with this PropUI setup
izom_propui_rigify_transfer_unmanaged_native_to_prop_bone boolean true When using One Prop Bone, move unmanaged native custom properties there too
izom_propui_rigify_show_unmanaged_native_in_generated_ui boolean true Draw unmanaged native custom properties beside managed PropUI controls in the generated Rigify UI
izom_propui_rigify_native_section_position string "BELOW_MANAGED" Allowed: BELOW_MANAGED, ABOVE_MANAGED. Choose whether unmanaged native custom properties appear above or below managed PropUI controls
relink_constraints boolean false For constraints with names formed like 'base@bonename', use the part after '@' as the new subtarget after all bones are created. Use '@CTRL', '@DEF' or '@MCH' to simply replace the prefix
parent_bone string "" Replace the parent with a different bone after all bones are created. Using simply CTRL, DEF or MCH will replace the prefix instead
optional_widget_type string "" Choose the type of the widget to create

Generated Layout row fields

For Full/Rigify, each layout_rows object uses these exact fields. Free uses row_index, row_height_scale (1..2) and row_inset_left_enabled; its left indent is fixed. Container assignment is on Full/Rigify placements and is normalized onto their rows. Set the same container on the matching row and item.

Field Type Default / meaning
row_index integer Required global row number, starting at 1
subpanel_uid string ""
row_height_scale number 1.0
row_inset_left_enabled boolean false
row_inset_left_amount number 1.0
row_inset_right_enabled boolean false
row_inset_right_amount number 1.0

Generated Layout item fields

Field Type Default / meaning
uid string Required unique placement identity
entry_uid string Required existing entry UID
row_index integer Required global row number, starting at 1
column_index integer Required column number, starting at 1
subpanel_uid string Empty means main panel; Full/Rigify only
row_width_enabled boolean false; Full/Rigify only
single_row_width number 1.0, range 0.05..10; Full/Rigify only
single_row_alignment string LEFT, CENTER or RIGHT; default LEFT; Full/Rigify only

Editor layout templates

These are complete payload.layout defaults for the corresponding editor_settings document. Start from your current exported layout to preserve custom editor organization. These section names describe the authoring editor rather than generated sub-panels or Row Boxes.

Full editor layout

{
  "expanded": {
    "izom_propui_editor_section_diagnostics_expanded": true,
    "izom_propui_editor_section_output_setup_expanded": true,
    "izom_propui_editor_section_entry_list_expanded": true,
    "izom_propui_editor_section_selected_entry_expanded": true,
    "izom_propui_editor_section_generated_layout_expanded": true,
    "izom_propui_editor_section_editor_settings_expanded": true,
    "izom_propui_editor_section_editor_layout_expanded": true,
    "izom_propui_entry_hierarchy_lens_expanded": true,
    "izom_propui_display_expanded": true,
    "izom_propui_custom_prop_expanded": true,
    "izom_propui_child_behavior_expanded": true,
    "izom_propui_type_defaults_expanded": true,
    "izom_propui_copy_settings_expanded": true,
    "izom_propui_import_export_expanded": true,
    "izom_propui_selected_row_expanded": true,
    "izom_propui_row_boxes_expanded": true,
    "izom_propui_output_setup_variants_expanded": true,
    "izom_propui_output_setup_branding_expanded": true,
    "izom_propui_output_setup_generated_uis_expanded": true,
    "izom_propui_output_setup_visibility_expanded": true,
    "izom_propui_output_setup_storage_expanded": true,
    "izom_propui_editor_settings_display_expanded": true,
    "izom_propui_editor_settings_entry_list_expanded": true,
    "izom_propui_editor_settings_confirmations_expanded": true,
    "izom_propui_editor_settings_json_expanded": true,
    "izom_propui_editor_settings_defaults_expanded": true,
    "izom_propui_editor_settings_reset_expanded": true
  },
  "hidden": {
    "izom_propui_hide_diagnostics_section": false,
    "izom_propui_hide_output_setup_section": false,
    "izom_propui_hide_entry_list_section": false,
    "izom_propui_hide_selected_entry_section": false,
    "izom_propui_hide_generated_layout_section": false,
    "izom_propui_hide_editor_settings_section": false,
    "izom_propui_hide_output_generate_controls": false,
    "izom_propui_hide_output_variants_section": false,
    "izom_propui_hide_output_branding_section": false,
    "izom_propui_hide_output_generated_uis_section": false,
    "izom_propui_hide_output_visibility_section": false,
    "izom_propui_hide_output_storage_section": false,
    "izom_propui_hide_entry_hierarchy_lens": false,
    "izom_propui_hide_selected_basics_section": false,
    "izom_propui_hide_selected_value_section": false,
    "izom_propui_hide_selected_display_section": false,
    "izom_propui_hide_selected_dynamic_labels_section": false,
    "izom_propui_hide_selected_conditions_section": false,
    "izom_propui_hide_selected_storage_section": false,
    "izom_propui_hide_selected_tools_section": false,
    "izom_propui_hide_selected_tools_type_defaults_section": false,
    "izom_propui_hide_selected_tools_copy_settings_section": false,
    "izom_propui_hide_selected_tools_presets_section": false,
    "izom_propui_hide_generated_layout_selected_row_section": false,
    "izom_propui_hide_generated_layout_sync_options_section": false,
    "izom_propui_hide_generated_layout_row_boxes_section": false,
    "izom_propui_hide_editor_settings_display_section": false,
    "izom_propui_hide_editor_settings_entry_list_section": false,
    "izom_propui_hide_editor_settings_confirmations_section": false,
    "izom_propui_hide_editor_settings_json_section": false,
    "izom_propui_hide_editor_settings_defaults_section": false,
    "izom_propui_hide_editor_settings_reset_section": false
  },
  "misc": {
    "izom_propui_editor_section_order_json": "[]",
    "izom_propui_editor_subsection_order_json": "{}"
  }
}

Rigify editor layout

{
  "expanded": {
    "izom_propui_rigify_editor_section_diagnostics_expanded": true,
    "izom_propui_rigify_editor_section_output_setup_expanded": true,
    "izom_propui_rigify_editor_section_entry_list_expanded": true,
    "izom_propui_rigify_editor_section_selected_entry_expanded": true,
    "izom_propui_rigify_editor_section_generated_layout_expanded": true,
    "izom_propui_rigify_editor_section_editor_settings_expanded": true,
    "izom_propui_rigify_editor_section_editor_layout_expanded": true,
    "izom_propui_rigify_entry_hierarchy_lens_expanded": true,
    "izom_propui_rigify_display_expanded": true,
    "izom_propui_rigify_custom_prop_expanded": true,
    "izom_propui_rigify_child_behavior_expanded": true,
    "izom_propui_rigify_type_defaults_expanded": true,
    "izom_propui_rigify_copy_settings_expanded": true,
    "izom_propui_rigify_import_export_expanded": true,
    "izom_propui_rigify_selected_row_expanded": true,
    "izom_propui_rigify_row_boxes_expanded": true,
    "izom_propui_rigify_output_setup_visible_on_bones_expanded": true,
    "izom_propui_rigify_output_setup_storage_expanded": true,
    "izom_propui_rigify_output_setup_native_expanded": true,
    "izom_propui_rigify_output_setup_raw_copy_expanded": true,
    "izom_propui_rigify_editor_settings_display_expanded": true,
    "izom_propui_rigify_editor_settings_shortcuts_expanded": true,
    "izom_propui_rigify_editor_settings_entry_list_expanded": true,
    "izom_propui_rigify_editor_settings_confirmations_expanded": true,
    "izom_propui_rigify_editor_settings_json_expanded": true,
    "izom_propui_rigify_editor_settings_defaults_expanded": true,
    "izom_propui_rigify_editor_settings_reset_expanded": true
  },
  "hidden": {
    "izom_propui_rigify_hide_diagnostics_section": false,
    "izom_propui_rigify_hide_output_setup_section": false,
    "izom_propui_rigify_hide_entry_list_section": false,
    "izom_propui_rigify_hide_selected_entry_section": false,
    "izom_propui_rigify_hide_generated_layout_section": false,
    "izom_propui_rigify_hide_editor_settings_section": false,
    "izom_propui_rigify_hide_output_generated_ui_display_section": false,
    "izom_propui_rigify_hide_output_storage_section": false,
    "izom_propui_rigify_hide_output_native_passthrough_section": false,
    "izom_propui_rigify_hide_basic_raw_copy_section": false,
    "izom_propui_rigify_hide_entry_hierarchy_lens": false,
    "izom_propui_rigify_hide_selected_basics_section": false,
    "izom_propui_rigify_hide_selected_value_section": false,
    "izom_propui_rigify_hide_selected_display_section": false,
    "izom_propui_rigify_hide_selected_dynamic_labels_section": false,
    "izom_propui_rigify_hide_selected_conditions_section": false,
    "izom_propui_rigify_hide_selected_storage_section": false,
    "izom_propui_rigify_hide_selected_tools_section": false,
    "izom_propui_rigify_hide_selected_tools_type_defaults_section": false,
    "izom_propui_rigify_hide_selected_tools_copy_settings_section": false,
    "izom_propui_rigify_hide_selected_tools_presets_section": false,
    "izom_propui_rigify_hide_generated_layout_selected_row_section": false,
    "izom_propui_rigify_hide_generated_layout_sync_options_section": false,
    "izom_propui_rigify_hide_generated_layout_row_boxes_section": false,
    "izom_propui_rigify_hide_editor_settings_display_section": false,
    "izom_propui_rigify_hide_editor_settings_shortcuts_section": false,
    "izom_propui_rigify_hide_editor_settings_entry_list_section": false,
    "izom_propui_rigify_hide_editor_settings_confirmations_section": false,
    "izom_propui_rigify_hide_editor_settings_json_section": false,
    "izom_propui_rigify_hide_editor_settings_defaults_section": false,
    "izom_propui_rigify_hide_editor_settings_reset_section": false
  },
  "misc": {
    "izom_propui_rigify_editor_section_order_json": "[]",
    "izom_propui_rigify_editor_subsection_order_json": "{}"
  }
}

Optional editor settings and layout documents

These affect the authoring editor, not the generated controls. Do not mix their envelope with a panel setup. Full setup JSON excludes editor settings/layout; Rigify host setup can carry them under editor_state.settings and editor_state.layout. Free has no editor-settings/defaults import.

For editor_settings, payload is {"settings": {...}, "layout": {...}}. For the saved-default editor_layout format, payload is {"layout": {...}}; there is no standalone file-import button for that kind. A layout object contains expanded (section boolean fields), hidden (section boolean fields), and misc (encoded order lists/maps). Use the complete edition-specific editor JSON examples as a starting point for section identifiers/order, and preserve unknown section IDs from your export. The JSON field reference includes the complete default layout and preset field allow-list.

Full editor settings fields

Field JSON type Default Allowed values / meaning
izom_propui_editor_float_decimals integer 3 How many decimals editor float values show while editing in the izom PropUI editor Range 0..6.
izom_propui_entry_list_primary_column string "NAME" Allowed: NAME, PROP_ID. Choose whether the wide leading Entry List column shows the Name or the Property ID
izom_propui_generated_layout_primary_column string "NAME" Allowed: NAME, PROP_ID. Choose whether the wide leading Generated Layout column shows the Name or the Property ID
izom_propui_default_entry_type string "FLOAT" Allowed: FLOAT, INT, BOOL, STRING, DATA_BLOCK, PYTHON, ARRAY, DISPLAY_LINK, CUSTOM, TEXT, OPERATOR, ENUM. Entry type used when adding a new Entry List item
izom_propui_confirmation_clear_entry_list string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when clearing every Entry List entry
izom_propui_confirmation_reset_current_setup string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when resetting the current setup back to blank
izom_propui_confirmation_reset_saved_defaults string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when deleting saved editor, editor layout, and full setup defaults
izom_propui_confirmation_full_factory_reset string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when wiping PropUI editor data from every scene and deleting saved defaults
izom_propui_confirmation_save_type_default string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when saving the selected entry's type settings as your personal default
izom_propui_confirmation_apply_type_default string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when applying your saved default for the selected entry type
izom_propui_confirmation_reset_type_default string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when removing your saved default for the selected entry type
izom_propui_confirmation_copy_same_type_settings string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when copying the selected entry's type settings to all other same-type entries
izom_propui_confirmation_clear_generated_layout string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when clearing every Generated Layout entry
izom_propui_confirmation_clear_row_boxes string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when clearing every Generated Layout row box
izom_propui_confirmation_clear_dynamic_labels string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when clearing a Dynamic Labels list
izom_propui_confirmation_reset_editor_settings string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when resetting editor settings to factory defaults
izom_propui_confirmation_apply_editor_layout string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when applying the staged Editor Layout list state
izom_propui_confirmation_apply_editor_layout_default string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when applying the saved Editor Layout default
izom_propui_confirmation_factory_reset_editor_layout string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when resetting Editor Layout to built-in defaults
izom_propui_confirmation_clear_full_setup_default string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when deleting the saved full setup default
izom_propui_confirmation_remove_ui_variant string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when removing the selected UI Variant holder
izom_propui_confirmation_clear_ui_variants string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when removing every UI Variant holder
izom_propui_confirmation_generate_current_conflict string "ASK" Allowed: ASK, OVERWRITE, ADD. Default answer when Generate Current would replace an existing current generated UI
izom_propui_confirmation_generate_native_conflict string "ASK" Allowed: ASK, OVERWRITE, SKIP. Default answer when Generate preserves storage and managed Property IDs collide with existing native custom properties
izom_propui_confirmation_generate_empty_layout string "ASK" Allowed: ASK, APPLY_PROPERTIES_ONLY, CANCEL. Default answer when Generate runs but no entries are placed in the Generated Layout
izom_propui_confirmation_remove_generated_ui string "ASK" Allowed: ASK, EDITOR_ONLY, STOP_KEEP_SCRIPT, FULL_REMOVE. Default answer when removing a generated UI or clearing the Generated UIs list
izom_propui_confirmation_parent_delete string "ASK" Allowed: ASK, DELETE, DELETE_HIERARCHY. Default answer when deleting a parent entry that has children
izom_propui_confirmation_subpanel_delete string "ASK" Allowed: ASK, DELETE, DELETE_HIERARCHY. Default answer when deleting a Generated Layout sub-panel that has rows or nested sub-panels
izom_propui_confirmation_save_variant_conflict string "ASK" Allowed: ASK, OVERWRITE, NEW. Default answer when saving over a UI variant that already has saved state
izom_propui_confirmation_load_variant_unsaved string "ASK" Allowed: ASK, SAVE_LAST_LOADED, SAVE_AS_NEW, DISCARD. Default answer when loading a UI variant while the current editor has unsaved changes
izom_propui_confirmation_copy_conditions string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when copying Conditions settings to all siblings or all child entries
izom_propui_show_entry_tree_hints boolean true Show lightweight parent/child indentation and icons in the flat Entry List without using collapse or hidden-row filtering
izom_propui_show_all_confirmation_rules boolean false Show every confirmation rule instead of only customized confirmation overrides
izom_propui_gl_auto_sync_new_entries boolean false Automatically add new Entry List entries to Generated Layout when you create them
izom_propui_gl_add_into_active_row boolean false When enabled, new Generated Layout entries and imports join the selected row instead of creating a new row
izom_propui_gl_safe_import boolean true Prevent importing the same Entry List entry into Generated Layout more than once

Rigify editor settings fields

Field JSON type Default Allowed values / meaning
izom_propui_rigify_editor_float_decimals integer 3 How many decimals editor float values show while editing in the izom PropUI Rigify editor Range 0..6.
izom_propui_rigify_editor_location string "RIGIFY" Allowed: RIGIFY, SIDEBAR. Choose where the izom PropUI Rigify editor is displayed
izom_propui_rigify_entry_list_primary_column string "NAME" Allowed: NAME, PROP_ID. Choose whether the wide leading Entry List column shows the Name or the Property ID
izom_propui_rigify_generated_layout_primary_column string "NAME" Allowed: NAME, PROP_ID. Choose whether the wide leading Generated Layout column shows the Name or the Property ID
izom_propui_rigify_default_entry_type string "FLOAT" Allowed: FLOAT, INT, BOOL, STRING, DATA_BLOCK, PYTHON, ARRAY, DISPLAY_LINK, CUSTOM, TEXT, OPERATOR, ENUM. Entry type used when adding a new Entry List item
izom_propui_rigify_confirmation_clear_entry_list string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when clearing every Entry List entry
izom_propui_rigify_confirmation_follow_shared_storage string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when disabling every per-entry Prop Bone Override
izom_propui_rigify_confirmation_clean_managed_metarig string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when removing matching managed Property IDs from every metarig pose bone
izom_propui_rigify_confirmation_clean_all_metarig string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when removing every custom property from every metarig pose bone
izom_propui_rigify_confirmation_reset_current_setup string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when resetting the current setup back to blank
izom_propui_rigify_confirmation_reset_saved_defaults string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when deleting saved editor, editor layout, and full setup defaults
izom_propui_rigify_confirmation_full_factory_reset string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when wiping PropUI editor data from every scene and deleting saved defaults
izom_propui_rigify_confirmation_save_type_default string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when saving the selected entry's type settings as your personal default
izom_propui_rigify_confirmation_apply_type_default string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when applying your saved default for the selected entry type
izom_propui_rigify_confirmation_reset_type_default string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when removing your saved default for the selected entry type
izom_propui_rigify_confirmation_copy_same_type_settings string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when copying the selected entry's type settings to all other same-type entries
izom_propui_rigify_confirmation_clear_generated_layout string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when clearing every Generated Layout entry
izom_propui_rigify_confirmation_clear_row_boxes string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when clearing every Generated Layout row box
izom_propui_rigify_confirmation_clear_dynamic_labels string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when clearing a Dynamic Labels list
izom_propui_rigify_confirmation_reset_editor_settings string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when resetting editor settings to factory defaults
izom_propui_rigify_confirmation_apply_editor_layout string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when applying the staged Editor Layout list state
izom_propui_rigify_confirmation_apply_editor_layout_default string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when applying the saved Editor Layout default
izom_propui_rigify_confirmation_factory_reset_editor_layout string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when resetting Editor Layout to built-in defaults
izom_propui_rigify_confirmation_clear_full_setup_default string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when deleting the saved full setup default
izom_propui_rigify_confirmation_parent_delete string "ASK" Allowed: ASK, DELETE, DELETE_HIERARCHY. Default answer when deleting a parent entry that has children
izom_propui_rigify_confirmation_subpanel_delete string "ASK" Allowed: ASK, DELETE, DELETE_HIERARCHY. Default answer when deleting a Generated Layout sub-panel that has rows or nested sub-panels
izom_propui_rigify_confirmation_copy_conditions string "ASK" Allowed: ASK, CONFIRM, CANCEL. Default answer when copying Conditions settings to all siblings or all child entries
izom_propui_rigify_disable_shortcuts boolean false Completely disable izom PropUI Rigify keyboard shortcuts and hide shortcut-target controls in the editor
izom_propui_rigify_show_entry_tree_hints boolean true Show lightweight parent/child indentation and icons in the flat Entry List without using collapse or hidden-row filtering
izom_propui_rigify_show_all_confirmation_rules boolean false Show every confirmation rule instead of only customized confirmation overrides
izom_propui_rigify_gl_auto_sync_new_entries boolean false Automatically add new Entry List entries to Generated Layout when you create them
izom_propui_rigify_gl_add_into_active_row boolean false When enabled, new Generated Layout entries and imports join the selected row instead of creating a new row
izom_propui_rigify_gl_safe_import boolean true Prevent importing the same Entry List entry into Generated Layout more than once

Entry preset field boundaries

An entry_type_preset uses prop_type at the document root and a compatible entry must already be selected. Its payload accepts the entry fields above except the following. value_labels and other_value_labels are supported collections. Fields irrelevant to the entry type should be omitted. A preset is not a whole setup and does not create layout placements.

  • Full: omit display_link_component_subset, display_order, entry_target_owner_path, hidden_in_editor, linked_entry_uid, parent_uid, prop_type, row_slot, ui_order, uid.
  • Rigify: omit display_link_component_subset, display_order, entry_prop_bone, entry_prop_bone_override_enabled, entry_target_owner_path, hidden_in_editor, linked_entry_uid, parent_uid, prop_type, row_slot, ui_order, uid.

Coverage and limits of this interface

Setup JSON covers the Entry List, functional parenting, Generated Layout, supported display controls, conditions/labels, operator configuration, default values and edition-specific output/storage. Entry presets/type defaults reuse compatible entry settings; presets do not transfer identity or a Display Link's target. Setup/default/copy paths preserve the current popup and compact options.

Selecting a destination component, right-click capture, source repair, validation, applying/generating properties, moving rows, saving defaults and running operator buttons happen in Blender. JSON describes the supported entry/layout state. Only documented fields have meaning; adding a key does not execute an authoring action.

Full UI Variants and Generated UIs are management workflows. One setup JSON describes one design; importing it creates a variant. Generated Python export and bundle ZIPs are separate formats, not this panel JSON. The source runtime is generated by Blender after import. User add-on preferences, installed add-ons and system keymaps are not a panel setup. Native source ramps/curves and live-value presets stay in their actual owning data; they are not embedded assets in this JSON.

Legacy/import-derived fields are intentionally excluded from authoring recommendations: native_widget, raw operator_icon_value/operator_search_weight, detected Custom metadata/read-only/error fields and the editor collection alias display_link_component_subset. Use automatic source detection, named icons and the serialized subset JSON instead. No Jump to Source field exists.

Validate the file

  • Confirm the file parses as JSON and contains the complete envelope for schema version 1 and the intended document kind.
  • Check that every referenced UID exists, hierarchies have no cycles, rows/columns start at one, each row stays in one container, and Row Boxes do not partially overlap.
  • Respect the edition's limits. Keep Dropdown IDs/numbers unique with a valid default, and match array types/sizes, numeric bounds and source component indexes.
  • Check escaping in fields that contain JSON strings, and verify Object, bone, data-block and operator references against your Blender file.
  • Review storage replacement and cleanup settings before importing. Save the complete document, including its envelope and layout arrays; an entries list alone is not an importable setup.

Companion files

The JSON field reference contains defaults, labels, descriptions, enum vocabularies, edition-specific fields, preset allow-lists and editor-layout templates in a machine-readable form. The example files include complete minimal setups, control galleries, native widgets, editor settings and entry presets. Use an export from your own scene when you need to preserve existing identities or source paths.