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 ouzlifaneyassine1-dot/onyx-engine --skill use-widget-assetgit clone --depth 1 https://github.com/ouzlifaneyassine1-dot/onyx-engineWrote 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/ouzlifaneyassine1-dot/onyx-engine/use-widget-asset)<a href="https://agentmods.dev/skills/ouzlifaneyassine1-dot/onyx-engine/use-widget-asset"><img src="https://agentmods.dev/badge/skills/ouzlifaneyassine1-dot/onyx-engine/use-widget-asset/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/ouzlifaneyassine1-dot/onyx-engine/use-widget-asset"><img src="https://agentmods.dev/badge/skills/ouzlifaneyassine1-dot/onyx-engine/use-widget-asset.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.00098 | $0.02930 |
| Opus 5 | $0.00049 | $0.01465 |
| Sonnet 5 | $0.00020 | $0.00586 |
| Haiku 4.5 | $0.00010 | $0.00293 |
Grade A, and why
use-widget-asset 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 10d 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.
This is a copy
89% identical to use-widget-asset — 22 lines differ, which has more behind it and is treated as the original. This page carries a canonical link to it rather than competing with it.
How it starts
The opening of the file, as written. The whole thing — 218 lines — stays where its author put it; the contents beside it link to each section on GitHub.
use-widget-asset — Wire a sliced widget into a real Godot control
When the create-asset-sheet wizard sees a stretchable UI element (a panel, a slider, a progress bar, a toggle), it returns more than a flat PNG. It returns geometry: 9-slice frame margins for stretchable rectangles, and a fill rect for value-driven widgets. It also pairs ON/OFF toggle slices via pairWith. This skill is the runtime side: how to read that metadata and wire the asset into the right Godot node.
If a slice has no widget metadata, treat it as a static texture (TextureRect) and skip this skill.
Shape support (read first)
The single rule that governs everything below:
9-slice for any AABB-fitting stretchable widget. Static texture for everything else.
Concrete:
| Shape | Approach | Why |
|---|---|---|
| Rectangle (panel, button, bar, frame) | NinePatchRect with frameMargins |
4 corners stay fixed, 4 edges stretch on one axis, center stretches both. Standard 9-slice. |
| Rounded rectangle | NinePatchRect with frameMargins |
Corner radii live inside the fixed corner cells. Identical to plain rectangle. |
| Circle / ellipse (round button, gem) | Static TextureRect, scale uniformly |
No edge to stretch — the shape has no "interior to grow." |
| Diamond / hexagon (badge) | Either ship at multiple sizes OR static texture, scale uniformly | 9-slice would distort the angled corners. SDF would solve it but is overkill for this pipeline. |
| Diagonal banner | NinePatchRect, accept some distortion |
Slopes sit in the fixed corner cells; horizontal middle stretches. Looks fine if not stretched aggressively. |
| Organic shape (scroll, ribbon, painted sash) | Static TextureRect |
Not stretchable in any direction. Regenerate at the target size if you need a different one. |
The wizard's vision detector only emits widget metadata for the 5 kinds it knows how to slice (slider, progress_bar, toggle, panel, button). Anything else lands as a static category: ui slice with no widget field — fall through to "render as TextureRect" and skip the rest of this skill.
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.
- 10d ago First seen · 218 lines · 98 tokens per session scan A 0ea1a9bb83d9
use-widget-asset is a skill published in the GitHub repository ouzlifaneyassine1-dot/onyx-engine (0 stars, last pushed 2mo ago), licensed MIT. It adds 98 tokens to every session and 2,930 once invoked, about $0.0005 per session on Opus 5. A static security scan graded it A with 0 findings. It is 89% identical to use-widget-asset, differing in 22 lines, and is treated as a copy.
Other skills, from other repositories
skybox-panorama
Use when generating a 360° panoramic sky image for use as a Sky resource (PanoramaSkyMaterial) in a 3D scene. Equirectangular projection, 2:1 aspect. Wires into WorldEnvironment.sky. Trigger on "skybox", "sky panorama", "360 background", "environment sky", "HDRI sky", "panoramic background", "panorama sky".
sprite-sheet
Use when generating animated 2D character sprites laid out as a sprite sheet (grid of frames) — walk cycle, attack frames, idle bob, death sequence. Wires into AnimatedSprite2D / SpriteFrames. Trigger on "sprite sheet", "walk cycle", "attack frames", "animated sprite", "frame-by-frame animation", "2D character…
character-portrait
Use when generating a single, polished bust/portrait of a character for dialogue UI, character-select screens, lore cards, or codex entries. One character, locked composition, VN-style. Trigger on "character portrait", "dialogue portrait", "VN portrait", "character bust", "headshot", "character select image", "lore…
instantiate-asset-pack
Use when the user wants to import or spawn an entire asset pack (the multi-slice ArtAsset produced by create-asset-sheet) into the current scene — not a single slice, the whole pack. Reads the pack's per-slice metadata (zOrder, isComposite, parentSliceIndex, widget, bbox), groups composites, sorts children by paint…
pixel-art
Use when generating pixel-art assets — sprites, items, tiles, portraits in a pixel style at a specific resolution (32×32, 64×64, 128×128). Pixel-perfect grid, limited palette, retro feel. Trigger on "pixel art", "8-bit art", "16-bit sprite", "pixel sprite", "retro tileset", "pixel icon", "pixel portrait".
tileable-texture
Use when generating a seamless tileable texture for walls, floors, terrain, ceilings — square tile that repeats cleanly on all four edges. Wires onto PlaneMesh / CSGBox3D / MeshInstance3D as a StandardMaterial3D albedo. Trigger on "tileable texture", "seamless texture", "wall texture", "floor texture", "ground…