tool Palette · Editor Window

Build tool palettes
with precision.

A modal WPF editor running on the Revit API execution context — query the live document, preview fetch results, and validate buttons in real time. No round-trips. No reloads.

The Palette Engine Modal / API-thread Multi-palette · Multi-tab - Multi-format
E-S-L-resized-20260504002917-eff042.png

Editor Capabilities

Everything the editor can do.

A full-featured WPF window managing the palette data lifecycle — creation, editing, validation, and delegation configuration.

🗂️

Multi-Palette Management

Left sidebar lists every palette from config.json. Switching palettes animates the content area. Each palette has independent tabs, buttons, and meta settings.

config.json registry
📑

Tab CRUD + Drag Reorder

Create tabs as Custom, Doc Fetch, Template Fetch or Folder Fetch. Rename and delete inline. Drag tabs to reorder — order persists to data file.

Drag-to-reorder
🔘

Button  + Reorder

Add family buttons, action buttons, separators, or batch-import from a folder. Edit all fields inline. Select rows to reorder within a tab.

Family · Action · Separator · Batch
👁️

Fetch Preview

For fetch tabs, the editor calls the live Revit API (it runs modal on the API thread) to preview exactly which buttons would be generated.

Live Revit API · Cached per-selection
🩺

Health Checker

Scans all buttons for issues: missing icons, missing source files, invalid action parameters, unresolvable families, and orphaned meta entries.

Per-palette or all · Categorized
📦

Batch Family Import

Scans a folder for .rfa files and auto-creates one button per family with auto-detected label, category, and source path.

Folder scan · Auto-label · Per-version RFT
🔐

Security Editor

Configure prime admin, editor password and per-user bypass list, Action Pack trust, and add-to-palette permissions.

Password protect editor · Per-user roles
🔗

Delegation Rules Editor

Visual editor for the Palette Delegation engine. Add, reorder, and configure per-rule palette assignment and document/user criteria.

Priority rules · Criteria builder
↩️

Dirty State & Reset

Every field tracks its loaded state via CaptureLoadedState(). IsDirty enables Save/Reset. Resetting reverts all fields to the last-saved snapshot.

Per-row dirty tracking · Undo
🎭

8 Named Themes

4 light (Hazy Sky, Paper Slate, Sea Mist, Dust Red) + 4 dark (Midnight Blue, Graphite Green, Plum Neon, Charcoal Orange). Auto-matched to Revit's UI preference.

4 light + 4 dark · Persisted
🏷️

Button Class Picker

Dialog shows all available action IDs from built-in and loaded Action Packs. Selecting an action auto-populates the parameters panel.

Action registry · Auto-params
🔎

Auto-Load Family on Fetch

Toggle to enable or disable family on fetch to auto load. When disabled the  Editor uses cached families until Reload (F5) is clicked.

Live · Cached

Tab Formats

Four ways to populate a tab. 

Each tab can use a different data source. The editor exposes all configuration fields for each format.

⬆️ Custom | Family

Fully hand-authored button list. Every row is defined directly in the palette data file. Use this for curated, project-specific palettes where you control every label, icon, and configuration. Add a single family or batch of families.

⬆️ Custom | Action

As part of custom tab, run built-in or custom actions directly from palette buttons, not just family placement commands. Each Action buttons have unique parameters dedicated to their purposes.

🔍 Doc Fetch

Queries the active Revit document using configured categories and filters at palette load time.

🔍Template Fetch

Auto-scans a template or project file (rte / rvt ) and builds buttons from it

📁 Folder Fetch

Scans a folder for .rfa family files and builds buttons automatically at load time.

📁 Folder Fetch Tab
format: "folder"

Scans a folder for .rfa family files and builds buttons automatically at load time.

Configuration Fields

folder pathPath to the .rfa folder
folder path mode"absolute" or "relative"
filtersParameter name + operator + value (AND logic)
load typeItemize every type or not
naming mode"auto" · "family_words" · "type_words"
family wordsWord indices to extract from family name
type wordsWord indices to extract from type name

Batch Import

Add dozens of buttons in seconds in Custom tab.

The Batch Family Dialog automates bulk button creation from a folder of RFA files.

1

Open Batch Dialog

Click Batch Import in the editor toolbar. The dialog opens and immediately scans the configured folder for .rfa files.

2

Review Auto-Generated Rows

One row per family with auto-detected label, category, and family name. Edit any row before importing.

3

Configure Template Paths

Optionally specify .rft template paths or enable per-version overrides (template_path_2023 through template_path_2027).

4

Choose Source Mode

Active Document (already loaded), External Document (from a .rvt), or External Family (from .rfa directly).

5

Import to Active Tab

Click Import. Rows are appended to the current tab. Changes are dirty-tracked until you click Save.

Source Modes

Active documentFamily already loaded in the active project. Uses in-session lookup.
External documentFamily lives in another .rvt file. Path stored for load-on-demand.
External familyPoints directly to an .rfa. Icon extracted from the family thumbnail.

Naming Modes

autoUses the full family name as the button label.
family_wordsExtracts specific word indices from the family name.
type_wordsExtracts word indices from the type name.

Palette Validation

Built-in Health Checker.

Scan at any time to find broken buttons, missing icons, invalid parameters, and orphaned meta entries before users encounter them.

The Health Checker is powered by PaletteValidationService. It produces a PaletteHealthReport with categorized issues across all buttons and tabs, scoped to either the current palette or every palette in the config.

What It Checks

IconsPNG paths that don't resolve to an existing file
Source pathsRFA/RVT paths that no longer exist on disk
Action parametersRequired params that are empty or invalid
Action IDsIDs not matching any registered action
Meta orphansTab entries in _meta.json with no matching group
🩺 Health Report — Architectural.json
Doors tab — 12 buttonsAll OK
Windows tab — 8 buttonsAll OK
Finishes tab — 3 buttons2 icon paths missing
Annotations tab — 5 buttons1 action ID not found
_meta.json1 orphaned tab entry
28 buttons scanned2 errors · 3 warnings

Editor Themes

8 hand-crafted themes.

4 light + 4 dark themes. Each defines a complete set of surface, accent, text, and border colors. Active theme is persisted and auto-matched to Revit's UI preference.

Light Themes

Hazy Sky
Paper Slate (default light)
Sea Mist
Dust Red

Dark Themes

Midnight Blue
Graphite Green
Plum Neon
Charcoal Orange (default dark)


Accessibility

Editor inclusive design.

The editor follows WPF accessibility conventions and provides multiple ways to interact with every feature.

THEME

8 Themes × Contrast Profiles

Every theme defines TextPrimary and TextMuted computed for legibility on its background. Dark themes use desaturated light text; light themes use near-black on white surfaces.

KEYBOARD

Full Keyboard Navigation

All editor forms are keyboard-navigable. Tab order follows visual layout. Dialogs return focus to the parent window on close.

STATUS

Status Bar

The editor status bar always shows the result of the last operation — saves, errors, validation results, and fetch preview counts.

DIRTY

Unsaved Change Indicators

Save and Reset buttons are only enabled when a row has pending changes (IsDirty = true). Closing with unsaved changes triggers a confirmation prompt.


FAQ

Editor questions answered.

Why is the editor modal? Can it be made non-modal?
The editor uses ShowDialog() so it runs on the Revit API execution context. This is required because Fetch Preview, Type Picker, and family validation all call the Revit API (FilteredElementCollector, etc.). Revit's API is single-threaded — calls from other threads cause crash code 0xe0434352.
How do I add a new action button?
Click + Add → Action. The button row is added with a blank action ID. Click the action ID field (or the class picker button) to open the Button Class Picker dialog, which shows all registered actions with descriptions. Required parameters appear automatically on selection.
Can I configure multiple Doc Fetch categories in one tab?
Yes. Each fetch tab has 6 category slots (CategorySlot1–6) that use logical OR across all non-empty slots. You can also configure up to 4 filter rows per tab that apply logical AND conditions (e.g., filter by a shared parameter value).
How do I set up the editor for a team sharing a network drive?
Point all users' config.json to the shared UNC path. In security.json, set prime_admin to the BIM Manager's Windows username and add trusted team leads to editor_password_admin_users. Set the editor password for everyone else. Use Palette Delegation to auto-load the right palette per project.
Can slide transitions be turned off for better performance?
Yes. Set "editor_slide_transitions_enabled": false in config.json → ui_settings. This disables the animated palette-switch effect in the editor. The palette panel is unaffected by this setting.

Expore Delegation