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:
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.
Arguments
Section titled “Arguments”| 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. |
What the commandlet does
Section titled “What the commandlet does”- Reads
-FailOnand the scope (-Paths, or Included Paths from the settings). - Waits for the Asset Registry to finish discovering all assets.
- Scans the folders with the enabled rules.
- With
-Fix: applies every automatic fix, saves all dirty packages, and scans again. Everything after this step uses the second scan. - Logs one line per issue, sorted by severity (errors first), then asset path and rule id.
- Writes the report, if
-Reportis given. - Logs a summary line and exits with an exit code.
Console output
Section titled “Console output”All lines are logged in the LogTAAssetDoctor category:
LogTAAssetDoctor: Display: Scanning /GameLogTAAssetDoctor: Display: [Warning] Naming.Convention | /Game/Props/Rock.Rock | Static Mesh names should start with 'SM_'. Suggested: SM_RockLogTAAssetDoctor: Display: Report written to C:/Path/MyGame/Saved/AssetDoctor/report.jsonLogTAAssetDoctor: 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.Scanninglists 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>Exit codes
Section titled “Exit codes”| 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. |
Fixing with -Fix
Section titled “Fixing with -Fix”-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.
Report formats
Section titled “Report formats”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) |
CSV reports are UTF-8 with a byte order mark, so spreadsheet applications show non-ASCII asset names correctly. The first line is the header:
Severity,Rule,Asset,Class,Message,AutoFix,Referencers"Warning","Naming.Convention","/Game/Props/Rock.Rock","StaticMesh","Static Mesh names should start with 'SM_'. Suggested: SM_Rock","Yes",3Text fields are quoted, with quotes inside a value doubled. AutoFix is Yes or No. Referencers is the number of other packages that reference the asset (-1 if unknown).
CI example
Section titled “CI example”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.
@echo offset 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 -NullRHIset RESULT=%ERRORLEVEL%
if %RESULT%==0 echo Asset Doctor: passedif %RESULT%==1 echo Asset Doctor: issues at or above -FailOn were found, see Saved\AssetDoctor\report.jsonif %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.
Running from PowerShell
Section titled “Running from PowerShell”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:
$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 -NullRHIexit $LASTEXITCODEWriting "-Report=Saved/AssetDoctor/report.json" in quotes directly on the command line works too.