editor.fab + editor.fab.catalog

Two related namespaces. editor.fab reads the user's live Fab library via EOS authentication and the Fab HTTP API. editor.fab.catalog exposes the legacy SQLite-backed pack / asset / dependency tables written by pre-AIR customers; reads remain supported and a Pro-tier cross-project migration surface is retained. For general multi-source asset inventory (Fab / GameWalk / USD / Manual) see editor.inventory, which supersedes the retired editor.fab.catalog write surface.

← API Reference

Note: Programmatic Fab downloads are not supported. There is no public Fab API for downloading assets. Use the Fab browser tab in the editor to download assets manually.

editor.fab

Eight methods against the live Fab library via EOS authentication. Query owned assets for intelligent asset selection without requiring them to be imported into the project first.

editor.fab.sync

Trigger a full sync of the user's Fab library from the Fab backend. Clears the cached library and starts fetching all owned assets via paginated HTTP requests. Returns immediately with "syncing" status -- use editor.fab.status to poll for completion.

Name Type Required Description
batch_sizenumberNoItems per HTTP page (1-10000, default 1000)

Returns

Field Type Description
statusstringAlways "syncing" on success

Example Request

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "editor.fab.sync",
  "params": {}
}

Example Response

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": { "status": "syncing" }
}

editor.fab.status

Check the current sync status and authentication state.

No parameters.

Returns

Field Type Description
logged_inbooleanWhether the user is authenticated with EOS
statusstring"idle", "syncing", "complete", or "error"
total_itemsnumberNumber of items currently cached
synced_pagesnumberNumber of HTTP pages fetched so far
errorstringError message (only present when status is "error")

Example Request

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "editor.fab.status"
}

Example Response

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "logged_in": true,
    "status": "complete",
    "total_items": 347,
    "synced_pages": 1
  }
}

editor.fab.library

Return the cached Fab library inventory with optional filtering and pagination.

Name Type Required Description
offsetnumberNoStart index for pagination (default 0)
limitnumberNoMax items to return (1-500, default 50)
listing_typestringNoFilter by listing type (e.g., "megascan_3dmodel")
sellerstringNoFilter by seller name (substring, case-insensitive)
searchstringNoSearch title and description (substring, case-insensitive)

Returns

Field Type Description
totalnumberTotal items matching filters
offsetnumberStart index used
countnumberNumber of items returned in this page
itemsarrayArray of library item objects (title, assetId, listingType, seller, source, url, distributionMethod, description, thumbnail)

Example Request

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "editor.fab.library",
  "params": { "offset": 0, "limit": 10 }
}

editor.fab.search

Search the cached library by query, listing type, or seller. At least one filter parameter is required. Searches are case-insensitive substring matches against title and description.

Name Type Required Description
querystringNo*Search term for title/description
listing_typestringNo*Filter by listing type
sellerstringNo*Filter by seller name
offsetnumberNoStart index for pagination (default 0)
limitnumberNoMax items to return (1-500, default 50)

*At least one of query, listing_type, or seller is required.

Returns

Same format as editor.fab.library.

Example Request

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "editor.fab.search",
  "params": { "query": "forest", "listing_type": "environment" }
}

editor.fab.inventory

Unified inventory view combining Fab library data with import status and role classification. Returns Fab library items enriched with role, imported status, and importPath.

Name Type Required Description
rolestringNoFilter by role: environment, prop, vegetation, material, character, vfx, audio, structure, tool
imported_onlybooleanNoOnly return items imported into the project
not_importedbooleanNoOnly return items not yet imported
querystringNoSearch title/description (case-insensitive substring)
listing_typestringNoFilter by Fab listingType
offsetnumberNoStart index for pagination (default 0)
limitnumberNoMax items to return (1-500, default 50)

Returns

Field Type Description
totalnumberTotal items matching filters
offsetnumberStart index used
countnumberNumber of items returned in this page
itemsarrayArray of inventory entry objects (all library fields plus role, imported, importPath)

Example Request

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "editor.fab.inventory",
  "params": { "role": "vegetation", "imported_only": true, "limit": 10 }
}

editor.fab.crossref

Cross-reference Fab library items with imported project assets via UFabLocalAssets reflection. Reads Epic's UFabLocalAssets class to determine which library items have been imported and their UE content paths.

Name Type Required Description
forcebooleanNoRe-run cross-reference even if already done

Returns

Field Type Description
total_librarynumberTotal items in inventory
total_importednumberNumber of imported items
total_not_importednumberNumber of non-imported items
crossref_sourcestring"reflection" (fresh run) or "cached" (previous result)

Example Request

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "editor.fab.crossref",
  "params": { "force": true }
}

editor.fab.classify

Classify Fab library items into scene-building roles using deterministic heuristics. Assigns a role to each inventory entry based on its listingType (primary signal) and importPath (fallback).

Name Type Required Description
forcebooleanNoRe-classify all items even if already done

Returns

Field Type Description
classifiednumberNumber of items classified
rolesobjectMap of role name to count

Example Request

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "editor.fab.classify",
  "params": {}
}

Example Response

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "classified": 347,
    "roles": {
      "prop": 120,
      "material": 95,
      "vegetation": 45,
      "environment": 38,
      "character": 15,
      "vfx": 12,
      "audio": 10,
      "tool": 8,
      "structure": 4
    }
  }
}

editor.fab.cleanup

Delete imported assets from a content path, clear Fab tracking data, and reset inventory import status. Supports dry-run mode to preview the operation without making changes.

Name Type Required Description
pathstringNoUE content path to clean (default "/Game")
clear_fab_trackingbooleanNoClear UFabLocalAssets CDO tracking maps (default true)
dry_runbooleanNoPreview only -- report what would be deleted without changing anything (default false)

Returns (normal)

Field Type Description
successbooleanWhether asset deletion succeeded
pathstringThe content path that was cleaned
assets_deletednumberNumber of assets that were in the directory
disk_cleanedbooleanWhether the physical directory was removed
fab_tracking_entries_clearednumberNumber of tracking entries cleared
inventory_entries_resetnumberNumber of inventory items reset to not-imported

Returns (dry run)

Field Type Description
dry_runbooleanAlways true
pathstringThe content path that would be cleaned
assets_would_deletenumberNumber of assets that would be deleted

Example Request

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "editor.fab.cleanup",
  "params": { "path": "/Game/Megascans", "dry_run": true }
}

Example Response (dry run)

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "dry_run": true,
    "path": "/Game/Megascans",
    "assets_would_delete": 245
  }
}

editor.fab.catalog

Eight live methods against the legacy SQLite catalog (pack metadata, asset rows, dependency edges) written by pre-AIR customers. Reads remain supported; recipes and cross-project migration are tier-gated. Three write methods were retired during AIR and now return -32601 with a redirect to the editor.inventory.* replacement. New customers should go direct to editor.inventory for multi-source, multi-project scans.

Retired methods (return -32601): editor.fab.catalog.baseline + editor.fab.catalog.commit (AIR-FIX-3-01; replacement: editor.inventory.scanProject). editor.fab.catalog.sync_to_neo4j (AIR6-01; replacement: editor.inventory.syncToNeo4j against the v2 schema). The retired write methods respond with a human-readable redirect hint in the error message so existing scripts surface the migration path instead of silent failure.

Free tier methods

editor.fab.catalog.list_packs

List cataloged packs. Paginated.

Parameters:

NameTypeRequiredDescription
limitnumberNoDefault 100.
offsetnumberNoDefault 0.

Returns: {packs[], total}. Each pack row includes asset id, title, seller, listing type, and ingest timestamp.

Example Request:

{
  "jsonrpc": "2.0", "id": 1,
  "method": "editor.fab.catalog.list_packs",
  "params": { "limit": 50 }
}

editor.fab.catalog.get_pack

Return a single pack by asset_id. Missing pack returns -32001 PackNotFound.

Parameters: {asset_id: string} (required).

Returns: Pack object with all fields (asset id, title, seller, listing type, ingest timestamp, asset count, size summary).


editor.fab.catalog.find_assets

List assets belonging to a pack.

Parameters: {pack_id: string} (required).

Returns: {assets[], count}. Each asset row includes unreal path, class name, size bytes, mesh metadata where applicable.


editor.fab.catalog.search_text

FTS5 full-text search across the asset catalog. The porter unicode61 tokenizer stems whole words; camelCase is one token. Use prefix syntax (foo*) for partial matches.

Parameters: {query: string, limit?: number}. query is required.

Returns: {results[], count, query}.

Example Request:

{
  "jsonrpc": "2.0", "id": 2,
  "method": "editor.fab.catalog.search_text",
  "params": { "query": "oak table", "limit": 20 }
}

editor.fab.catalog.get_dependencies

Return dependency edges for an asset in forward (what it needs) or reverse (what needs it) direction.

Parameters:

NameTypeRequiredDescription
asset_pathstringYesFull UObject path.
directionstringNoOne of forward (default) or reverse.

Returns: {dependencies[], count, asset_path, direction}. Each row includes edge type (material / texture / skeleton / mesh) and size hint where available.


Standard+ methods

editor.fab.catalog.run_recipe Pro

Execute a bundled Cypher recipe against the project's Neo4j instance. Five recipes ship in the plugin tree and cover common queries over the v1 catalog labels. Custom recipes can be added to the recipe directory.

Parameters: {recipe_name: string, parameters?: object}. recipe_name is required.

Returns: {recipe, results[], row_count}.

Tier: Free callers receive -32007 from the router tier check. Requires a reachable Neo4j configured under UAgentUXSettings::Neo4jHost.


Pro methods

editor.fab.catalog.migrate_to_project Pro

Migrate an entire pack's assets into another UE project via AssetTools.MigratePackages. Logs the migration for later audit.

Parameters:

NameTypeRequiredDescription
pack_idstringYesPack asset id.
target_projectstringYesDestination project root.
create_if_missingboolNoCreate target content folder if absent.

Returns: {migration_id, pack_id, target_project, asset_count, status}.


editor.fab.catalog.list_migrations Pro

View the migration audit log for a pack. Each migration row records target project, asset count, status, and timestamp.

Parameters: {pack_id: string} (required).

Returns: {migrations[], count}.


Retired methods

Three methods were retired during the AIR milestone. Calls return JSON-RPC -32601 with a redirect hint pointing at the replacement. The retired names stay in dispatch for the explicit redirect message; generic "method not found" fall-through produces the same code but lacks the migration context.

Retired method Retired in Replacement
editor.fab.catalog.baselineAIR-FIX-3-01editor.inventory.scanProject
editor.fab.catalog.commitAIR-FIX-3-01editor.inventory.scanProject
editor.fab.catalog.sync_to_neo4jAIR6-01editor.inventory.syncToNeo4j

Error shape (all three retired methods):

{
  "jsonrpc": "2.0", "id": 1,
  "error": {
    "code": -32601,
    "message": "Method retired in AIR-FIX-3-01; use editor.inventory.scanProject"
  }
}

The Level Editor "Scan This Project" toolbar button now dispatches editor.inventory.scanProject in-process. See the Fab Cataloger workflow guide shipped with the plugin for the full historical context.