SKILL.md
---
name: msw-sprite-ruid
description: "SpriteRendererComponent.SpriteRUID (world) and SpriteGUIRendererComponent.ImageRUID (UI) — native RUID type support (sprite / animationclip direct playback), thumbnail:// prefix for rendering avataritem / skeleton / animationclip as static thumbnail image, avatar item icon in inventory / shop / UI slot. Use when: assigning any RUID to a sprite renderer component, displaying an avatar item or resource as a thumbnail or icon, using animationclip directly in a renderer, rendering inventory item icons, displaying a thumbnail image in a world entity. Keywords: SpriteRUID, ImageRUID, thumbnail://, animationclip, RUID apply, RUID assign, thumbnail, item icon, sprite RUID, RUID to renderer"
---
# MSW Sprite RUID
Rules for assigning a RUID to `SpriteRendererComponent.SpriteRUID` (world) or
`SpriteGUIRendererComponent.ImageRUID` (UI).
---
## Native type support
Both components accept a `sprite` or `animationclip` RUID directly — no extra
animator component required.
| Component | Property | Value form (runtime `.mlua`) | Native RUID types |
|---|---|---|---|
| `SpriteRendererComponent` (world) | `SpriteRUID` | plain string | `sprite`, `animationclip` |
| `SpriteGUIRendererComponent` (UI) | `ImageRUID` | `DataRef("...")` | `sprite`, `animationclip` |
`ImageRUID` is a `DataRef`: in runtime `.mlua`, assign `DataRef(ruid)`.
Use `{ DataId: ruid }` only in `.ui` / `.model` JSON or builder patch data.
`SpriteRUID` remains a plain string.
```lua
-- World: sprite or animationclip RUID both work
self.Entity.SpriteRendererComponent.SpriteRUID = ruid
-- UI: sprite or animationclip RUID both work
self.Entity.SpriteGUIRendererComponent.ImageRUID = DataRef(ruid)
```
A `skeleton` / `avataritem` RUID assigned without the `thumbnail://` prefix
**fails silently** (no error, nothing renders).
---
## animationclip: single animation vs multi-state
- **Single looping animation** (background deco, idle effect, prop): set `SpriteRUID`
or `ImageRUID` directly to the `animationclip` RUID.
- **Multi-state** (stand / move / attack / hit / die): use `StateAnimationComponent`
\+ `ActionSheet`. See [`msw-general/references/monster.md`](../msw-general/references/monster.md).
---
## `thumbnail://` prefix — static thumbnail from any resource
Prepend `thumbnail://` to `SpriteRUID` or `ImageRUID` to render a **static
thumbnail image** from any resource — useful for icons, preview images, and item
thumbnails.
thumbnail://<32-char hex RUID>
Accepted types: `sprite` · `animationclip` · `skeleton` · `avataritem`
```lua
-- World thumbnail (any resource type)
self.Entity.SpriteRendererComponent.SpriteRUID = "thumbnail://" .. anyRuid
-- UI thumbnail (any resource type)
self.Entity.SpriteGUIRendererComponent.ImageRUID = DataRef("thumbnail://" .. anyRuid)
```
### Primary use case: avataritem icons
`avataritem` RUIDs cannot render without `thumbnail://`. With the prefix they
become item icons for inventory slots, shop listings, and equip previews.
```lua
slotEntity.SpriteGUIRendererComponent.ImageRUID = DataRef("thumbnail://" .. avatarItemRuid)
```
Search avatar item RUIDs with the `msw-search` skill (`searchAvatarItems`).
---
## Common pitfalls
- `skeleton` / `avataritem` directly into `SpriteRUID` / `ImageRUID` without prefix → silently invisible.
- `thumbnail://` = **static** image only. For live animation, assign the `animationclip` RUID directly (no prefix).
- Runtime `.mlua` uses `ImageRUID = DataRef("...")`; the `{ "DataId": "..." }` object form is `.ui` / `.model` JSON only (the prefix goes **inside** `DataId`, not a separate field). Do not use the table form in runtime code — the LSP rejects it as a `DataRef` type mismatch.
- `CostumeManagerComponent.Custom*Equip`, `StateAnimationComponent.ActionSheet`, and `SkeletonRendererComponent.SkeletonRUID` do **not** accept `thumbnail://`.
- Do **not** prepend `thumbnail://` to a RUID that was already retrieved *as* a thumbnail or icon image from `msw-search`. The prefix converts a source resource into its thumbnail — applying it to an already-thumbnail sprite is logically redundant. If the search query targeted an icon / thumbnail image and returned a `sprite` RUID, assign that RUID directly without any prefix.
- To **search** for RUIDs use the `msw-search` skill — `searchAvatarItems` for avatar items; `searchResources` for everything else.