Skip to content

Command line & CI

The TAAssetDoctor commandlet runs the Asset Doctor rules without opening the editor UI. Use it in build scripts and CI to check content, write a report and fail the build when issues reach a given severity.

UnrealEditor-Cmd.exe Project.uproject -run=TAAssetDoctor [-Paths=/Game/A+/Game/B] [-Report=Saved/AssetDoctor.json] [-FailOn=Error|Warning|Info|Never] [-Fix]

Example:

Terminal window
UnrealEditor-Cmd.exe "C:\Path\MyGame.uproject" -run=TAAssetDoctor -Report=Saved/AssetDoctor/report.json -FailOn=Error -unattended -nop4 -nosplash -NullRHI

-unattended, -nop4, -nosplash and -NullRHI are standard Unreal command line options for headless runs. They are not specific to Asset Doctor.

Argument Default Meaning
-Paths=/Game/A+/Game/B Included Paths from the settings Folders to scan, including subfolders. Separate several folders with + or ,. Excluded Paths are skipped even when you pass -Paths.
-Report=<file> No report Writes a report. A path ending in .csv writes CSV; any other extension writes JSON. Relative paths are relative to the project folder. Missing folders are created.
-FailOn=<severity> Error Lowest severity that fails the run: Error, Warning, Info or Never (None also works). Case-insensitive.
-Fix Off Applies all automatic fixes, saves the changed packages, then scans again.
  1. Reads -FailOn and the scope (-Paths, or Included Paths from the settings).
  2. Waits for the Asset Registry to finish discovering all assets.
  3. Scans the folders with the enabled rules.
  4. With -Fix: applies every automatic fix, saves all dirty packages, and scans again. Everything after this step uses the second scan.
  5. Logs one line per issue, sorted by severity (errors first), then asset path and rule id.
  6. Writes the report, if -Report is given.
  7. Logs a summary line and exits with an exit code.

All lines are logged in the LogTAAssetDoctor category:

LogTAAssetDoctor: Display: Scanning /Game
LogTAAssetDoctor: Display: [Warning] Naming.Convention | /Game/Props/Rock.Rock | Static Mesh names should start with 'SM_'. Suggested: SM_Rock
LogTAAssetDoctor: Display: Report written to C:/Path/MyGame/Saved/AssetDoctor/report.json
LogTAAssetDoctor: Display: ta Asset Doctor: <assets> asset(s) checked in <seconds>s. <errors> error(s), <warnings> warning(s), <info> info. <failing> issue(s) at or above -FailOn=Error.
  • Scanning lists the scanned folders, separated by commas.
  • Each issue line has the format [<Severity>] <RuleId> | <AssetPath> | <Message>.
  • With -Fix, this line is logged after the fixes: Applied <fixed> of <fixable> automatic fix(es). Scanning again.... The first number counts changed assets, the second the auto-fixable issues.

Setup errors are logged as errors:

Unknown -FailOn value '<value>'. Use Error, Warning, Info or Never.
Nothing to scan: no -Paths given and no Included Paths in Project Settings.
The ta Asset Doctor subsystem is not available.
Could not write report to <path>
Code Meaning
0 Passed: no issues at or above -FailOn. With -FailOn=Never the run always passes unless there is a setup error.
1 At least one issue at or above -FailOn.
2 Setup error: unknown -FailOn value, nothing to scan, the Asset Doctor subsystem is not available, or the report could not be written.

-Fix applies every automatic fix found by the first scan: renames, texture setting changes and redirector fix-ups. Afterwards all dirty packages are saved, then the folders are scanned again. The log, the report and the exit code reflect the second scan, so only the issues that need manual work remain.

The format depends on the file extension: .csv writes CSV, anything else writes JSON. The same formats are used by Export report in the panel and by export_report in Python.

JSON reports are UTF-8 without a byte order mark.

{
"tool": "ta Asset Doctor",
"version": "1.1.0",
"project": "MyGame",
"generatedAt": "2026-01-01T12:00:00.000Z",
"summary": {
"errors": 0,
"warnings": 1,
"info": 0,
"total": 1,
"scannedAssets": 250
},
"issues": [
{
"severity": "Warning",
"rule": "Naming.Convention",
"asset": "/Game/Props/Rock.Rock",
"assetName": "Rock",
"class": "StaticMesh",
"message": "Static Mesh names should start with 'SM_'. Suggested: SM_Rock",
"autoFix": true,
"referencers": 3
}
]
}
Field Meaning
tool Always ta Asset Doctor
version Plugin version
project Project name
generatedAt Time the report was written, in UTC (ISO 8601)
summary.errors, summary.warnings, summary.info Number of issues in the report per severity
summary.total Number of issues in the report
summary.scannedAssets Number of assets checked by the last scan
issues[].severity Error, Warning or Info
issues[].rule Rule id
issues[].asset Object path of the asset
issues[].assetName Asset name
issues[].class Asset class name
issues[].message Issue message
issues[].autoFix true if the issue has an automatic fix
issues[].referencers Number of other packages that reference the asset (-1 if unknown)

This Windows batch step runs the check, keeps the exit code and passes it on to the build system. It expects to be placed next to MyGame.uproject; adjust the engine path and project name for your setup.

ci_asset_doctor.bat
@echo off
set UE_CMD="C:\Program Files\Epic Games\UE_5.6\Engine\Binaries\Win64\UnrealEditor-Cmd.exe"
set PROJECT="%~dp0MyGame.uproject"
%UE_CMD% %PROJECT% -run=TAAssetDoctor -Report=Saved/AssetDoctor/report.json -FailOn=Error -unattended -nop4 -nosplash -NullRHI
set RESULT=%ERRORLEVEL%
if %RESULT%==0 echo Asset Doctor: passed
if %RESULT%==1 echo Asset Doctor: issues at or above -FailOn were found, see Saved\AssetDoctor\report.json
if %RESULT%==2 echo Asset Doctor: setup error, check the log
exit /b %RESULT%

Archive Saved/AssetDoctor/report.json as a build artifact so you can review the issues after a failed run.

In Windows PowerShell 5.1, an argument that starts with - and contains a dot is split in two at the dot. -Report=Saved/AssetDoctor/report.json arrives at Unreal as -Report=Saved/AssetDoctor/report and .json, so the report gets the wrong name. Put the argument in quotes or in a variable:

Terminal window
$UE = "C:\Program Files\Epic Games\UE_5.6\Engine\Binaries\Win64\UnrealEditor-Cmd.exe"
$Project = "C:\Path\MyGame.uproject"
$Report = "-Report=Saved/AssetDoctor/report.json"
& $UE $Project -run=TAAssetDoctor $Report -FailOn=Error -unattended -nop4 -nosplash -NullRHI
exit $LASTEXITCODE

Writing "-Report=Saved/AssetDoctor/report.json" in quotes directly on the command line works too.