dsh-plugin-infj-pet 0.0.0-stage → 1.0.1

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.
@@ -0,0 +1,42 @@
1
+ # Asset license
2
+
3
+ ## Artwork
4
+
5
+ The character is **Sage**, a pixel-art INFJ sage generated with a built-in image
6
+ generator from the INFJ Advocate reference card supplied by the project owner.
7
+ The sources, prompts and quality reports are kept in `Sage/`; `Sage/README.md`
8
+ records the pet's stable id and provenance.
9
+
10
+ `assets/sage.png` is the sprite sheet, copied unmodified from
11
+ `Sage/final/spritesheet-extended.png` (SHA-256
12
+ `58deaf03132eee98634d101661682c1faf45906186bea30e7aa0f951f32631d1`, as recorded
13
+ in `Sage/pet-record.json`). Everything else in `assets/` is derived from it:
14
+
15
+ | File | Derived how |
16
+ |---|---|
17
+ | `sage-index.json` | frame rectangles and gaze cells measured from the sheet |
18
+ | `sage.png.b64` | the same bytes, base64, for embedding in the bundle |
19
+ | `icon.png` | head crop of the resting frame, 3× nearest-neighbour |
20
+ | `preview.png` | one frame per animation, on a flat backdrop |
21
+
22
+ **The artwork is not covered by the MIT code license.** It is released under
23
+ [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/): share and
24
+ adapt it for non-commercial use with attribution, under the same license.
25
+ Commercial use needs the copyright holder's permission.
26
+
27
+ Attribution form:
28
+
29
+ > Sage artwork — dsh-plugin-infj-pet — CC BY-NC-SA 4.0
30
+
31
+ ## Fonts
32
+
33
+ No font is bundled. Every text surface uses the operating system's UI font stack
34
+ (`system-ui` and the platform CJK faces), so nothing is downloaded at runtime and
35
+ no font license travels with this package.
36
+
37
+ ## Personality-type notice
38
+
39
+ INFJ and the Advocate / Counselor labels are popular-psychology vocabulary, not a
40
+ clinical instrument. This plugin is a decorative companion inspired by the
41
+ described traits; it does not assess, score, or diagnose anyone, and it is not
42
+ affiliated with or endorsed by any personality-assessment publisher.
package/CHANGELOG.md ADDED
@@ -0,0 +1,70 @@
1
+ # Changelog
2
+
3
+ All notable changes to this plugin are documented here. This project follows
4
+ [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
5
+
6
+ ## Unreleased
7
+
8
+ **Artwork replaced**
9
+
10
+ - The character is now **Sage**, the pixel-art INFJ pet produced with the
11
+ built-in image generator (`Sage/`). The hand-drawn SVG sage is gone.
12
+ - Nine animations and sixteen head poses come from one 1536×2288 sprite sheet,
13
+ embedded in the bundle so the plugin makes no network request at all.
14
+ - The sheet's SHA-256 is checked against the value recorded in its validation
15
+ report, so the plugin cannot ship artwork that differs from what was validated.
16
+
17
+ **New behaviour**
18
+
19
+ - **Keeps pace** — after twenty seconds of uninterrupted work the sage switches
20
+ from thinking to a walking loop, then celebrates or slumps when the run ends.
21
+ - **Idle glances** — while resting, it looks around using the drawn head poses.
22
+ - Display sizes are now exact integer multiples of the sprite pixels (1×, 2×, 3×),
23
+ which is what keeps pixel art crisp; the old fractional sizes are gone.
24
+
25
+ **Build**
26
+
27
+ - `lib/client.js` is generated from readable regions in `lib/src/`, so gaps
28
+ between source and bundle show up in review rather than in a diff of a 2 MB
29
+ file.
30
+ - `tools/png.mjs` decodes the sheet without any dependency, and the broken
31
+ `--sprite` build path was removed.
32
+ - `npm run check` now verifies the sheet hash, the frame boundaries, the gaze
33
+ coverage, the generated icon, and that the bundle matches its sources.
34
+ - `npm run build` regenerates the index, icon, contact sheet, bundle and offline
35
+ preview in one pass.
36
+
37
+ ## 1.0.0
38
+
39
+ First release of the plugin.
40
+
41
+ **The companion**
42
+
43
+ - Six semantic states — 静观 resting, 洞察 working, 共情 waiting, 笃定
44
+ celebrating, 充电 sleeping, 受挫 error — each mapped to one facet of the INFJ
45
+ description on the reference card.
46
+ - Per-pose animation, disabled by `prefers-reduced-motion` or by the motion
47
+ setting.
48
+
49
+ **Interaction**
50
+
51
+ - Click to hear a line in character; drag to reposition with edge snapping and a
52
+ remembered position.
53
+ - Right-click settings: session scope, size, nap delay, palette, motion,
54
+ auto-tips, reset position, tuck away, and a trait explainer.
55
+ - Bilingual (English / 简体中文), following the DSH language until you choose one.
56
+ - Tuck away collapses the sage to a corner restore button.
57
+
58
+ **Behaviour guarantees**
59
+
60
+ - Celebration requires an observed rising edge of work, so an idle Host, a
61
+ reconnect, or a vanished session never produces a false win.
62
+ - Subagent sessions are counted separately and never inflate your own workload.
63
+ - A missing slot registry or store hook degrades to a static companion instead of
64
+ throwing into the session.
65
+
66
+ **Packaging**
67
+
68
+ - Zero runtime dependencies; the client bundle is committed, so a Git install
69
+ needs no build step.
70
+ - Structural checks and a behavioural test suite ship with the package.
package/LICENSE ADDED
@@ -0,0 +1,28 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 CN-Mg
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
23
+ ---
24
+
25
+ The MIT license above covers the source code in this repository.
26
+
27
+ The artwork in `assets/` and the character geometry in `lib/art.js` are licensed
28
+ separately under CC BY-NC-SA 4.0. See ASSETS-LICENSE.md.
package/PROVENANCE.md ADDED
@@ -0,0 +1,44 @@
1
+ # Sage
2
+
3
+ Created and verified in Pets. Stable ID: pet_6ac7958fa51c8191bc6827eb0881645b.
4
+
5
+ User request: create an animated pet based on the attached INFJ Advocate cartoon reference. The name Sage was inferred. The original angular green-robed elder identity, swept white hair, long white beard and dot eyes were preserved. Thin wand omitted for readable animation.
6
+
7
+ Final transparent v2 sheet: `final/spritesheet-extended.png`, 1536x2288, 73 populated frames. Nine animation states and sixteen gaze directions. The pet has been added to the collection and can be selected in Pets.
8
+
9
+ Artwork generated with built-in imagegen. Production prompts and revisions are in `prompts/`, inputs and identity references in `references/`, source strips in `decoded/`, and checks plus motion previews in `qa/`. Artifacts are stored locally because ChatGPT Library tools were unavailable. No temporary upload sessions or expiring download links are persisted as pet identity.
10
+
11
+ The bundled structural and quality gates, Pets preflight, three isolated cardinal reviews and independent final visual review pass. Subtle intermediate tilts and minor wrap head-pose differences remain documented warnings; repaired torso widths and ground registration are steady. Jump peak lift is 44px and landing differs from idle baseline by 1px.
12
+
13
+ Final byte SHA256: `58deaf03132eee98634d101661682c1faf45906186bea30e7aa0f951f32631d1`.
14
+
15
+ - [x] Getting Sage ready.
16
+ - [x] Imagining Sage's main look.
17
+ - [x] Picturing Sage's poses.
18
+ - [x] Hatching Sage.
19
+
20
+ ---
21
+
22
+ ## What is published, and what is not
23
+
24
+ The full generation workspace that produced this sheet is about 130 MB: source
25
+ strips, per-frame decodes, QA renders, motion previews, and a vendored ffmpeg
26
+ used by the preview tooling. None of that is needed to build or run the plugin,
27
+ so it is not published here.
28
+
29
+ Checked in instead, under ssets/provenance/:
30
+
31
+ | File | Why it is kept |
32
+ |---|---|
33
+ | `sage-validation.json` | the sheet's structural report: grid, per-cell pixel counts, SHA-256 |
34
+ | `sage-pet-record.json` | the pet's stable id, description and declared sheet hash |
35
+ | `sage-README.md` | the generation summary as originally written |
36
+ | `sage-base-prompt.md` | the production prompt for the character's main look |
37
+
38
+ `tools/build-sage-index.mjs` reads that report and refuses to build when
39
+ `assets/sage.png` does not hash to the value recorded in it, so the published
40
+ artwork is provably the artwork that was validated.
41
+
42
+ The workspace itself stays on the machine that generated it. If you need to
43
+ reproduce it, the prompts under the original `Sage/prompts/` are the starting
44
+ point; they are not part of this repository.
package/README.md CHANGED
@@ -1,3 +1,256 @@
1
- # Temporary Holding Version
1
+ # INFJ Sage · 贤者桌宠
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ **A pixel-art INFJ companion that lives inside your DeepSeek Harness window.**
4
+
5
+ 一只住在 DSH 窗口里的 INFJ 贤者:陪你专注、等你决定,也陪你安静地打个盹。
6
+
7
+ <p align="center">
8
+ <img src="assets/icon.png" width="120" alt="INFJ Sage icon">
9
+ </p>
10
+
11
+ <p align="center">
12
+ <img src="assets/preview.png" width="820" alt="Every animation: idle, run-right, run-left, wave, jump, failed, waiting, working, pondering">
13
+ </p>
14
+
15
+ The sage is not a progress bar. It reads what your agents are already doing —
16
+ working, waiting on you, resting — and answers with a small, quiet reaction in
17
+ character. Six semantic states, drawn from a nine-animation sprite sheet where
18
+ each pose expresses a different facet of the INFJ description on the reference
19
+ card.
20
+
21
+ ---
22
+
23
+ ## What it does
24
+
25
+ | Pose | When it appears | Trait it expresses |
26
+ |---|---|---|
27
+ | 静观 Observing | Nothing is running | 独处即充电 — recharged alone |
28
+ | 洞察 Insight | At least one session is working | 先看模式,再看任务 — patterns before tasks |
29
+ | 陪伴 Keeping pace | Work has run for 20s without a break | 理想主义的续航 — idealist stamina |
30
+ | 共情 Empathy | A session is waiting on your answer | 先接住情绪 — feelings first |
31
+ | 笃定 Resolve | A turn the sage watched just finished | 低调地笃定 — quiet conviction |
32
+ | 充电 Recharging | Idle past the nap delay | 独处即充电 — the quiet half |
33
+ | 受挫 Setback | A turn ended in an error | 过载时向内自责 — overload turns inward |
34
+
35
+ Around that core:
36
+
37
+ - **Click** the sage and it says something in character.
38
+ - **Drag** it anywhere; it snaps to the edge and remembers where you left it.
39
+ - **Right-click** for settings: session scope, size, nap delay, palette, motion,
40
+ idle glances, auto-tips, position reset, tuck away, and a trait panel.
41
+ - **Idle glances** — while resting, the sage looks around using the sheet's
42
+ sixteen drawn head poses.
43
+ - **Keeps pace** — after twenty seconds of uninterrupted work it starts walking,
44
+ then celebrates or slumps when the run ends.
45
+ - Follows DSH's language, light/dark theme, and reduce-motion preference.
46
+ - No build step to install, no runtime dependencies, no network calls, no model
47
+ calls.
48
+
49
+ This is an **in-window** companion, not an operating-system desktop overlay.
50
+
51
+ ---
52
+
53
+ ## Install
54
+
55
+ ### 1. From npm
56
+
57
+ ```
58
+ dsh-plugin-infj-pet
59
+ ```
60
+
61
+ Enter that name in DSH's plugin installation page (sidebar → **Plugins**). To
62
+ pin this release, use `dsh-plugin-infj-pet@1.0.0`.
63
+
64
+ ### 2. From GitHub
65
+
66
+ ```
67
+ github:CN-Mg/dsh_infj_pet
68
+ ```
69
+
70
+ Or with a pinned tag:
71
+
72
+ ```
73
+ github:CN-Mg/dsh_infj_pet#v1.0.0
74
+ ```
75
+
76
+ The committed source already contains the built client bundle, so a Git install
77
+ needs no build step.
78
+
79
+ ### 3. From a local folder
80
+
81
+ Point the installer at the absolute path of this directory, or pack it first:
82
+
83
+ ```sh
84
+ npm pack --ignore-scripts --pack-destination artifacts
85
+ ```
86
+
87
+ After enabling the plugin, **fully quit DSH and reopen it**. Closing the window
88
+ may not quit the application, and the browser bundle is only picked up on boot.
89
+
90
+ To remove it: disable the row on the Plugins page, then uninstall the package.
91
+
92
+ ---
93
+
94
+ ## Using it
95
+
96
+ - **Click** — a line of dialogue, different each time.
97
+ - **Drag** — reposition; release near a side and it snaps to that edge.
98
+ - **Right-click** — settings and pose preview.
99
+ - **Keyboard** — `Tab` to the sage, `Enter`/`Space` to poke, `Esc` to close.
100
+ - **Session scope** — *All sessions* counts ordinary sessions on the current
101
+ Host; *This session* follows only the one you are looking at. Child (subagent)
102
+ sessions are never counted as your sessions, so a delegated burst does not look
103
+ like your own work.
104
+ - **Nap delay** — how long the sage stays quiet before it dozes off.
105
+ - **Size** — 1×, 2×, or 3× the sprite's own pixels. Every size is a whole-number
106
+ multiple, because pixel art resampled at a fractional scale turns to mush.
107
+
108
+ ### Completion is never guessed
109
+
110
+ The celebratory leap fires only on a **falling edge of work the sage actually
111
+ watched running**. A page that loads into an already-idle Host, a dropped
112
+ connection, or a session that simply disappears never produces a celebration.
113
+ Cancelled and failed turns are not successes.
114
+
115
+ ---
116
+
117
+ ## Privacy and runtime boundaries
118
+
119
+ - Reads session **identity and status** only — never message content, tool
120
+ arguments, or transcripts.
121
+ - Makes **no model calls**, opens **no ports**, sends **no telemetry**, and
122
+ answers **no approvals** on your behalf.
123
+ - Uses DSH's existing authenticated connection.
124
+ - The sprite sheet is embedded in the bundle, so the plugin issues **no network
125
+ request at all**.
126
+ - Preferences live in `localStorage` under `dsh-plugin-infj-pet:v1`.
127
+ - Writes only to its own DOM nodes and to one `<style>` element it owns.
128
+ - Does not modify DSH itself, and replaces no official component.
129
+
130
+ ---
131
+
132
+ ## Compatibility
133
+
134
+ Developed against **DSH Desktop 0.2.x** using the documented client plugin
135
+ contract:
136
+
137
+ - client bundle registered through `window.__ModuleLoader__.load({ id, factory })`
138
+ - one `shell.overlay` slot occupant (`id: infj-pet`, `order: 92`)
139
+ - injected shares: `slots`, `sessions`, `connection`, `locale`
140
+ - only `react` and `react-dom/client` are required from the platform module table
141
+
142
+ The Host half declares no required service and registers one optional listener,
143
+ so a Host-side change degrades the companion rather than failing the plugin.
144
+
145
+ DSH is evolving quickly. If a future release changes the slot or store contract,
146
+ the sage is written to fail quietly: it falls back to a non-reactive pose rather
147
+ than throwing into your session.
148
+
149
+ ---
150
+
151
+ ## Development
152
+
153
+ Requires Node.js 20 or newer. There are no dependencies to install.
154
+
155
+ ```sh
156
+ npm run verify # structural checks plus 43 tests
157
+ npm test # the test suite alone
158
+ npm run check # manifest, sheet, icon, bundle-drift and locale checks
159
+ npm run build # regenerate the index, icons, bundle and offline preview
160
+ ```
161
+
162
+ ### How the artwork is wired
163
+
164
+ The character is one PNG sprite sheet: `assets/sage.png`, 1536×2288, an 8×11
165
+ grid of 192×208 cells. Rows 0–8 are animations, rows 9–10 are sixteen head poses
166
+ for gaze. Nothing about that layout is written down twice:
167
+
168
+ ```
169
+ assets/provenance/sage-validation.json the sheet's own validation report
170
+ │
171
+ ├─ tools/build-sage-index.mjs ─→ assets/sage-index.json frames + gaze cells
172
+ │ assets/sage.png.b64 payload for the bundle
173
+ ├─ tools/build-icons.mjs ─→ assets/icon.png plugin-manager icon
174
+ │ assets/preview.png the contact sheet above
175
+ └─ tools/build-bundle.mjs ─→ lib/client.js the shipped bundle
176
+ ```
177
+
178
+ `tools/build-sage-index.mjs` measures the sheet with `tools/png.mjs` — a
179
+ dependency-free PNG reader — and refuses to run if the file's SHA-256 does not
180
+ match the hash recorded in the validation report. That is how the plugin proves
181
+ it is shipping the artwork that was actually validated. The 130 MB generation
182
+ workspace is not published; [PROVENANCE.md](PROVENANCE.md) says what is kept
183
+ instead and why.
184
+
185
+ ### The bundle is generated
186
+
187
+ `lib/client.js` cannot use ES imports at runtime; the browser module loader
188
+ expects one self-contained lazy-CJS factory. So the bundle is assembled from
189
+ plain-text regions in `lib/src/`:
190
+
191
+ ```
192
+ lib/src/order.json the concatenation order
193
+ lib/src/header.mjs bundle header and loader registration
194
+ lib/src/constants.mjs sizes, traits, dialogue, UI strings
195
+ lib/src/helpers.mjs clamp/pick/locale/store/viewport utilities
196
+ lib/src/statePlan.mjs semantic state -> sprite animation, and the timings
197
+ lib/src/artwork.mjs sheet lookup, gaze maths, frame geometry (templated)
198
+ lib/src/sprite.mjs motion policy and the frame ticker
199
+ lib/src/behaviour.mjs pure projection and the transition machine
200
+ lib/src/styles.mjs the stylesheet and generated keyframes
201
+ lib/src/fallback.mjs direct-mount path when the slot registry is absent
202
+ lib/src/preferences.mjs persisted preference reader
203
+ lib/src/componentHeader.mjs, companionHead.mjs, companionBody.mjs, panel.mjs
204
+ lib/src/plugin.mjs the Cordis plugin export
205
+ ```
206
+
207
+ Edit those, then run `npm run bundle`. `tests/bundle.test.mjs` rebuilds the
208
+ bundle and fails when `lib/client.js` disagrees with its sources, so the
209
+ committed file can never drift.
210
+
211
+ ### Other layout
212
+
213
+ ```
214
+ lib/index.js Host half: read-only turn-boundary listener
215
+ cordis.patch.yml inserts exactly one plugin row
216
+ locale/ plugin-manager title and description
217
+ assets/ the sheet, its index, the icon, the contact sheet
218
+ assets/provenance/ the validation report the build checks the sheet against
219
+ PROVENANCE.md what artwork provenance is published, and what is not
220
+ tools/ generators, checker, preview builder, PNG reader
221
+ tests/ Node test-runner suite with a small React harness
222
+ ```
223
+
224
+ `tools/sage_contact.py` and `tools/sage_measure.py` rasterise the sheet for
225
+ review outside DSH; they need Pillow and are development aids only.
226
+
227
+ ### Design notes
228
+
229
+ - **Fail soft.** A missing slot registry falls back to a direct DOM mount; a
230
+ store hook that throws leaves a static but present companion.
231
+ - **Never invent success.** The machine requires an observed rising edge before a
232
+ falling edge can celebrate.
233
+ - **One artwork source.** Frames, gaze cells, the icon and the bundle are all
234
+ derived from the sheet, and every derivation is re-checked in CI.
235
+ - **Integer pixels only.** Every frame offset and scale factor is a whole number,
236
+ asserted by a test, because that is what keeps the drawing crisp.
237
+ - **Own your nodes.** No global mutation beyond the plugin's own style element
238
+ and its namespaced storage key.
239
+
240
+ ---
241
+
242
+ ## Credits and licenses
243
+
244
+ - **Code:** [MIT](LICENSE).
245
+ - **Artwork:** [CC BY-NC-SA 4.0](ASSETS-LICENSE.md) — share and adapt
246
+ non-commercially with attribution; separate from the code license.
247
+ - The character was generated with a built-in image generator from the supplied
248
+ INFJ reference card; `Sage/README.md` records the pet's provenance and stable
249
+ id, and `Sage/prompts/` holds the production prompts.
250
+ - No fonts are bundled; all text uses the platform UI font stack.
251
+ - INFJ and *Advocate* / *Counselor* are popular-psychology vocabulary, not a
252
+ clinical instrument. This plugin is decorative, assesses no one, and is
253
+ affiliated with no personality-assessment publisher.
254
+
255
+ This is a personal project, not an official DeepSeek product. It does not
256
+ represent DeepSeek's views or endorsement.
Binary file
Binary file
@@ -0,0 +1,18 @@
1
+ # Sage
2
+
3
+ Created and verified in Pets. Stable ID: pet_6ac7958fa51c8191bc6827eb0881645b.
4
+
5
+ User request: create an animated pet based on the attached INFJ Advocate cartoon reference. The name Sage was inferred. The original angular green-robed elder identity, swept white hair, long white beard and dot eyes were preserved. Thin wand omitted for readable animation.
6
+
7
+ Final transparent v2 sheet: `final/spritesheet-extended.png`, 1536x2288, 73 populated frames. Nine animation states and sixteen gaze directions. The pet has been added to the collection and can be selected in Pets.
8
+
9
+ Artwork generated with built-in imagegen. Production prompts and revisions are in `prompts/`, inputs and identity references in `references/`, source strips in `decoded/`, and checks plus motion previews in `qa/`. Artifacts are stored locally because ChatGPT Library tools were unavailable. No temporary upload sessions or expiring download links are persisted as pet identity.
10
+
11
+ The bundled structural and quality gates, Pets preflight, three isolated cardinal reviews and independent final visual review pass. Subtle intermediate tilts and minor wrap head-pose differences remain documented warnings; repaired torso widths and ground registration are steady. Jump peak lift is 44px and landing differs from idle baseline by 1px.
12
+
13
+ Final byte SHA256: `58deaf03132eee98634d101661682c1faf45906186bea30e7aa0f951f32631d1`.
14
+
15
+ - [x] Getting Sage ready.
16
+ - [x] Imagining Sage's main look.
17
+ - [x] Picturing Sage's poses.
18
+ - [x] Hatching Sage.
@@ -0,0 +1,7 @@
1
+ Create one clean full-body reference sprite for ChatGPT pet Sage.
2
+
3
+ Pet identity: INFJ Advocate elder from user reference. Compact angular polygon cartoon; warm peach face, short swept white hair, long white beard, olive and light green robes, teal lapel trim, teal boots. Gentle thoughtful expressions, visible dark green dot eyes and angular nose. Keep robe symmetrical and omit thin wand for readable uncluttered animation. Head and beard naturally lead gaze with torso and feet anchored..
4
+ Style: Pet-safe sprite: compact full-body mascot, readable in a 192x208 cell, clear silhouette, simple face, stable palette/materials, and crisp edges for chroma-key extraction. Style `flat-vector`: Flat vector-style mascot with simple geometric forms, crisp color areas, clean outline, and minimal shading.
5
+
6
+
7
+ Place a single centered pose on a perfectly flat pure user-selected #FF00FF chroma-key background. Keep the full pet visible, compact, readable at 192x208, and easy to animate. Preserve approved reference identity cues. No scenery, text, borders, checkerboard transparency, shadows, glows, detached effects, or extra props. Keep #FF00FF and close colors out of the pet, props, highlights, and effects.
@@ -0,0 +1,16 @@
1
+ {
2
+ "pet_id": "pet_6ac7958fa51c8191bc6827eb0881645b",
3
+ "name": "Sage",
4
+ "description": "A gentle INFJ sage in green robes, with a white beard and a thoughtful heart.",
5
+ "is_custom": true,
6
+ "is_active": false,
7
+ "active_pet_id": "default",
8
+ "verified_in_pets": true,
9
+ "spritesheet": "assets/sage.png",
10
+ "sha256": "58deaf03132eee98634d101661682c1faf45906186bea30e7aa0f951f32631d1",
11
+ "artifact_storage": "local workspace; ChatGPT Library tools unavailable",
12
+ "generation": "built-in imagegen",
13
+ "quality_report": "assets/provenance/sage-validation.json",
14
+ "visual_review": "qa/final-visual-review.json",
15
+ "note": "Provenance copy. The full generation workspace (prompts, frames, QA renders) is not published; see assets/provenance/sage-README.md."
16
+ }