asset-audit

$npx mdskill add striderZA/OpenCodeGameStudios/asset-audit

Audits game assets for naming, size, format, and pipeline compliance.

  • Identifies orphaned assets, missing references, and standard violations.
  • Uses Glob, Bash, Read, Grep, and Write tools for scanning and analysis.
  • Compares assets against art bible, manifest, and project conventions.
  • Generates a detailed compliance report with fix suggestions.

SKILL.md

.github/skills/asset-auditView on GitHub ↗
---
name: asset-audit
description: "Audits game assets for compliance with naming conventions, file size budgets, format standards, and pipeline requirements. Identifies orphaned assets, missing references, and standard violations."
argument-hint: "[category|all] [--fix]"
user-invocable: true
allowed-tools: Read, Glob, Grep, Write, Bash, Task, question
---

## Phase 1: Read Standards

Read the art bible or asset standards from the relevant design docs:

- `design/art/art-bible.md` — visual and naming standards
- `design/gdd/asset-manifest.md` — expected asset list if it exists
- `.agents/rules/data-files.md` — data file standards
- `AGENTS.md` — project naming conventions

If no art bible exists, note: "No art bible found. Auditing against general game industry conventions." and proceed.

---

## Phase 2: Scan Asset Directories

Use Glob to index all asset files in the target scope. Scan these directories:

```
Glob pattern="assets/art/**/*.{png,jpg,svg,psd,tres,tscn}" (art)
Glob pattern="assets/audio/**/*.{ogg,mp3,wav,flac}" (audio)
Glob pattern="assets/vfx/**/*.{tscn,tres,gdshader}" (VFX)
Glob pattern="assets/shaders/**/*.{gdshader,tres}" (shaders)
Glob pattern="assets/data/**/*.{json,yaml,csv,tres}" (data)
```

If the argument specifies a category (e.g., `art`), limit to that directory.

For each file found, use Bash `stat` (or Node.js `fs.statSync` equivalent via Execute) to record file size.

---

## Phase 3: Run Compliance Checks

### 3a: Naming Conventions

Check each file against the expected naming pattern:
- Art: `[category]_[name]_[variant]_[size].{png,jpg}` (e.g., `char_player_idle_256.png`)
- Audio: `[category]_[context]_[name]_[variant].{ogg,mp3}` (e.g., `sfx_combat_sword_hit_01.ogg`)
- Shaders: `[type]_[category]_[name].gdshader` (e.g., `spatial_env_water.gdshader`)
- All files must use lowercase with underscores, no spaces
- No special characters in filenames (hyphens acceptable in specific conventions)

Flag violations with the file path and the specific rule broken.

### 3b: File Size Budgets

Check file sizes against budget thresholds using Bash:

```
Bash: find assets/art -name "*.png" -exec stat --format="%s %n" {} \;
```

| Category | Budget per file | Budget total |
|----------|----------------|--------------|
| Textures (UI) | < 512 KB | < 5 MB |
| Textures (3D models) | < 4 MB | < 100 MB |
| Audio (SFX) | < 256 KB | < 20 MB |
| Audio (music) | < 10 MB | < 100 MB |
| Shaders | < 10 KB | < 200 KB |
| Data files | < 1 MB | < 10 MB |

Flag files exceeding their budget. Calculate total category size and flag if exceeding total budget.

### 3c: Format Verification

- Textures: Check for power-of-two dimensions (use Bash `identify` from ImageMagick if available, or note manual verification needed)
- Audio: Expected format — OGG for SFX, OGG/MP3 for music. Flag `.wav` files (should be compressed for shipping)
- Data: Validate JSON with `Bash: python -m json.tool file.json` (dry-run). Validate YAML with Grep for common errors
- Shaders: File extension must match `shader_type` declaration in `.gdshader` files

### 3d: Orphaned Assets

For each asset file, search code and scene files for references. For art/audio assets, search for the filename without extension:

```
Grep pattern="asset_name" path="src/" (game code)
Grep pattern="asset_name" path="assets/" (scene references)
Grep pattern='"asset_name"' path="assets/data/" (data file references)
```

Flag any asset with zero references as orphaned. For `.tres` and `.tscn` files, also check if they're loaded by other resources.

### 3e: Missing Assets

Search code for asset references and verify the files exist:

```
Grep pattern='load\("res://' path="src/" (GDScript Resource loads)
Grep pattern='GD.Load<' path="src/" (C# Resource loads)
Grep pattern='preload\("res://' path="src/" (preload statements)
```

For each `res://` reference found, verify the file exists at that path using Glob. Flag any reference where the file doesn't exist.

---

## Phase 4: Delegate Specialist Review

Spawn specialist agents via Task in **parallel**:

- **Art assets** → spawn `technical-artist`: provide the naming violations and size violations. Ask for:
  - Verification that flagged issues are actually problems (not intentional exceptions)
  - Texture format and compression recommendations for flagged files
  - Priority ranking: which violations affect performance most

- **Audio assets** → spawn `sound-designer`: provide the audio format and naming issues. Ask for:
  - Format recommendations for flagged files
  - Whether flagged sample rates are intentional

- **Data files** → spawn `systems-designer`: provide the data file issues. Ask for:
  - Schema validation for game data files
  - Whether flagged orphaned/missing data files affect game balance

Collect all specialist outputs. Surface any disagreements between specialists and your own findings to the user via `question`.

---

## Phase 5: Output Audit Report

Present the synthesized report:

```markdown
# Asset Audit Report — [Category] — [Date]

## Summary
- **Total assets scanned**: [N]
- **Naming violations**: [N]
- **Size violations**: [N]
- **Format violations**: [N]
- **Orphaned assets**: [N]
- **Missing assets**: [N]
- **Specialist review**: [technical-artist / sound-designer / systems-designer findings]
- **Overall health**: [CLEAN / MINOR ISSUES / NEEDS ATTENTION / CRITICAL]

## Naming Violations
| File | Expected Pattern | Issue | Specialist Note |
|------|-----------------|-------|-----------------|

## Size Violations
| File | Budget | Actual | Overage | Specialist Note |
|------|--------|--------|---------|-----------------|

## Format Violations
| File | Expected Format | Actual Format | Specialist Note |
|------|----------------|---------------|-----------------|

## Orphaned Assets (no code references found)
| File | Last Modified | Size | Recommendation |
|------|-------------|------|---------------|

## Missing Assets (referenced but not found)
| Reference Location | Expected Path | Severity |
|-------------------|---------------|----------|

## Recommendations
| Priority | Issue | Action | Owner |
|----------|-------|--------|-------|

## Verdict: [COMPLIANT / WARNINGS / NON-COMPLIANT]
```

Ask: "May I write this audit report to `production/qa/asset-audit-[category]-[date].md`?"

If yes, write the file (create `production/qa/` directory if needed).

If the user passed `--fix`, offer to apply automated fixes (rename files, flag for manual conversion). Do NOT delete orphaned assets without explicit confirmation.

---

## Phase 6: Next Steps

- Fix naming violations using the patterns defined in AGENTS.md or art bible
- Delete confirmed orphaned assets after manual review (never auto-delete)
- Run `/content-audit` to cross-check asset counts against GDD-specified requirements
- Run `/asset-spec system:[relevant-system]` if audit reveals missing assets that need production
- Re-run `/asset-audit` after fixes to verify cleanliness

More from striderZA/OpenCodeGameStudios

SkillDescription
art-bibleGuided, section-by-section Art Bible authoring. Creates the visual identity specification that gates all asset production. Run after /concept-brainstorm is approved and before /map-systems or any GDD authoring begins.
art-generateGenerates placeholder .aseprite files from asset specs using the Aseprite MCP. Reads asset specs and art bible, creates sprites with correct dimensions/palette/layers, exports PNGs. Run after /asset-spec has produced specs and /art-bible exists.
asset-specGenerate per-asset visual specifications and AI generation prompts from GDDs, level docs, or character profiles. Produces structured spec files and updates the master asset manifest. Run after art bible and GDD/level design are approved, before production begins.
automated-smoke-testRun an automated smoke test using the godot-mcp server. Launches the project, captures debug output, and checks for errors or crashes.
balance-checkAnalyzes game balance data files, formulas, and configuration to identify outliers, broken progressions, degenerate strategies, and economy imbalances. Use after modifying any balance-related data or design. Use when user says 'balance report', 'check game balance', 'run a balance check'.
concept-brainstormGuided game concept ideation — from zero idea to a structured game concept document. Uses professional studio ideation techniques, player psychology frameworks, and structured creative exploration.
content-auditAudit GDD-specified content counts against implemented content. Identifies what's planned vs built.
create-architectureGuided, section-by-section authoring of the master architecture document for the game. Reads all GDDs, the systems index, existing ADRs, and the engine reference library to produce a complete architecture blueprint before any code is written. Engine-version-aware: flags knowledge gaps and validates decisions against the pinned engine version.
create-control-manifestAfter architecture is complete, produces a flat actionable rules sheet for programmers — what you must do, what you must never do, per system and per layer. Extracted from all Accepted ADRs, technical preferences, and engine reference docs. More immediately actionable than ADRs (which explain why).
create-epicsTranslate approved GDDs + architecture into epics — one epic per architectural module. Defines scope, governing ADRs, engine risk, and untraced requirements. Does NOT break into stories — run /create-stories [epic-slug] after each epic is created.