unfurl

Bonsai

A controlled enviromnent for Unreal Projects to grow

A controlled enviromnent for Unreal Projects to grow

🌳 Summary

NsBonsai is a lightweight Unreal Engine editor plugin that standardises asset names while you work. It detects newly created/imported assets, waits for save, and opens one compact review table to classify and rename safely.

Default pattern:

<Type>_<Domain>_<Category>_<AssetName>_<Variant>

Example:

SM_Foliage_Tree_Birch_A

Zero-diff by design: NsBonsai does not write metadata into assets. It only renames assets when you explicitly confirm.

NsBonsai Showcase

🎯 Why NsBonsai

Naming is not just pretty formatting. It is searchability, automation, maintainability, and team sanity.

NsBonsai focuses on:

✨ Features

🚀 Getting Started

  1. Open Edit -> Project Settings -> Ns Bonsai.
  2. Add at least one Type Rule (ClassPath -> TypeToken).
  3. Add your Domains/Categories (or Global Categories if you disable Domains).
  4. Create or import an asset.
  5. Save package.
  6. In the table, set Domain/Category/AssetName and confirm.

Table workflow (daily use)

Bulk workflow

🧩 Configuration

Open: Edit -> Project Settings -> Ns Bonsai

This page controls three things:

If you change one setting and the UI/validation changes, that is expected: most settings are intentionally connected.

1) Naming | Format

Setting What it does What changing it does
NameFormatOrder Defines final token order in generated names. Reordering changes preview and final output shape immediately. If a component is removed from this list, it is effectively disabled even if its toggle is ON.
JoinSeparator Sets separator between components (default _). Every generated name uses this separator. Compliance parsing also expects this separator.

Why this group exists:

Recommendation:

2) Naming | Components

These toggles control both naming and UI validation.

Setting What it does If ON If OFF
bUseDomains Enables Domain component in naming and Domain column in UI. Domain becomes a required input when Domain component is in NameFormatOrder. Domain is not used in names. Category can still work through Global Categories mode.
bUseCategories Enables Category component in naming and Category column in UI. Category becomes required when Category component is active. Category is removed from naming and validation.
bUseVariant Enables trailing variant token allocation. Final rename allocates unique variants (A..Z, AA..) to avoid collisions. No variant component in output; collisions are more likely if base names repeat.
bUseAssetNameField Enables editable Asset Name input in UI and naming. Asset Name is required after sanitize. Name is derived from parsed/original fallback; field is hidden.
bCategoriesMustBelongToDomain Enforces domain-specific category membership when domains are enabled. Category must exist under selected domain. Any configured category is allowed regardless of selected domain.
bAllowFreeCategoryTextIfNoCategories Allows category use when library is empty for the current context. Empty category library does not hard-block category usage. Missing category options will block validation until categories are configured.

Recommendation:

3) Naming | Library

Setting What it does What changing it does Why
TypeRules Maps class path to type token (example: StaticMesh -> SM). Affects Type column and Type token in preview/final names. Missing mapping for an active Type component produces validation warning. Type token is resolved from actual asset class path, not folder/name guesses.
Domains Defines valid domain tokens and per-domain category lists. Updates dropdown choices and validation logic immediately. Stable token libraries prevent drift and reduce naming debates in production.
GlobalCategories Provides category options when Domains are disabled. Category validation uses this global list instead of per-domain lists. Keeps categories usable in domain-free naming setups.

Recommendation:

4) Naming | Behavior

Setting What it does What changing it does
bSkipCompliantAssets Skips enqueueing assets that already match active naming rules. ON: less queue noise in migrated/clean projects. OFF: all tracked assets can still show up for review.
PopupThresholdCount Minimum queue size before auto popup opens. Lower value = more immediate popups. Higher value = more batching, less interruption.
PopupCooldownSeconds Minimum time between automatic popups. Higher value reduces popup frequency during large bursts/imports.
bAutoCloseWindowWhenEmpty Closes review window automatically after all rows are handled. ON: less cleanup clicks. OFF: keep window open for continuous/manual sessions.

ReviewTriggerMode values:

Value Behavior
Automatic track + auto popup by threshold/cooldown rules.
ManualOnly track + queue only, open manually from menu.
Disabled stops tracking/popup behavior.

What changing it does:

5) Naming | Normalization

Setting What it does What changing it does Why
TokenNormalizationRules Maps deprecated aliases to canonical tokens (Ui -> UI). Domain/category token comparisons normalize through these rules. Prevents token drift from mixed casing/legacy aliases.
bNormalizeAssetNameExactMatch Applies normalization rules to AssetName tokens when exact token matches occur. Helps unify known aliases in AssetName without aggressive rewriting. Keeps naming consistency without over-transforming free text.

6) UI

Setting What it does
bShowTypeColumn Shows/hides Type column.
bShowDomainColumn Shows/hides Domain column when domains are in use.
bShowCategoryColumn Shows/hides Category column when categories are in use.
bShowAssetNameColumn Shows/hides editable Asset Name column when asset-name field is enabled.
bShowFinalNameColumn Shows/hides live preview column.
bShowCurrentNameColumn Shows/hides source/current asset name column.
bCompactRows Reduces row padding for denser review throughput.

Recommendation:

Practical presets

Preset Settings Best for
Strict team preset bUseDomains=True
bUseCategories=True
bCategoriesMustBelongToDomain=True
bUseVariant=True
bSkipCompliantAssets=True
large teams with clear taxonomy.
Lightweight preset bUseDomains=False
bUseCategories=False (or use global categories only)
bUseVariant=True
NameFormatOrder=Type,AssetName,Variant
small teams and fast prototyping.
Quiet automation preset ReviewTriggerMode=Disabled scripted imports/build steps where UI interruptions are unwanted.

🧠 How it works

Detection and queueing

Single-window behavior

Compliance filtering

When enabled, compliant assets are skipped early.

Compliant means:

Rename execution

Conflict handling

If target name exists, variant increments automatically.

Example:

Dry Run

📚 Best practices

Good style references:

⚙️ Requirements

🛠️ Installation

  1. Clone or download this repository.
  2. Copy the NsBonsai folder into your project Plugins directory.
  3. Regenerate project files.
  4. Enable NsBonsai in Edit -> Plugins.
  5. Restart editor.

Download on GitHub


Contact