@bitefoundry/retrieviewer 0.0.19 → 0.0.21

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,16 @@
1
+ // Authored grounded yaw; each half-turn shares an exact standing endpoint.
2
+ // Mirroring changes only at the symmetric frontal endpoint, never mid-profile.
3
+ export function catFacingPath(from,fromMirror,to,toMirror){
4
+ const path=[];
5
+ const push=(clip,reverse,mirror,view)=>path.push({clip,reverse,mirror,view,seconds:.28});
6
+ if(from===to&&(from==='front'||fromMirror===toMirror))return path;
7
+ if(from==='rear'){push('turn-side-rear',true,fromMirror,'side');from='side';}
8
+ if(from==='side'){
9
+ if(to==='rear'&&fromMirror===toMirror){push('turn-side-rear',false,fromMirror,'rear');return path;}
10
+ push('turn-front-side',true,fromMirror,'front');
11
+ }
12
+ if(to==='front')return path;
13
+ push('turn-front-side',false,toMirror,'side');
14
+ if(to==='rear')push('turn-side-rear',false,toMirror,'rear');
15
+ return path;
16
+ }
@@ -274,7 +274,7 @@ export function createCatLife({seed = 731} = {}) {
274
274
  food: phase.clip.startsWith('feed-') ? {remaining: phase.clip === 'feed-lick' ? 1-phase.progress :
275
275
  ['feed-finish','feed-leave'].includes(phase.clip) ? 0 : 1} : null,
276
276
  mat: Boolean(phase.mat),facing:phase.facing??null,resting:['sleep','loaf-rest'].includes(phase.clip)&&!pending,
277
- sleeping: phase.clip === 'sleep'};
277
+ sleeping: phase.clip === 'sleep',restSeconds:phase.clip==='sleep'?phase.elapsed:0};
278
278
  }
279
279
  };
280
280
  }
@@ -3,21 +3,30 @@ import {createCatMotion,projectCat} from './world.mjs';
3
3
  import {createCatLife} from './life.mjs';
4
4
  import {createCatContacts,footSourcePoint} from './contact.mjs';
5
5
  import {paintHabitat} from './habitat.mjs';
6
+ import {catFacingPath} from './facing.mjs';
6
7
  export function createCatFromAssets({seed=731}={},lease,kernel=null){
7
8
  if(!Number.isInteger(seed)||seed<0||seed>0xffffffff)throw TypeError('Invalid cat seed');
8
9
  let asset=lease.data;const release=lease.release,motion=createCatMotion(),life=createCatLife({seed}),contacts=createCatContacts(asset.meta.walk),sourcePoint={x:0,y:0};
9
- let pixels=null,disposed=false,lastClip='sit',lastFrame=null,prep=null,view='front',mirror=false,settle=null,lastMoving=false,lastLifeClip='sit',lastPaintKey='',lastText='',rasterizations=0,heldHits=0;
10
+ let pixels=null,disposed=false,lastClip='sit',lastFrame=null,prep=null,view='front',mirror=false,standing=false,settle=null,lastMoving=false,lastLifeClip='sit',lastPaintKey='',lastText='',rasterizations=0,heldHits=0;
10
11
  const alive=()=>{if(disposed)throw Error('Cat is disposed');};
11
12
  const direct=command=>{
12
13
  if(command.kind==='go')motion.go(command.x,command.z,{gait:command.gait});
13
14
  else if(command.kind==='pounce')motion.pounce(command.x,command.z,{height:command.height,landingY:command.landingY??0});
14
15
  else if(command.kind==='wheel'){view='side';mirror=false;settle=null;motion.wheel(command);}
15
- else if(command.kind==='stop'){prep=null;motion.stop();}
16
+ else if(command.kind==='stop'){motion.stop();}
16
17
  };
18
+ function prepare(targetView,targetMirror,{command=null,seated=false}={}){
19
+ const steps=[];
20
+ if(!standing)steps.push({clip:'rise-front',seconds:.3,view:'front',mirror:false});
21
+ steps.push(...catFacingPath(view,mirror,targetView,targetMirror));
22
+ if(seated)steps.push({clip:'sit-front',seconds:.32,view:'front',mirror:false,seated:true});
23
+ if(!steps.length){if(command)direct(command);return;}
24
+ prep={steps,index:0,age:0,command};mirror=steps[0].mirror;settle=null;
25
+ }
17
26
  function issue(command){
18
- if(command.kind==='go'&&view==='front'&&!motion.sample().moving){
27
+ if(command.kind==='go'&&!motion.sample().moving){
19
28
  const s=motion.sample(),dx=command.x-s.x,dz=command.z-s.z,length=Math.hypot(dx,dz);
20
- if(length>.01){const targetView=Math.abs(dz/length)>.8?(dz>0?'front':'rear'):'side';prep={age:0,seconds:.4,command,targetView,clip:targetView==='front'?'rise-front':'rise'};mirror=dx<0;settle=null;return;}
29
+ if(length>.01){const targetView=Math.abs(dz/length)>.8?(dz>0?'front':'rear'):'side';prepare(targetView,dx<0,{command});return;}
21
30
  }
22
31
  if(command.kind!=='stop')settle=null;
23
32
  direct(command);
@@ -26,28 +35,34 @@ export function createCatFromAssets({seed=731}={},lease,kernel=null){
26
35
  step(dt){
27
36
  alive();if(!Number.isFinite(dt)||dt<0||dt>.25)throw RangeError('Invalid cat dt');
28
37
  let left=dt;while(left>1e-10){const step=Math.min(1/60,left);left-=step;
29
- if(prep){prep.age+=step;if(prep.age>=prep.seconds){const cmd=prep.command;view=prep.targetView;prep=null;direct(cmd);}}
38
+ if(prep){
39
+ prep.age+=step;const part=prep.steps[prep.index];
40
+ if(prep.age>=part.seconds){view=part.view;mirror=part.mirror;standing=!part.seated;
41
+ prep.age=0;prep.index++;
42
+ if(prep.index===prep.steps.length){const cmd=prep.command;prep=null;if(cmd)direct(cmd);}
43
+ else mirror=prep.steps[prep.index].mirror;
44
+ }
45
+ // Life's authored contact/consumption holds start after this bridge,
46
+ // rather than being consumed while hidden behind it.
47
+ if(prep)continue;
48
+ }
30
49
  motion.step(step);const s=motion.sample();
31
50
  const command=life.step(step,s);if(command)issue(command);
32
51
  const report=life.report,clip=report.clip;
33
- if(s.moving&&!prep&&!s.exercising){const sx=Math.sin(s.heading),sz=Math.cos(s.heading);mirror=sx<0;view=s.airborne?'side':Math.abs(sz)>.8?(sz>0?'front':'rear'):'side';settle=null;}
52
+ if(s.moving&&!prep&&!s.exercising){if(s.airborne){mirror=Math.sin(s.heading)<0;view='side';}standing=true;settle=null;}
34
53
  if(clip!==lastLifeClip){
35
- if(clip==='stretch-enter'){view='front';mirror=false;settle=null;}
36
- if(clip==='knead-enter'){view='front';mirror=false;settle=null;}
37
- if(['tower-load','tower-land','wheel-enter','wheel-leave'].includes(clip)){view='side';settle=null;if(clip.startsWith('wheel'))mirror=false;}
38
- if(clip==='tower-load')mirror=report.facing<0;
54
+ if(['stretch-enter','knead-enter','feed-enter'].includes(clip)&&standing)prepare('front',false,{seated:true});
55
+ if(['tower-load','crouch','wheel-enter'].includes(clip))prepare('side',clip==='tower-load'?report.facing<0:clip==='wheel-enter'?false:mirror);
56
+ if(['tower-land','wheel-leave'].includes(clip)){view='side';standing=true;settle=null;if(clip.startsWith('wheel'))mirror=false;}
39
57
  if(clip==='stretch-reach'){view='side';mirror=false;settle=null;}
40
- if(clip==='feed-enter'){view='side';mirror=false;settle=null;}
58
+ if(clip==='feed-sniff'){view='side';mirror=false;standing=true;settle=null;}
41
59
  // These authored sequences already finish on the canonical front sit.
42
60
  // Replaying stand-to-sit here made the cat rise again after paw play.
43
- if(clip==='sit'&&['bat','stretch','stretch-leave','feed-leave','loaf-leave'].includes(lastLifeClip)){view='front';mirror=false;settle=null;}
61
+ if(clip==='sit'&&['bat','stretch','stretch-leave','feed-leave','loaf-leave'].includes(lastLifeClip)){view='front';mirror=false;standing=false;settle=null;}
44
62
  lastLifeClip=clip;
45
63
  }
46
64
  const quiet=['idle','sit','blink','eye-greeting','groom','loaf','sleep','tail-swish','tail-tip'].includes(clip);
47
- if(!s.moving&&!prep&&quiet){
48
- if(!settle&&(lastMoving||view!=='front'))settle={age:0,seconds:.45,clip:view==='front'?'sit-front':'sit-down'};
49
- if(settle){settle.age+=step;if(settle.age>=settle.seconds){view='front';mirror=false;settle=null;}}
50
- }else settle=null;
65
+ if(!s.moving&&!prep&&quiet&&standing)prepare('front',false,{seated:true});
51
66
  lastMoving=s.moving;
52
67
  if(s.moving&&!s.airborne&&!s.exercising&&s.supportY===0&&!prep&&view==='side')contacts.update(s,mirror);else contacts.reset();
53
68
  }
@@ -62,13 +77,21 @@ export function createCatFromAssets({seed=731}={},lease,kernel=null){
62
77
  }
63
78
  if(s.airborne){clip=r.clip==='tower-up'?'tower-flight':r.clip==='tower-down'?'tower-fall':'pounce';progress=s.flightProgress;}
64
79
  if(s.exercising||r.clip==='wheel-run'){clip='wheel-run';progress=((s.wheelPhase%1)+1)%1;}
65
- if(prep){clip=prep.clip;progress=Math.min(1,prep.age/prep.seconds);}
80
+ if(!s.moving&&['walk','creep'].includes(clip)){clip=view==='rear'?'stand-rear':view==='front'?'rise-front':'stand';progress=1;}
81
+ if(prep){const part=prep.steps[prep.index];clip=part.clip;progress=Math.min(1,prep.age/part.seconds);if(part.reverse)progress=1-progress;}
66
82
  if(settle){clip=settle.clip;progress=Math.min(1,settle.age/settle.seconds);}
67
83
  // Nine authored licking cycles in 3.6s. Rendering only samples simulation
68
84
  // progress; a hidden or sparse host cannot change eating cadence.
69
85
  if(clip==='feed-lick')progress=progress>=1?0:(progress*9)%1;
70
86
  if(clip==='knead')progress=progress>=1?0:(progress*4)%1;
71
- const keys=asset.meta.clips[clip]??asset.meta.clips.sit;
87
+ let keys=asset.meta.clips[clip]??asset.meta.clips.sit;
88
+ if(clip==='stand')keys=[asset.meta.clips['turn-front-side'].at(-1)];
89
+ if(clip==='sleep'){
90
+ // A slow fur breath and rare ear twitch, with exact curled endpoints.
91
+ // No body scaling/bobbing, no extra resident raster, no render-owned clock.
92
+ const t=r.restSeconds??0,phase=t%5.6;
93
+ keys=[Math.floor(t)%23===17?asset.meta.clips.sleep[3]:phase>1.4&&phase<3.5?asset.meta.clips.sleep[1]:asset.meta.clips.sleep[0]];progress=0;
94
+ }
72
95
  const pins=clip==='walk'?contacts.pins(s):[];
73
96
  // Every authored key needs a real hold, including the recovery/exit key.
74
97
  const key=keys[Math.min(keys.length-1,Math.floor(Math.max(0,Math.min(1,progress))*keys.length))];
@@ -122,7 +145,7 @@ export function createCatFromAssets({seed=731}={},lease,kernel=null){
122
145
  rasterizations++;lastPaintKey=paintKey;lastText=(kernel?.braille?kernel.braille(pixels,width,height,1.22,1.08):rgbaToBraille(pixels,width,height,{method:'stable',brightness:1.22,contrast:1.08})).text;
123
146
  return result(lastText);
124
147
  },
125
- interact(kind,options){alive();if(!['treat','toy','call','stretch','tail','greet','company','tower','wheel'].includes(kind))throw TypeError('Invalid cat interaction');const accepted=life.interact(kind,options);if(accepted&&prep){prep=null;}return accepted;},
148
+ interact(kind,options){alive();if(!['treat','toy','call','stretch','tail','greet','company','tower','wheel'].includes(kind))throw TypeError('Invalid cat interaction');const accepted=life.interact(kind,options);if(accepted&&prep)prep.command=null;return accepted;},
126
149
  get report(){alive();return life.report;},
127
150
  get stats(){alive();return {residentPixelBytes:asset.store.residentPixelBytes??asset.store.residentBytes,cachedFrames:asset.store.stats().cachedFrames,rgbaBytes:pixels?.byteLength??0,lastClip,lastFrame,leases:lease.users?.()??1,rasterizations,heldHits};},
128
151
  dispose(){if(disposed)return;disposed=true;pixels=null;prep=null;contacts.reset();asset=null;lastText=lastPaintKey='';release();}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitefoundry/retrieviewer",
3
- "version": "0.0.19",
3
+ "version": "0.0.21",
4
4
  "description": "A fluffy Braille desktop pet for Windows and Linux X11, with experimental macOS support and an embeddable TUI engine.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "homepage": "https://bitefoundry.github.io/retrieviewer/",
@@ -185,6 +185,7 @@
185
185
  "integrations/purrviewer/art/ginger.json",
186
186
  "integrations/purrviewer/art/ginger.rvz",
187
187
  "integrations/purrviewer/src/contact.mjs",
188
+ "integrations/purrviewer/src/facing.mjs",
188
189
  "integrations/purrviewer/src/habitat.mjs",
189
190
  "integrations/purrviewer/src/life.mjs",
190
191
  "integrations/purrviewer/src/purrviewer-core.mjs",
@@ -1 +1 @@
1
- {"version":1,"canonical":320,"ballRadiusPx":17.5,"mouthOffsetPx":25.0,"minScore":0.9,"seed":{"family":"approach","frame":45,"box":[158,108,68,50],"nose":[191.7,143.3]},"method":"cv2 TM_CCOEFF_NORMED multi-scale match of measured eyes+nose seed; mouth = nose + scale*offset (down)","unsupported":"front side-view tween, rear, actions (incl. walk-enter/walk), interactions, behaviors watch/rest","families":{"approach":{"cache":"puppy-paper-approach.bin.gz","sha256":"f5558c57d5a445d396e06c060f9f8d64e6ce0ff5b9b92fa6d77ef9bb2984a2fe","samples":9,"covered":124,"frames":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[224.66,147.5,0.9,0.904],[222.44,147.33,0.9,0.915],[219.17,148.34,0.9,0.934],[215.72,149.59,0.92,0.945],[212.89,150.36,0.92,0.957],[209.34,151.71,0.94,0.966],[206.61,152.52,0.94,0.972],[202.85,153.49,0.94,0.965],[202.85,153.49,0.94,0.965],[198.71,154.18,0.96,0.966],[195.56,154.22,0.96,0.97],[191.82,155.11,0.98,0.967],[188.11,155.2,0.98,0.966],[184.12,154.72,0.96,0.966],[180.5,154.77,0.96,0.968],[177.45,154.9,0.96,0.97],[173.13,154.91,0.96,0.965],[173.13,154.91,0.96,0.965],[175.53,155.91,0.96,0.974],[177.69,157.9,0.98,0.976],[179.97,159.24,0.98,0.983],[182.41,161.16,0.98,0.988],[184.55,162.2,0.98,0.987],[186.96,165.39,1.0,0.991],[189.54,166.0,0.98,0.986],[191.7,168.3,1.0,1.0],[191.7,168.3,1.0,1.0],[190.78,168.33,1.0,0.999],[190.26,168.08,0.98,0.983],[189.46,169.24,1.0,0.994],[188.66,169.45,1.0,0.988],[187.9,169.62,1.0,0.977],[187.07,168.92,0.98,0.971],[186.15,171.37,1.02,0.964],[185.12,171.44,1.02,0.959],[185.12,171.44,1.02,0.959],[183.01,167.4,0.98,0.967],[180.53,166.1,1.0,0.965],[178.7,163.98,0.98,0.962],[176.6,160.9,0.96,0.958],[174.17,158.89,0.96,0.958],[172.42,158.03,0.98,0.948],[170.58,155.84,0.96,0.945],[168.27,154.8,0.98,0.932],[168.27,154.8,0.98,0.932],[168.28,154.25,0.98,0.941],[167.82,153.76,0.98,0.938],[167.36,153.07,0.98,0.941],[167.1,151.76,0.96,0.941],[166.97,152.2,0.98,0.947],[166.89,151.46,0.98,0.944],[166.21,151.32,0.98,0.944],[166.05,150.38,0.98,0.943],[166.05,150.38,0.98,0.943],[168.13,148.79,0.96,0.945],[169.85,149.25,0.98,0.951],[172.04,147.99,0.98,0.948],[174.87,146.91,0.98,0.947],[176.38,147.11,1.0,0.947],[179.35,146.95,1.02,0.941],[181.18,146.19,1.02,0.943],[183.86,145.25,1.02,0.942],[183.86,145.25,1.02,0.942],[182.95,145.34,1.02,0.946],[182.65,145.38,1.02,0.953],[181.7,145.7,1.02,0.948],[181.06,145.96,1.02,0.949],[180.46,145.26,1.0,0.954],[179.53,146.46,1.02,0.949],[179.36,146.51,1.02,0.948],[178.41,146.53,1.02,0.947],[178.41,146.53,1.02,0.947],[180.31,147.47,1.02,0.952],[181.26,147.72,1.02,0.954],[183.14,147.04,0.98,0.957],[184.8,149.17,1.0,0.967],[186.42,150.19,1.0,0.966],[188.41,150.46,1.0,0.966],[189.95,151.41,1.0,0.971],[191.61,152.4,1.0,0.971],[191.61,152.4,1.0,0.971],[189.01,151.48,1.0,0.971],[186.85,151.25,1.0,0.979],[184.64,150.57,1.0,0.975],[182.06,149.13,0.98,0.974],[179.48,149.48,1.0,0.976],[177.17,149.61,1.02,0.976],[175.2,149.27,1.02,0.979],[172.3,148.6,1.02,0.975],[172.3,148.6,1.02,0.975],[175.21,151.35,1.02,0.979],[177.27,153.34,1.02,0.982],[179.97,155.12,1.0,0.983],[181.35,158.65,1.02,0.988],[184.96,160.94,1.0,0.987],[187.54,163.29,1.0,0.996],[189.22,166.33,1.02,0.992],[191.7,168.3,1.0,1.0],[191.7,168.3,1.0,1.0],[189.18,166.28,1.0,0.99],[186.95,164.07,0.98,0.991],[184.75,163.57,1.0,0.987],[182.21,160.91,0.98,0.986],[180.15,158.8,0.96,0.98],[177.73,156.71,0.96,0.974],[175.67,155.87,0.96,0.97],[173.13,154.91,0.96,0.965],[173.13,154.91,0.96,0.965],[176.75,154.83,0.96,0.966],[180.19,154.77,0.96,0.966],[183.7,154.69,0.96,0.966],[187.78,153.74,0.94,0.965],[191.91,155.07,0.98,0.968],[195.35,154.27,0.96,0.969],[199.09,154.17,0.96,0.968],[202.85,153.49,0.94,0.965],[202.85,153.49,0.94,0.965],[206.07,152.72,0.94,0.968],[209.04,152.89,0.96,0.962],[211.97,151.51,0.94,0.959],[215.45,150.92,0.94,0.941],[218.71,149.41,0.92,0.933],[221.75,148.5,0.9,0.92],[224.95,147.58,0.9,0.903],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]},"behaviors":{"cache":"puppy-paper-behaviors.bin.gz","sha256":"7918261fb64c57a91739729841fd84c6dd53891196c7fb76ee9c27712ab6ef5d","samples":9,"covered":90,"frames":[[201.21,166.15,0.98,0.959],[200.4,166.14,0.98,0.961],[200.13,166.16,0.98,0.963],[199.21,166.15,0.98,0.964],[198.65,166.13,0.98,0.964],[197.98,166.12,0.98,0.967],[197.08,166.1,0.98,0.966],[196.87,166.13,0.98,0.966],[195.93,166.1,0.98,0.965],[195.93,166.1,0.98,0.965],[196.01,166.1,0.98,0.967],[196.35,166.05,0.98,0.96],[196.85,166.1,0.98,0.966],[197.08,166.07,0.98,0.964],[197.25,166.07,0.98,0.96],[197.72,166.12,0.98,0.963],[198.13,166.05,0.98,0.957],[198.18,166.04,0.98,0.954],[198.18,166.04,0.98,0.954],[198.23,166.06,0.98,0.957],[198.26,166.09,0.98,0.957],[198.28,166.12,0.98,0.958],[198.81,167.29,1.0,0.968],[198.92,167.34,1.0,0.966],[198.98,167.37,1.0,0.964],[199.06,167.41,1.0,0.962],[199.07,167.42,1.0,0.96],[199.07,167.42,1.0,0.96],[199.16,167.39,1.0,0.96],[199.43,167.35,1.0,0.96],[199.96,167.33,1.0,0.965],[200.14,166.34,0.98,0.965],[200.28,166.27,0.98,0.963],[200.84,166.24,0.98,0.965],[201.14,166.17,0.98,0.962],[201.21,166.15,0.98,0.959],[191.7,168.3,1.0,1.0],[192.77,168.21,1.0,0.999],[194.11,167.32,0.98,0.992],[195.54,167.92,1.0,0.986],[196.71,166.87,0.98,0.982],[197.88,167.48,1.0,0.978],[199.08,166.37,0.98,0.973],[200.32,166.2,0.98,0.965],[201.21,166.15,0.98,0.959],[201.21,166.15,0.98,0.959],[201.8,170.56,1.0,0.964],[202.18,172.74,0.98,0.965],[202.46,176.13,0.98,0.966],[203.09,179.85,0.98,0.968],[203.28,183.55,0.98,0.961],[203.98,187.56,1.0,0.963],[204.72,190.66,1.0,0.967],[204.91,194.05,1.0,0.954],[204.91,194.05,1.0,0.954],[203.9,194.08,1.0,0.956],[202.88,194.15,0.98,0.958],[201.8,195.0,1.0,0.958],[200.65,195.45,1.0,0.961],[199.66,196.08,1.0,0.957],[198.46,196.15,1.0,0.953],[197.37,196.24,0.98,0.95],[196.35,196.3,0.98,0.947],[196.35,196.3,0.98,0.947],[192.86,196.11,1.0,0.951],[190.53,196.01,1.0,0.951],[187.51,196.0,1.0,0.949],[184.08,194.32,0.98,0.952],[180.99,193.88,0.98,0.949],[177.81,194.62,1.0,0.949],[175.36,194.61,1.02,0.95],[171.67,193.62,1.0,0.944],[171.67,193.62,1.0,0.944],[174.59,193.5,1.02,0.952],[177.38,192.46,1.02,0.95],[180.43,190.38,1.0,0.957],[183.32,188.01,0.98,0.95],[186.05,187.0,0.98,0.954],[189.53,187.6,1.02,0.95],[192.59,185.84,1.0,0.945],[195.46,183.93,0.98,0.942],[195.46,183.93,0.98,0.942],[195.23,182.08,0.98,0.958],[194.56,180.73,1.0,0.963],[194.34,179.26,1.0,0.974],[193.93,177.12,1.0,0.982],[193.33,175.54,1.02,0.983],[192.7,173.2,1.0,0.996],[192.66,170.55,1.0,0.992],[191.7,168.3,1.0,1.0],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]},"seat":{"cache":"puppy-paper-seat.bin.gz","sha256":"613dbeeeaec11804e80db0216922c8f62294745514ee6283bdce61a6d784dd5e","samples":17,"covered":51,"frames":[[191.7,168.3,1.0,1.0],[187.28,167.83,0.98,0.992],[186.01,168.11,0.98,0.997],[184.36,167.85,0.96,0.997],[182.14,168.27,0.96,0.99],[179.4,167.97,0.94,0.989],[177.05,167.47,0.92,0.991],[174.39,167.11,0.9,0.982],[171.52,167.84,0.9,0.977],[169.74,168.03,0.9,0.978],[166.37,168.27,0.9,0.98],[163.95,166.65,0.86,0.975],[161.1,167.16,0.86,0.973],[158.82,167.1,0.86,0.97],[157.06,167.85,0.86,0.97],[155.39,167.09,0.84,0.966],[152.19,167.86,0.84,0.951],[152.19,167.86,0.84,0.951],[152.24,167.87,0.84,0.952],[152.26,167.86,0.84,0.953],[152.26,167.85,0.84,0.953],[152.27,167.85,0.84,0.953],[152.3,167.84,0.84,0.954],[152.33,167.83,0.84,0.954],[152.69,166.08,0.8,0.956],[152.75,166.06,0.8,0.956],[152.77,166.04,0.8,0.957],[153.16,166.03,0.8,0.957],[153.19,166.03,0.8,0.956],[153.21,166.02,0.8,0.955],[153.23,166.02,0.8,0.955],[153.27,166.02,0.8,0.953],[153.37,166.03,0.8,0.952],[153.28,166.02,0.8,0.952],[153.28,166.02,0.8,0.952],[154.28,166.02,0.8,0.954],[154.49,166.87,0.82,0.951],[155.31,165.99,0.8,0.953],[156.08,165.96,0.8,0.956],[156.67,166.83,0.82,0.958],[157.34,166.82,0.82,0.955],[158.31,166.73,0.82,0.956],[158.83,166.62,0.82,0.96],[159.42,166.54,0.82,0.958],[160.23,166.48,0.82,0.952],[160.85,166.5,0.82,0.954],[161.4,166.49,0.82,0.954],[162.04,166.45,0.82,0.947],[162.98,166.47,0.82,0.947],[163.19,166.46,0.82,0.946],[164.02,166.47,0.82,0.945]]},"arrivalSeat":{"cache":"puppy-paper-arrival-seat.bin.gz","sha256":"13acb62fd573ff7ef97bcf59be80757897fe9d1784f187ab278990ff94a643b9","samples":17,"covered":51,"frames":[[195.46,183.93,0.98,0.942],[191.05,182.87,0.98,0.955],[189.92,182.76,0.98,0.95],[187.17,181.29,0.96,0.954],[184.77,179.89,0.94,0.954],[182.36,179.93,0.96,0.955],[179.54,177.85,0.94,0.96],[176.3,176.4,0.92,0.959],[174.08,175.36,0.9,0.966],[171.91,174.25,0.9,0.958],[168.15,172.23,0.88,0.953],[165.17,170.82,0.86,0.963],[162.45,171.28,0.88,0.959],[160.06,170.01,0.86,0.965],[157.6,169.78,0.86,0.959],[155.67,167.31,0.82,0.96],[152.19,167.86,0.84,0.951],[152.19,167.86,0.84,0.951],[152.24,167.87,0.84,0.952],[152.26,167.86,0.84,0.953],[152.26,167.85,0.84,0.953],[152.27,167.85,0.84,0.953],[152.3,167.84,0.84,0.954],[152.33,167.83,0.84,0.954],[152.69,166.08,0.8,0.956],[152.75,166.06,0.8,0.956],[152.77,166.04,0.8,0.957],[153.16,166.03,0.8,0.957],[153.19,166.03,0.8,0.956],[153.21,166.02,0.8,0.955],[153.23,166.02,0.8,0.955],[153.27,166.02,0.8,0.953],[153.37,166.03,0.8,0.952],[153.28,166.02,0.8,0.952],[153.28,166.02,0.8,0.952],[154.28,166.02,0.8,0.954],[154.49,166.87,0.82,0.951],[155.31,165.99,0.8,0.953],[156.08,165.96,0.8,0.956],[156.67,166.83,0.82,0.958],[157.34,166.82,0.82,0.955],[158.31,166.73,0.82,0.956],[158.83,166.62,0.82,0.96],[159.42,166.54,0.82,0.958],[160.23,166.48,0.82,0.952],[160.85,166.5,0.82,0.954],[161.4,166.49,0.82,0.954],[162.04,166.45,0.82,0.947],[162.98,166.47,0.82,0.947],[163.19,166.46,0.82,0.946],[164.02,166.47,0.82,0.945]]}}}
1
+ {"version":1,"canonical":320,"ballRadiusPx":17.5,"mouthOffsetPx":25,"minScore":0.9,"seed":{"family":"approach","frame":45,"box":[158,108,68,50],"nose":[191.7,143.3]},"method":"cv2 TM_CCOEFF_NORMED multi-scale match of measured eyes+nose seed; mouth = nose + scale*offset (down)","unsupported":"front side-view tween, rear, actions (incl. walk-enter/walk), interactions, behaviors watch/rest","families":{"approach":{"cache":"puppy-paper-approach.bin.gz","sha256":"f5558c57d5a445d396e06c060f9f8d64e6ce0ff5b9b92fa6d77ef9bb2984a2fe","samples":9,"covered":124,"frames":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[224.66,147.5,0.9,0.904],[222.44,147.33,0.9,0.915],[219.17,148.34,0.9,0.934],[215.72,149.59,0.92,0.945],[212.89,150.36,0.92,0.957],[209.34,151.71,0.94,0.966],[206.61,152.52,0.94,0.972],[202.85,153.49,0.94,0.965],[202.85,153.49,0.94,0.965],[198.71,154.18,0.96,0.966],[195.56,154.22,0.96,0.97],[191.82,155.11,0.98,0.967],[188.11,155.2,0.98,0.966],[184.12,154.72,0.96,0.966],[180.5,154.77,0.96,0.968],[177.45,154.9,0.96,0.97],[173.13,154.91,0.96,0.965],[173.13,154.91,0.96,0.965],[175.53,155.91,0.96,0.974],[177.69,157.9,0.98,0.976],[179.97,159.24,0.98,0.983],[182.41,161.16,0.98,0.988],[184.55,162.2,0.98,0.987],[186.96,165.39,1,0.991],[189.54,166,0.98,0.986],[191.7,168.3,1,1],[191.7,168.3,1,1],[190.78,168.33,1,0.999],[190.26,168.08,0.98,0.983],[189.46,169.24,1,0.994],[188.66,169.45,1,0.988],[187.9,169.62,1,0.977],[187.07,168.92,0.98,0.971],[186.15,171.37,1.02,0.964],[185.12,171.44,1.02,0.959],[185.12,171.44,1.02,0.959],[183.01,167.4,0.98,0.967],[180.53,166.1,1,0.965],[178.7,163.98,0.98,0.962],[176.6,160.9,0.96,0.958],[174.17,158.89,0.96,0.958],[172.42,158.03,0.98,0.948],[170.58,155.84,0.96,0.945],[168.27,154.8,0.98,0.932],[168.27,154.8,0.98,0.932],[168.28,154.25,0.98,0.941],[167.82,153.76,0.98,0.938],[167.36,153.07,0.98,0.941],[167.1,151.76,0.96,0.941],[166.97,152.2,0.98,0.947],[166.89,151.46,0.98,0.944],[166.21,151.32,0.98,0.944],[166.05,150.38,0.98,0.943],[166.05,150.38,0.98,0.943],[168.13,148.79,0.96,0.945],[169.85,149.25,0.98,0.951],[172.04,147.99,0.98,0.948],[174.87,146.91,0.98,0.947],[176.38,147.11,1,0.947],[179.35,146.95,1.02,0.941],[181.18,146.19,1.02,0.943],[183.86,145.25,1.02,0.942],[183.86,145.25,1.02,0.942],[182.95,145.34,1.02,0.946],[182.65,145.38,1.02,0.953],[181.7,145.7,1.02,0.948],[181.06,145.96,1.02,0.949],[180.46,145.26,1,0.954],[179.53,146.46,1.02,0.949],[179.36,146.51,1.02,0.948],[178.41,146.53,1.02,0.947],[178.41,146.53,1.02,0.947],[180.31,147.47,1.02,0.952],[181.26,147.72,1.02,0.954],[183.14,147.04,0.98,0.957],[184.8,149.17,1,0.967],[186.42,150.19,1,0.966],[188.41,150.46,1,0.966],[189.95,151.41,1,0.971],[191.61,152.4,1,0.971],[191.61,152.4,1,0.971],[189.01,151.48,1,0.971],[186.85,151.25,1,0.979],[184.64,150.57,1,0.975],[182.06,149.13,0.98,0.974],[179.48,149.48,1,0.976],[177.17,149.61,1.02,0.976],[175.2,149.27,1.02,0.979],[172.3,148.6,1.02,0.975],[172.3,148.6,1.02,0.975],[175.21,151.35,1.02,0.979],[177.27,153.34,1.02,0.982],[179.97,155.12,1,0.983],[181.35,158.65,1.02,0.988],[184.96,160.94,1,0.987],[187.54,163.29,1,0.996],[189.22,166.33,1.02,0.992],[191.7,168.3,1,1],[191.7,168.3,1,1],[189.18,166.28,1,0.99],[186.95,164.07,0.98,0.991],[184.75,163.57,1,0.987],[182.21,160.91,0.98,0.986],[180.15,158.8,0.96,0.98],[177.73,156.71,0.96,0.974],[175.67,155.87,0.96,0.97],[173.13,154.91,0.96,0.965],[173.13,154.91,0.96,0.965],[176.75,154.83,0.96,0.966],[180.19,154.77,0.96,0.966],[183.7,154.69,0.96,0.966],[187.78,153.74,0.94,0.965],[191.91,155.07,0.98,0.968],[195.35,154.27,0.96,0.969],[199.09,154.17,0.96,0.968],[202.85,153.49,0.94,0.965],[202.85,153.49,0.94,0.965],[206.07,152.72,0.94,0.968],[209.04,152.89,0.96,0.962],[211.97,151.51,0.94,0.959],[215.45,150.92,0.94,0.941],[218.71,149.41,0.92,0.933],[221.75,148.5,0.9,0.92],[224.95,147.58,0.9,0.903],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]},"behaviors":{"cache":"puppy-paper-behaviors.bin.gz","sha256":"7918261fb64c57a91739729841fd84c6dd53891196c7fb76ee9c27712ab6ef5d","samples":9,"covered":90,"frames":[[201.21,166.15,0.98,0.959],[200.4,166.14,0.98,0.961],[200.13,166.16,0.98,0.963],[199.21,166.15,0.98,0.964],[198.65,166.13,0.98,0.964],[197.98,166.12,0.98,0.967],[197.08,166.1,0.98,0.966],[196.87,166.13,0.98,0.966],[195.93,166.1,0.98,0.965],[195.93,166.1,0.98,0.965],[196.01,166.1,0.98,0.967],[196.35,166.05,0.98,0.96],[196.85,166.1,0.98,0.966],[197.08,166.07,0.98,0.964],[197.25,166.07,0.98,0.96],[197.72,166.12,0.98,0.963],[198.13,166.05,0.98,0.957],[198.18,166.04,0.98,0.954],[198.18,166.04,0.98,0.954],[198.23,166.06,0.98,0.957],[198.26,166.09,0.98,0.957],[198.28,166.12,0.98,0.958],[198.81,167.29,1,0.968],[198.92,167.34,1,0.966],[198.98,167.37,1,0.964],[199.06,167.41,1,0.962],[199.07,167.42,1,0.96],[199.07,167.42,1,0.96],[199.16,167.39,1,0.96],[199.43,167.35,1,0.96],[199.96,167.33,1,0.965],[200.14,166.34,0.98,0.965],[200.28,166.27,0.98,0.963],[200.84,166.24,0.98,0.965],[201.14,166.17,0.98,0.962],[201.21,166.15,0.98,0.959],[191.7,168.3,1,1],[192.77,168.21,1,0.999],[194.11,167.32,0.98,0.992],[195.54,167.92,1,0.986],[196.71,166.87,0.98,0.982],[197.88,167.48,1,0.978],[199.08,166.37,0.98,0.973],[200.32,166.2,0.98,0.965],[201.21,166.15,0.98,0.959],[201.21,166.15,0.98,0.959],[201.8,170.56,1,0.964],[202.18,172.74,0.98,0.965],[202.46,176.13,0.98,0.966],[203.09,179.85,0.98,0.968],[203.28,183.55,0.98,0.961],[203.98,187.56,1,0.963],[204.72,190.66,1,0.967],[204.91,194.05,1,0.954],[204.91,194.05,1,0.954],[203.9,194.08,1,0.956],[202.88,194.15,0.98,0.958],[201.8,195,1,0.958],[200.65,195.45,1,0.961],[199.66,196.08,1,0.957],[198.46,196.15,1,0.953],[197.37,196.24,0.98,0.95],[196.35,196.3,0.98,0.947],[196.35,196.3,0.98,0.947],[192.86,196.11,1,0.951],[190.53,196.01,1,0.951],[187.51,196,1,0.949],[184.08,194.32,0.98,0.952],[180.99,193.88,0.98,0.949],[177.81,194.62,1,0.949],[175.36,194.61,1.02,0.95],[171.67,193.62,1,0.944],[171.67,193.62,1,0.944],[174.59,193.5,1.02,0.952],[177.38,192.46,1.02,0.95],[180.43,190.38,1,0.957],[183.32,188.01,0.98,0.95],[186.05,187,0.98,0.954],[189.53,187.6,1.02,0.95],[192.59,185.84,1,0.945],[195.46,183.93,0.98,0.942],[195.46,183.93,0.98,0.942],[195.23,182.08,0.98,0.958],[194.56,180.73,1,0.963],[194.34,179.26,1,0.974],[193.93,177.12,1,0.982],[193.33,175.54,1.02,0.983],[192.7,173.2,1,0.996],[192.66,170.55,1,0.992],[191.7,168.3,1,1],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]},"seat":{"cache":"puppy-paper-seat.bin.gz","sha256":"613dbeeeaec11804e80db0216922c8f62294745514ee6283bdce61a6d784dd5e","samples":17,"covered":51,"frames":[[191.7,168.3,1,1],[187.28,167.83,0.98,0.992],[186.01,168.11,0.98,0.997],[184.36,167.85,0.96,0.997],[182.14,168.27,0.96,0.99],[179.4,167.97,0.94,0.989],[177.05,167.47,0.92,0.991],[174.39,167.11,0.9,0.982],[171.52,167.84,0.9,0.977],[169.74,168.03,0.9,0.978],[166.37,168.27,0.9,0.98],[163.95,166.65,0.86,0.975],[161.1,167.16,0.86,0.973],[158.82,167.1,0.86,0.97],[157.06,167.85,0.86,0.97],[155.39,167.09,0.84,0.966],[152.19,167.86,0.84,0.951],[152.19,167.86,0.84,0.951],[152.24,167.87,0.84,0.952],[152.26,167.86,0.84,0.953],[152.26,167.85,0.84,0.953],[152.27,167.85,0.84,0.953],[152.3,167.84,0.84,0.954],[152.33,167.83,0.84,0.954],[152.69,166.08,0.8,0.956],[152.75,166.06,0.8,0.956],[152.77,166.04,0.8,0.957],[153.16,166.03,0.8,0.957],[153.19,166.03,0.8,0.956],[153.21,166.02,0.8,0.955],[153.23,166.02,0.8,0.955],[153.27,166.02,0.8,0.953],[153.37,166.03,0.8,0.952],[153.28,166.02,0.8,0.952],[153.28,166.02,0.8,0.952],[154.28,166.02,0.8,0.954],[154.49,166.87,0.82,0.951],[155.31,165.99,0.8,0.953],[156.08,165.96,0.8,0.956],[156.67,166.83,0.82,0.958],[157.34,166.82,0.82,0.955],[158.31,166.73,0.82,0.956],[158.83,166.62,0.82,0.96],[159.42,166.54,0.82,0.958],[160.23,166.48,0.82,0.952],[160.85,166.5,0.82,0.954],[161.4,166.49,0.82,0.954],[162.04,166.45,0.82,0.947],[162.98,166.47,0.82,0.947],[163.19,166.46,0.82,0.946],[164.02,166.47,0.82,0.945]]},"arrivalSeat":{"cache":"puppy-paper-arrival-seat.bin.gz","sha256":"13acb62fd573ff7ef97bcf59be80757897fe9d1784f187ab278990ff94a643b9","samples":17,"covered":51,"frames":[[195.46,183.93,0.98,0.942],[191.05,182.87,0.98,0.955],[189.92,182.76,0.98,0.95],[187.17,181.29,0.96,0.954],[184.77,179.89,0.94,0.954],[182.36,179.93,0.96,0.955],[179.54,177.85,0.94,0.96],[176.3,176.4,0.92,0.959],[174.08,175.36,0.9,0.966],[171.91,174.25,0.9,0.958],[168.15,172.23,0.88,0.953],[165.17,170.82,0.86,0.963],[162.45,171.28,0.88,0.959],[160.06,170.01,0.86,0.965],[157.6,169.78,0.86,0.959],[155.67,167.31,0.82,0.96],[152.19,167.86,0.84,0.951],[152.19,167.86,0.84,0.951],[152.24,167.87,0.84,0.952],[152.26,167.86,0.84,0.953],[152.26,167.85,0.84,0.953],[152.27,167.85,0.84,0.953],[152.3,167.84,0.84,0.954],[152.33,167.83,0.84,0.954],[152.69,166.08,0.8,0.956],[152.75,166.06,0.8,0.956],[152.77,166.04,0.8,0.957],[153.16,166.03,0.8,0.957],[153.19,166.03,0.8,0.956],[153.21,166.02,0.8,0.955],[153.23,166.02,0.8,0.955],[153.27,166.02,0.8,0.953],[153.37,166.03,0.8,0.952],[153.28,166.02,0.8,0.952],[153.28,166.02,0.8,0.952],[154.28,166.02,0.8,0.954],[154.49,166.87,0.82,0.951],[155.31,165.99,0.8,0.953],[156.08,165.96,0.8,0.956],[156.67,166.83,0.82,0.958],[157.34,166.82,0.82,0.955],[158.31,166.73,0.82,0.956],[158.83,166.62,0.82,0.96],[159.42,166.54,0.82,0.958],[160.23,166.48,0.82,0.952],[160.85,166.5,0.82,0.954],[161.4,166.49,0.82,0.954],[162.04,166.45,0.82,0.947],[162.98,166.47,0.82,0.947],[163.19,166.46,0.82,0.946],[164.02,166.47,0.82,0.945]]},"actions":{"sha256":"1e0db7138d087292a3e70c246a1d56af590b3fb50928687a026e7080d7657c38","frames":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[192,168,1,null],[197,167,1,null],[203,165,1,null],[209,165,1,null],[224,154,1,null],[235,150,1,null],[242,149,1,null],[245,149,1,null],[252,148,1,null],null,null,null,null,null,[237,150,1,null],[245,149,1,null],[248,149,1,null],[252,148,1,null],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]}}}
@@ -1,14 +1,17 @@
1
1
  import {paperBehaviorPose} from './puppy-paper-behaviors.mjs';
2
+ import {paperActionPose} from './puppy-paper-actions.mjs';
2
3
 
3
4
  // Measured open-mouth centers per exact cached source sample (canonical 320px
4
- // source space, unflipped). Generated offline by prepare-mouth-anchors.py from
5
- // the drawn faces; never a root height, bob curve or runtime image analysis.
6
- // Families/frames missing here (side view, rear, actions, turned heads) are
5
+ // source space, unflipped). Base families came from offline face annotation;
6
+ // standing-turn samples are maintained by tools/update-turn-mouths.mjs.
7
+ // Never a root height, bob curve or runtime image analysis.
8
+ // Families/frames missing here (unmeasured side/rear poses and actions) are
7
9
  // unsupported: callers hide the carried ball rather than float it.
8
- export const MOUTH_ANCHORS=/*BEGIN GENERATED*/{"version":1,"ballRadiusPx":17.5,"families":{"approach":{"sha256":"f5558c57d5a445d396e06c060f9f8d64e6ce0ff5b9b92fa6d77ef9bb2984a2fe","frames":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[224.66,147.5,0.9,0.904],[222.44,147.33,0.9,0.915],[219.17,148.34,0.9,0.934],[215.72,149.59,0.92,0.945],[212.89,150.36,0.92,0.957],[209.34,151.71,0.94,0.966],[206.61,152.52,0.94,0.972],[202.85,153.49,0.94,0.965],[202.85,153.49,0.94,0.965],[198.71,154.18,0.96,0.966],[195.56,154.22,0.96,0.97],[191.82,155.11,0.98,0.967],[188.11,155.2,0.98,0.966],[184.12,154.72,0.96,0.966],[180.5,154.77,0.96,0.968],[177.45,154.9,0.96,0.97],[173.13,154.91,0.96,0.965],[173.13,154.91,0.96,0.965],[175.53,155.91,0.96,0.974],[177.69,157.9,0.98,0.976],[179.97,159.24,0.98,0.983],[182.41,161.16,0.98,0.988],[184.55,162.2,0.98,0.987],[186.96,165.39,1.0,0.991],[189.54,166.0,0.98,0.986],[191.7,168.3,1.0,1.0],[191.7,168.3,1.0,1.0],[190.78,168.33,1.0,0.999],[190.26,168.08,0.98,0.983],[189.46,169.24,1.0,0.994],[188.66,169.45,1.0,0.988],[187.9,169.62,1.0,0.977],[187.07,168.92,0.98,0.971],[186.15,171.37,1.02,0.964],[185.12,171.44,1.02,0.959],[185.12,171.44,1.02,0.959],[183.01,167.4,0.98,0.967],[180.53,166.1,1.0,0.965],[178.7,163.98,0.98,0.962],[176.6,160.9,0.96,0.958],[174.17,158.89,0.96,0.958],[172.42,158.03,0.98,0.948],[170.58,155.84,0.96,0.945],[168.27,154.8,0.98,0.932],[168.27,154.8,0.98,0.932],[168.28,154.25,0.98,0.941],[167.82,153.76,0.98,0.938],[167.36,153.07,0.98,0.941],[167.1,151.76,0.96,0.941],[166.97,152.2,0.98,0.947],[166.89,151.46,0.98,0.944],[166.21,151.32,0.98,0.944],[166.05,150.38,0.98,0.943],[166.05,150.38,0.98,0.943],[168.13,148.79,0.96,0.945],[169.85,149.25,0.98,0.951],[172.04,147.99,0.98,0.948],[174.87,146.91,0.98,0.947],[176.38,147.11,1.0,0.947],[179.35,146.95,1.02,0.941],[181.18,146.19,1.02,0.943],[183.86,145.25,1.02,0.942],[183.86,145.25,1.02,0.942],[182.95,145.34,1.02,0.946],[182.65,145.38,1.02,0.953],[181.7,145.7,1.02,0.948],[181.06,145.96,1.02,0.949],[180.46,145.26,1.0,0.954],[179.53,146.46,1.02,0.949],[179.36,146.51,1.02,0.948],[178.41,146.53,1.02,0.947],[178.41,146.53,1.02,0.947],[180.31,147.47,1.02,0.952],[181.26,147.72,1.02,0.954],[183.14,147.04,0.98,0.957],[184.8,149.17,1.0,0.967],[186.42,150.19,1.0,0.966],[188.41,150.46,1.0,0.966],[189.95,151.41,1.0,0.971],[191.61,152.4,1.0,0.971],[191.61,152.4,1.0,0.971],[189.01,151.48,1.0,0.971],[186.85,151.25,1.0,0.979],[184.64,150.57,1.0,0.975],[182.06,149.13,0.98,0.974],[179.48,149.48,1.0,0.976],[177.17,149.61,1.02,0.976],[175.2,149.27,1.02,0.979],[172.3,148.6,1.02,0.975],[172.3,148.6,1.02,0.975],[175.21,151.35,1.02,0.979],[177.27,153.34,1.02,0.982],[179.97,155.12,1.0,0.983],[181.35,158.65,1.02,0.988],[184.96,160.94,1.0,0.987],[187.54,163.29,1.0,0.996],[189.22,166.33,1.02,0.992],[191.7,168.3,1.0,1.0],[191.7,168.3,1.0,1.0],[189.18,166.28,1.0,0.99],[186.95,164.07,0.98,0.991],[184.75,163.57,1.0,0.987],[182.21,160.91,0.98,0.986],[180.15,158.8,0.96,0.98],[177.73,156.71,0.96,0.974],[175.67,155.87,0.96,0.97],[173.13,154.91,0.96,0.965],[173.13,154.91,0.96,0.965],[176.75,154.83,0.96,0.966],[180.19,154.77,0.96,0.966],[183.7,154.69,0.96,0.966],[187.78,153.74,0.94,0.965],[191.91,155.07,0.98,0.968],[195.35,154.27,0.96,0.969],[199.09,154.17,0.96,0.968],[202.85,153.49,0.94,0.965],[202.85,153.49,0.94,0.965],[206.07,152.72,0.94,0.968],[209.04,152.89,0.96,0.962],[211.97,151.51,0.94,0.959],[215.45,150.92,0.94,0.941],[218.71,149.41,0.92,0.933],[221.75,148.5,0.9,0.92],[224.95,147.58,0.9,0.903],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]},"behaviors":{"sha256":"7918261fb64c57a91739729841fd84c6dd53891196c7fb76ee9c27712ab6ef5d","frames":[[201.21,166.15,0.98,0.959],[200.4,166.14,0.98,0.961],[200.13,166.16,0.98,0.963],[199.21,166.15,0.98,0.964],[198.65,166.13,0.98,0.964],[197.98,166.12,0.98,0.967],[197.08,166.1,0.98,0.966],[196.87,166.13,0.98,0.966],[195.93,166.1,0.98,0.965],[195.93,166.1,0.98,0.965],[196.01,166.1,0.98,0.967],[196.35,166.05,0.98,0.96],[196.85,166.1,0.98,0.966],[197.08,166.07,0.98,0.964],[197.25,166.07,0.98,0.96],[197.72,166.12,0.98,0.963],[198.13,166.05,0.98,0.957],[198.18,166.04,0.98,0.954],[198.18,166.04,0.98,0.954],[198.23,166.06,0.98,0.957],[198.26,166.09,0.98,0.957],[198.28,166.12,0.98,0.958],[198.81,167.29,1.0,0.968],[198.92,167.34,1.0,0.966],[198.98,167.37,1.0,0.964],[199.06,167.41,1.0,0.962],[199.07,167.42,1.0,0.96],[199.07,167.42,1.0,0.96],[199.16,167.39,1.0,0.96],[199.43,167.35,1.0,0.96],[199.96,167.33,1.0,0.965],[200.14,166.34,0.98,0.965],[200.28,166.27,0.98,0.963],[200.84,166.24,0.98,0.965],[201.14,166.17,0.98,0.962],[201.21,166.15,0.98,0.959],[191.7,168.3,1.0,1.0],[192.77,168.21,1.0,0.999],[194.11,167.32,0.98,0.992],[195.54,167.92,1.0,0.986],[196.71,166.87,0.98,0.982],[197.88,167.48,1.0,0.978],[199.08,166.37,0.98,0.973],[200.32,166.2,0.98,0.965],[201.21,166.15,0.98,0.959],[201.21,166.15,0.98,0.959],[201.8,170.56,1.0,0.964],[202.18,172.74,0.98,0.965],[202.46,176.13,0.98,0.966],[203.09,179.85,0.98,0.968],[203.28,183.55,0.98,0.961],[203.98,187.56,1.0,0.963],[204.72,190.66,1.0,0.967],[204.91,194.05,1.0,0.954],[204.91,194.05,1.0,0.954],[203.9,194.08,1.0,0.956],[202.88,194.15,0.98,0.958],[201.8,195.0,1.0,0.958],[200.65,195.45,1.0,0.961],[199.66,196.08,1.0,0.957],[198.46,196.15,1.0,0.953],[197.37,196.24,0.98,0.95],[196.35,196.3,0.98,0.947],[196.35,196.3,0.98,0.947],[192.86,196.11,1.0,0.951],[190.53,196.01,1.0,0.951],[187.51,196.0,1.0,0.949],[184.08,194.32,0.98,0.952],[180.99,193.88,0.98,0.949],[177.81,194.62,1.0,0.949],[175.36,194.61,1.02,0.95],[171.67,193.62,1.0,0.944],[171.67,193.62,1.0,0.944],[174.59,193.5,1.02,0.952],[177.38,192.46,1.02,0.95],[180.43,190.38,1.0,0.957],[183.32,188.01,0.98,0.95],[186.05,187.0,0.98,0.954],[189.53,187.6,1.02,0.95],[192.59,185.84,1.0,0.945],[195.46,183.93,0.98,0.942],[195.46,183.93,0.98,0.942],[195.23,182.08,0.98,0.958],[194.56,180.73,1.0,0.963],[194.34,179.26,1.0,0.974],[193.93,177.12,1.0,0.982],[193.33,175.54,1.02,0.983],[192.7,173.2,1.0,0.996],[192.66,170.55,1.0,0.992],[191.7,168.3,1.0,1.0],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]},"seat":{"sha256":"613dbeeeaec11804e80db0216922c8f62294745514ee6283bdce61a6d784dd5e","frames":[[191.7,168.3,1.0,1.0],[187.28,167.83,0.98,0.992],[186.01,168.11,0.98,0.997],[184.36,167.85,0.96,0.997],[182.14,168.27,0.96,0.99],[179.4,167.97,0.94,0.989],[177.05,167.47,0.92,0.991],[174.39,167.11,0.9,0.982],[171.52,167.84,0.9,0.977],[169.74,168.03,0.9,0.978],[166.37,168.27,0.9,0.98],[163.95,166.65,0.86,0.975],[161.1,167.16,0.86,0.973],[158.82,167.1,0.86,0.97],[157.06,167.85,0.86,0.97],[155.39,167.09,0.84,0.966],[152.19,167.86,0.84,0.951],[152.19,167.86,0.84,0.951],[152.24,167.87,0.84,0.952],[152.26,167.86,0.84,0.953],[152.26,167.85,0.84,0.953],[152.27,167.85,0.84,0.953],[152.3,167.84,0.84,0.954],[152.33,167.83,0.84,0.954],[152.69,166.08,0.8,0.956],[152.75,166.06,0.8,0.956],[152.77,166.04,0.8,0.957],[153.16,166.03,0.8,0.957],[153.19,166.03,0.8,0.956],[153.21,166.02,0.8,0.955],[153.23,166.02,0.8,0.955],[153.27,166.02,0.8,0.953],[153.37,166.03,0.8,0.952],[153.28,166.02,0.8,0.952],[153.28,166.02,0.8,0.952],[154.28,166.02,0.8,0.954],[154.49,166.87,0.82,0.951],[155.31,165.99,0.8,0.953],[156.08,165.96,0.8,0.956],[156.67,166.83,0.82,0.958],[157.34,166.82,0.82,0.955],[158.31,166.73,0.82,0.956],[158.83,166.62,0.82,0.96],[159.42,166.54,0.82,0.958],[160.23,166.48,0.82,0.952],[160.85,166.5,0.82,0.954],[161.4,166.49,0.82,0.954],[162.04,166.45,0.82,0.947],[162.98,166.47,0.82,0.947],[163.19,166.46,0.82,0.946],[164.02,166.47,0.82,0.945]]},"arrivalSeat":{"sha256":"13acb62fd573ff7ef97bcf59be80757897fe9d1784f187ab278990ff94a643b9","frames":[[195.46,183.93,0.98,0.942],[191.05,182.87,0.98,0.955],[189.92,182.76,0.98,0.95],[187.17,181.29,0.96,0.954],[184.77,179.89,0.94,0.954],[182.36,179.93,0.96,0.955],[179.54,177.85,0.94,0.96],[176.3,176.4,0.92,0.959],[174.08,175.36,0.9,0.966],[171.91,174.25,0.9,0.958],[168.15,172.23,0.88,0.953],[165.17,170.82,0.86,0.963],[162.45,171.28,0.88,0.959],[160.06,170.01,0.86,0.965],[157.6,169.78,0.86,0.959],[155.67,167.31,0.82,0.96],[152.19,167.86,0.84,0.951],[152.19,167.86,0.84,0.951],[152.24,167.87,0.84,0.952],[152.26,167.86,0.84,0.953],[152.26,167.85,0.84,0.953],[152.27,167.85,0.84,0.953],[152.3,167.84,0.84,0.954],[152.33,167.83,0.84,0.954],[152.69,166.08,0.8,0.956],[152.75,166.06,0.8,0.956],[152.77,166.04,0.8,0.957],[153.16,166.03,0.8,0.957],[153.19,166.03,0.8,0.956],[153.21,166.02,0.8,0.955],[153.23,166.02,0.8,0.955],[153.27,166.02,0.8,0.953],[153.37,166.03,0.8,0.952],[153.28,166.02,0.8,0.952],[153.28,166.02,0.8,0.952],[154.28,166.02,0.8,0.954],[154.49,166.87,0.82,0.951],[155.31,165.99,0.8,0.953],[156.08,165.96,0.8,0.956],[156.67,166.83,0.82,0.958],[157.34,166.82,0.82,0.955],[158.31,166.73,0.82,0.956],[158.83,166.62,0.82,0.96],[159.42,166.54,0.82,0.958],[160.23,166.48,0.82,0.952],[160.85,166.5,0.82,0.954],[161.4,166.49,0.82,0.954],[162.04,166.45,0.82,0.947],[162.98,166.47,0.82,0.947],[163.19,166.46,0.82,0.946],[164.02,166.47,0.82,0.945]]}}}/*END GENERATED*/;
10
+ export const MOUTH_ANCHORS=/*BEGIN GENERATED*/{"version":1,"canonical":320,"ballRadiusPx":17.5,"mouthOffsetPx":25,"minScore":0.9,"seed":{"family":"approach","frame":45,"box":[158,108,68,50],"nose":[191.7,143.3]},"method":"cv2 TM_CCOEFF_NORMED multi-scale match of measured eyes+nose seed; mouth = nose + scale*offset (down)","unsupported":"front side-view tween, rear, actions (incl. walk-enter/walk), interactions, behaviors watch/rest","families":{"approach":{"cache":"puppy-paper-approach.bin.gz","sha256":"f5558c57d5a445d396e06c060f9f8d64e6ce0ff5b9b92fa6d77ef9bb2984a2fe","samples":9,"covered":124,"frames":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[224.66,147.5,0.9,0.904],[222.44,147.33,0.9,0.915],[219.17,148.34,0.9,0.934],[215.72,149.59,0.92,0.945],[212.89,150.36,0.92,0.957],[209.34,151.71,0.94,0.966],[206.61,152.52,0.94,0.972],[202.85,153.49,0.94,0.965],[202.85,153.49,0.94,0.965],[198.71,154.18,0.96,0.966],[195.56,154.22,0.96,0.97],[191.82,155.11,0.98,0.967],[188.11,155.2,0.98,0.966],[184.12,154.72,0.96,0.966],[180.5,154.77,0.96,0.968],[177.45,154.9,0.96,0.97],[173.13,154.91,0.96,0.965],[173.13,154.91,0.96,0.965],[175.53,155.91,0.96,0.974],[177.69,157.9,0.98,0.976],[179.97,159.24,0.98,0.983],[182.41,161.16,0.98,0.988],[184.55,162.2,0.98,0.987],[186.96,165.39,1,0.991],[189.54,166,0.98,0.986],[191.7,168.3,1,1],[191.7,168.3,1,1],[190.78,168.33,1,0.999],[190.26,168.08,0.98,0.983],[189.46,169.24,1,0.994],[188.66,169.45,1,0.988],[187.9,169.62,1,0.977],[187.07,168.92,0.98,0.971],[186.15,171.37,1.02,0.964],[185.12,171.44,1.02,0.959],[185.12,171.44,1.02,0.959],[183.01,167.4,0.98,0.967],[180.53,166.1,1,0.965],[178.7,163.98,0.98,0.962],[176.6,160.9,0.96,0.958],[174.17,158.89,0.96,0.958],[172.42,158.03,0.98,0.948],[170.58,155.84,0.96,0.945],[168.27,154.8,0.98,0.932],[168.27,154.8,0.98,0.932],[168.28,154.25,0.98,0.941],[167.82,153.76,0.98,0.938],[167.36,153.07,0.98,0.941],[167.1,151.76,0.96,0.941],[166.97,152.2,0.98,0.947],[166.89,151.46,0.98,0.944],[166.21,151.32,0.98,0.944],[166.05,150.38,0.98,0.943],[166.05,150.38,0.98,0.943],[168.13,148.79,0.96,0.945],[169.85,149.25,0.98,0.951],[172.04,147.99,0.98,0.948],[174.87,146.91,0.98,0.947],[176.38,147.11,1,0.947],[179.35,146.95,1.02,0.941],[181.18,146.19,1.02,0.943],[183.86,145.25,1.02,0.942],[183.86,145.25,1.02,0.942],[182.95,145.34,1.02,0.946],[182.65,145.38,1.02,0.953],[181.7,145.7,1.02,0.948],[181.06,145.96,1.02,0.949],[180.46,145.26,1,0.954],[179.53,146.46,1.02,0.949],[179.36,146.51,1.02,0.948],[178.41,146.53,1.02,0.947],[178.41,146.53,1.02,0.947],[180.31,147.47,1.02,0.952],[181.26,147.72,1.02,0.954],[183.14,147.04,0.98,0.957],[184.8,149.17,1,0.967],[186.42,150.19,1,0.966],[188.41,150.46,1,0.966],[189.95,151.41,1,0.971],[191.61,152.4,1,0.971],[191.61,152.4,1,0.971],[189.01,151.48,1,0.971],[186.85,151.25,1,0.979],[184.64,150.57,1,0.975],[182.06,149.13,0.98,0.974],[179.48,149.48,1,0.976],[177.17,149.61,1.02,0.976],[175.2,149.27,1.02,0.979],[172.3,148.6,1.02,0.975],[172.3,148.6,1.02,0.975],[175.21,151.35,1.02,0.979],[177.27,153.34,1.02,0.982],[179.97,155.12,1,0.983],[181.35,158.65,1.02,0.988],[184.96,160.94,1,0.987],[187.54,163.29,1,0.996],[189.22,166.33,1.02,0.992],[191.7,168.3,1,1],[191.7,168.3,1,1],[189.18,166.28,1,0.99],[186.95,164.07,0.98,0.991],[184.75,163.57,1,0.987],[182.21,160.91,0.98,0.986],[180.15,158.8,0.96,0.98],[177.73,156.71,0.96,0.974],[175.67,155.87,0.96,0.97],[173.13,154.91,0.96,0.965],[173.13,154.91,0.96,0.965],[176.75,154.83,0.96,0.966],[180.19,154.77,0.96,0.966],[183.7,154.69,0.96,0.966],[187.78,153.74,0.94,0.965],[191.91,155.07,0.98,0.968],[195.35,154.27,0.96,0.969],[199.09,154.17,0.96,0.968],[202.85,153.49,0.94,0.965],[202.85,153.49,0.94,0.965],[206.07,152.72,0.94,0.968],[209.04,152.89,0.96,0.962],[211.97,151.51,0.94,0.959],[215.45,150.92,0.94,0.941],[218.71,149.41,0.92,0.933],[221.75,148.5,0.9,0.92],[224.95,147.58,0.9,0.903],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]},"behaviors":{"cache":"puppy-paper-behaviors.bin.gz","sha256":"7918261fb64c57a91739729841fd84c6dd53891196c7fb76ee9c27712ab6ef5d","samples":9,"covered":90,"frames":[[201.21,166.15,0.98,0.959],[200.4,166.14,0.98,0.961],[200.13,166.16,0.98,0.963],[199.21,166.15,0.98,0.964],[198.65,166.13,0.98,0.964],[197.98,166.12,0.98,0.967],[197.08,166.1,0.98,0.966],[196.87,166.13,0.98,0.966],[195.93,166.1,0.98,0.965],[195.93,166.1,0.98,0.965],[196.01,166.1,0.98,0.967],[196.35,166.05,0.98,0.96],[196.85,166.1,0.98,0.966],[197.08,166.07,0.98,0.964],[197.25,166.07,0.98,0.96],[197.72,166.12,0.98,0.963],[198.13,166.05,0.98,0.957],[198.18,166.04,0.98,0.954],[198.18,166.04,0.98,0.954],[198.23,166.06,0.98,0.957],[198.26,166.09,0.98,0.957],[198.28,166.12,0.98,0.958],[198.81,167.29,1,0.968],[198.92,167.34,1,0.966],[198.98,167.37,1,0.964],[199.06,167.41,1,0.962],[199.07,167.42,1,0.96],[199.07,167.42,1,0.96],[199.16,167.39,1,0.96],[199.43,167.35,1,0.96],[199.96,167.33,1,0.965],[200.14,166.34,0.98,0.965],[200.28,166.27,0.98,0.963],[200.84,166.24,0.98,0.965],[201.14,166.17,0.98,0.962],[201.21,166.15,0.98,0.959],[191.7,168.3,1,1],[192.77,168.21,1,0.999],[194.11,167.32,0.98,0.992],[195.54,167.92,1,0.986],[196.71,166.87,0.98,0.982],[197.88,167.48,1,0.978],[199.08,166.37,0.98,0.973],[200.32,166.2,0.98,0.965],[201.21,166.15,0.98,0.959],[201.21,166.15,0.98,0.959],[201.8,170.56,1,0.964],[202.18,172.74,0.98,0.965],[202.46,176.13,0.98,0.966],[203.09,179.85,0.98,0.968],[203.28,183.55,0.98,0.961],[203.98,187.56,1,0.963],[204.72,190.66,1,0.967],[204.91,194.05,1,0.954],[204.91,194.05,1,0.954],[203.9,194.08,1,0.956],[202.88,194.15,0.98,0.958],[201.8,195,1,0.958],[200.65,195.45,1,0.961],[199.66,196.08,1,0.957],[198.46,196.15,1,0.953],[197.37,196.24,0.98,0.95],[196.35,196.3,0.98,0.947],[196.35,196.3,0.98,0.947],[192.86,196.11,1,0.951],[190.53,196.01,1,0.951],[187.51,196,1,0.949],[184.08,194.32,0.98,0.952],[180.99,193.88,0.98,0.949],[177.81,194.62,1,0.949],[175.36,194.61,1.02,0.95],[171.67,193.62,1,0.944],[171.67,193.62,1,0.944],[174.59,193.5,1.02,0.952],[177.38,192.46,1.02,0.95],[180.43,190.38,1,0.957],[183.32,188.01,0.98,0.95],[186.05,187,0.98,0.954],[189.53,187.6,1.02,0.95],[192.59,185.84,1,0.945],[195.46,183.93,0.98,0.942],[195.46,183.93,0.98,0.942],[195.23,182.08,0.98,0.958],[194.56,180.73,1,0.963],[194.34,179.26,1,0.974],[193.93,177.12,1,0.982],[193.33,175.54,1.02,0.983],[192.7,173.2,1,0.996],[192.66,170.55,1,0.992],[191.7,168.3,1,1],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]},"seat":{"cache":"puppy-paper-seat.bin.gz","sha256":"613dbeeeaec11804e80db0216922c8f62294745514ee6283bdce61a6d784dd5e","samples":17,"covered":51,"frames":[[191.7,168.3,1,1],[187.28,167.83,0.98,0.992],[186.01,168.11,0.98,0.997],[184.36,167.85,0.96,0.997],[182.14,168.27,0.96,0.99],[179.4,167.97,0.94,0.989],[177.05,167.47,0.92,0.991],[174.39,167.11,0.9,0.982],[171.52,167.84,0.9,0.977],[169.74,168.03,0.9,0.978],[166.37,168.27,0.9,0.98],[163.95,166.65,0.86,0.975],[161.1,167.16,0.86,0.973],[158.82,167.1,0.86,0.97],[157.06,167.85,0.86,0.97],[155.39,167.09,0.84,0.966],[152.19,167.86,0.84,0.951],[152.19,167.86,0.84,0.951],[152.24,167.87,0.84,0.952],[152.26,167.86,0.84,0.953],[152.26,167.85,0.84,0.953],[152.27,167.85,0.84,0.953],[152.3,167.84,0.84,0.954],[152.33,167.83,0.84,0.954],[152.69,166.08,0.8,0.956],[152.75,166.06,0.8,0.956],[152.77,166.04,0.8,0.957],[153.16,166.03,0.8,0.957],[153.19,166.03,0.8,0.956],[153.21,166.02,0.8,0.955],[153.23,166.02,0.8,0.955],[153.27,166.02,0.8,0.953],[153.37,166.03,0.8,0.952],[153.28,166.02,0.8,0.952],[153.28,166.02,0.8,0.952],[154.28,166.02,0.8,0.954],[154.49,166.87,0.82,0.951],[155.31,165.99,0.8,0.953],[156.08,165.96,0.8,0.956],[156.67,166.83,0.82,0.958],[157.34,166.82,0.82,0.955],[158.31,166.73,0.82,0.956],[158.83,166.62,0.82,0.96],[159.42,166.54,0.82,0.958],[160.23,166.48,0.82,0.952],[160.85,166.5,0.82,0.954],[161.4,166.49,0.82,0.954],[162.04,166.45,0.82,0.947],[162.98,166.47,0.82,0.947],[163.19,166.46,0.82,0.946],[164.02,166.47,0.82,0.945]]},"arrivalSeat":{"cache":"puppy-paper-arrival-seat.bin.gz","sha256":"13acb62fd573ff7ef97bcf59be80757897fe9d1784f187ab278990ff94a643b9","samples":17,"covered":51,"frames":[[195.46,183.93,0.98,0.942],[191.05,182.87,0.98,0.955],[189.92,182.76,0.98,0.95],[187.17,181.29,0.96,0.954],[184.77,179.89,0.94,0.954],[182.36,179.93,0.96,0.955],[179.54,177.85,0.94,0.96],[176.3,176.4,0.92,0.959],[174.08,175.36,0.9,0.966],[171.91,174.25,0.9,0.958],[168.15,172.23,0.88,0.953],[165.17,170.82,0.86,0.963],[162.45,171.28,0.88,0.959],[160.06,170.01,0.86,0.965],[157.6,169.78,0.86,0.959],[155.67,167.31,0.82,0.96],[152.19,167.86,0.84,0.951],[152.19,167.86,0.84,0.951],[152.24,167.87,0.84,0.952],[152.26,167.86,0.84,0.953],[152.26,167.85,0.84,0.953],[152.27,167.85,0.84,0.953],[152.3,167.84,0.84,0.954],[152.33,167.83,0.84,0.954],[152.69,166.08,0.8,0.956],[152.75,166.06,0.8,0.956],[152.77,166.04,0.8,0.957],[153.16,166.03,0.8,0.957],[153.19,166.03,0.8,0.956],[153.21,166.02,0.8,0.955],[153.23,166.02,0.8,0.955],[153.27,166.02,0.8,0.953],[153.37,166.03,0.8,0.952],[153.28,166.02,0.8,0.952],[153.28,166.02,0.8,0.952],[154.28,166.02,0.8,0.954],[154.49,166.87,0.82,0.951],[155.31,165.99,0.8,0.953],[156.08,165.96,0.8,0.956],[156.67,166.83,0.82,0.958],[157.34,166.82,0.82,0.955],[158.31,166.73,0.82,0.956],[158.83,166.62,0.82,0.96],[159.42,166.54,0.82,0.958],[160.23,166.48,0.82,0.952],[160.85,166.5,0.82,0.954],[161.4,166.49,0.82,0.954],[162.04,166.45,0.82,0.947],[162.98,166.47,0.82,0.947],[163.19,166.46,0.82,0.946],[164.02,166.47,0.82,0.945]]},"actions":{"sha256":"1e0db7138d087292a3e70c246a1d56af590b3fb50928687a026e7080d7657c38","frames":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[192,168,1,null],[197,167,1,null],[203,165,1,null],[209,165,1,null],[224,154,1,null],[235,150,1,null],[242,149,1,null],[245,149,1,null],[252,148,1,null],null,null,null,null,null,[237,150,1,null],[245,149,1,null],[248,149,1,null],[252,148,1,null],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]}}}/*END GENERATED*/;
9
11
 
10
12
  // Exact sample the renderer's samplers read for this state (same quantization).
11
13
  export function mouthSourceFrame(family,state,info){
14
+ if(family==='actions'){const p=paperActionPose(state.actionName,state.actionProgress,info);return p.pair*9+Math.round(p.blend*8);}
12
15
  if(family==='approach')return state.approachPair*9+Math.round(state.blend*8);
13
16
  if(family==='behaviors'){const p=paperBehaviorPose(state,info);return p.pair*9+Math.round(p.blend*8);}
14
17
  if(family==='seat'||family==='arrivalSeat'){const q=state.seatProgress*3,pair=Math.min(2,Math.floor(q));return pair*17+Math.round((q-pair)*16);}
package/puppy-paper.mjs CHANGED
@@ -315,8 +315,11 @@ export function createPaperActor(animal,info,{manualTricks=false,trickTimings=nu
315
315
  if(activeAction?.comfort)kind=activeAction.comfort;
316
316
  let actionName=activeAction?.name??(state==='run'&&movementMode==='walk'?'walk':null),actionProgress=activeAction?(activeAction.timing?activeAction.timing.progressAt(age):Math.min(1,age/activeAction.duration)):phase;
317
317
  if(manualDown&&state==='down'){actionName='lie-down';actionProgress=1;}
318
- if(walkTransitions&&state==='view-turn'&&turnView==='front'){
319
- actionName=view==='approach'?'walk-face-front':'walk-face-rear';actionProgress=Math.min(1,age/viewTurnSeconds());
318
+ if(walkTransitions&&state==='view-turn'){
319
+ // Both directions share the same standing endpoints. The old outbound
320
+ // material began crouched, so reversing a journey changed the dog's mass.
321
+ actionName=(view==='approach'||turnView==='approach')?'walk-face-front':'walk-face-rear';
322
+ const t=Math.min(1,age/viewTurnSeconds());actionProgress=turnView==='front'?t:1-t;
320
323
  }
321
324
  // This clip is a calibrated standing half-turn, not walk-specific motion.
322
325
  // The old turn's intro/outro added an unrelated squat to every reversal.
@@ -419,9 +422,9 @@ export function createPaperRenderer(cache,info,meta,width,height,{rear,approach,
419
422
  if(kernel?.clear)kernel.clear(out);else{out.fill(0);for(let i=3;i<out.length;i+=4)out[i]=255;}
420
423
  render.lastPlacement={left,top,side,sideX};
421
424
  // Measured drawn mouth of the EXACT sample above (same priority, quantization,
422
- // placement and mirror). Side/rear/action/interaction stay null: unsupported.
423
- const mouthFamily=isInteraction||isAction?null:isBehavior?'behaviors':isSeat?(state.seatVariant==='arrival'&&arrivalSeatSample?'arrivalSeat':'seat'):isApproach?'approach':null;
424
- const mouthInfo={behaviors:behaviors?.info,seat:seat?.info,arrivalSeat:arrivalSeat?.info,approach:approach?.info}[mouthFamily];
425
+ // placement and mirror). Unmeasured or occluded samples remain unsupported.
426
+ const mouthFamily=isInteraction?null:isAction?'actions':isBehavior?'behaviors':isSeat?(state.seatVariant==='arrival'&&arrivalSeatSample?'arrivalSeat':'seat'):isApproach?'approach':null;
427
+ const mouthInfo={actions:actions?.info,behaviors:behaviors?.info,seat:seat?.info,arrivalSeat:arrivalSeat?.info,approach:approach?.info}[mouthFamily];
425
428
  const mouthFrame=mouthFamily?mouthSourceFrame(mouthFamily,state,mouthInfo):null;
426
429
  render.lastMouth=projectMouth(mouthFamily?mouthAnchor(mouthFamily,mouthFrame,mouthInfo?.sha256):null,{left,top,side,sideX},state.flip,{family:mouthFamily,frame:mouthFrame});
427
430
  if(motion?.mouth){