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/LibreGameDev-Claude-Code --skill asset-pipeline-patternsgit clone --depth 1 https://github.com/HermeticOrmus/LibreGameDev-Claude-CodeWrote 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/libregamedev-claude-code/asset-pipeline-patterns)<a href="https://agentmods.dev/skills/hermeticormus/libregamedev-claude-code/asset-pipeline-patterns"><img src="https://agentmods.dev/badge/skills/hermeticormus/libregamedev-claude-code/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/libregamedev-claude-code/asset-pipeline-patterns"><img src="https://agentmods.dev/badge/skills/hermeticormus/libregamedev-claude-code/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.00000 | $0.02101 |
| Opus 5 | $0.00000 | $0.01051 |
| Sonnet 5 | $0.00000 | $0.00420 |
| Haiku 4.5 | $0.00000 | $0.00210 |
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 8d 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.
How it starts
The opening of the file, as written. The whole thing — 227 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.
- 8d ago First seen · 227 lines · 0 tokens per session scan A b02e1a5f4ba5
asset-pipeline-patterns is a skill published in the GitHub repository HermeticOrmus/LibreGameDev-Claude-Code (6 stars, last pushed 3mo ago), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 2,101 tokens. 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-08-31.
Other skills, from other repositories
html-to-ugui
A pipeline for turning HTML interface prototypes into Unity UGUI Prefabs, which are reusable Unity interface objects. It uses browser-rendered layout data to preserve positions, images, text, controls, and device-adaptation intentions.
luban-dev
A guide for Luban, a game-configuration tool that turns spreadsheets and schemas into C# code and binary data for a TEngine project.
tengine-dev
A development guide for TEngine, a framework used to build Unity games. It covers the framework’s modules, user interfaces, events, asset loading, hot updates, configuration, and related tools.
rbsmithy
Use this skill for professional Roblox game development in Roblox Studio and Luau, including gameplay systems, UI/HUD, multiplayer networking, RemoteEvents/RemoteFunctions, server-client architecture, DataStores, debugging Output errors, performance review, Rojo project setup, procedural 3D model generation with…
assets-get-data
Get asset data from the asset file in the Unity project — every serializable field and property. Supports token-saving path-scoped reads via paths or viewQuery. Use 'assets-find' to find the asset first.
gameobject-component-destroy
Destroy one or more Components from a target GameObject. Missing (null) components are skipped — they cannot be destroyed. Use 'gameobject-find' and 'gameobject-component-get' to identify the components first.