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