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
- Prerequisites
- Step 1: Organize Fab Downloads
- Step 2: Scan Projects into Neo4j
- Step 3: Search the Inventory
- Step 4: Showcase Assets
- Step 5: Migrate Assets
- Neo4j Schema Reference
- Troubleshooting
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 | Component | Purpose |
|---|---|
scan_ue_project.py | Scan open UE project → ingest assets into Neo4j |
scan_usd_assets.py | Scan USD/USDZ files from Fab (no editor needed) |
| MCP Tools (5) | Search, list, stats, categories, details via Claude Code |
showcase_assets.py | Spawn assets in editor as browsable showcase grid |
editor.asset.migrate | Cross-project asset migration via JSON-RPC |
Prerequisites
| Requirement | Details |
|---|---|
| Neo4j | Running on localhost:7474 (HTTP) / localhost:7687 (Bolt) |
| Python 3.12+ | With requests package |
| UE Editor | 5.6 or 5.7 with AgentUX plugin enabled |
| AgentUX Plugin | WebSocket server active on port 9877 |
| Claude Code | For 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.
| Flag | Description |
|---|---|
--project-name | Required. Name for the InventoryProject node |
--class-filter | Only scan specific class (e.g., StaticMesh) |
--show-progress | Per-batch timing, ETA, memory usage |
--clean | Remove project links, delete orphaned assets first |
--dry-run | Discover 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 Step 3: Search the Inventory
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:
| Tool | Purpose |
|---|---|
search_inventory_assets | Search by name, category, class, project |
list_inventory_projects | All projects with asset counts |
get_inventory_stats | Overall catalog statistics |
get_inventory_categories | Category list with counts |
get_asset_details | Full 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.
| Flag | Description |
|---|---|
--project-name | Required. Source project |
--category | Filter by category (e.g., vegetation) |
--max-assets | Cap spawned assets (default: 100) |
--group-gap | Whitespace between groups in UU (default: 500) |
--dry-run | Print layout without spawning |
--no-grouping | Disable 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
| Label | Key Property | Description |
|---|---|---|
FabAsset | unrealPath (unique) | A scanned UE or USD asset |
AssetCategory | name (unique) | Category (props, vegetation, etc.) |
AssetTag | name (unique) | Searchable tag |
InventoryProject | id (unique) | A registered project |
FabAsset Properties
| Property | Type | Description |
|---|---|---|
name | string | Asset name (e.g., SM_Rock06) |
unrealPath | string | Full UObject path (unique key) |
className | string | UE class |
diskSize | int | File size in bytes |
triangles | int | Triangle count (StaticMesh only) |
vertices | int | Vertex count (StaticMesh only) |
lods | int | LOD count (StaticMesh only) |
naniteEnabled | bool | Nanite flag (StaticMesh only) |
status | string | scanned / 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.