Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add HermeticOrmus/claude-code-game-development --skill asset-pipeline-patternsgit clone --depth 1 https://github.com/HermeticOrmus/claude-code-game-developmentWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/hermeticormus/claude-code-game-development/asset-pipeline-patterns)<a href="https://agentmods.dev/skills/hermeticormus/claude-code-game-development/asset-pipeline-patterns"><img src="https://agentmods.dev/badge/skills/hermeticormus/claude-code-game-development/asset-pipeline-patterns/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/hermeticormus/claude-code-game-development/asset-pipeline-patterns"><img src="https://agentmods.dev/badge/skills/hermeticormus/claude-code-game-development/asset-pipeline-patterns.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00064 | $0.02172 |
| Opus 5.5 | $0.00026 | $0.00869 |
| Sonnet 5.5 | $0.00013 | $0.00434 |
| Haiku 4.5 | $0.00006 | $0.00217 |
Grade A, and why
asset-pipeline-patterns scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 15d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
Copies of this mod
1 near-identical copy found in the catalogue:
- asset-pipeline-patterns — 94% identical, 0 lines differ
How it starts
The opening of the file, as written. The whole thing — 232 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Asset Pipeline Patterns
Godot Import Override by Directory
# res://assets/textures/ui/.gdignore does NOT affect imports.
# Instead, use import override files per directory.
# Place in res://assets/textures/ui/.import_defaults (Godot 4 pattern):
# Or use a _meta.godot file approach, or set each .import file.
# Practical approach: GDScript editor tool to batch-set import settings.
# Editor tool: batch set texture compression for a directory
@tool
extends EditorScript
const TARGET_DIR := "res://assets/textures/environment/"
const COMPRESS_MODE := 3 # VRAM compressed (BC7/ASTC based on platform)
func _run() -> void:
var dir := DirAccess.open(TARGET_DIR)
if not dir:
push_error("Cannot open directory: %s" % TARGET_DIR)
return
dir.list_dir_begin()
var file_name := dir.get_next()
while file_name != "":
if file_name.ends_with(".png") or file_name.ends_with(".jpg"):
_set_texture_compression(TARGET_DIR + file_name)
file_name = dir.get_next()
EditorInterface.get_resource_filesystem().scan()
print("Batch import settings applied.")
func _set_texture_compression(path: String) -> void:
var import_path := path + ".import"
var config := ConfigFile.new()
config.load(import_path)
config.set_value("params", "compress/mode", COMPRESS_MODE)
config.set_value("params", "mipmaps/generate", true)
config.save(import_path)
Unity AssetPostprocessor for Texture Standards
// Enforces texture import settings based on directory convention
// Place in Editor/ folder
using UnityEditor;
using UnityEngine;
public class TextureImportEnforcer : AssetPostprocessor
{
void OnPreprocessTexture()
{
var importer = assetImporter as TextureImporter;
if (importer == null) return;
string path = assetPath.ToLower();
if (path.Contains("/ui/"))
{
importer.textureType = TextureImporterType.Sprite;
importer.mipmapEnabled = false;
SetPlatformSettings(importer, "Standalone", TextureImporterFormat.BC7);
SetPlatformSettings(importer, "Android", TextureImporterFormat.ASTC_6x6);
SetPlatformSettings(importer, "iPhone", TextureImporterFormat.ASTC_6x6);
}
else if (path.Contains("/environment/"))
{
importer.textureType = TextureImporterType.Default;
importer.mipmapEnabled = true;
importer.streamingMipmaps = true; // Only load needed mip levels
SetPlatformSettings(importer, "Standalone", TextureImporterFormat.BC7);
SetPlatformSettings(importer, "Android", TextureImporterFormat.ASTC_4x4);
SetPlatformSettings(importer, "iPhone", TextureImporterFormat.ASTC_4x4);
}
else if (path.Contains("/normalmap/") || path.Contains("_normal"))
{
importer.textureType = TextureImporterType.NormalMap;
SetPlatformSettings(importer, "Standalone", TextureImporterFormat.BC5);
}
}
static void SetPlatformSettings(TextureImporter importer, string platform, TextureImporterFormat format)
{
var settings = new TextureImporterPlatformSettings
{
name = platform,
overridden = true,
format = format,
maxTextureSize = 2048,
compressionQuality = (int)TextureCompressionQuality.Best
};
importer.SetPlatformTextureSettings(settings);
}
}
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 15d ago First seen · 232 lines · 64 tokens per session scan A 9b6cd99e02d7
asset-pipeline-patterns is a skill published in the GitHub repository HermeticOrmus/claude-code-game-development (70 stars, last pushed 11d ago), licensed MIT. It adds 64 tokens to every session and 2,172 once invoked, about $0.0003 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-10-01.
Other skills, from other repositories
pygame-core
Structure a pygame (pygame-ce) game in Python: the init/event/update/draw loop, delta-time movement, Surface/Rect blitting, keyboard/mouse input, and Sprite/Group management with collision. Use when building or debugging a pygame game — when the user mentions pygame, pygame-ce, the game loop, blit, Surface, Rect…
godot-export
Export and build a Godot 4.7 project for distribution: install export templates, define export presets (Windows/macOS/Linux/Web/Android), run headless command-line exports for CI, and handle web (HTML5) COOP/COEP and dedicated-server/headless builds. Use when exporting a Godot game, configuring exportpresets.cfg…
pypi-ops
Publish Python packages to PyPI via OIDC Trusted Publishing (PEP 740 attestations, gh-action-pypi-publish) instead of stored tokens. Use for: invalid-publisher errors, pending-publisher 404s, uv publish/twine, TestPyPI, environment approval gates, and rotating/auditing publish tokens.
godot-build-release
Run Godot export, CI, and release packaging with reproducible presets and platform-aware checks.
cgs-adopt
Use for adopt tasks that inventory existing source, assets, docs, and tests before mapping work into CGS structure; produce verification evidence, changed or proposed files, and handoff boundaries.
cgs-art-bible
Use for art bible tasks that define visual identity, shape language, palette, camera, animation, UI style, and asset constraints; produce verification evidence, changed or proposed files, and handoff boundaries.