Skip to content

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.


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.

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.

The interface every Hub tool implements: GetToolId, GetDisplayName, GetDescription, GetCategory, GetModule, GetSearchKeywords, GetIcon.

Concrete base class for all 100 Hub tools. Provides:

  • UI helpersMakeButton, MakeRow, MakeSection, MakeCheckbox, MakeTextInput, MakeNumericInput, MakeFloatInput, MakeButtonRow, MakeInfoBanner, MakeWarningBanner, MakeComingSoonBanner, MakeNavigableTableRow, MakePathPicker
  • Status helperSetStatus(FText) for non-modal feedback
  • Settings persistenceSaveToolSetting / LoadToolSetting → JSON at [Project]/Saved/EQLabs/Settings/<ToolId>.json
  • BuildContent() — virtual entry point each tool implements to construct its panel

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.).


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.

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.

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.

Static utility for the standard navigation operations:

  • SyncToContentBrowser(FAssetData) — the “ping” action
  • OpenAssetEditor(FAssetData) — the “double-click” action
  • SelectInViewport(AActor*) — for actor rows
  • FocusViewportOnActor(AActor*) — fly-to camera
  • CopyAssetPath(FAssetData) — clipboard

Every tool that has clickable result rows uses this. Single-click pings; double-click opens the editor or focuses the camera.

Undo cache for authoring tools — snapshots actor states before destructive ops, restores via Ctrl+Z. Used by Procedural Scatter Suite, Blockout Generator, and others.


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.

The horizontal strip widget that surfaces Codex entries in tool panels. Embedded by tool panels that opt in.


Blueprint Function Library (UEQLabsBlueprintLibrary)

Section titled “Blueprint Function Library (UEQLabsBlueprintLibrary)”

Exposes 16 Blueprint-callable functions for runtime / editor scripting integration:

CategoryFunctions
NavigationFocus camera on actor, select actor in viewport, sync content browser
Asset AuditTrigger audit, read results from a tool by ID
ViewportShow/hide overlays, draw debug primitives
ToolsOpen a specific tool by ID
BatchQueue batch operations programmatically

Search for EQLabs in any Blueprint editor to see all available nodes.


The ArtForge subsystem powers the most complex Hub tools (Bake Suite, Smart Mask Processor, Layered Texture Paint, etc.). Lives in Source/EQLabsCore/Public/ArtForge/:

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.

Non-destructive UV editing context. Tools read / modify / commit UV data without permanent destructive edits until the user confirms.

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.

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.


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.


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>).


The Core module registers two Hub tools:

  1. Project Health Dashboard (FProjectHealthDashboard) — the lightweight first-pass project audit
  2. 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).


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 via FEQLabsToolRegistry
  • Calling EQLabs functionality from Blueprint — use UEQLabsBlueprintLibrary
  • Adding a viewport overlay to your own tool — register via FEQLabsViewportOverlay
  • Persisting tool settings — use SaveToolSetting / LoadToolSetting from your FEQLabsBaseToolPanel subclass

For everyday EQLabs use, just open the Hub and pick a tool — the framework is invisible.


Report an issue with this tool

Opens our feedback form in a new tab with the tool name pre-filled.