| name | copet-sound |
| description | Use when generating CoPet global 11-clip MP3 sound packs from a user image or text description for $HOME/.copet/sounds. |
CoPet Sound
Overview
Create one self-contained CoPet global sound pack under $HOME/.copet/sounds/<sound-pack-id>/. This Skill never creates sprite atlases, omni directional body atlases, pet packages, or pet.json.
Every shipped MP3 must come from a real sound-generation backend, text-to-speech backend, sound-effect generation backend, field recording library, curated sample library, or another authored sound source selected to match the inferred character. Procedural substitutes are failed runs even when structural validation passes.
Package Layout
$HOME/.copet/
└── sounds/
└── <sound-pack-id>/
├── sound.json
├── click.mp3
├── surprised.mp3
├── purr.mp3
├── sigh.mp3
├── wheee.mp3
├── hmm.mp3
├── tap.mp3
├── peek.mp3
├── wait.mp3
├── yay.mp3
└── oof.mp3
Pack ids are kebab-case slugs derived from displayName. If a slug collides under $HOME/.copet/sounds/, append -2, -3, and continue until the destination is unique.
Inputs
| Input kind | Format | Notes |
|---|
image | PNG or JPEG, 8 MB or smaller | A reference picture. It must be decodable and not transparent-only. |
text | UTF-8 string, 2,000 characters or fewer | A description of the desired sound character. It must not be empty after trimming whitespace. |
Exactly one primary input kind is used. An image with a caption is allowed; the image is primary and the caption is supporting context.
Reject invalid input before staging or generation.
Response Language
Determine the response language before showing user-facing text:
- Text input: use the predominant language of the user's text.
- Image plus caption: use the predominant language of the caption.
- Image-only input: use the current conversation language, or the user's latest message language if the conversation language is unclear.
- Mixed-language input: use the language that carries the request intent.
Render validation rejections, clarifying questions, failure reports, and success summaries in that language. Do not localize machine-readable values: directory names, filenames, JSON keys, enum values, id, and fixed manifest structure stay exactly as specified. displayName remains a short English name because it is a schema field.
Workflow
- Validate the input.
- Infer animal class, object class, material, size, energy, personality, and voice character from the raw user input.
- Derive
displayName and id.
- Create one empty staging directory in the caller's default writable temporary directory:
STAGING_DIR=$(mktemp -d "${TMPDIR:-/tmp}/copet-sounds-<sound-pack-id>.XXXXXX")
Do not stage under $HOME/.copet/tmp/; that can trigger config-directory authorization before validation. The live $HOME/.copet/sounds/<sound-pack-id>/ directory is read-only until validation passes.
- Generate exactly 11 authored MP3 clips:
| Manifest key | File |
|---|
interactionSounds.click | click.mp3 |
interactionSounds.doubleClick | surprised.mp3 |
interactionSounds.petted | purr.mp3 |
interactionSounds.pettedSlow | sigh.mp3 |
interactionSounds.dragLand | wheee.mp3 |
agentSounds.thinking | hmm.mp3 |
agentSounds.editing | tap.mp3 |
agentSounds.inspecting | peek.mp3 |
agentSounds.awaitingApproval | wait.mp3 |
agentSounds.celebrating | yay.mp3 |
agentSounds.failed | oof.mp3 |
- Compose
sound.json in the staging root using references/sound-pack-schema.md.
- Validate the full staging directory before promotion.
- On success, promote staging to:
$HOME/.copet/sounds/<sound-pack-id>/
On validation failure, leave staging in place, report the specific failed checklist item in the response language, and do not touch the live directory.
Generation Discipline
Sound generation must not fall back to synthesized tones, oscillator output, MIDI rendering, silence, or pitch-shifted duplicates. The output must be authored sound from a real backend or curated source.
Image input is only a reference for palette, mood, motion, texture, material, subject class, and personality cues. It is never passed directly to a sound backend as a waveform source.
If the required backend is unavailable or the output cannot satisfy the discipline after three attempts, abort the run, leave staging in place, and report the specific missing backend or validation failure in the response language.
References
references/sound-pack-generation.md - detailed sound pack workflow.
references/sound-pack-schema.md - sound.json schema and validation.
references/sound-asset-format.md - MP3 format guidance.
references/gesture-sound-map.md - advisory interaction sound roles.
references/anti-patterns.md - hard failure rules.