@pixelvibing/cli 0.51.0 → 0.53.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pixelvibing/cli",
3
- "version": "0.51.0",
3
+ "version": "0.53.0",
4
4
  "description": "PixelVibing: pixel art game assets from the command line, and the Skills that teach coding assistants to make them.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://pixelvibing.com",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: pixelvibing
3
- description: Start here for this game's PixelVibing art — who is signed in, the style guide first, which Skill makes which kind of art, and listing, pulling, tagging, exporting and sealing what the platform made with pixel-vibing-cli or the PixelVibing MCP server. Use whenever the game needs art made, found, pulled into the project or taken into the engine.
3
+ description: Start here for this game's PixelVibing art — who is signed in, the style guide first, which Skill makes which kind of art, and listing, pulling, tagging, exporting and sealing what the platform made, following its jobs, and reading or changing the project, its art and its map, with pixel-vibing-cli or the PixelVibing MCP server. Use whenever the game needs art made, found, pulled into the project, fixed up or taken into the engine.
4
4
  ---
5
5
 
6
6
  # PixelVibing art for this game
@@ -13,17 +13,22 @@ there is ever sent back: art enters the project only by being generated.
13
13
  Two ways reach the platform, and they reach the same project:
14
14
  - **The CLI**, `pixel-vibing-cli`. Every command takes `--json`, which prints its answer as
15
15
  JSON on standard output. Progress and errors go to standard error, and a failure exits 1.
16
+ `pixel-vibing-cli --help` lists every command, and `pixel-vibing-cli <command> --help` every
17
+ option of one, with what each is for: read it before running a command you have not used,
18
+ and whenever a Skill does not name the option you need. Never guess an option.
16
19
  - **The MCP server** `pixelvibing`, which `setup` configured in this harness. Its tools take
17
20
  the platform project's id as `project`; `whoami` below names it.
18
21
 
19
22
  ## Before anything
20
23
 
21
24
  1. `pixel-vibing-cli whoami --json` says who is signed in and which platform project
22
- this folder generates for (the MCP server's `whoami` says the account alone).
23
- - Not signed in: ask the person to run `pixel-vibing-cli login`.
25
+ this folder generates for (the MCP server's `whoami` says the account alone). A token
26
+ reaches one platform project, the one this folder is linked to; the MCP server's
27
+ `list_projects` names it.
28
+ - No token for this folder's project: ask the person to run `pixel-vibing-cli login` here.
24
29
  - Never ask for a token, and never write one into a file or a command you show.
25
30
  - No platform project: `pixel-vibing-cli link <project>`, or `link --idea "<what the
26
- game is>"` to make one.
31
+ game is>"` to make one; both sign in through the browser and keep a token for it.
27
32
  2. Read `pixelvibing/style-guide.md`, or run `pixel-vibing-cli guide show` (MCP:
28
33
  `get_style_guide`), before deciding what to ask for. It says what the game is and how its
29
34
  art looks, and every generation is held to it. Write instructions in its terms. The
@@ -40,10 +45,9 @@ Load the Skill for the kind before you generate it:
40
45
  | reference art to draw the rest from, a look to hold to, or a level's area as pixel art | `pixelvibing-concept-art` |
41
46
  | skill or item icons that match | `pixelvibing-icons` |
42
47
  | a HUD, a menu, an inventory, a dialog box | `pixelvibing-ui` |
43
- | another of a result, a change to it, or setting it in motion | `pixelvibing-change` |
44
-
45
- No tool makes terrain sets, animated terrain, sounds, rotations or a creature's states: the
46
- person makes those in the editor, `pixel-vibing-cli editor`, and you pull them as any asset.
48
+ | another of a result, a change to it, setting it in motion, a pose, turning it, a creature's state | `pixelvibing-change` |
49
+ | ground that joins everywhere, or ground that moves | `pixelvibing-terrain` |
50
+ | a sound effect, a line of speech, a piece of music | `pixelvibing-sound` |
47
51
 
48
52
  ## What every generation shares
49
53
 
@@ -57,8 +61,9 @@ person makes those in the editor, `pixel-vibing-cli editor`, and you pull them a
57
61
  and the style guide before it draws. When you wrote the instruction in full yourself —
58
62
  read the guide, looked at the references, know what the person wants — pass
59
63
  `--no-enrich` (MCP: `enrich: false`) and it is drawn from your words as written. Leave it
60
- on for a person's few words. It is an object's, a creature's, concept art's, an icon set's
61
- or an animation's: a variant, an edit and a UI refuse it.
64
+ on for a person's few words. It is an object's, a creature's, concept art's, an icon set's,
65
+ an animation's, a pose's, a rotation's or an animated terrain set's: a variant, an edit, a
66
+ creature's state, a terrain set, a UI and a sound refuse it.
62
67
  - **Following a job.** The CLI follows the job and pulls the asset when it is done. Over
63
68
  MCP, `generate` answers the job's id: follow it with `get_job`, then
64
69
  `pixel-vibing-cli pull <job id>` lands it in the folder.
@@ -100,6 +105,72 @@ MCP: `list_assets`, `get_asset` (its images, each with an address that downloads
100
105
  - **Using the art.** Use the pictures where they are, or copy them into the game's own
101
106
  asset folders. A copy is not tracked.
102
107
 
108
+ ## Jobs
109
+
110
+ ```bash
111
+ pixel-vibing-cli jobs [--kind <kind>]... [--all] --json
112
+ pixel-vibing-cli job show <id> --json
113
+ pixel-vibing-cli job cancel <id>
114
+ pixel-vibing-cli job redo <id> --yes
115
+ pixel-vibing-cli job rate <id> kept|redone|rejected [--reason "<why>"]
116
+ pixel-vibing-cli undelivered [--kind <kind>]... --json
117
+ ```
118
+
119
+ MCP: `list_jobs`, `get_job`, `cancel_job`, `redo_job`, `rate_job`, `list_undelivered`.
120
+
121
+ - `jobs` lists the newest 50 of this project's jobs; `undelivered` the generations nothing in
122
+ the art came from yet, to pull or to drop.
123
+ - `job cancel` stops one that has not started, and what was held for it comes back.
124
+ - `job redo` asks a generation again from the same input with the style guide as it is now: it
125
+ uses the limit as a new one does, so say so first.
126
+ - `job rate` records what became of a result: `kept` when it is used, `redone` when it was
127
+ asked again, `rejected` when it is not wanted. Rate a result when the person says.
128
+
129
+ ## The project, its art and its map
130
+
131
+ ```bash
132
+ pixel-vibing-cli project show --json
133
+ pixel-vibing-cli project rename "<name>"
134
+ pixel-vibing-cli project settings [--view <camera>|none] [--outline <outline>] [--sprite-size <px>]
135
+ pixel-vibing-cli art show --json
136
+ pixel-vibing-cli map show --json
137
+ ```
138
+
139
+ MCP: `get_project`, `rename_project`, `change_project_settings`, `list_style_guide_versions`,
140
+ `get_art`, `list_art_records`, `list_art_drafts`, `get_map`, `list_map_versions`,
141
+ `read_map_sectors`.
142
+
143
+ - **Settings** change every generation after; a project's tile size is fixed when it is made.
144
+ - **The art and the map are the editor's.** Their changes — `art land`, `art change`,
145
+ `art remove`, `art restore`, `art describe`, `art record`, `art tileset`, `art draft`,
146
+ `art reference`, `art provenance`, `map write`, `map size` (MCP: `land_art`, `change_art`,
147
+ `remove_art`, `restore_art`, `describe_art`, `keep_record`, `claim_tileset`, `keep_draft`,
148
+ `add_reference`, `append_provenance`, `write_map_sectors`, `resize_map`) — are the editor's
149
+ own operations, given as JSON with `--body`, each against the revision it read. Prefer
150
+ `pull` to land an asset and the editor to arrange the art; reach for these only when the
151
+ person asks for that exact change. Nothing is lost: a removal is kept as a draft that
152
+ `art restore` brings back, and every sector keeps its earlier versions. Nothing here deletes.
153
+ - **A stale change** changes nothing and says the current revision: read again, then send it
154
+ against that.
155
+
156
+ ## Images
157
+
158
+ ```bash
159
+ pixel-vibing-cli image upload <png> --json
160
+ pixel-vibing-cli image get <id> [--out <file>]
161
+ ```
162
+
163
+ MCP: `upload_image` (a PNG as base64) and `get_image` (the image, and an address that downloads
164
+ it). An uploaded image is this project's, and its id is what `--source`, `--last`, the ground
165
+ pictures, `art land` and `art reference` take. A token reads only the images its project names:
166
+ its art's, its jobs', and the ones uploaded for it.
167
+
168
+ ## Conversations
169
+
170
+ `pixel-vibing-cli threads --json` and `thread show <id>` (MCP: `list_assistant_threads`,
171
+ `get_assistant_thread`) read the platform assistant's conversations about this project, to see
172
+ what was decided there.
173
+
103
174
  ## Taking the art into the game
104
175
 
105
176
  ```bash
@@ -1,40 +1,61 @@
1
1
  ---
2
2
  name: pixelvibing-change
3
- description: Change art this game already has on PixelVibing — another of an object (a variant), an object or a creature changed as you say (an edit), one set in motion (an animation) or drawn in a still pose (a pose), kept with its sprite — through the PixelVibing MCP server's generate tool, from a picture the platform keeps. Use when a result is close but not right, needs another like it, has to move, or needs a pose.
3
+ description: Change art this game already has on PixelVibing — another of an object (a variant), an object or a creature changed as you say (an edit), one set in motion (an animation) or drawn in a still pose (a pose), a creature turned to face every way (a rotation) or drawn in a state such as hurt or mid-walk, kept with its sprite — with pixel-vibing-cli or the PixelVibing MCP server, from a picture the platform keeps. Use when a result is close but not right, needs another like it, has to move, turn or take a pose.
4
4
  ---
5
5
 
6
6
  # Changing a result
7
7
 
8
8
  Load the `pixelvibing` Skill first: who is signed in, the style guide, the limit.
9
9
 
10
- The CLI has no command for these: they are the MCP server's `generate`, made from a
11
- picture the account keeps, by its image id.
10
+ Every change is made from a picture the account keeps, by its image id.
12
11
 
13
12
  ## Finding the picture
14
13
 
15
- `get_asset` with the asset's id or name (from `list_assets`, or `pixel-vibing-cli list
16
- --json`) answers its `images`; each one's `id` is a `source_image`. Never invent an image id:
17
- use only one a tool answered.
14
+ `pixel-vibing-cli list --json` and `pixel-vibing-cli job show <id> --json` name assets and the
15
+ images they made; MCP: `get_asset` with the asset's id or name answers its `images`, each one's
16
+ `id` the picture to change. A sprite's own picture is among `parts` in
17
+ `pixel-vibing-cli motion show <sprite> --json` (MCP: `get_sprite_motion`). Never invent an image
18
+ id: use only one a command or a tool answered.
18
19
 
19
20
  ## The kinds
20
21
 
22
+ `pixel-vibing-cli generate --help` lists every option `generate` takes, with what each is for: read it for any option this Skill does not name, rather than guessing one.
23
+
24
+ ```bash
25
+ pixel-vibing-cli generate variant --source <image id> --instruction "in autumn colours" --yes --json
26
+ pixel-vibing-cli generate edit --source <image id> --source-name knight --instruction "give it a red cape" --yes --json
27
+ pixel-vibing-cli generate animate --source <image id> --instruction "walks to the right" [--into outfit/fox --name walk-east] --yes --json
28
+ pixel-vibing-cli generate pose --source <image id> --instruction "mid-walk" [--into outfit/fox --name mid-walk --direction south] --yes --json
29
+ pixel-vibing-cli generate rotate --source <image id> --instruction "a knight in plate armour" [--into outfit/knight --views 4|8] --yes --json
30
+ pixel-vibing-cli generate state --source <image id> --state hurt [--directions 4|8] --instruction "a knight in plate armour" [--into outfit/knight] --yes --json
31
+ ```
32
+
33
+ MCP, with `generate`:
34
+
21
35
  ```json
22
36
  { "project": "<id>", "kind": "variant", "source_image": "<image id>", "instruction": "in autumn colours", "max_percent": 40 }
23
37
  { "project": "<id>", "kind": "edit", "source_image": "<image id>", "source_name": "knight", "instruction": "give it a red cape", "max_percent": 40 }
38
+ { "project": "<id>", "kind": "rotate", "source_image": "<image id>", "instruction": "a knight in plate armour", "max_percent": 40 }
24
39
  { "project": "<id>", "kind": "animate", "source_image": "<image id>", "instruction": "walks to the right", "enrich": false, "max_percent": 40 }
25
40
  { "project": "<id>", "kind": "pose", "source_image": "<image id>", "instruction": "mid-walk", "into": { "sprite": "outfit/fox", "name": "mid-walk", "direction": "south" }, "max_percent": 40 }
41
+ { "project": "<id>", "kind": "creature-state", "source_image": "<image id>", "state": "hurt", "instruction": "a knight in plate armour", "max_percent": 60 }
26
42
  ```
27
43
 
28
44
  - **`variant`** draws another of an object, keeping what makes it that object; the
29
- instruction says what differs.
45
+ instruction says what differs. Up to 3 `--reference` PNGs.
30
46
  - **`edit`** changes an object or a creature as the instruction says, and only that.
31
- `source_name` is what the picture is called, so the instruction can name it.
47
+ `--source-name` is what the picture is called, so the instruction can name it.
32
48
  - **`animate`** sets an object or a creature in motion. The instruction is the motion, from
33
49
  its first frame to its last: what moves, how far, and how it returns. It takes no
34
- reference; the platform chooses how many frames. Pass `enrich: false` when the motion is
35
- written in full; leave it on for a person's few words.
36
- - **`pose`** draws an object or a creature in a still pose. The instruction is the pose:
37
- a label such as `mid-walk`, or what changes in a few words. It takes no reference.
50
+ reference; the platform chooses how many frames. `--last <image id>` (MCP: `last_image`)
51
+ ends it on a frame of your own. Pass `--no-enrich` (`enrich: false`) when
52
+ the motion is written in full; leave it on for a person's few words.
53
+ - **`pose`** draws an object or a creature in a still pose. The instruction is the pose: a
54
+ label such as `mid-walk`, or what changes in a few words. It takes no reference.
55
+ - **`rotate`** turns a creature standing into the directions it faces. The instruction says
56
+ what it is, so each side is drawn as the same creature.
57
+ - **`state`** (MCP: `creature-state`) draws a creature in a state past standing — mid-walk,
58
+ mid-run, mid-attack, jump, crouch, hurt, death — in 4 directions, or 8.
38
59
 
39
60
  ## A sprite's motion
40
61
 
@@ -46,20 +67,20 @@ A sprite keeps its motion with it, in three groups, each piece at an address:
46
67
  | poses | a still picture under a label, in a direction or more | `<sprite> › pose:<label> › <direction>` |
47
68
  | animations | a named list of frames | `<sprite> › animation:<name>` |
48
69
 
49
- `get_sprite_motion` with the project and the sprite's name answers all three, each picture
50
- by its image id, and the sprite's own picture among `parts` — the `source_image` to animate or
51
- pose it from. Give `generate` an `into` and an animation or a pose is kept with the sprite as
52
- the job finishes: `{ "sprite": "object/windmill", "name": "sails-turning" }` for an animation,
53
- `{ "sprite": "outfit/fox", "name": "mid-walk", "direction": "east" }` for a pose. The name is
54
- kebab-case; a creature's animation is one the game plays, such as `walk-south`; a pose faces
55
- south unless a direction is given. Drawn again at the same address, the new one takes the
56
- address and the old one is still kept.
57
-
58
- `get_job` follows the job; one kept with its sprite says so in its data's `kept`. Without
59
- `into`, `pixel-vibing-cli pull <job id>` lands it: an animation lands as `<name>/<n>`, one
60
- picture a frame, and an export packs its frames as an animation.
70
+ `pixel-vibing-cli motion show <sprite> --json` (MCP: `get_sprite_motion`) answers all three,
71
+ each picture by its image id. Give an animation or a pose `--into <sprite> --name <name>`
72
+ (MCP: `into`) and it is kept with the sprite as the job finishes; the name is kebab-case, a
73
+ creature's animation one the game plays, such as `walk-south`; a pose faces south unless a
74
+ direction is given. A rotation kept with its sprite becomes its views (`--views 4|8`), and a
75
+ creature's state its poses under the state's name. An animation kept with its sprite takes how
76
+ long each frame is shown (`--frame-ms`, MCP `into.frame_ms`) and how the game plays it
77
+ (`--play loop|every|change`, MCP `into.play`). Drawn again at the same address, the new one
78
+ takes the address and the old one is still kept. One that finished without being kept is kept later with
79
+ `pixel-vibing-cli motion keep <job id>` (MCP: `keep_motion`).
61
80
 
62
- ## Not here
81
+ ## After
63
82
 
64
- Turning a creature into eight directions, a creature's states, terrain sets and animated
65
- terrain, and sounds are made in the editor, `pixel-vibing-cli editor`.
83
+ The CLI follows the job. A variant, an edit, a rotation, a state, or an animation or a pose not
84
+ kept with its sprite is pulled into the folder: an animation lands as `<name>/<n>`, one picture
85
+ a frame, and an export packs its frames as an animation. Over MCP, `get_job` follows the job and
86
+ `pixel-vibing-cli pull <job id>` lands it.
@@ -13,8 +13,10 @@ reference to what follows.
13
13
 
14
14
  ## With the CLI
15
15
 
16
+ `pixel-vibing-cli generate --help` lists every option `generate` takes, with what each is for: read it for any option this Skill does not name, rather than guessing one.
17
+
16
18
  ```bash
17
- pixel-vibing-cli generate concept-art --instruction "<the picture>" [--size <w>x<h>] [--transparent] [--tag <tag>]... [--reference <png>]... [--no-enrich] --yes --json
19
+ pixel-vibing-cli generate concept-art --instruction "<the picture>" [--size <w>x<h>] [--transparent] [--mask <png>] [--tag <tag>]... [--reference <png>]... [--no-enrich] --yes --json
18
20
  pixel-vibing-cli generate concept-art --instruction "<the area>" --pixel-art --tiles <cols>x<rows> [--no-enrich] --yes --json
19
21
  ```
20
22
 
@@ -23,7 +25,7 @@ pixel-vibing-cli generate concept-art --instruction "<the area>" --pixel-art --t
23
25
  ```json
24
26
  { "project": "<id>", "kind": "concept-art", "instruction": "<the picture>",
25
27
  "size": { "width": 1536, "height": 1024 }, "background": "transparent", "tags": ["anchor"],
26
- "reference_images": ["<image id>"], "enrich": false, "max_percent": 40 }
28
+ "reference_images": ["<image id>"], "mask_image": "<image id>", "enrich": false, "max_percent": 40 }
27
29
  { "project": "<id>", "kind": "concept-art", "instruction": "<the area>", "pixel_art": true,
28
30
  "tiles": { "cols": 6, "rows": 4 }, "max_percent": 40 }
29
31
  ```
@@ -43,6 +45,15 @@ which every other generation takes as `reference_images`.
43
45
  `level-design`, `ui`, `character`, `environment`, `prop`, or one of the project's own
44
46
  (`list_tags`). `pixel-vibing-cli tag` (MCP `tag_asset`) changes them later.
45
47
  - **References.** Up to 8 to draw from, such as the anchor itself.
48
+ - **A mask.** Keeps the drawing to a shape you choose: an island's coastline, a
49
+ character's silhouette, a frame for a menu, the open middle of a scene. It is an opaque
50
+ PNG of black and white only, white where the art is drawn and black where the drawing is
51
+ left empty, in the drawing's shape: the `--size` (`1536x1024` unless given), or for pixel
52
+ art the `--tiles` in proportion, such as 3:2 for `6x4`. Any size in that shape is scaled
53
+ to fit, up to 1536 px a side, so a small one drawn by hand or by a script is enough. A soft edge is fine; grey
54
+ shading, colour or transparency is refused with the reason before anything is spent.
55
+ Pass it as `--mask <png>` (MCP: keep it with `upload_image`, then give its id as
56
+ `mask_image`). With `--transparent`, the black part comes back transparent as well.
46
57
  - **A level design.** `--pixel-art --tiles <c>x<r>` (MCP `pixel_art`, `tiles`) draws an area
47
58
  of the map as pixel art some tiles across, `6x4` unless given, tagged `level-design`; the
48
59
  editor takes it apart into objects and terrain.
@@ -9,6 +9,8 @@ Load the `pixelvibing` Skill first: who is signed in, the style guide, the limit
9
9
 
10
10
  ## With the CLI
11
11
 
12
+ `pixel-vibing-cli generate --help` lists every option `generate` takes, with what each is for: read it for any option this Skill does not name, rather than guessing one.
13
+
12
14
  ```bash
13
15
  pixel-vibing-cli generate creature --instruction "<who>" [--reference <png>]... [--no-enrich] --yes --json
14
16
  ```
@@ -39,6 +41,5 @@ pixel-vibing-cli generate creature --instruction "<who>" [--reference <png>]...
39
41
  ## After
40
42
 
41
43
  - It lands as `pixelvibing/out/<name>.png`.
42
- - A change to it, or a walk, an attack, an idle: the `pixelvibing-change` Skill.
43
- - Its eight directions and its states (hurt, dead, attacking) are made in the editor,
44
- `pixel-vibing-cli editor`.
44
+ - A change to it, a walk, an attack, an idle, its directions or its states (hurt, dead,
45
+ attacking): the `pixelvibing-change` Skill.
@@ -9,6 +9,8 @@ Load the `pixelvibing` Skill first: who is signed in, the style guide, the limit
9
9
 
10
10
  ## With the CLI
11
11
 
12
+ `pixel-vibing-cli generate --help` lists every option `generate` takes, with what each is for: read it for any option this Skill does not name, rather than guessing one.
13
+
12
14
  ```bash
13
15
  pixel-vibing-cli generate icons --names "<name>,<name>,..." --purpose <skill|item> [--size <16|32|64>] [--instruction "<theme>"] [--no-enrich] --yes --json
14
16
  ```
@@ -9,6 +9,8 @@ Load the `pixelvibing` Skill first: who is signed in, the style guide, the limit
9
9
 
10
10
  ## With the CLI
11
11
 
12
+ `pixel-vibing-cli generate --help` lists every option `generate` takes, with what each is for: read it for any option this Skill does not name, rather than guessing one.
13
+
12
14
  ```bash
13
15
  pixel-vibing-cli generate object --instruction "<what>" --size <cols>x<rows> [--reference <png>]... [--no-enrich] --yes --json
14
16
  ```
@@ -0,0 +1,47 @@
1
+ ---
2
+ name: pixelvibing-sound
3
+ description: Generate sounds for this game on PixelVibing — a sound effect such as a coin picked up or a door creaking, a line of speech in a voice, or a piece of music — with pixel-vibing-cli or the PixelVibing MCP server, written as MP3 files. Use when the game needs audio.
4
+ ---
5
+
6
+ # Sound
7
+
8
+ Load the `pixelvibing` Skill first: who is signed in, the limit.
9
+
10
+ ## With the CLI
11
+
12
+ `pixel-vibing-cli generate --help` lists every option `generate` takes, with what each is for: read it for any option this Skill does not name, rather than guessing one.
13
+
14
+ ```bash
15
+ pixel-vibing-cli generate sfx --instruction "<what it sounds like>" [--seconds <s>] [--loop] [--out <file>] --yes --json
16
+ pixel-vibing-cli generate speech --text "<what is said>" --voice <voice> [--out <file>] --yes --json
17
+ pixel-vibing-cli generate music --instruction "<the piece>" [--out <file>] --yes --json
18
+ ```
19
+
20
+ Each writes its sound as an MP3 into `pixelvibing/sounds/`, or to the file `--out` names, once
21
+ its job is done. `pixel-vibing-cli generate --help` lists the voices.
22
+
23
+ ## With the MCP server
24
+
25
+ ```json
26
+ { "project": "<id>", "kind": "sfx", "description": "a coin picked up, bright and short", "seconds": 1, "max_percent": 30 }
27
+ { "project": "<id>", "kind": "speech", "text": "Welcome aboard, traveller.", "voice": "<voice>", "max_percent": 30 }
28
+ { "project": "<id>", "kind": "music", "description": "a calm harbour theme on strings", "max_percent": 30 }
29
+ ```
30
+
31
+ with the tool `generate_sound`. `get_job` follows the job and, once done, names its `sounds`;
32
+ `get_sound` answers one as MP3 audio.
33
+
34
+ ## Writing it
35
+
36
+ - **A sound effect.** What makes the sound and how it feels: "a wooden door creaking open,
37
+ slow", "a coin picked up, bright and short". `--seconds` sets its length; `--loop` makes it
38
+ loop seamlessly, for rain, wind or an engine.
39
+ - **Speech.** The words exactly as they are said, in a voice. Keep a line short; one line a
40
+ generation.
41
+ - **Music.** The mood, the instruments and the tempo: "a calm harbour theme on strings and a
42
+ soft accordion".
43
+ - **Original sound.** Never another game's music or theme, and never a real person's voice:
44
+ when the person names one, make original sound in its spirit and say so.
45
+ - **Where it goes.** The game loads the MP3 from where it was written; copy it into the game's
46
+ own audio folder when that is where the engine looks. Sounds are not part of the map, the
47
+ export or the sealed container.
@@ -11,6 +11,9 @@ and shading, its scale in pixels, and what never belongs in it. Every generation
11
11
  platform makes for this project is held to it, so a guide that no longer describes the
12
12
  game makes art that no longer fits it.
13
13
 
14
+ `pixel-vibing-cli guide <show|pull|push|revise|versions> --help` lists every option of each: read it for any option
15
+ this Skill does not name.
16
+
14
17
  ## When to change it
15
18
 
16
19
  - The game gains a place, a biome, a faction, an era, or a kind of thing it did not have.
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: pixelvibing-terrain
3
+ description: Generate a terrain set for this game on PixelVibing — sixteen tiles where one ground meets another, such as grass over water — and set a terrain set in motion, such as water rippling or lava flowing, with pixel-vibing-cli or the PixelVibing MCP server. Use when the game's map needs ground that joins everywhere, or ground that moves.
4
+ ---
5
+
6
+ # Terrain
7
+
8
+ Load the `pixelvibing` Skill first: who is signed in, the style guide, the limit.
9
+
10
+ A terrain set is sixteen tiles where an upper ground meets a lower one, every way their
11
+ corners can meet, so the editor's brush paints the two together and every edge joins.
12
+
13
+ ## A terrain set
14
+
15
+ `pixel-vibing-cli generate --help` lists every option `generate` takes, with what each is for: read it for any option this Skill does not name, rather than guessing one.
16
+
17
+ ```bash
18
+ pixel-vibing-cli generate terrain --upper grass --lower water --instruction "<how they look and meet>" \
19
+ [--upper-image <png> --lower-image <png>] [--role style|source|variant] [--cells 32|64] \
20
+ [--elevation 0-3] [--spread <0.1-0.7>] [--raggedness <0-1>] [--seed <n>] --yes --json
21
+ ```
22
+
23
+ MCP:
24
+
25
+ ```json
26
+ { "project": "<id>", "upper": "grass", "lower": "water", "instruction": "a soft sandy shore", "max_percent": 40 }
27
+ ```
28
+
29
+ with the tool `generate_terrain`; `upper_image` and `lower_image` are images of the account's,
30
+ both or neither.
31
+
32
+ - **The grounds.** Name each in a word or two, as the style guide would. The upper ground is the
33
+ one that sits on top where they meet: grass over dirt, snow over rock, dirt over water.
34
+ - **The instruction.** How the two look and how the edge between them looks: a sandy shore, a
35
+ sharp cliff, scattered pebbles. Use the style guide's words; never restate its camera.
36
+ - **Pictures of the grounds.** Give both when the game already has the look, such as tiles
37
+ from a concept art; the set is drawn from them.
38
+ - **Landing it.** A terrain set is landed from the editor's Library, which cuts it into the
39
+ cells its brush paints: tell the person to open it there, `pixel-vibing-cli editor`. `pull`
40
+ lands nothing for a terrain set.
41
+
42
+ ## Setting one in motion
43
+
44
+ One ground moves in a seamless loop while the other stays still: water rippling against a
45
+ shore, lava churning beside rock.
46
+
47
+ ```bash
48
+ pixel-vibing-cli generate terrain-animation --terrain <asset id or name> [--instruction "<how it moves>"] --yes --json
49
+ ```
50
+
51
+ MCP: `animate_terrain` with the terrain set's asset id or name as `terrain`, and `motion`.
52
+
53
+ - **Which set.** One the project keeps, from `generate terrain`: `pixel-vibing-cli list terrain
54
+ --json` (MCP: `list_assets` with kind `terrain`) names them.
55
+ - **The motion.** A few words, or none: the platform chooses which ground moves and how, from
56
+ the grounds' names. Say it when the person wants a particular motion, such as slow waves.
57
+ - **After.** The editor writes the frames back onto the set when the person opens it.
58
+
59
+ ## Following it
60
+
61
+ The CLI follows the job and says where it is done. Over MCP, `get_job` follows it.
@@ -13,6 +13,8 @@ and `references/ui.example.json` is a whole HUD laid out.
13
13
 
14
14
  ## With the CLI
15
15
 
16
+ `pixel-vibing-cli generate --help` lists every option `generate` takes, with what each is for: read it for any option this Skill does not name, rather than guessing one.
17
+
16
18
  ```bash
17
19
  pixel-vibing-cli generate ui --sketch <file.json> --instruction "<the set, in a line>" [--reference <png>]... --yes --json
18
20
  ```