spine-rigc 1.0.0 β†’ 1.0.2

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/docs/MOTION.md CHANGED
@@ -355,7 +355,7 @@ cell, because most rows are a sourced word mapped to an unsourced construct.
355
355
  | **drag** β€” *"it should lag"* | πŸ“— parts take a few frames to catch up when a body starts moving ([twelve principles]) | 🧩 the same offset applied at the **start** rather than at the stop. ⚠️ Convert the source's frames to a **fraction** of the duration β€” Β§3.7's offsets are fractions, so a 0.15 s snap and a 2 s idle share one table Β· Β§3.7 |
356
356
  | **the wave principle** | πŸ“— Esoteric's own framing: the thing to understand for tails, hair, cloth and flags β€” anything that follows through (video 4) | 🧩 the offset **compounding down a chain**, so the lag travels: `groups` + `stagger` where the members are a chain. ⚠️ **`wave` already names something else here** β€” a deform transform kind (AUTHORING Β§4.11.1) that ripples an attachment's vertices, not a chain's timing |
357
357
  | **squash and stretch** | πŸ“— what gives a drawing weight and flexibility ([twelve principles]); Spine notes the shear tool is used in small amounts for organic squash and stretch ([Tools]) | 🧩 two spellings. **Cheap:** a `scale` key whose two axes differ. **Full:** a `deform` timeline, which is what `gallery/squash` uses. Β§7 is rigid-first β€” land the movement, then deform Β· Β§4 |
358
- | **keeping the volume** | πŸ“— in *realistic* animation a squashed object keeps its volume: stretch it one way and it must narrow the other ([twelve principles]) | 🧩 `xΒ·y β‰ˆ 1` on a `scale` key, which `explain` now prints beside it, and the `area` figure a `deform` key already carried. **A reading, never a rule** β€” a shadow, a zoom and a cartoon squash all change area on purpose. ⚠️ Say *scale product* in a message: `volume` already means an event's audio and 4.3's `ScaleYMode.Volume` |
358
+ | **keeping the volume** | πŸ“— in *realistic* animation a squashed object keeps its volume: stretch it one way and it must narrow the other ([twelve principles]) | 🧩 `xΒ·y β‰ˆ 1` on a `scale` key, which `explain` prints beside it, and the `area` figure a `deform` key already carried. **A reading, never a rule** β€” a shadow, a zoom and a cartoon squash all change area on purpose. ⚠️ Say *scale product* in a message: `volume` already means an event's audio and 4.3's `ScaleYMode.Volume` |
359
359
  | **overshoot and settle** | πŸ“— exaggeration β€” a motion that imitates reality exactly reads as dull ([twelve principles]) | 🧩 Β§3.8's interior key past the final value, then back. 🚨 The last key still carries the given end pose exactly |
360
360
  | **a moving hold** β€” *"it should never be fully still"* | πŸ“— a character that is barely moving still breathes; two nearly-identical poses keep it from going lifeless ([twelve principles]) | 🧩 **not** Β§3.3's *hold*, which is two EQUAL keys meaning *nothing moves here*. A moving hold is the opposite: Β§3.3's 1.5–3 s idle band with a small excursion β€” Β§0's A=B case |
361
361
  | **secondary action** | πŸ“— a supporting movement that emphasises the main one rather than competing with it ([twelve principles]) | 🧩 a whole extra timeline, and the **first thing to leave out of a first candidate**: a ballot spreading on both primary timing and a secondary action has asked two questions Β· Β§3.10 |
@@ -366,13 +366,11 @@ cell, because most rows are a sourced word mapped to an unsourced construct.
366
366
  [Graph]: http://esotericsoftware.com/spine-graph
367
367
  [Tools]: http://esotericsoftware.com/spine-tools
368
368
 
369
- ⚠️ **The eight *Animating with Spine* videos are the obvious source for this
370
- table and none of it comes from them.** Their captions could not be retrieved β€”
371
- the manifest is served and the body is not β€” so nothing here is presented as
372
- something said in one. Two rows cite a video's published *description*, which is
373
- Esoteric's own prose and marked as such; everything else is the twelve
374
- principles and Spine's written documentation. If the narration becomes readable,
375
- this table is where it belongs.
369
+ ⚠️ **None of this table comes from the narration of the eight *Animating with
370
+ Spine* videos**, so nothing here is presented as something said in one. Two rows
371
+ cite a video's published *description*, which is Esoteric's own prose and marked
372
+ as such; everything else is the twelve principles and Spine's written
373
+ documentation.
376
374
 
377
375
  ### 3.2 πŸ“— Pose to pose is the normal form, and it is one of two
378
376
 
@@ -528,20 +526,16 @@ The table above is a per-part **timing** offset, and in rigc it has a field:
528
526
  `groups` names the parts, `stagger` adds the delay in member order, and `gallery/ride`
529
527
  keys four wheels and two ears that way (AUTHORING Β§4.3).
530
528
 
531
- 🧩 **The other half of "each part gets its own number" is the value, and until
532
- [#295](https://github.com/firejune/rigc/issues/295) it had no field at all.** `groups`
529
+ 🧩 **The other half of "each part gets its own number" is the value.** `groups`
533
530
  keys its members **identically**, which is right for a wheel pair and wrong for a face:
534
531
  there, the whole content of the movement is that every part moves a *different* amount.
535
- `gallery/portrait`'s held 12Β° yaw was 20 tracks, sixteen of them the same two properties
536
- on six sibling bones β€” same times, same easings, six different numbers β€” and exactly one
537
- of the twenty was a `groups` entry, the pair that happened to share a value.
538
532
 
539
- 🧩 **Two spellings now, and the choice is whether the numbers are decisions or
533
+ 🧩 **Two spellings, and the choice is whether the numbers are decisions or
540
534
  arithmetic** (AUTHORING Β§4.5.1 is the field reference):
541
535
 
542
536
  - a key's `v` may be a **map keyed by member name**, which is the right form when each
543
537
  number is a judgement β€” six hanging locks given six swings. The emitted file is byte
544
- for byte the one the six tracks produced, so this is a pure relocation;
538
+ for byte the one six separate tracks would produce, so this is a pure relocation;
545
539
  - a key may state a **`derive` model** instead β€” `yaw` or `pitch`, an angle, and a
546
540
  **depth per member** β€” and the compiler evaluates each member's value from it. That
547
541
  is the right form when the numbers were never judgements: `xΒ·(cos t βˆ’ 1) βˆ’ zΒ·sin t` at
@@ -695,7 +689,7 @@ request**, so whichever wins tells you something the next candidate can use.
695
689
  | **Segmentation** | one continuous movement | two beats with a hold between them | the prompt has two verbs in it, or a comma doing the work of one |
696
690
  | **Key density** | ends plus one interior key | ends plus three or four | the intent names a shape (*"hesitates"*, *"in stages"*) that the ends cannot carry |
697
691
  | **Pivot, where it was defaulted** | the art's own joint feature | the parent's far end | Β§3.9 defaulted it and the two readings are several pixels apart. The ballot is then answering a question the pictures did not |
698
- | **Deform** (advanced) | rigid throughout | squash/stretch on the extremes via a `deform` timeline (AUTHORING Β§4.11) | the rigid candidates have already been chosen between. ⚠️ **The base recipe is rigid-first** β€” see Β§7. 🧩 A deform key can state its transform rather than a table of offsets (AUTHORING Β§4.11.1), so this axis is now two numbers to spread on rather than two tables to transcribe |
692
+ | **Deform** (advanced) | rigid throughout | squash/stretch on the extremes via a `deform` timeline (AUTHORING Β§4.11) | the rigid candidates have already been chosen between. ⚠️ **The base recipe is rigid-first** β€” see Β§7. 🧩 A deform key can state its transform rather than a table of offsets (AUTHORING Β§4.11.1), so this axis is two numbers to spread on rather than two tables to transcribe |
699
693
 
700
694
  πŸ“Œ **One axis per ballot.** Two candidates differing on two axes cannot be read: the
701
695
  winner tells you the pair was better, not which half of it was. If two axes both look
@@ -753,16 +747,6 @@ Nothing here is an answer to anything.
753
747
  What *is* real: every command line below was run, and every figure printed in an
754
748
  output block is what the command actually printed.
755
749
 
756
- πŸ“ **Instrument re-baseline, 2026-09-03 β€” [#306](https://github.com/firejune/rigc/issues/306).**
757
- `pose`'s objective now interpolates its frame in premultiplied space, so a tap
758
- straddling a silhouette no longer mixes the ground's colour into a part's. Every
759
- block below was re-run on that arithmetic; **two figures moved**, both in step 2's
760
- narrowed pose-A block β€” `arm.png` reads `scale=0.968` (was 0.967) and
761
- `unexplained= 4%` (was 5%). Nothing in step 3's arithmetic depends on either, and
762
- the pose-B block is unchanged to the last digit. ⚠️ A residual from before that
763
- date and one from after are not the same measurement; do not put them in one
764
- column.
765
-
766
750
  πŸ–ΌοΈ **For the same recipe on art that ships, the
767
751
  [`gallery/`](https://github.com/firejune/rigc/tree/main/gallery) examples are worked
768
752
  in-betweening material** β€” `walk` is Β§3.5's arcs and Β§3.7's phase offsets on two leg
@@ -1157,7 +1141,7 @@ and a kind the compiler does not know is refused by name rather than evaluated.
1157
1141
  first non-goal above rather than a nuance of it.** AUTHORING Β§4.11.1 lets a key name a
1158
1142
  model β€” a yaw, a scale about a point, a wave, a bend β€” and the compiler evaluates it
1159
1143
  over the attachment's own vertices. What that removes is **transcription of one key's
1160
- arithmetic**, which was never judgement: `gallery/portrait`'s held yaw was 160 floats of
1144
+ arithmetic**, which is never judgement: `gallery/portrait`'s held yaw is 160 floats of
1161
1145
  one closed form. What it does not touch is **anything between two keys** β€” the times,
1162
1146
  the easings, the anticipation, the offset table β€” because a deform timeline still has
1163
1147
  one 0..1 blend channel and Β§3 still owns every value on it. β‡’ Sweeping a deform is
package/docs/PROMPTING.md CHANGED
@@ -84,7 +84,7 @@ Bun strips types and runs, so an agent can call methods that do not exist and
84
84
  watch the script fail β€” or worse, silently misbehave β€” without ever learning
85
85
  the API was imagined. The pilot left behind a helper written against
86
86
  spine-core methods that were never real; the repository's `typecheck` gate
87
- caught it at landing, hours too late to help the run. Say:
87
+ caught it afterwards, hours too late to help the run. Say:
88
88
 
89
89
  > After writing any helper script, run `bunx tsc --noEmit <file>` (or the
90
90
  > project's `typecheck` task) before trusting its output.
package/docs/RIGGING.md CHANGED
@@ -50,17 +50,7 @@ AUTHORING Β§0's sense, not as an input to be followed. The figures produced *her
50
50
  are re-derived on the fixture in the [appendix](#appendix--the-figure-this-page-measures-on)
51
51
  and every command on this page was re-run from it verbatim. Those citations β€”
52
52
  `gallery/…`, `selftest.ts`, the run records β€” are **repository material and not in
53
- the npm package**, so they are linked by absolute URL: this page ships, and a
54
- relative link to them would resolve to nothing inside `node_modules/spine-rigc/`.
55
-
56
- πŸ”’ **So this page is not a ladder run's reading, and AUTHORING.md deliberately does
57
- not link it.** An allowed-reading surface has to be **closed under reading**, and
58
- the citations below go into `bench/runs/`, which is on a run's forbidden list β€”
59
- `bench/runs/README.md`, *What a run may read*, is the copy that binds. Everything
60
- here that a run needs is in **AUTHORING Β§8.1**, **Β§10.3** and **MOTION Β§3.9**, which
61
- are allowed; what this page adds is where those rules came from and what they look
62
- like while they are being broken. If a run is handed this file anyway, that is a
63
- prompt defect rather than a decision, and the maintainer's call to make.
53
+ the npm package**, so they are linked by absolute URL.
64
54
 
65
55
  ---
66
56
 
@@ -247,8 +237,8 @@ record:
247
237
  2. **Drop the diverse rows.** AUTHORING Β§8.1's: *"re-solve the joint from a subset
248
238
  that excludes the diverse configurations and see how far the answer moves. If it
249
239
  moves a long way at comparable residuals, the diverse frames were carrying the
250
- whole identification."* ⚠️ **No run in the corpus had performed this one as a
251
- check as of 2026-09-18** β€” attempt 5 performed the *unconditional* version of it by accident and
240
+ whole identification."* ⚠️ **No run in the corpus performs this one as a
241
+ check** β€” attempt 5 performed the *unconditional* version of it by accident and
252
242
  that is Β§2.2's 21-unit result, which is what a deliberate subset test is designed
253
243
  to produce on purpose. It is prescribed, cheap and unexercised.
254
244
  3. **Look at the spread of relative angle directly**, before believing any residual.
@@ -918,10 +908,8 @@ to a movement that happens to be structural: *"the one thing that judges a movem
918
908
  is a person's eye, through `rigc vote`."*
919
909
 
920
910
  ⚠️ **Provenance note, stated because the honest version is short:** the prescription
921
- *assemble leaves first* comes from the production of this project's first demo film,
922
- whose artifacts were deliberately kept out of the repository ([#248](https://github.com/firejune/rigc/issues/248)),
923
- so **there is no repo-side record of it and this page does not present one.** What is
924
- re-derived here is the mechanism it describes β€” the compounding in Β§7.3 β€” and the
911
+ *assemble leaves first* has **no record in the repository, and this page does not
912
+ present one.** What is re-derived here is the mechanism it describes β€” the compounding in Β§7.3 β€” and the
925
913
  measured fact that ordering changes the path and not the extent. The ordering claim
926
914
  itself is one person's eye, once.
927
915
 
@@ -979,9 +967,7 @@ rigc chainfit --candidate out --images parts --frame pic/home@2fps/f0000.png \
979
967
  ⭐ **Two rows for one plate, one per bone, neither ambiguous.** The ambiguity did
980
968
  not get resolved by a better objective; it stopped existing, because a child whose
981
969
  parent is placed has **one degree of freedom about a pivot the rig declares**
982
- instead of four (AUTHORING Β§12). The selftest's own name for this control is
983
- `CF06_TWO_IDENTICAL_LIMBS_STOP_BEING_AMBIGUOUS_ONCE_THEY_HAVE_PIVOTS`, and its
984
- stated reason is *"two pivots, two arcs, one answer each."*
970
+ instead of four (AUTHORING Β§12): two pivots, two arcs, one answer each.
985
971
 
986
972
  πŸ“Œ **Read the hinges as the honesty check they are.** The frame *is* the setup pose,
987
973
  so the truth is 0Β°, and the search returned 0.33Β°, 0.61Β° and 1.20Β°. That is the
@@ -1118,9 +1104,8 @@ default failure mode**, because it drives bones rather than drawing anything.
1118
1104
  > `true`, so any IK timeline that did not restate it overwrote the constraint's value
1119
1105
  > for the whole animation, with the field still in the file and the gate green either
1120
1106
  > way."*
1121
- > β€” [`gallery/walk/README.md`](https://github.com/firejune/rigc/blob/main/gallery/walk/README.md), on
1122
- > [#273](https://github.com/firejune/rigc/issues/273) (fixed: rigc now stamps the
1123
- > rig's value onto every emitted ik key)
1107
+ > β€” [`gallery/walk/README.md`](https://github.com/firejune/rigc/blob/main/gallery/walk/README.md)
1108
+ > (rigc stamps the rig's value onto every emitted ik key)
1124
1109
 
1125
1110
  β‡’ **A structural fact stated in the rig can be overwritten by a per-key default in
1126
1111
  the motion.** It took four builds and one bone position to see it; nothing else
@@ -1199,7 +1184,7 @@ under β€” translating with it, not rotating:
1199
1184
 
1200
1185
  β‡’ The two rules do not conflict. **Re-parent to fix what a part is carried by; key
1201
1186
  draw order to fix what a part is drawn over.** Using either for the other's job is
1202
- the divergence AUTHORING Β§10 was written after six runs to stop.
1187
+ the divergence AUTHORING Β§10 exists to stop.
1203
1188
 
1204
1189
  ### 10.3 πŸ”’ The one machine guard on parentage, and why it exists
1205
1190
 
@@ -1239,8 +1224,7 @@ see:
1239
1224
  > every index is still in range, every vertex's weights still sum to 1, and `A04`,
1240
1225
  > `A20` and `diff` are all quiet, because an index has no name to be wrong.
1241
1226
  > (Measured, on the rung 6 transcription: union MAE 3.30 β†’ 15.09, worst mesh-slot
1242
- > drift 0.09 px β†’ 9.8 px, with a green gate throughout. Issue
1243
- > [#45](https://github.com/firejune/rigc/issues/45).)"*
1227
+ > drift 0.09 px β†’ 9.8 px, with a green gate throughout.)"*
1244
1228
  > β€” AUTHORING Β§3.4
1245
1229
 
1246
1230
  β‡’ rigc's `weights` form binds **by name**, like every other reference in a rig spec,