@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.
- package/NATIVE-RUNTIME.md +13 -13
- package/PUPPY-MEMORY.md +14 -0
- package/README.ko.md +14 -1
- package/README.md +16 -1
- package/RELEASING.md +35 -1
- package/SPARSE-PAINT.md +53 -0
- package/integrations/native-windows/bin/win32-x64/retrieviewer-native.exe +0 -0
- package/integrations/native-windows/host.cpp +1 -0
- package/integrations/native-windows/manifest.json +4 -4
- package/integrations/native-windows/native-paint.hpp +35 -5
- package/integrations/native-windows/paint-regions.hpp +4 -31
- package/integrations/native-windows/runtime.bundle.mjs +108 -54
- package/integrations/purrviewer/ART.md +24 -1
- package/integrations/purrviewer/art/ginger.bin.gz +0 -0
- package/integrations/purrviewer/art/ginger.json +227 -17
- package/integrations/purrviewer/art/ginger.rvz +0 -0
- package/integrations/purrviewer/src/facing.mjs +16 -0
- package/integrations/purrviewer/src/life.mjs +1 -1
- package/integrations/purrviewer/src/purrviewer-core.mjs +42 -19
- package/package.json +2 -1
- package/puppy-mouth-anchor.json +1 -1
- package/puppy-mouth-anchor.mjs +7 -4
- package/puppy-paper.mjs +8 -5
|
@@ -1240,8 +1240,12 @@ function createComfortSpriteSampler(bytes, info, output) {
|
|
|
1240
1240
|
}
|
|
1241
1241
|
|
|
1242
1242
|
// puppy-mouth-anchor.mjs
|
|
1243
|
-
var MOUTH_ANCHORS = { 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.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: { 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.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: { sha256: "613dbeeeaec11804e80db0216922c8f62294745514ee6283bdce61a6d784dd5e", 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: { 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]] } } };
|
|
1243
|
+
var MOUTH_ANCHORS = { 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] } } };
|
|
1244
1244
|
function mouthSourceFrame(family, state, info) {
|
|
1245
|
+
if (family === "actions") {
|
|
1246
|
+
const p = paperActionPose(state.actionName, state.actionProgress, info);
|
|
1247
|
+
return p.pair * 9 + Math.round(p.blend * 8);
|
|
1248
|
+
}
|
|
1245
1249
|
if (family === "approach")
|
|
1246
1250
|
return state.approachPair * 9 + Math.round(state.blend * 8);
|
|
1247
1251
|
if (family === "behaviors") {
|
|
@@ -2136,9 +2140,10 @@ function createPaperActor(animal, info, { manualTricks = false, trickTimings = n
|
|
|
2136
2140
|
actionName = "lie-down";
|
|
2137
2141
|
actionProgress = 1;
|
|
2138
2142
|
}
|
|
2139
|
-
if (walkTransitions && state === "view-turn"
|
|
2140
|
-
actionName = view === "approach" ? "walk-face-front" : "walk-face-rear";
|
|
2141
|
-
|
|
2143
|
+
if (walkTransitions && state === "view-turn") {
|
|
2144
|
+
actionName = view === "approach" || turnView === "approach" ? "walk-face-front" : "walk-face-rear";
|
|
2145
|
+
const t = Math.min(1, age / viewTurnSeconds());
|
|
2146
|
+
actionProgress = turnView === "front" ? t : 1 - t;
|
|
2142
2147
|
}
|
|
2143
2148
|
if (walkTransitions && state === "turn") {
|
|
2144
2149
|
actionName = "walk-turn";
|
|
@@ -2330,8 +2335,8 @@ function createPaperRenderer(cache, info, meta, width, height, { rear, approach,
|
|
|
2330
2335
|
out[i] = 255;
|
|
2331
2336
|
}
|
|
2332
2337
|
render.lastPlacement = { left, top, side, sideX };
|
|
2333
|
-
const mouthFamily = isInteraction
|
|
2334
|
-
const mouthInfo = { behaviors: behaviors?.info, seat: seat?.info, arrivalSeat: arrivalSeat?.info, approach: approach?.info }[mouthFamily];
|
|
2338
|
+
const mouthFamily = isInteraction ? null : isAction ? "actions" : isBehavior ? "behaviors" : isSeat ? state.seatVariant === "arrival" && arrivalSeatSample ? "arrivalSeat" : "seat" : isApproach ? "approach" : null;
|
|
2339
|
+
const mouthInfo = { actions: actions?.info, behaviors: behaviors?.info, seat: seat?.info, arrivalSeat: arrivalSeat?.info, approach: approach?.info }[mouthFamily];
|
|
2335
2340
|
const mouthFrame = mouthFamily ? mouthSourceFrame(mouthFamily, state, mouthInfo) : null;
|
|
2336
2341
|
render.lastMouth = projectMouth(mouthFamily ? mouthAnchor(mouthFamily, mouthFrame, mouthInfo?.sha256) : null, { left, top, side, sideX }, state.flip, { family: mouthFamily, frame: mouthFrame });
|
|
2337
2342
|
if (motion?.mouth) {
|
|
@@ -4234,7 +4239,8 @@ function createCatLife({ seed = 731 } = {}) {
|
|
|
4234
4239
|
mat: Boolean(phase.mat),
|
|
4235
4240
|
facing: phase.facing ?? null,
|
|
4236
4241
|
resting: ["sleep", "loaf-rest"].includes(phase.clip) && !pending,
|
|
4237
|
-
sleeping: phase.clip === "sleep"
|
|
4242
|
+
sleeping: phase.clip === "sleep",
|
|
4243
|
+
restSeconds: phase.clip === "sleep" ? phase.elapsed : 0
|
|
4238
4244
|
};
|
|
4239
4245
|
}
|
|
4240
4246
|
};
|
|
@@ -4314,13 +4320,38 @@ function footSourcePoint2(x, y, pins, out = {}) {
|
|
|
4314
4320
|
return out;
|
|
4315
4321
|
}
|
|
4316
4322
|
|
|
4323
|
+
// integrations/purrviewer/src/facing.mjs
|
|
4324
|
+
function catFacingPath(from, fromMirror, to, toMirror) {
|
|
4325
|
+
const path = [];
|
|
4326
|
+
const push = (clip, reverse, mirror, view) => path.push({ clip, reverse, mirror, view, seconds: 0.28 });
|
|
4327
|
+
if (from === to && (from === "front" || fromMirror === toMirror))
|
|
4328
|
+
return path;
|
|
4329
|
+
if (from === "rear") {
|
|
4330
|
+
push("turn-side-rear", true, fromMirror, "side");
|
|
4331
|
+
from = "side";
|
|
4332
|
+
}
|
|
4333
|
+
if (from === "side") {
|
|
4334
|
+
if (to === "rear" && fromMirror === toMirror) {
|
|
4335
|
+
push("turn-side-rear", false, fromMirror, "rear");
|
|
4336
|
+
return path;
|
|
4337
|
+
}
|
|
4338
|
+
push("turn-front-side", true, fromMirror, "front");
|
|
4339
|
+
}
|
|
4340
|
+
if (to === "front")
|
|
4341
|
+
return path;
|
|
4342
|
+
push("turn-front-side", false, toMirror, "side");
|
|
4343
|
+
if (to === "rear")
|
|
4344
|
+
push("turn-side-rear", false, toMirror, "rear");
|
|
4345
|
+
return path;
|
|
4346
|
+
}
|
|
4347
|
+
|
|
4317
4348
|
// integrations/purrviewer/src/purrviewer-core.mjs
|
|
4318
4349
|
function createCatFromAssets({ seed = 731 } = {}, lease, kernel = null) {
|
|
4319
4350
|
if (!Number.isInteger(seed) || seed < 0 || seed > 4294967295)
|
|
4320
4351
|
throw TypeError("Invalid cat seed");
|
|
4321
4352
|
let asset = lease.data;
|
|
4322
4353
|
const release = lease.release, motion = createCatMotion(), life = createCatLife({ seed }), contacts = createCatContacts(asset.meta.walk), sourcePoint = { x: 0, y: 0 };
|
|
4323
|
-
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;
|
|
4354
|
+
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;
|
|
4324
4355
|
const alive = () => {
|
|
4325
4356
|
if (disposed)
|
|
4326
4357
|
throw Error("Cat is disposed");
|
|
@@ -4336,18 +4367,31 @@ function createCatFromAssets({ seed = 731 } = {}, lease, kernel = null) {
|
|
|
4336
4367
|
settle = null;
|
|
4337
4368
|
motion.wheel(command);
|
|
4338
4369
|
} else if (command.kind === "stop") {
|
|
4339
|
-
prep = null;
|
|
4340
4370
|
motion.stop();
|
|
4341
4371
|
}
|
|
4342
4372
|
};
|
|
4373
|
+
function prepare(targetView, targetMirror, { command = null, seated = false } = {}) {
|
|
4374
|
+
const steps = [];
|
|
4375
|
+
if (!standing)
|
|
4376
|
+
steps.push({ clip: "rise-front", seconds: 0.3, view: "front", mirror: false });
|
|
4377
|
+
steps.push(...catFacingPath(view, mirror, targetView, targetMirror));
|
|
4378
|
+
if (seated)
|
|
4379
|
+
steps.push({ clip: "sit-front", seconds: 0.32, view: "front", mirror: false, seated: true });
|
|
4380
|
+
if (!steps.length) {
|
|
4381
|
+
if (command)
|
|
4382
|
+
direct(command);
|
|
4383
|
+
return;
|
|
4384
|
+
}
|
|
4385
|
+
prep = { steps, index: 0, age: 0, command };
|
|
4386
|
+
mirror = steps[0].mirror;
|
|
4387
|
+
settle = null;
|
|
4388
|
+
}
|
|
4343
4389
|
function issue(command) {
|
|
4344
|
-
if (command.kind === "go" &&
|
|
4390
|
+
if (command.kind === "go" && !motion.sample().moving) {
|
|
4345
4391
|
const s3 = motion.sample(), dx = command.x - s3.x, dz2 = command.z - s3.z, length2 = Math.hypot(dx, dz2);
|
|
4346
4392
|
if (length2 > 0.01) {
|
|
4347
4393
|
const targetView = Math.abs(dz2 / length2) > 0.8 ? dz2 > 0 ? "front" : "rear" : "side";
|
|
4348
|
-
|
|
4349
|
-
mirror = dx < 0;
|
|
4350
|
-
settle = null;
|
|
4394
|
+
prepare(targetView, dx < 0, { command });
|
|
4351
4395
|
return;
|
|
4352
4396
|
}
|
|
4353
4397
|
}
|
|
@@ -4366,12 +4410,23 @@ function createCatFromAssets({ seed = 731 } = {}, lease, kernel = null) {
|
|
|
4366
4410
|
left -= step;
|
|
4367
4411
|
if (prep) {
|
|
4368
4412
|
prep.age += step;
|
|
4369
|
-
|
|
4370
|
-
|
|
4371
|
-
view =
|
|
4372
|
-
|
|
4373
|
-
|
|
4413
|
+
const part = prep.steps[prep.index];
|
|
4414
|
+
if (prep.age >= part.seconds) {
|
|
4415
|
+
view = part.view;
|
|
4416
|
+
mirror = part.mirror;
|
|
4417
|
+
standing = !part.seated;
|
|
4418
|
+
prep.age = 0;
|
|
4419
|
+
prep.index++;
|
|
4420
|
+
if (prep.index === prep.steps.length) {
|
|
4421
|
+
const cmd = prep.command;
|
|
4422
|
+
prep = null;
|
|
4423
|
+
if (cmd)
|
|
4424
|
+
direct(cmd);
|
|
4425
|
+
} else
|
|
4426
|
+
mirror = prep.steps[prep.index].mirror;
|
|
4374
4427
|
}
|
|
4428
|
+
if (prep)
|
|
4429
|
+
continue;
|
|
4375
4430
|
}
|
|
4376
4431
|
motion.step(step);
|
|
4377
4432
|
const s3 = motion.sample();
|
|
@@ -4380,61 +4435,47 @@ function createCatFromAssets({ seed = 731 } = {}, lease, kernel = null) {
|
|
|
4380
4435
|
issue(command);
|
|
4381
4436
|
const report = life.report, clip = report.clip;
|
|
4382
4437
|
if (s3.moving && !prep && !s3.exercising) {
|
|
4383
|
-
|
|
4384
|
-
|
|
4385
|
-
|
|
4438
|
+
if (s3.airborne) {
|
|
4439
|
+
mirror = Math.sin(s3.heading) < 0;
|
|
4440
|
+
view = "side";
|
|
4441
|
+
}
|
|
4442
|
+
standing = true;
|
|
4386
4443
|
settle = null;
|
|
4387
4444
|
}
|
|
4388
4445
|
if (clip !== lastLifeClip) {
|
|
4389
|
-
if (
|
|
4390
|
-
|
|
4391
|
-
|
|
4392
|
-
|
|
4393
|
-
|
|
4394
|
-
if (clip === "knead-enter") {
|
|
4395
|
-
view = "front";
|
|
4396
|
-
mirror = false;
|
|
4397
|
-
settle = null;
|
|
4398
|
-
}
|
|
4399
|
-
if (["tower-load", "tower-land", "wheel-enter", "wheel-leave"].includes(clip)) {
|
|
4446
|
+
if (["stretch-enter", "knead-enter", "feed-enter"].includes(clip) && standing)
|
|
4447
|
+
prepare("front", false, { seated: true });
|
|
4448
|
+
if (["tower-load", "crouch", "wheel-enter"].includes(clip))
|
|
4449
|
+
prepare("side", clip === "tower-load" ? report.facing < 0 : clip === "wheel-enter" ? false : mirror);
|
|
4450
|
+
if (["tower-land", "wheel-leave"].includes(clip)) {
|
|
4400
4451
|
view = "side";
|
|
4452
|
+
standing = true;
|
|
4401
4453
|
settle = null;
|
|
4402
4454
|
if (clip.startsWith("wheel"))
|
|
4403
4455
|
mirror = false;
|
|
4404
4456
|
}
|
|
4405
|
-
if (clip === "tower-load")
|
|
4406
|
-
mirror = report.facing < 0;
|
|
4407
4457
|
if (clip === "stretch-reach") {
|
|
4408
4458
|
view = "side";
|
|
4409
4459
|
mirror = false;
|
|
4410
4460
|
settle = null;
|
|
4411
4461
|
}
|
|
4412
|
-
if (clip === "feed-
|
|
4462
|
+
if (clip === "feed-sniff") {
|
|
4413
4463
|
view = "side";
|
|
4414
4464
|
mirror = false;
|
|
4465
|
+
standing = true;
|
|
4415
4466
|
settle = null;
|
|
4416
4467
|
}
|
|
4417
4468
|
if (clip === "sit" && ["bat", "stretch", "stretch-leave", "feed-leave", "loaf-leave"].includes(lastLifeClip)) {
|
|
4418
4469
|
view = "front";
|
|
4419
4470
|
mirror = false;
|
|
4471
|
+
standing = false;
|
|
4420
4472
|
settle = null;
|
|
4421
4473
|
}
|
|
4422
4474
|
lastLifeClip = clip;
|
|
4423
4475
|
}
|
|
4424
4476
|
const quiet = ["idle", "sit", "blink", "eye-greeting", "groom", "loaf", "sleep", "tail-swish", "tail-tip"].includes(clip);
|
|
4425
|
-
if (!s3.moving && !prep && quiet)
|
|
4426
|
-
|
|
4427
|
-
settle = { age: 0, seconds: 0.45, clip: view === "front" ? "sit-front" : "sit-down" };
|
|
4428
|
-
if (settle) {
|
|
4429
|
-
settle.age += step;
|
|
4430
|
-
if (settle.age >= settle.seconds) {
|
|
4431
|
-
view = "front";
|
|
4432
|
-
mirror = false;
|
|
4433
|
-
settle = null;
|
|
4434
|
-
}
|
|
4435
|
-
}
|
|
4436
|
-
} else
|
|
4437
|
-
settle = null;
|
|
4477
|
+
if (!s3.moving && !prep && quiet && standing)
|
|
4478
|
+
prepare("front", false, { seated: true });
|
|
4438
4479
|
lastMoving = s3.moving;
|
|
4439
4480
|
if (s3.moving && !s3.airborne && !s3.exercising && s3.supportY === 0 && !prep && view === "side")
|
|
4440
4481
|
contacts.update(s3, mirror);
|
|
@@ -4466,9 +4507,16 @@ function createCatFromAssets({ seed = 731 } = {}, lease, kernel = null) {
|
|
|
4466
4507
|
clip = "wheel-run";
|
|
4467
4508
|
progress = (s3.wheelPhase % 1 + 1) % 1;
|
|
4468
4509
|
}
|
|
4510
|
+
if (!s3.moving && ["walk", "creep"].includes(clip)) {
|
|
4511
|
+
clip = view === "rear" ? "stand-rear" : view === "front" ? "rise-front" : "stand";
|
|
4512
|
+
progress = 1;
|
|
4513
|
+
}
|
|
4469
4514
|
if (prep) {
|
|
4470
|
-
|
|
4471
|
-
|
|
4515
|
+
const part = prep.steps[prep.index];
|
|
4516
|
+
clip = part.clip;
|
|
4517
|
+
progress = Math.min(1, prep.age / part.seconds);
|
|
4518
|
+
if (part.reverse)
|
|
4519
|
+
progress = 1 - progress;
|
|
4472
4520
|
}
|
|
4473
4521
|
if (settle) {
|
|
4474
4522
|
clip = settle.clip;
|
|
@@ -4478,7 +4526,14 @@ function createCatFromAssets({ seed = 731 } = {}, lease, kernel = null) {
|
|
|
4478
4526
|
progress = progress >= 1 ? 0 : progress * 9 % 1;
|
|
4479
4527
|
if (clip === "knead")
|
|
4480
4528
|
progress = progress >= 1 ? 0 : progress * 4 % 1;
|
|
4481
|
-
|
|
4529
|
+
let keys = asset.meta.clips[clip] ?? asset.meta.clips.sit;
|
|
4530
|
+
if (clip === "stand")
|
|
4531
|
+
keys = [asset.meta.clips["turn-front-side"].at(-1)];
|
|
4532
|
+
if (clip === "sleep") {
|
|
4533
|
+
const t = r.restSeconds ?? 0, phase = t % 5.6;
|
|
4534
|
+
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]];
|
|
4535
|
+
progress = 0;
|
|
4536
|
+
}
|
|
4482
4537
|
const pins = clip === "walk" ? contacts.pins(s3) : [];
|
|
4483
4538
|
const key = keys[Math.min(keys.length - 1, Math.floor(Math.max(0, Math.min(1, progress)) * keys.length))];
|
|
4484
4539
|
const food = r.food ? Math.ceil(r.food.remaining * 16) / 16 : null;
|
|
@@ -4565,9 +4620,8 @@ function createCatFromAssets({ seed = 731 } = {}, lease, kernel = null) {
|
|
|
4565
4620
|
if (!["treat", "toy", "call", "stretch", "tail", "greet", "company", "tower", "wheel"].includes(kind))
|
|
4566
4621
|
throw TypeError("Invalid cat interaction");
|
|
4567
4622
|
const accepted = life.interact(kind, options2);
|
|
4568
|
-
if (accepted && prep)
|
|
4569
|
-
prep = null;
|
|
4570
|
-
}
|
|
4623
|
+
if (accepted && prep)
|
|
4624
|
+
prep.command = null;
|
|
4571
4625
|
return accepted;
|
|
4572
4626
|
},
|
|
4573
4627
|
get report() {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Cat art and motion review
|
|
2
2
|
|
|
3
|
-
Current default: the owner-approved ginger identity
|
|
3
|
+
Current default: the owner-approved ginger identity and77-key ginger motion
|
|
4
4
|
atlas described below. The tuxedo material is retained as historical source
|
|
5
5
|
and is not fetched by the default renderer.
|
|
6
6
|
|
|
@@ -287,3 +287,26 @@ keys, timings, anatomy or source pixels were changed. The owner explicitly
|
|
|
287
287
|
chose CC BY-SA 4.0 for the bundled ginger artwork, including its metadata and
|
|
288
288
|
alternative encodings; code remains MIT. Research photographs and raw source
|
|
289
289
|
sheets are not included in the public package.
|
|
290
|
+
|
|
291
|
+
## Motion repair candidate · 2026-10-25
|
|
292
|
+
|
|
293
|
+
The77-key candidate retains64 earlier drawings byte-exact and replaces only
|
|
294
|
+
the stray-cat lowering key8. Seven grounded orientation keys, three airborne
|
|
295
|
+
breakdowns and two local sleep variants are appended. The original curl2 is
|
|
296
|
+
unchanged, and sleep patches preserve every thresholded silhouette pixel.
|
|
297
|
+
Source sheets were generated with the built-in imagegen using the accepted
|
|
298
|
+
cat drawings as inputs; no new photos or video frames were used. Whole-body
|
|
299
|
+
registration uses a shared family scale and rigid offsets. The generated sleep
|
|
300
|
+
fur/ear patches are offline local edits, not runtime warps.
|
|
301
|
+
|
|
302
|
+
| Local source (ignored) | SHA-256 |
|
|
303
|
+
|---|---|
|
|
304
|
+
| ginger-lower-repair-v1.png | 5f8e22e17f08bb49d668ea1adf12938978bf7399eb03d851a0da140f27b34b07 |
|
|
305
|
+
| ginger-yaw-v1.png | e87554521d27eba2f97a5ec9ae411fdf224d69d5a1181d1880b70947777dbda2 |
|
|
306
|
+
| ginger-sleep-details-v1.png | 7e2c797ad3e510583af53da60c708a4b7e452491b2531ffe9167521536f70e21 |
|
|
307
|
+
| ginger-jump-breakdowns-v1.png | fa46905d52110a94eafaa75d9920d1c92d0991ddd42741a4cb1d12c593dbf54b |
|
|
308
|
+
|
|
309
|
+
Preparation: tools/prepare-motion-repairs.py and tools/rebuild-motion-repairs.mjs.
|
|
310
|
+
Metadata includes source hashes and registration. Final aesthetic approval is
|
|
311
|
+
separate from pixel-preservation and physical checks. Artwork remains under
|
|
312
|
+
CC BY-SA4.0; raw source sheets are not included in the public package.
|
|
Binary file
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"version": 1,
|
|
3
3
|
"width": 320,
|
|
4
4
|
"height": 320,
|
|
5
|
-
"frames":
|
|
5
|
+
"frames": 77,
|
|
6
6
|
"clips": {
|
|
7
7
|
"idle": [
|
|
8
8
|
0
|
|
@@ -31,12 +31,19 @@
|
|
|
31
31
|
"tower-flight": [
|
|
32
32
|
34,
|
|
33
33
|
64,
|
|
34
|
-
|
|
34
|
+
74,
|
|
35
|
+
35,
|
|
36
|
+
75,
|
|
37
|
+
36,
|
|
38
|
+
76
|
|
35
39
|
],
|
|
36
40
|
"tower-fall": [
|
|
37
41
|
34,
|
|
42
|
+
74,
|
|
38
43
|
35,
|
|
39
|
-
|
|
44
|
+
75,
|
|
45
|
+
36,
|
|
46
|
+
76
|
|
40
47
|
],
|
|
41
48
|
"tower-land": [
|
|
42
49
|
37,
|
|
@@ -160,8 +167,11 @@
|
|
|
160
167
|
],
|
|
161
168
|
"pounce": [
|
|
162
169
|
34,
|
|
170
|
+
74,
|
|
163
171
|
35,
|
|
164
|
-
|
|
172
|
+
75,
|
|
173
|
+
36,
|
|
174
|
+
76
|
|
165
175
|
],
|
|
166
176
|
"land": [
|
|
167
177
|
37,
|
|
@@ -232,6 +242,10 @@
|
|
|
232
242
|
2
|
|
233
243
|
],
|
|
234
244
|
"sleep": [
|
|
245
|
+
2,
|
|
246
|
+
72,
|
|
247
|
+
2,
|
|
248
|
+
73,
|
|
235
249
|
2
|
|
236
250
|
],
|
|
237
251
|
"curl": [
|
|
@@ -320,6 +334,23 @@
|
|
|
320
334
|
14,
|
|
321
335
|
15,
|
|
322
336
|
0
|
|
337
|
+
],
|
|
338
|
+
"turn-front-side": [
|
|
339
|
+
5,
|
|
340
|
+
65,
|
|
341
|
+
66,
|
|
342
|
+
67,
|
|
343
|
+
1
|
|
344
|
+
],
|
|
345
|
+
"turn-side-rear": [
|
|
346
|
+
1,
|
|
347
|
+
68,
|
|
348
|
+
69,
|
|
349
|
+
70,
|
|
350
|
+
71
|
|
351
|
+
],
|
|
352
|
+
"stand-rear": [
|
|
353
|
+
71
|
|
323
354
|
]
|
|
324
355
|
},
|
|
325
356
|
"walk": {
|
|
@@ -589,7 +620,7 @@
|
|
|
589
620
|
"evidence": "human-inspected visible toe proxies; .60m source canvas"
|
|
590
621
|
},
|
|
591
622
|
"color": "#f1b66b",
|
|
592
|
-
"gzipBytes":
|
|
623
|
+
"gzipBytes": 476953,
|
|
593
624
|
"sourceSha256": "af4322edb7d1f001d002b55535369f8dd067cd4621ddd453318251b0caa1d559",
|
|
594
625
|
"registration": [
|
|
595
626
|
{
|
|
@@ -718,18 +749,15 @@
|
|
|
718
749
|
},
|
|
719
750
|
{
|
|
720
751
|
"name": "lower",
|
|
721
|
-
"source": "ginger-
|
|
722
|
-
"
|
|
723
|
-
|
|
724
|
-
313,
|
|
725
|
-
1030,
|
|
726
|
-
578
|
|
727
|
-
],
|
|
728
|
-
"scale": 0.5780000000000001,
|
|
752
|
+
"source": "ginger-lower-repair-v1.png",
|
|
753
|
+
"sourceSha256": "5f8e22e17f08bb49d668ea1adf12938978bf7399eb03d851a0da140f27b34b07",
|
|
754
|
+
"scale": 0.25,
|
|
729
755
|
"translation": [
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
]
|
|
756
|
+
11,
|
|
757
|
+
8
|
|
758
|
+
],
|
|
759
|
+
"registrationFamily": "motion-repair-v1",
|
|
760
|
+
"replaces": 8
|
|
733
761
|
},
|
|
734
762
|
{
|
|
735
763
|
"name": "loaf",
|
|
@@ -1702,6 +1730,188 @@
|
|
|
1702
1730
|
850
|
|
1703
1731
|
],
|
|
1704
1732
|
"registrationFamily": "tower-v1"
|
|
1733
|
+
},
|
|
1734
|
+
{
|
|
1735
|
+
"name": "yaw-22",
|
|
1736
|
+
"source": "ginger-yaw-v1.png",
|
|
1737
|
+
"sourceSha256": "e87554521d27eba2f97a5ec9ae411fdf224d69d5a1181d1880b70947777dbda2",
|
|
1738
|
+
"scale": 0.61,
|
|
1739
|
+
"translation": [
|
|
1740
|
+
29,
|
|
1741
|
+
56
|
|
1742
|
+
],
|
|
1743
|
+
"registrationFamily": "motion-repair-v1",
|
|
1744
|
+
"cell": 1
|
|
1745
|
+
},
|
|
1746
|
+
{
|
|
1747
|
+
"name": "yaw-45",
|
|
1748
|
+
"source": "ginger-yaw-v1.png",
|
|
1749
|
+
"sourceSha256": "e87554521d27eba2f97a5ec9ae411fdf224d69d5a1181d1880b70947777dbda2",
|
|
1750
|
+
"scale": 0.61,
|
|
1751
|
+
"translation": [
|
|
1752
|
+
29,
|
|
1753
|
+
56
|
|
1754
|
+
],
|
|
1755
|
+
"registrationFamily": "motion-repair-v1",
|
|
1756
|
+
"cell": 2
|
|
1757
|
+
},
|
|
1758
|
+
{
|
|
1759
|
+
"name": "yaw-67",
|
|
1760
|
+
"source": "ginger-yaw-v1.png",
|
|
1761
|
+
"sourceSha256": "e87554521d27eba2f97a5ec9ae411fdf224d69d5a1181d1880b70947777dbda2",
|
|
1762
|
+
"scale": 0.61,
|
|
1763
|
+
"translation": [
|
|
1764
|
+
29,
|
|
1765
|
+
79
|
|
1766
|
+
],
|
|
1767
|
+
"registrationFamily": "motion-repair-v1",
|
|
1768
|
+
"cell": 3
|
|
1769
|
+
},
|
|
1770
|
+
{
|
|
1771
|
+
"name": "yaw-112",
|
|
1772
|
+
"source": "ginger-yaw-v1.png",
|
|
1773
|
+
"sourceSha256": "e87554521d27eba2f97a5ec9ae411fdf224d69d5a1181d1880b70947777dbda2",
|
|
1774
|
+
"scale": 0.61,
|
|
1775
|
+
"translation": [
|
|
1776
|
+
29,
|
|
1777
|
+
77
|
|
1778
|
+
],
|
|
1779
|
+
"registrationFamily": "motion-repair-v1",
|
|
1780
|
+
"cell": 5
|
|
1781
|
+
},
|
|
1782
|
+
{
|
|
1783
|
+
"name": "yaw-135",
|
|
1784
|
+
"source": "ginger-yaw-v1.png",
|
|
1785
|
+
"sourceSha256": "e87554521d27eba2f97a5ec9ae411fdf224d69d5a1181d1880b70947777dbda2",
|
|
1786
|
+
"scale": 0.61,
|
|
1787
|
+
"translation": [
|
|
1788
|
+
29,
|
|
1789
|
+
90
|
|
1790
|
+
],
|
|
1791
|
+
"registrationFamily": "motion-repair-v1",
|
|
1792
|
+
"cell": 6
|
|
1793
|
+
},
|
|
1794
|
+
{
|
|
1795
|
+
"name": "yaw-157",
|
|
1796
|
+
"source": "ginger-yaw-v1.png",
|
|
1797
|
+
"sourceSha256": "e87554521d27eba2f97a5ec9ae411fdf224d69d5a1181d1880b70947777dbda2",
|
|
1798
|
+
"scale": 0.61,
|
|
1799
|
+
"translation": [
|
|
1800
|
+
29,
|
|
1801
|
+
92
|
|
1802
|
+
],
|
|
1803
|
+
"registrationFamily": "motion-repair-v1",
|
|
1804
|
+
"cell": 7
|
|
1805
|
+
},
|
|
1806
|
+
{
|
|
1807
|
+
"name": "rear-stand",
|
|
1808
|
+
"source": "ginger-yaw-v1.png",
|
|
1809
|
+
"sourceSha256": "e87554521d27eba2f97a5ec9ae411fdf224d69d5a1181d1880b70947777dbda2",
|
|
1810
|
+
"scale": 0.61,
|
|
1811
|
+
"translation": [
|
|
1812
|
+
29,
|
|
1813
|
+
92
|
|
1814
|
+
],
|
|
1815
|
+
"registrationFamily": "motion-repair-v1",
|
|
1816
|
+
"cell": 8
|
|
1817
|
+
},
|
|
1818
|
+
{
|
|
1819
|
+
"name": "sleep-breath",
|
|
1820
|
+
"source": "ginger-sleep-details-v1.png",
|
|
1821
|
+
"sourceSha256": "7e2c797ad3e510583af53da60c708a4b7e452491b2531ffe9167521536f70e21",
|
|
1822
|
+
"scale": 0.33,
|
|
1823
|
+
"translation": [
|
|
1824
|
+
20,
|
|
1825
|
+
10
|
|
1826
|
+
],
|
|
1827
|
+
"registrationFamily": "motion-repair-v1",
|
|
1828
|
+
"cell": 0,
|
|
1829
|
+
"localPatch": [
|
|
1830
|
+
100,
|
|
1831
|
+
198,
|
|
1832
|
+
157,
|
|
1833
|
+
241
|
|
1834
|
+
]
|
|
1835
|
+
},
|
|
1836
|
+
{
|
|
1837
|
+
"name": "sleep-ear",
|
|
1838
|
+
"source": "ginger-sleep-details-v1.png",
|
|
1839
|
+
"sourceSha256": "7e2c797ad3e510583af53da60c708a4b7e452491b2531ffe9167521536f70e21",
|
|
1840
|
+
"scale": 0.33,
|
|
1841
|
+
"translation": [
|
|
1842
|
+
20,
|
|
1843
|
+
10
|
|
1844
|
+
],
|
|
1845
|
+
"registrationFamily": "motion-repair-v1",
|
|
1846
|
+
"cell": 1,
|
|
1847
|
+
"localPatch": [
|
|
1848
|
+
172,
|
|
1849
|
+
193,
|
|
1850
|
+
199,
|
|
1851
|
+
223
|
|
1852
|
+
]
|
|
1853
|
+
},
|
|
1854
|
+
{
|
|
1855
|
+
"name": "jump-extend",
|
|
1856
|
+
"source": "ginger-jump-breakdowns-v1.png",
|
|
1857
|
+
"sourceSha256": "fa46905d52110a94eafaa75d9920d1c92d0991ddd42741a4cb1d12c593dbf54b",
|
|
1858
|
+
"scale": 0.36,
|
|
1859
|
+
"translation": [
|
|
1860
|
+
16,
|
|
1861
|
+
54
|
|
1862
|
+
],
|
|
1863
|
+
"registrationFamily": "motion-repair-v1",
|
|
1864
|
+
"cell": 0,
|
|
1865
|
+
"sourceBox": [
|
|
1866
|
+
0,
|
|
1867
|
+
0,
|
|
1868
|
+
780,
|
|
1869
|
+
724
|
|
1870
|
+
]
|
|
1871
|
+
},
|
|
1872
|
+
{
|
|
1873
|
+
"name": "jump-gather",
|
|
1874
|
+
"source": "ginger-jump-breakdowns-v1.png",
|
|
1875
|
+
"sourceSha256": "fa46905d52110a94eafaa75d9920d1c92d0991ddd42741a4cb1d12c593dbf54b",
|
|
1876
|
+
"scale": 0.36,
|
|
1877
|
+
"translation": [
|
|
1878
|
+
16,
|
|
1879
|
+
54
|
|
1880
|
+
],
|
|
1881
|
+
"registrationFamily": "motion-repair-v1",
|
|
1882
|
+
"cell": 1,
|
|
1883
|
+
"sourceBox": [
|
|
1884
|
+
780,
|
|
1885
|
+
0,
|
|
1886
|
+
1460,
|
|
1887
|
+
724
|
|
1888
|
+
]
|
|
1889
|
+
},
|
|
1890
|
+
{
|
|
1891
|
+
"name": "jump-descend",
|
|
1892
|
+
"source": "ginger-jump-breakdowns-v1.png",
|
|
1893
|
+
"sourceSha256": "fa46905d52110a94eafaa75d9920d1c92d0991ddd42741a4cb1d12c593dbf54b",
|
|
1894
|
+
"scale": 0.36,
|
|
1895
|
+
"translation": [
|
|
1896
|
+
16,
|
|
1897
|
+
54
|
|
1898
|
+
],
|
|
1899
|
+
"registrationFamily": "motion-repair-v1",
|
|
1900
|
+
"cell": 2,
|
|
1901
|
+
"sourceBox": [
|
|
1902
|
+
1460,
|
|
1903
|
+
0,
|
|
1904
|
+
2172,
|
|
1905
|
+
724
|
|
1906
|
+
]
|
|
1705
1907
|
}
|
|
1706
|
-
]
|
|
1908
|
+
],
|
|
1909
|
+
"repair": {
|
|
1910
|
+
"baseline": "5452da3",
|
|
1911
|
+
"unchangedOriginalKeys": 64,
|
|
1912
|
+
"replaced": [
|
|
1913
|
+
8
|
|
1914
|
+
],
|
|
1915
|
+
"appended": 12
|
|
1916
|
+
}
|
|
1707
1917
|
}
|
|
Binary file
|