Core Shared Services
Core Shared Services
Section titled “Core Shared Services”Module: Core · Category: Framework · Tool ID: (not a Hub tool)
The infrastructure that every other EQLabs tool stands on. Not registered as Hub tools — these are the shared C++ classes that the rest of EQLabs uses to render UIs, register tools, navigate assets, draw viewport overlays, and integrate with Blueprints.
This page documents the framework so you understand what’s happening underneath. End users don’t interact with most of this directly — but knowing the building blocks is useful when reading the codebase or extending EQLabs.
Hub & registration
Section titled “Hub & registration”EQLabs Hub Window (SEQLabsHubWindow)
Section titled “EQLabs Hub Window (SEQLabsHubWindow)”The central tool browser. Lists every registered tool, supports search + module filtering + colored module badges, opens each tool in its own dockable SDockTab. Backed by FEQLabsToolRegistry.
Tool Registry (FEQLabsToolRegistry)
Section titled “Tool Registry (FEQLabsToolRegistry)”Singleton registry of every tool. Each tool registers via Registry.RegisterTool(MakeShared<FYourTool>()) from its module’s StartupModule. Hub auto-discovers tools via the registry.
Tool Interface (IEQLabsTool)
Section titled “Tool Interface (IEQLabsTool)”The interface every Hub tool implements: GetToolId, GetDisplayName, GetDescription, GetCategory, GetModule, GetSearchKeywords, GetIcon.
Base Tool Panel (FEQLabsBaseToolPanel)
Section titled “Base Tool Panel (FEQLabsBaseToolPanel)”Concrete base class for all 100 Hub tools. Provides:
- UI helpers —
MakeButton,MakeRow,MakeSection,MakeCheckbox,MakeTextInput,MakeNumericInput,MakeFloatInput,MakeButtonRow,MakeInfoBanner,MakeWarningBanner,MakeComingSoonBanner,MakeNavigableTableRow,MakePathPicker - Status helper —
SetStatus(FText)for non-modal feedback - Settings persistence —
SaveToolSetting/LoadToolSetting→ JSON at[Project]/Saved/EQLabs/Settings/<ToolId>.json BuildContent()— virtual entry point each tool implements to construct its panel
EQLabs Style (FEQLabsStyle)
Section titled “EQLabs Style (FEQLabsStyle)”Singleton style set: brushes, icons, colors. Provides per-module colored badge brushes, severity icon brushes, and a centralized 20-color palette via static methods (AccentColor, SidebarBg, ContentBg, HeaderBg, CardBg, TextPrimary / Secondary / Muted, SeverityError / Warning / Info / Pass, TabActive / Inactive, etc.).
Interactivity framework
Section titled “Interactivity framework”Result Item (FEQLabsResultItem)
Section titled “Result Item (FEQLabsResultItem)”Universal result struct used across the plugin. Fields: severity, asset path, actor weak ptr, location, fix action callback. Tools that produce per-item results (audits, scanners) emit these and let the shared list view consume them.
Result List View (SEQLabsResultListView)
Section titled “Result List View (SEQLabsResultListView)”Drop-in interactive list widget. Supports filter, sort, click-to-navigate, CSV export, and per-item fix-action invocation. Used by Project Health Dashboard, Project Doctor’s Scene Audit, Material Profiler, Blueprint Inspector, LOD & Nanite Studio, and others.
Viewport Overlay (FEQLabsViewportOverlay)
Section titled “Viewport Overlay (FEQLabsViewportOverlay)”Singleton viewport drawing system. Tools register highlight boxes, world text, stencil outlines, and the overlay draws them via UE’s debug draw service. Used by Project Doctor’s Scene Audit, Foliage Placement Analyzer, Lumen Scene Debugger, and others to make audit results spatially navigable.
Asset Navigator (FEQLabsAssetNavigator)
Section titled “Asset Navigator (FEQLabsAssetNavigator)”Static utility for the standard navigation operations:
SyncToContentBrowser(FAssetData)— the “ping” actionOpenAssetEditor(FAssetData)— the “double-click” actionSelectInViewport(AActor*)— for actor rowsFocusViewportOnActor(AActor*)— fly-to cameraCopyAssetPath(FAssetData)— clipboard
Every tool that has clickable result rows uses this. Single-click pings; double-click opens the editor or focuses the camera.
Operation Cache (FEQLabsOperationCache)
Section titled “Operation Cache (FEQLabsOperationCache)”Undo cache for authoring tools — snapshots actor states before destructive ops, restores via Ctrl+Z. Used by Procedural Scatter Suite, Blockout Generator, and others.
Codex (knowledge system)
Section titled “Codex (knowledge system)”Codex Subsystem (UEQLabsCodexSubsystem)
Section titled “Codex Subsystem (UEQLabsCodexSubsystem)”Editor subsystem that owns the Codex — 367 entries across 15 volumes. Drives serendipitous-discovery widgets in tool windows + Hub detail pages. 3-tier keyword selection (per-tool keywords + module + global) ensures every tool surfaces contextually relevant Codex entries.
Codex Strip (SEQLabsCodexStrip)
Section titled “Codex Strip (SEQLabsCodexStrip)”The horizontal strip widget that surfaces Codex entries in tool panels. Embedded by tool panels that opt in.
Blueprint API
Section titled “Blueprint API”Blueprint Function Library (UEQLabsBlueprintLibrary)
Section titled “Blueprint Function Library (UEQLabsBlueprintLibrary)”Exposes 16 Blueprint-callable functions for runtime / editor scripting integration:
| Category | Functions |
|---|---|
| Navigation | Focus camera on actor, select actor in viewport, sync content browser |
| Asset Audit | Trigger audit, read results from a tool by ID |
| Viewport | Show/hide overlays, draw debug primitives |
| Tools | Open a specific tool by ID |
| Batch | Queue batch operations programmatically |
Search for EQLabs in any Blueprint editor to see all available nodes.
ArtForge shared services
Section titled “ArtForge shared services”The ArtForge subsystem powers the most complex Hub tools (Bake Suite, Smart Mask Processor, Layered Texture Paint, etc.). Lives in Source/EQLabsCore/Public/ArtForge/:
Bake Engine (FAFBakeEngine)
Section titled “Bake Engine (FAFBakeEngine)”Job-queue based CPU/GPU bake dispatcher. Used by Universal Bake Suite, Smart Mask Processor’s mask generation, and Layered Texture Paint Suite’s splat generation. Supports parallel bake jobs via ParallelFor.
UV Session Context (FAFUVSessionContext)
Section titled “UV Session Context (FAFUVSessionContext)”Non-destructive UV editing context. Tools read / modify / commit UV data without permanent destructive edits until the user confirms.
Batch Processor (FAFBatchProcessor)
Section titled “Batch Processor (FAFBatchProcessor)”Generic folder-level batch queue with live progress reporting. Used by any tool that operates on multiple assets at once: Texture Channel Packer batch mode, Material Replacer, etc.
Preset Store (FAFPresetStore)
Section titled “Preset Store (FAFPresetStore)”JSON-based save/load system for tool presets. Any tool can use this to persist named configurations recallable across sessions. Used by Procedural Scatter, Spline Asset Placer, Color Scheme Manager, CVar Browser, etc.
Saved-data layout
Section titled “Saved-data layout”Every tool that persists settings or user data writes to [Project]/Saved/EQLabs/:
{Project}/Saved/EQLabs/├── Settings/│ └── <ToolId>.json ← Per-tool persisted settings├── ColorSchemes.json ← Color Scheme Manager palettes├── CVarPresets/<name>.json ← Console Variable Browser user presets├── MaterialPresets/<name>.json ← Material Preset Manager presets├── Patchwork/│ ├── snapshots.json ← Patchwork snapshot data│ └── thumbnails/<id>.png ← Per-snapshot viewport thumbnails├── Playtest/sessions/<name>.json ← Playtest Recorder & Tagger sessions└── (more per-tool subdirectories)A migration shim in FEQLabsCoreModule::StartupModule runs once at startup: if Saved/EqulocityLab/ exists from before the rebrand and Saved/EQLabs/ doesn’t, it moves the directory. Idempotent and safe — runs on every startup, no-ops after the first migration.
Plugin shader paths
Section titled “Plugin shader paths”The Tech module registers a virtual shader path on startup so EQVAT shaders can be included via #include "/EQVAT/EQVAT.ush". Done via AddShaderSourceDirectoryMapping(TEXT("/EQVAT"), <ShipLab dir>).
Hub registration of Core tools
Section titled “Hub registration of Core tools”The Core module registers two Hub tools:
- Project Health Dashboard (
FProjectHealthDashboard) — the lightweight first-pass project audit - Ship Lab (
FShipLabHubTool) — the build / packaging / release pipeline launcher
Plus it registers asset type actions for the Ship Lab Profile asset (Pattern B custom asset editor).
When to use these directly
Section titled “When to use these directly”You don’t, in normal use. These are the building blocks that the 100 Hub tools use. You touch them when:
- Writing a new EQLabs tool — extend
FEQLabsBaseToolPanel, register viaFEQLabsToolRegistry - Calling EQLabs functionality from Blueprint — use
UEQLabsBlueprintLibrary - Adding a viewport overlay to your own tool — register via
FEQLabsViewportOverlay - Persisting tool settings — use
SaveToolSetting/LoadToolSettingfrom yourFEQLabsBaseToolPanelsubclass
For everyday EQLabs use, just open the Hub and pick a tool — the framework is invisible.
Opens our feedback form in a new tab with the tool name pre-filled.