@bitefoundry/retrieviewer 0.0.17 → 0.0.18

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.
Files changed (59) hide show
  1. package/ASSET-PROVENANCE.md +11 -0
  2. package/ASSETS-LICENSE.md +6 -0
  3. package/ATTRIBUTION.md +8 -0
  4. package/DESKTOP-PLATFORMS.md +1 -1
  5. package/INSTALLING.md +2 -1
  6. package/LICENSE +16 -16
  7. package/NATIVE-RUNTIME.md +89 -0
  8. package/PREREQUISITES.md +7 -0
  9. package/PUPPY-MEMORY.md +11 -0
  10. package/README.ko.md +10 -1
  11. package/README.md +11 -1
  12. package/RELEASING.md +19 -0
  13. package/THIRD-PARTY-NOTICES.md +8 -0
  14. package/WINDOWS-COMPANION.md +15 -6
  15. package/braille.mjs +2 -2
  16. package/integrations/native-windows/CMakeLists.txt +15 -0
  17. package/integrations/native-windows/THIRD-PARTY-LICENSES.txt +77 -0
  18. package/integrations/native-windows/application.manifest +8 -0
  19. package/integrations/native-windows/bin/win32-x64/retrieviewer-native.exe +0 -0
  20. package/integrations/native-windows/desktop.mjs +45 -0
  21. package/integrations/native-windows/host.cpp +84 -0
  22. package/integrations/native-windows/manifest.json +14 -0
  23. package/integrations/native-windows/native-control.hpp +41 -0
  24. package/integrations/native-windows/native-window.hpp +128 -0
  25. package/integrations/native-windows/runtime.bundle.mjs +4694 -0
  26. package/integrations/native-windows/runtime.mjs +55 -0
  27. package/integrations/native-windows/sources.json +23 -0
  28. package/integrations/purrviewer/ART.md +289 -0
  29. package/integrations/purrviewer/ASSETS-LICENSE.md +21 -0
  30. package/integrations/purrviewer/LICENSE +24 -0
  31. package/integrations/purrviewer/art/ginger.bin.gz +0 -0
  32. package/integrations/purrviewer/art/ginger.json +1707 -0
  33. package/integrations/purrviewer/art/ginger.rvz +0 -0
  34. package/integrations/purrviewer/src/contact.mjs +63 -0
  35. package/integrations/purrviewer/src/habitat.mjs +41 -0
  36. package/integrations/purrviewer/src/life.mjs +280 -0
  37. package/integrations/purrviewer/src/purrviewer-core.mjs +130 -0
  38. package/integrations/purrviewer/src/purrviewer.mjs +37 -0
  39. package/integrations/purrviewer/src/walk-cycle.mjs +3 -0
  40. package/integrations/purrviewer/src/world.mjs +216 -0
  41. package/integrations/purrviewer/vendor/retrieviewer/LICENSE-CODE +21 -0
  42. package/integrations/purrviewer/vendor/retrieviewer/braille.mjs +73 -0
  43. package/integrations/purrviewer/vendor/retrieviewer/puppy-frame-file.mjs +15 -0
  44. package/integrations/purrviewer/vendor/retrieviewer/puppy-frame-indexed.mjs +78 -0
  45. package/integrations/purrviewer/vendor/retrieviewer/puppy-frame-predictive.mjs +170 -0
  46. package/integrations/purrviewer/vendor/retrieviewer/puppy-frame-store.mjs +114 -0
  47. package/integrations/windows-overlay/desktop.mjs +11 -3
  48. package/integrations/windows-overlay/worker.mjs +9 -2
  49. package/package.json +39 -4
  50. package/puppy-clean.mjs +2 -2
  51. package/puppy-companion-sprites.mjs +2 -2
  52. package/puppy-frame-indexed.mjs +2 -2
  53. package/puppy-paper-actions.mjs +2 -2
  54. package/puppy-paper-behaviors.mjs +1 -1
  55. package/puppy-paper-contact.mjs +2 -2
  56. package/puppy-paper-seat.mjs +2 -2
  57. package/puppy-paper.mjs +12 -12
  58. package/retrieviewer-cli.mjs +10 -6
  59. package/retrieviewer.mjs +13 -4
@@ -0,0 +1,55 @@
1
+ import * as std from 'qjs:std';
2
+ import {createPetFromAssets,PET_ASSETS} from '../../retrieviewer.mjs';
3
+ import {createCatFromAssets} from '../purrviewer/src/purrviewer-core.mjs';
4
+ import {createIndexedFrameStore,indexedIndexLength,readIndexedIndex} from '../../puppy-frame-indexed.mjs';
5
+ import {registerFrameStore} from '../../puppy-frame-store.mjs';
6
+
7
+ const config=globalThis.__nativeConfig??{},root=scriptArgs[1],kernel=globalThis.__fast;
8
+ let pet=null,kind=config.pet??'dog',disposed=false;
9
+ const json=name=>{const source=std.loadFile(root+'/'+name);if(source===null)throw Error('Missing pet metadata: '+name);return JSON.parse(source);};
10
+ function provider(){
11
+ const stores=[];
12
+ const release=()=>{for(const store of stores)store.dispose();stores.length=0;};
13
+ const frames=(name,frameIndices)=>{
14
+ const file=std.open(root+'/'+name,'rb');if(!file)throw Error('Missing pet artwork: '+name);
15
+ let owned=true;
16
+ try{
17
+ const read=(at,n)=>{if(file.seek(at,std.SEEK_SET)!==0)throw Error('Invalid art seek');const bytes=new Uint8Array(n);if(file.read(bytes.buffer,0,n)!==n)throw Error('Truncated pet artwork');return bytes;};
18
+ file.seek(0,std.SEEK_END);const size=file.tell(),length=indexedIndexLength(read(0,20)),index=readIndexedIndex(read(0,length),size);
19
+ const store=registerFrameStore(createIndexedFrameStore(index,{read,expand:(b,n)=>kernel.inflate(b,n),close:()=>file.close(),frameIndices,kernel}));
20
+ stores.push(store);owned=false;return store;
21
+ }finally{if(owned)file.close();}
22
+ };
23
+ return {frames,release};
24
+ }
25
+ function make(next){
26
+ if(!['dog','cat'].includes(next))throw Error('Unknown pet');
27
+ const p=provider();
28
+ try{
29
+ if(next==='cat')return createCatFromAssets({seed:config.seed??731},{data:{meta:json('integrations/purrviewer/art/ginger.json'),store:p.frames('integrations/purrviewer/art/ginger.rvz')},release:p.release},kernel);
30
+ const data={info:json(PET_ASSETS.strideInfo),meta:json(PET_ASSETS.stableInfo),cache:p.frames(PET_ASSETS.stride),assets:{}};
31
+ for(const key of ['rear','approach','seat','arrivalSeat','behaviors','actions','interactions','comfort']){
32
+ const base=PET_ASSETS[key],info=json(base+'.json');
33
+ const indices=key==='interactions'?[...new Set(Object.values(info.clips).flatMap(list=>list.flatMap(pair=>Array.from({length:info.samples},(_,s)=>pair*info.samples+s))))]:undefined;
34
+ data.assets[key]={info,bytes:p.frames(base+'-q5.rvz',indices)};
35
+ }
36
+ return createPetFromAssets({seed:config.seed??731,returnStyle:config.returnStyle??'auto'},{data,release:p.release},kernel);
37
+ }catch(error){p.release();throw error;}
38
+ }
39
+ pet=make(kind);
40
+ globalThis.__desktopReady=true;
41
+ globalThis.__desktopFrame=(dt,columns,rows,force=false)=>{
42
+ if(disposed)throw Error('Native pet is disposed');
43
+ pet.step(dt);const options={columns,rows,cellAspect:.5};
44
+ return !force&&pet.needsFrame?.(options)===false?null:pet.frame(options).text;
45
+ };
46
+ globalThis.__desktopInteract=action=>{
47
+ if(kind==='cat')return pet.interact(({ball:'toy',tug:'company',paw:'greet',wall:'greet'})[action]??action);
48
+ return action==='paw'||action==='wall'?pet.notify({kind:'approval',gesture:action}):pet.interact(action);
49
+ };
50
+ globalThis.__desktopSwitchPet=next=>{
51
+ if(!['dog','cat'].includes(next))throw Error('Unknown pet');
52
+ if(next===kind)return true;
53
+ pet.dispose();pet=null;pet=make(next);kind=next;return true;
54
+ };
55
+ globalThis.__desktopDispose=()=>{if(disposed)return;disposed=true;pet?.dispose();pet=null;};
@@ -0,0 +1,23 @@
1
+ [
2
+ {
3
+ "name": "QuickJS-NG",
4
+ "version": "0.17.0",
5
+ "commit": "6d46d07d04041b40f4f49eaa7fdebe44c314c699",
6
+ "url": "https://github.com/quickjs-ng/quickjs",
7
+ "license": "MIT"
8
+ },
9
+ {
10
+ "name": "zlib",
11
+ "version": "1.3.2",
12
+ "commit": "da607da739fa6047df13e66a2af6b8bec7c2a498",
13
+ "url": "https://github.com/madler/zlib",
14
+ "license": "Zlib"
15
+ },
16
+ {
17
+ "name": "fflate",
18
+ "version": "0.8.3",
19
+ "url": "https://github.com/101arrowz/fflate",
20
+ "license": "MIT",
21
+ "usage": "portable benchmark baseline; native path uses zlib"
22
+ }
23
+ ]
@@ -0,0 +1,289 @@
1
+ # Cat art and motion review
2
+
3
+ Current default: the owner-approved ginger identity and65-key ginger motion
4
+ atlas described below. The tuxedo material is retained as historical source
5
+ and is not fetched by the default renderer.
6
+
7
+ ## Initial tuxedo prototype
8
+
9
+ The owner selected a playful, expressive shorthair tuxedo. These are generated
10
+ whole-body raster drawings, not dog sprites with different ears or a 3D skin.
11
+ The visual medium is stable monochrome Braille. No downloaded cat photographs,
12
+ YouTube frames, model weights or paid runtime inference are included.
13
+
14
+ Built-in imagegen produced these project-local sources under `art/source/`:
15
+
16
+ | Sheet | Role | SHA-256 |
17
+ |---|---|---|
18
+ | identity-v1.png | Six representative views/poses; identity input only | 821b762f32a8bf8646323ebaa37ef4b22949b623c5ebe32de801728ac50dd79e |
19
+ | rest-v1.png | Neutral, blink, turn/rise, stretch, loaf, sleep, grooming and bat | e06e3a330e8ff7afa308caa2f9945224c26899a23cc9535fa81da4d9aec63883 |
20
+ | walk-v1.png | Front/rear steps; side cycle rejected as too similar | aff316580fd24823ef891fe9ccc821484d3e45d85efcce55ed5dd8da81ebd8ee |
21
+ | walk-v2.png | Four distinct side-walk candidates | f07f7e02e7bbf26abe26b5ac9a61206d8d1604f655598f9a92b2365a5f65a1ce |
22
+ | pounce-v1.png | Hind-leg loading, launch, flight, forepaw landing, gathering | 9c3fac49b0428f2f7722338007e2cc6229ab8d2e222b3a8a285043b344c341b2 |
23
+
24
+ Prompt set: the same natural young-adult tuxedo, white chin/bib/four socks,
25
+ triangular ears, slender connected feline torso and long tail; readable black
26
+ fur highlights, closed mouth, no bandana/collar/human smile/dog body. Fixed
27
+ camera and world scale per batch, full animal inside cell, black background,
28
+ no props/text. Separate side/front/rear walking phases; rest/groom/sleep studies;
29
+ eight force-bearing pounce poses. The side-walk retry explicitly asks for a
30
+ forward-contact, vertical-support, backward-push and lifted-swing near forepaw.
31
+ Exact sheets remain local; this private repo ships their compact runtime atlas.
32
+
33
+ The source models did not honor square cells on every sheet. The offline
34
+ preparer records actual source boxes, one common scale per batch, connected
35
+ foreground selection, torso proxy translation and a 290px ground proxy.
36
+ It never bbox-fits each pose or warps anatomical parts. A monotone luminance
37
+ curve (gamma0.62) keeps black fur readable on black, followed by the reused
38
+ 32-level cropped/predictive Q5 codec. Bright/dark composites are QA, not alpha
39
+ changes in the runtime. One 36-key archive is 273,993 bytes (about268KiB).
40
+
41
+ ## Known visual limits
42
+
43
+ This is the first integrated cat, not yet the final Retrieviewer motion standard.
44
+ Side walking still has only four authored keys; support ownership and stroke
45
+ length need a denser measured gait before claiming rendered no-slip contact.
46
+ Directional pose connections and independent sheet proportions need visual
47
+ refinement. The front/rear step material is present, not a rotating camera.
48
+ Groom raster audit is structurally valid but flags entry/exit center changes;
49
+ those are review points, not automatically approved anatomy. Pounce physics is
50
+ one ballistic clock; instantaneous horizontal takeoff/landing speeds are a
51
+ documented kinematic approximation, not force simulation or motion capture.
52
+
53
+ The owner selected CC BY-SA 4.0 for the cat artwork on 2026-10-25.
54
+ See ASSETS-LICENSE.md. Code remains MIT. Generation does not itself establish
55
+ exclusive rights; this grants only rights the maintainer can license.
56
+
57
+ ## Ginger identity candidate · 2026-10-25
58
+
59
+ The owner requested a single-color ginger coat after the tuxedo dots failed to
60
+ separate dark-fur highlights from white patches. Built-in imagegen generated
61
+ `art/source/ginger-identity-v1.png` (1942x809), SHA-256
62
+ `af4322edb7d1f001d002b55535369f8dd067cd4621ddd453318251b0caa1d559`.
63
+ No reference images were supplied. The complete prompt is recorded in
64
+ [research/ginger-art-prompt.md](research/ginger-art-prompt.md).
65
+
66
+ Front sit, side stand and curled sleep were extracted at a shared uniform0.30
67
+ scale, translated as whole poses to ground290 on320-square canvases. Actual
68
+ nonuniform source boxes are recorded in `art/ginger-candidate.json`. The source
69
+ has subtle natural coat shading; these are not white bib/sock regions. No body
70
+ parts are warped or recolored from the old tuxedo.
71
+
72
+ The separate candidate uses the existing Q5 codec and stable dot converter.
73
+ Its single archive is21,694bytes. The orange color #f1b66b is applied at paint
74
+ time, so it does not require RGB sprites. A fixed640-square canvas and one
75
+ 320-square RGBA scratch buffer are used only when this page is open, with no
76
+ animation timer or runtime model. Aside inspection covered all three buttons
77
+ and real dot output. The existing tuxedo archive and motion are unchanged.
78
+ These are static identity candidates, not a completed ginger animation set or
79
+ an owner-approved final design. Generated-pose proportions still need review
80
+ before authoring the new motion keys. The same CC BY-SA 4.0 artwork terms apply.
81
+
82
+ ## Approved ginger motion integration · 2026-10-25
83
+
84
+ The owner approved the ginger identity before generation of these three sheets:
85
+
86
+ | Sheet | Role | SHA-256 |
87
+ |---|---|---|
88
+ | ginger-rest-v1.png | Blink, rise/turn, loaf/curl, stretch, grooming and paw taps | 881152ceae13de8a02a4f05a19f1867f87adf77ca173f77c13467b8f0f74c41a |
89
+ | ginger-walk-v1.png | Eight side phases and four each front/rear | 5355ea0a0320eb42a6fee96d285c5d064dc64b8bc23cdb697271d2814fff578c |
90
+ | ginger-pounce-v1.png | Low stalk/load, launch/flight/reach, fore/hind landing and recovery | ec412d407b13b0a740ac2d9645c00096951f397e8734ed31723219123b3d645e |
91
+
92
+ These use the approved identity sheet as input. Actual dimensions are1254-square
93
+ for rest and1536x1024 for walk/pounce, not an assumed uniform requested grid.
94
+ The offline preparer uses measured source rows/windows, removes isolated neighbor
95
+ components and registers whole poses with common scales per sheet (rest.68,
96
+ walk.80, pounce.64). No torso/head warps or independent per-frame bbox scaling.
97
+ The original sit/stand/curl candidate keys are byte-identical after Q5 decoding,
98
+ covered by an exact regression test. One unused rest stand is excluded.
99
+
100
+ The active archive `art/ginger.bin.gz` has42 reachable keys and322,500bytes.
101
+ It replaces the old atlas at load time, not by retaining both. Color #f1b66b
102
+ is a paint hint on `frame().color`; the RGBA sampling buffer stays grayscale.
103
+ Launch/flight retain8/34px of authored paw clearance in addition to the world
104
+ trajectory. This registration is an authored approximation, not measured COM
105
+ or sole-lock contact. No new motion model, runtime dependency or per-action
106
+ process is introduced. The invisible-toy limitation remains from the prototype.
107
+
108
+ Walk/groom/pounce/land raster audits pass structure. Walk has no numerical review
109
+ warning; the others flag expected pose/center changes and require visual review.
110
+ Their contact sheets and actual Aside toy replay were inspected. Eight side
111
+ keys give more visible limb variety but do not prove exact four-beat feline
112
+ contact or eliminate all view/pose size differences. Those remain prototype
113
+ review items. New action poses have not yet received owner visual acceptance.
114
+
115
+ ## Body-size and transition repair · 2026-10-25
116
+
117
+ The oversized sheet-based blink/groom and loaf poses were replaced with
118
+ whole-body edits of approved references. A second multi-pose sheet and a
119
+ narrow sit-based loaf were rejected; neither is in the runtime atlas.
120
+ Selected source files in `art/source/`:
121
+
122
+ | Source | SHA-256 |
123
+ |---|---|
124
+ | ginger-blink-v2.png | 424deac664b4edd7066ad47d1141c8c417c6836c03d64c4b99df8665d7e006c2 |
125
+ | ginger-groom-lift-v2.png | 58c424e1baf5d963c4ab01d106ea742f439b88dc82bfc68975cadf5626685a85 |
126
+ | ginger-groom-lick-v2.png | 7aa83ee99214ba7e51acb713866642b308f85011d9c44e38e8392a6d2f5630c6 |
127
+ | ginger-groom-cheek-v2.png | ce5387af35043cb8507983b9531c5177e9374f45e599c36e374aacf81307caed |
128
+ | ginger-loaf-v3.png | 4808798471951dc664da2a168d31e1dcfa0abbba500fe594dfa8af01fa2dcd11 |
129
+
130
+ Blink/groom output is normalized to the known462x750 seated input canvas,
131
+ not to the changing silhouette. The final loaf edits the registered320-square
132
+ approved curl, with the identity sheet as color reference. Only uniform scaling
133
+ and whole-image translation are applied. Profile stand and turn/stretch use a
134
+ 0.88 calibration; lowering0.85, curled entry0.83 and paw-taps0.78 relative to
135
+ their original registration. These are offline authored corrections, not live
136
+ scaling pulses or anatomical warps. Source transforms remain in metadata.
137
+
138
+ The active atlas has40 reachable keys and283,201bytes,39,299 fewer than before.
139
+ Sit/curl and26 other unaffected named keys stay exactly unchanged; an immutable
140
+ decoded hash fixture from113947e verifies this. The overgrown grooming exit and
141
+ redundant closed-loaf key are excluded. Loaded crouch stays grounded; the
142
+ airborne sequence starts at launch. Front rise/sit reuses its own view's keys.
143
+
144
+ Simulation now selects orientation/settlement independently of render frequency.
145
+ Bat/stretch already finish seated and no longer replay stand-to-sit. A front
146
+ arrival uses front sitting keys. Physics units, paths, camera calibration and
147
+ walking/leap/landing drawings remain unchanged. Aside review covered grooming
148
+ and the full toy loop. Raster walk/groom audits pass without review warnings;
149
+ pounce/land retain pose-center warnings. These are not proofs of3D volume or
150
+ sole locking. Hard direction changes remain a prototype review item.
151
+
152
+ ## Hind-leg walk and stance repair · 2026-10-25
153
+
154
+ The owner correctly identified nearly static hind legs in the original walk
155
+ sheet. Eight single-pose edits of the approved profile replace only the eight
156
+ side-walk keys. Files `art/source/ginger-step-v2-00.png` through `-07.png` retain
157
+ the original drawings; dimensions/hashes and the shared padded1066x850 canvas
158
+ are recorded per key in runtime metadata. Full prompts and the rejected v3-06
159
+ correction are in research/ginger-walk-prompts.md. Only v2 keys are packed.
160
+
161
+ All keys use the same whole-canvas registration, including a common vertical
162
+ offset. They are NOT grounded by each frame's lowest paw, which would erase
163
+ swing lift. Visual inspection chooses source order0,1,2,7,3,4,5,6. Toe proxies
164
+ are manually identified and snapped to nearby visible source ink. Planned
165
+ prompt coordinates alone are not treated as measured contact evidence.
166
+
167
+ Near-hind support retreats about60.47 source pixels over5/8 cycle. The .60m
168
+ canvas yields stride0.18141m. Ground cruise speeds remain0.525m/s walking and
169
+ 0.156m/s creeping; ds/stride changes pose cadence instead of slowing the root.
170
+ The exact stride is generated once into src/walk-cycle.mjs from annotations.
171
+
172
+ Bounded contact rendering adapts the existing MIT Retrieviewer foot-lock idea,
173
+ not its dog anatomy. Simulation owns stance episodes/world anchors, including
174
+ the cyclic seam and left/right mirror. The same fixed camera inverts a visible
175
+ toe onto the ground plane and reprojects that anchor. A local inverse lower-leg
176
+ warp preserves its planted position while authored hips/knees continue moving.
177
+ Pixels at/above y225 remain unchanged. Incompatible supports release at image
178
+ strain1.35 or displacement beyond48px horizontal/18px vertical instead of
179
+ stretching indefinitely. Swing feet are not pinned. One scalar scratch object
180
+ is reused by raster sampling; no extra image buffers or runtime engine added.
181
+
182
+ All32 non-target keys are byte-identical after decoding to the00ba0a0 baseline.
183
+ The archive remains40 keys, now267,251bytes. Walking raster audit passes without
184
+ warnings; actual Aside canvas output was inspected in a paused walking pose
185
+ because full-viewport CDP capture timed out. Support proxies/ink tests and
186
+ world-anchor invariants are stronger than the previous numeric gait-only check,
187
+ but this remains a2.5D raster approximation. Exact contact is not claimed for
188
+ every occluded toe, source transition or front/rear view. Discrete authored-key
189
+ changes and bounded release can still need visual refinement.
190
+
191
+ ## Visible feeding and tucked-loaf repair · 2026-10-25
192
+
193
+ Six new single-pose edits add high/mid/lowered feeding, a tongue-contact key,
194
+ a genuine low paws-tucked loaf and its folded-leg transition. Exact prompt set
195
+ and input roles: [ginger-feeding-prompts.md](research/ginger-feeding-prompts.md).
196
+ Source originals stay under ignored art/source; their hashes/transforms are
197
+ recorded in art/ginger.json. Research photos are observation only, not inputs.
198
+
199
+ Feeding uses one family-wide profile-canvas scale and translation; no changing
200
+ silhouette fit. The generated tongue edit contributes only its registered mouth
201
+ rectangle to the closed-mouth drawing, so every non-mouth body/foot pixel is
202
+ identical during licking. Dish/paste are small grayscale shapes painted directly
203
+ into the existing borrowed output; no extra texture or RGB frame family exists.
204
+ The head now has high/mid/low lowering keys and reverses them on recovery.
205
+ The compact loaf uses the approved portrait canvas and a fixed anatomical scale;
206
+ the previous curl-alert key and sleep variants are preserved.
207
+
208
+ The active archive has46 reachable keys and298,245bytes,30,994 more than before.
209
+ All earlier keys remain byte-identical against their existing immutable fixture.
210
+ This is a deliberately small new behavior set, not a claim that every species
211
+ action, camera direction or continuous joint motion has been completed.
212
+
213
+ ## Quiet stretch and tail extension · 2026-10-25
214
+
215
+ Six source edits add three connected stretch poses and three tail-tip poses.
216
+ The old faulty stretch extreme is replaced, so there are five net new packed
217
+ keys:51 total. All45 other old keys, including the entire walking/feeding art,
218
+ remain byte-identical to f2f6731, checked by a separate hash fixture with only
219
+ stretch allowlisted. Source prompts/input roles are in
220
+ [ginger-motion-prompts.md](research/ginger-motion-prompts.md). Research photos
221
+ were observation only and never entered the generation calls or runtime assets.
222
+
223
+ The stretch family uses one padded-profile scale and common deep-pose ground
224
+ registration. Beginning/reaching/holding/releasing are separate supported phases;
225
+ their live timing is not a uniformly accelerated movie. Tail sources contribute
226
+ only rectangle(90,248)–(145,291) to the canonical sit. Face, trunk, legs and paws
227
+ stay exact while its tip loosens/lifts/settles. Two finite tail patterns occur
228
+ during observation, with long quiet gaps and no constant dog-like wag loop.
229
+
230
+ Archive321,398bytes is23,153bytes larger than the preceding46-key archive.
231
+ The reconstruction cache still contains two grayscale keys; tint and one RGBA
232
+ output are reused. Walk exact-baseline and new tail raster audits pass without
233
+ warnings. Stretch reach has an expected center-shift review warning between
234
+ the upright stand and lowered-head beginning; its actual connected-body entry,
235
+ deep hold and seated recovery were inspected in the browser, not auto-approved.
236
+
237
+ ## Quiet affiliation extension · 2026-10-25
238
+
239
+ Five new packed keys add half/closed eyelids and neutral/left/right whole-body
240
+ kneading poses. Exact prompts and input roles are in
241
+ [ginger-affection-prompts.md](research/ginger-affection-prompts.md). The ordinary
242
+ blink and every one of the51 preceding drawings remain byte-identical to298b7d8;
243
+ a dedicated immutable SHA-256 fixture checks them. Raw source files stay local.
244
+
245
+ Half/closed eyes share one portrait registration and contribute only rectangle
246
+ (133,136)–(190,159) to canonical sit. Other fur, head outline, trunk, tail and
247
+ support pixels cannot shimmer or inflate. Kneading uses one shared folded-body
248
+ registration (225px known canvas height, translation89/106), never separate fits
249
+ to raised paws. The torso/neck follows subtle reciprocal shoulder weight shifts;
250
+ both forepaws visibly release above the opposite pressed pose. Four pairs take
251
+ 4.8s, then the supported fold leads directly to compact loaf. The small rounded
252
+ mat is a grayscale prop painted into the same borrowed output, without textures.
253
+
254
+ Archive339,630bytes adds18,232bytes. Eye/knead raster diagnostics pass without
255
+ review warnings; actual caption-free browser playback showed greeting, knead
256
+ entry, alternating forepaws and mat-supported loaf. The gestures are small at
257
+ the default dot scale, especially far away. These are local self-review results,
258
+ not a claim of continuous skeletal animation or owner aesthetic acceptance.
259
+
260
+ ## Tower / wheel extension · 2026-10-25
261
+
262
+ Nine new packed keys: eight connected gallop extremes/breakdowns and one upward
263
+ reach. All56 earlier drawings stay exact to b422e7e, checked by a dedicated
264
+ immutable hash fixture. Prompts, selected inputs, the rejected initial trot and
265
+ measured source-box correction are in research/ginger-habitat-prompts.md.
266
+ Both gallop sheets share .337 scale and a nominal cell origin; raised legs and
267
+ suspension are preserved instead of ground-fitting every pose. Actual bottom
268
+ gutter800 replaces an assumed768 to retain extended toes without stray fragments.
269
+
270
+ Tower load/fore-land/gather/recovery reuse their existing force-bearing drawings.
271
+ A real elevated support remains under subsequent sit/greeting/loaf. Furniture
272
+ shares the fixed pinhole transform and paints into the borrowed grayscale buffer.
273
+ No furniture texture, RGB atlas, runtime dependency or additional worker exists.
274
+ Archive391,476bytes adds51,846bytes. Raster audits pass structure with retained
275
+ center/area review warnings from gathered/extended suspension and reach/landing;
276
+ these are explicitly not automatic anatomy approval. Local actual dot review
277
+ covered tower arrival/rest and wheel run/deceleration/departure. Curved tread
278
+ sole contact is an approximation and has not been numerically locked per toe.
279
+
280
+ ## Lightweight runtime and public artwork terms · 2026-10-25
281
+
282
+ The unchanged simulation/render body now lives in src/purrviewer-core.mjs.
283
+ createCatFromAssets accepts a lifetime-owned store and optional raster kernel;
284
+ the existing browser/Node loader remains the default. Native Windows shares
285
+ this core and reads individually compressed Q5 crops from disk. No behavior
286
+ keys, timings, anatomy or source pixels were changed. The owner explicitly
287
+ chose CC BY-SA 4.0 for the bundled ginger artwork, including its metadata and
288
+ alternative encodings; code remains MIT. Research photographs and raw source
289
+ sheets are not included in the public package.
@@ -0,0 +1,21 @@
1
+ # Purrviewer artwork — CC BY-SA 4.0
2
+
3
+ The owner-approved ginger-cat drawings, art/ginger.json pose and registration
4
+ metadata, art/ginger.bin.gz and alternative encodings (including ginger.rvz)
5
+ are licensed under Creative Commons Attribution-ShareAlike 4.0 International.
6
+
7
+ - License: https://creativecommons.org/licenses/by-sa/4.0/
8
+ - Legal text: https://creativecommons.org/licenses/by-sa/4.0/legalcode.en
9
+ - Creator: BiteFoundry project maintainer (GitHub shinick-han / npm shinick), 2026.
10
+ - Source: https://github.com/BiteFoundry/retrieviewer
11
+ - Creation: AI-generated whole-body ginger-cat poses; programmatic registration,
12
+ contact adjustment, interpolation and Q5 grayscale quantization. Retained
13
+ research photographs were observation references, not generation inputs or
14
+ bundled pixels. The initial tuxedo prototype is not part of this release.
15
+
16
+ The maintainer selected these terms on 2026-10-25. This grants only rights the
17
+ maintainer can license, without claiming exclusive rights in all generated
18
+ pixels. Retain attribution, link the license, and identify changes. Shared
19
+ adaptations use the same or a compatible license; commercial reuse is allowed.
20
+ The linked legal text controls. Code is separately MIT under LICENSE; bundling
21
+ independent software with this artwork does not relicense that software.
@@ -0,0 +1,24 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 BiteFoundry contributors
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
+ This license covers code. Cat artwork is not included in this MIT grant; see
24
+ ART.md. Vendored Retrieviewer code retains its original MIT notice.