Asset Inventory Pipeline

Turn your Fab asset library into a searchable knowledge graph. Scan UE projects into Neo4j, search via Claude Code, and spawn browsable showcase grids in the editor.

On This Page


Overview

The Asset Inventory Pipeline connects your Fab downloads to a Neo4j knowledge graph, enabling natural language asset discovery through Claude Code. Instead of manually browsing Content Browser folders across dozens of projects, ask Claude to "find all vegetation meshes" or "show me what's in my ArchViz collection".

Fab.com ──download──▶ UE Category Projects ──scan──▶ Neo4j (FabAsset nodes)
                                                          │
                    UE Editor ◀──spawn showcase──◀ Claude Code / MCP Tools
                         │                                │
                    editor.asset.migrate ◀──search──◀ search_inventory_assets
ComponentPurpose
scan_ue_project.pyScan open UE project → ingest assets into Neo4j
scan_usd_assets.pyScan USD/USDZ files from Fab (no editor needed)
MCP Tools (5)Search, list, stats, categories, details via Claude Code
showcase_assets.pySpawn assets in editor as browsable showcase grid
editor.asset.migrateCross-project asset migration via JSON-RPC

Prerequisites

RequirementDetails
Neo4jRunning on localhost:7474 (HTTP) / localhost:7687 (Bolt)
Python 3.12+With requests package
UE Editor5.6 or 5.7 with AgentUX plugin enabled
AgentUX PluginWebSocket server active on port 9877
Claude CodeFor MCP tool access (optional — scripts work standalone)

Step 1: Organize Fab Downloads

Create one UE project per asset category. This keeps projects manageable and categories clean.

D:/FabCatalog/
├── ArchVizInteriors/         # Architecture & interior packs
├── CityParkEnvironment/      # Outdoor environment pack
├── QuixelTrees/              # Megascans vegetation
├── NatureVegetation/         # Other vegetation
└── UrbanModern/              # Urban/modern assets

Download asset packs from Fab.com, then use the Epic Games Launcher to add them to the appropriate category project.


Step 2: Scan Projects into Neo4j

UE Project Scan (full metadata)

With the editor running and the target project open:

python scan_ue_project.py --project-name "CityParkEnvironment" --show-progress

StaticMesh assets are automatically enriched with triangle count, vertex count, LOD count, and Nanite status.

FlagDescription
--project-nameRequired. Name for the InventoryProject node
--class-filterOnly scan specific class (e.g., StaticMesh)
--show-progressPer-batch timing, ETA, memory usage
--cleanRemove project links, delete orphaned assets first
--dry-runDiscover assets without writing to Neo4j

USD Scan (no editor needed)

For USD/USDZ files from Fab (common for Megascans):

python scan_usd_assets.py --source-dir "D:/FabCatalog/QuixelTrees/Content" \
    --project-name "QuixelTrees" --show-progress

Via Claude Code

With the AgentUX MCP server running, use natural language prompts:

  • "Find all vegetation StaticMeshes across my projects"
  • "What's in the CityParkEnvironment project?"
  • "Show me asset inventory stats"
  • "List all categories with counts"

Claude uses five MCP tools behind the scenes:

ToolPurpose
search_inventory_assetsSearch by name, category, class, project
list_inventory_projectsAll projects with asset counts
get_inventory_statsOverall catalog statistics
get_inventory_categoriesCategory list with counts
get_asset_detailsFull metadata for a single asset

Via Direct Cypher

For advanced queries, use Neo4j Browser:

// Find vegetation meshes with high triangle counts
MATCH (a:FabAsset)-[:IN_CATEGORY]->(:AssetCategory {name: 'vegetation'})
WHERE a.className ENDS WITH 'StaticMesh' AND a.triangles > 10000
RETURN a.name, a.unrealPath, a.triangles
ORDER BY a.triangles DESC LIMIT 20

Step 4: Showcase Assets

Spawn matching assets in the editor as a walkable grid for visual browsing:

python showcase_assets.py --project-name "CityParkEnvironment" --show-progress

Assets are grouped by name affinity (SM_Wall_01, SM_Wall_02 appear together), sorted by size within each group (smallest in front, largest in back), and separated by group gaps for easy visual scanning.

FlagDescription
--project-nameRequired. Source project
--categoryFilter by category (e.g., vegetation)
--max-assetsCap spawned assets (default: 100)
--group-gapWhitespace between groups in UU (default: 500)
--dry-runPrint layout without spawning
--no-groupingDisable semantic grouping

Step 5: Migrate Assets Between Projects

Once you've found assets, migrate them into your working project via AgentUX JSON-RPC:

// List dependencies
{"method": "editor.asset.listDependencies", "params": {
  "asset_path": "/Game/Meshes/SM_Bench01", "include_soft": true
}}

// Migrate with dependencies
{"method": "editor.asset.migrate", "params": {
  "packages": ["/Game/Meshes/SM_Bench01"],
  "destination": "D:/UnrealProjects/MyGame/Content",
  "include_dependencies": true
}}

Neo4j Schema Reference

Node Labels

LabelKey PropertyDescription
FabAssetunrealPath (unique)A scanned UE or USD asset
AssetCategoryname (unique)Category (props, vegetation, etc.)
AssetTagname (unique)Searchable tag
InventoryProjectid (unique)A registered project

FabAsset Properties

PropertyTypeDescription
namestringAsset name (e.g., SM_Rock06)
unrealPathstringFull UObject path (unique key)
classNamestringUE class
diskSizeintFile size in bytes
trianglesintTriangle count (StaticMesh only)
verticesintVertex count (StaticMesh only)
lodsintLOD count (StaticMesh only)
naniteEnabledboolNanite flag (StaticMesh only)
statusstringscanned / annotated / verified

Troubleshooting

Neo4j connection refused

Start Neo4j. On Windows: neo4j console or start the Neo4j Desktop app.

Editor not reachable (port 9877)

Open UE Editor with your project, enable the AgentUX plugin (Edit > Plugins > search "AgentUX"), and restart the editor. Verify with netstat -an | grep 9877.

Auth token required

Scripts auto-resolve tokens from the credential file at <Project>/Saved/AgentUX/.creds/mcp_auth or the OS keyring. Set the token in the AgentUX Settings panel if missing.

Empty scan results

The scanner queries the live Asset Registry. Ensure the project is actually open in the editor and assets are loaded.

Showcase spawns nothing

Verify the project has StaticMesh entries in Neo4j: python showcase_assets.py --project-name "MyProject" --dry-run


See Docs/FAB_INVENTORY_GUIDE.md in the plugin distribution for the complete reference including additional Cypher query examples.