-
Notifications
You must be signed in to change notification settings - Fork 1
Reports
A scan can leave the editor as CSV, JSON or HTML. Every row carries the asset path, the rule it failed, the severity and the fix that was proposed, so the file stands on its own for someone who does not have the project open.
Note: HTML is the free format. CSV and JSON, and the commandlet that writes them from CI, are in the full version. See Free and Full.
You can label a report with a milestone, and if you export into the same folder twice the second one tells you what is new and what got fixed since.
Four ways to get one out. The file is the same whichever you use.

| Where | How to trigger | Source data |
|---|---|---|
| Tools menu | In the Tools menu, under the Asset Standards Validator heading, open the Tools submenu and pick Export Report... | Runs a fresh full audit |
| The panel | Export Report in the panel toolbar | Whatever the panel is showing, so a filtered subset if you filtered it |
| Console command | ASV.Export <format> <output_dir> [milestone] |
Runs a fresh full audit |
| Commandlet (CI) | -run=ASVCommandlet -format=html -output=path |
Runs a fresh full audit headlessly |
Tip: The panel is the only one that can export part of a scan. Filter it down to 40 of 200 results, say the P0s in one folder, and that is what lands in the file. Everything else runs a fresh full audit first.
Every export writes two files to the chosen directory:
-
ASV_Report_2026-04-14_14-30-00.<ext>, timestamped, so old ones pile up instead of vanishing -
ASV_Report_latest.<ext>, overwritten every time, which is the one to point a script at
A third file, .asv-report.json, goes into the same folder. It is bookkeeping for the diff: export again into that folder with the same checker config and the new report gains a diff section listing what appeared and what got fixed. Change the config and the diff is skipped, because the two runs are not comparable.
Plain comma-separated UTF-8. Opens in Excel or Sheets, and any script can read it.
The first lines begin with #, which most CSV parsers skip. They hold the audit metadata:
# schemaVersion: 1.0
# timestamp: 2026-04-14T14:30:00.000Z
# projectName: MyGame
# asvVersion: 0.5.0
# checkerConfigs: StrictConfig
# scanRoots: /Game/
# auditSource: fresh_audit
# assetsScanned: 1247
# assetsWithViolations: 38
# assetsWithCriticalViolations: 15
# totalViolations: 38
# healthScore: 94.32
# p0: 5 p1: 12 p2: 18 p3: 3 autoFixable: 10
| Column | Description |
|---|---|
AssetPath |
Full content path, e.g. /Game/Characters/BP_Enemy
|
AssetClassName |
UE class name, e.g. Blueprint
|
PackagePath |
Parent folder path, e.g. /Game/Characters
|
RuleId |
Rule identifier, e.g. missing_prefix
|
Severity |
P0 / P1 / P2 / P3 |
Problem |
Human-readable description of the violation |
Suggestion |
Short suggested action, or empty if no fix is available |
AutoFixAvailable |
true / false
|
ProposedFix |
Detailed proposed fix string used by auto-fix |
ValidatorName |
Validator class, e.g. ASVValidator_NamingConvention
|
CheckerName |
Checker config asset that triggered this rule |
TriggerName |
Trigger class that started the audit, e.g. ASVTrigger_Manual
|
Condensed UTF-8 JSON, shaped for something else to read: a CI script, a dashboard, whatever you use to watch the numbers over time.
{
"meta": { ... },
"summary": { ... },
"diff": { ... }, // only present if a previous report exists with same config
"violations": [ ... ]
}
| Field | Description |
|---|---|
schemaVersion |
Always "1.0" in this release |
timestamp |
ISO 8601 timestamp: 2026-04-14T14:30:00.000Z
|
projectName |
Project name from FApp::GetProjectName()
|
asvVersion |
Plugin version string |
milestoneLabel |
Label passed via -milestone or console command, or empty string |
auditSource |
fresh_audit, accumulated, or filtered
|
checkerConfigNames |
Sorted array of the active checker config names, used to decide whether two runs can be compared |
scanRoots |
Array of scanned content paths, e.g. ["/Game/"]
|
| Field | Description |
|---|---|
assetsScanned |
Total assets checked |
totalIssues |
Total violation count |
p0 / p1 / p2 / p3 |
Per-severity counts |
healthScore |
Percentage of assets with no P0/P1 violations: (scanned − criticalAssets) / scanned × 100
|
topRules |
Array of {"rule", "count"}, sorted by count descending, top 10 |
byFolder |
Map of top-level folder → issue count |
byValidator |
Map of validator name → issue count |
top3Actions |
Top 3 most common suggested fixes |
Only there when the folder already holds an .asv-report.json from an earlier run and the checker config is the same one.
| Field | Description |
|---|---|
previousTimestamp |
Timestamp of the previous run |
deltaTotal |
Net change in total issues (positive = more issues) |
deltaP0 / deltaP1 / deltaP2 / deltaP3 |
Per-severity delta |
newCount |
Violations not in the previous run |
resolvedCount |
Violations from the previous run that are gone |
newViolations |
Array of new violation objects (same shape as items in violations) |
Each item has: assetPath, assetClassName, packagePath, ruleId, severity, problem, suggestion, autoFixAvailable, proposedFix, validatorName, checkerName, triggerName.
One self-contained HTML file. Nothing is fetched from the network, so it opens anywhere. Designed for sharing with leads and producers who don't have the editor open.

The top of the page carries the health score in green, yellow or red, the issue count broken down by severity, how many assets were scanned, which rules were broken most, which folders hold the problems, and what to do first.
Interactive table with:
- A search box that filters every column as you type
- Sorting on any column header
- Pages of 50 rows, so a big report stays quick in the browser
- A toggle between one row per violation and results grouped by asset
| Score | Color | Meaning |
|---|---|---|
| ≥ 90% | Green | Pipeline-safe, only minor issues left |
| 70–89% | Yellow | Needs attention, there are P0 or P1 violations |
| < 70% | Red | Critical, a lot of P0 and P1 violations |
Tip: The health score counts assets, not violations. An asset with five P0s is one affected asset, so one badly named file cannot drag the whole score down on its own.
From CI, the export flags sit alongside the rest of the commandlet arguments:
UnrealEditor-Cmd.exe MyProject.uproject -run=ASVCommandlet \
-Root=/Game/Content \
-severity=P0 \
-format=html \
-output=C:/Artifacts/Reports \
-milestone=Sprint-42
| Flag | Values | Default | Description |
|---|---|---|---|
-format |
csv, json, html
|
none | Export format. If omitted, no export file is written. |
-output |
Directory path | none | Where to write. The folder is created if it is not there. |
-milestone |
Any string | Empty | Label embedded in the report header (e.g. Sprint-42, Beta-1.3). |
Exit codes:
-
0: clean, or there were violations but all of them below the-severityyou asked about -
1: something was found at-severityor worse -
2: the report could not be written, bad path or no space
There is a console command, usable from the editor's console or from -ExecCmds:
ASV.Export html C:/Reports/MyProject Sprint-42
| Argument | Required | Description |
|---|---|---|
<format> |
Yes |
csv, json, or html
|
<output_dir> |
Yes | Directory to write to |
[milestone] |
No | Optional label embedded in the report |
It runs a full audit first, then writes the file. The results also go to the Output Log and to the Content Validation listing in the Message Log.
Tip: To export from a build pipeline without the commandlet, add
-ExecCmds="ASV.Export html C:/Reports;Quit"to the editor launch command.Quitcloses the editor once the export is done.
This page is generated from the in-editor documentation. Do not edit it here. Edit Plugins/AssetStandardsValidator/Content/Docs/*.html and regenerate.