Skip to main content

Dependency Scanner

The Dependency Scanner analyzes asset references within your project, helping you understand relationships between assets and folders.

Overview​

The scanner can analyze entire folders (recursive) and discover:

  • Outbound Dependencies - What external assets does this folder use?
  • Inbound Dependencies - What external assets reference this folder?
  • Bidirectional - Both directions at once
  • Broken References - References to assets that no longer exist

How It Works​

  1. Select a folder to scan
  2. The scanner queries the Asset Registry for all assets in that folder
  3. For each asset, it finds dependencies (outbound) and referencers (inbound)
  4. Results are categorized as internal (within folder) or external (outside folder)
  5. External references are reported as "leaks"

Features​

Bidirectional Analysis​

Get a complete picture of asset relationships:

Inbound (Referencers)

  • What Blueprints reference assets in this folder?
  • What materials use textures from this folder?
  • Are assets in other folders dependent on this content?

Outbound (Dependencies)

  • What external assets does this folder depend on?
  • Does this folder reference engine content or plugin content?
  • Is this folder self-contained?

Broken Reference Detection​

The scanner identifies references to assets that no longer exist:

  • Deleted assets that left dangling references
  • Moved assets without proper redirector cleanup
  • One-click fixing via the subsystem API

Plugin Dependency Filtering​

Optionally exclude plugin content from results when you only care about project-level dependencies.

Usage​

From Content Browser​

  1. Right-click a folder in the Content Browser
  2. Select Elys License Manager > Analyze Dependencies
  3. View results in the Dependency Analyzer panel

From Tools Menu​

  1. Go to Tools > Elys License Manager > Dependency Analyzer
  2. Enter a folder path
  3. Choose scan type (Bidirectional, Outbound Only, or Inbound Only)
  4. Click Scan

Via Blueprint​

// Get the subsystem
UERP_AssetInsightsEditorSubsystem* Subsystem =
GEditor->GetEditorSubsystem<UERP_AssetInsightsEditorSubsystem>();

// Bidirectional scan
FERP_AssetDependencyScanResult Result = Subsystem->ScanFolder("/Game/MyFolder");

// Outbound only
FERP_AssetDependencyScanResult OutResult = Subsystem->ScanFolderOutbound("/Game/MyFolder");

// Inbound only
FERP_AssetDependencyScanResult InResult = Subsystem->ScanFolderInbound("/Game/MyFolder");

// Check if safe to delete
bool bSafe = Result.bSafeToDelete;

Scan Results​

Result Structure​

USTRUCT(BlueprintType)
struct FERP_AssetDependencyScanResult
{
// The folder that was scanned
FString ScannedFolderPath;

// Assets inside folder -> external assets they depend on
TMap<FString, FERP_DependencyList> OutboundDependencies;

// External assets -> assets inside folder they reference
TMap<FString, FERP_DependencyList> InboundDependencies;

int32 TotalAssetsScanned;
int32 TotalOutboundLeaks;
int32 TotalInboundLeaks;
bool bSafeToDelete;

// Broken references found
TMap<FString, FString> BrokenReferences;
int32 BrokenReferenceCount;
};

Understanding Results​

  • TotalOutboundLeaks - Number of assets in this folder that depend on external content
  • TotalInboundLeaks - Number of external assets that reference this folder
  • bSafeToDelete - True if no external assets reference this folder (no inbound leaks)

Use Cases​

Before Deleting a Folder​

bool bSafe = Subsystem->IsFolderSafeToDelete("/Game/OldContent");
if (bSafe)
{
Subsystem->SafeDeleteFolder("/Game/OldContent");
}

Fixing Broken References​

FERP_AssetDependencyScanResult Result = Subsystem->ScanFolder("/Game/MyFolder");
if (Result.BrokenReferenceCount > 0)
{
int32 Fixed = Subsystem->FixBrokenReferences(Result);
}

Performance​

OperationSmall Project (< 1K assets)Large Project (> 10K assets)
Folder scan< 0.5 seconds1-5 seconds
Recursive scan< 1 second5-15 seconds

Next Steps​