Skip to main content

mate

Create custom desktop pet (Mate) characters with spritesheet and manifest. Use when the user asks to 'create a pet', 'make a desktop companion', 'design a mate character', 'generate a spritesheet for my pet', or wants to customize their desktop buddy. Generates a WebP spritesheet + manifest.json that can be loaded by MiMo Desktop's Mate system.

소스 정보

저장소
XiaomiMiMo/MiMo-Code
최근 소스 활동
2026년 9월 30일 08:41
감지된 SKILL.md 언어
영어
스타
13,754
포크
1,471

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
mate
description
Create custom desktop pet (Mate) characters with spritesheet and manifest. Use when the user asks to 'create a pet', 'make a desktop companion', 'design a mate character', 'generate a spritesheet for my pet', or wants to customize their desktop buddy. Generates a WebP spritesheet + manifest.json that can be loaded by MiMo Desktop's Mate system.
# Mate Pet Creator Create animated desktop pet characters for MiMo Desktop's Mate (桌面伙伴) system. ## Output Structure A valid custom pet lives in a folder with this structure: ``` <pet-id>/ ├── manifest.json # Required — animation metadata └── spritesheet.webp # Required — all animation frames in a grid ``` The user places this folder in their MiMo Desktop custom pets directory (`userData/pets/<pet-id>/`), then clicks "Refresh" in Settings → Mate to load it. ## Manifest Schema ```json { "id": "my-pet", "name": "My Pet", "description": "A cute custom pet", "version": 1, "spritesheet": "spritesheet.webp", "frameWidth": 240, "frameHeight": 240, "columns": 8, "totalFrames": 16, "animations": { "idle": { "row": 0, "frames": 8, "fps": 8, "loop": true } } } ``` ### Required Fields | Field | Type | Description | |-------|------|-------------| | `id` | string | Unique identifier (kebab-case) | | `name` | string | Display name | | `version` | number | Always `1` | | `spritesheet` | string | Filename of the spritesheet image | | `frameWidth` | number | Width of each frame in pixels | | `frameHeight` | number | Height of each frame in pixels | | `columns` | number | Number of columns in the spritesheet grid | | `totalFrames` | number | Total number of frames across all animations | | `animations` | object | At minimum must include `idle` | ### Optional Fields | Field | Type | Description | |-------|------|-------------| | `description` | string | Shown in settings UI | | `anchorX` | number | Horizontal anchor (0–1, default 0.5) for centering | ### Animation Definition Each animation entry: | Field | Type | Description | |-------|------|-------------| | `row` | number | Row index in the spritesheet (0-based) | | `frames` | number | Number of frames in this animation | | `fps` | number | Playback speed (recommended: 6–12) | | `loop` | boolean | Whether the animation loops | The `idle` animation is **required** — it plays by default when the pet is loaded. ## Spritesheet Layout - Frames are arranged left-to-right, top-to-bottom in a grid. - Each row corresponds to one animation (matched by the `row` field in the animation definition). - All frames must have identical dimensions (`frameWidth × frameHeight`). - Transparent background (alpha channel) is required — the pet window has no background. - Recommended frame size: 240×240 px (renders well at 1× scale on desktop). - Format: WebP with transparency (lossless or near-lossless for crisp pixel art). ## Workflow ### Step 1: Understand the Character Ask the user: - What animal/creature/character? - Art style preference (pixel art, cartoon, flat vector, kawaii)? - Any specific colors or features? ### Step 2: Generate the Spritesheet Use the `imagegen` skill to generate the spritesheet image. Construct the prompt with these guidelines: - Request a **sprite sheet** with specific grid layout (e.g., "8 frames in a single horizontal row, each frame 240×240 pixels") - Specify **transparent background** (alpha channel) - Describe the **idle animation** motion: gentle breathing, blinking, tail wag, bobbing, etc. - Keep the character **centered** in each frame with consistent sizing - Style: match the user's preference; default to cute/kawaii if unspecified If the generated image is already WebP, use it directly. If it is PNG or another format, convert to WebP: ```bash # Convert to lossless WebP preserving transparency cwebp -lossless -q 100 spritesheet.png -o spritesheet.webp ``` If `cwebp` is not available, check for `sips` (macOS Ventura+ supports WebP export): ```bash sips -s format webp spritesheet.png --out spritesheet.webp ``` If neither tool is available, instruct the user to install one: ``` brew install webp # provides cwebp ``` Do NOT silently rename a PNG to .webp — the file must have valid WebP encoding (RIFF/WEBP header). If conversion genuinely cannot be performed, fail explicitly and tell the user what tool to install. If `imagegen` is unavailable (skill not enabled or image generation fails), fall back to generating pixel-art frames directly as SVG, then rasterize. Compute dimensions from the manifest: ```bash # Calculate actual spritesheet dimensions from manifest WIDTH=$((frameWidth * columns)) HEIGHT=$((frameHeight * rows)) # rows = max animation row index + 1 # Rasterize SVG to PNG, then convert to WebP rsvg-convert -w $WIDTH -h $HEIGHT spritesheet.svg -o spritesheet.png cwebp -lossless spritesheet.png -o spritesheet.webp ``` As a last resort, output the SVG file directly and instruct the user to convert it manually. ### Step 3: Write the Manifest Generate `manifest.json` with correct dimensions matching the actual spritesheet output. Verify: - `frameWidth × columns` = spritesheet total width - `frameHeight × (max animation row index + 1)` = spritesheet total height - `animations.idle` exists with valid `row`, `frames`, `fps`, `loop` - Each animation's `frames` ≤ `columns` (frames per row cannot exceed grid columns) ### Step 4: Deliver Write both files to the current working directory under a folder named with the pet ID. Tell the user to: 1. Copy the folder to their MiMo Desktop pets directory (Settings → Mate → click "Open Folder" to find it) 2. Click "Refresh" in Settings → Mate 3. Select their new pet from the list ## Constraints - The `idle` animation MUST exist — the system falls back to it. - Frame dimensions must be consistent across the entire spritesheet. - Keep total file size under 2MB for smooth loading. - Pet ID must be unique; if it conflicts with a preset (`koala`, `panda`), the preset wins. - Do NOT reference or depend on any external URLs — all assets must be local files.
GitHub에서 보기