spine-rigc 1.0.1 β 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/README.md +34 -55
- package/docs/AUTHORING.md +725 -1160
- package/docs/FACE.md +205 -371
- package/docs/INGEST.md +151 -306
- package/docs/MOTION.md +11 -27
- package/docs/PROMPTING.md +1 -1
- package/docs/RIGGING.md +10 -26
- package/docs/SPEC_COVERAGE.md +27 -871
- package/package.json +1 -1
- package/src/atlas.ts +9 -8
- package/src/compile.ts +1 -1
- package/src/generation.ts +2 -1
- package/src/ladder.ts +1 -1
- package/src/rig.ts +4 -4
- package/src/validate.ts +20 -14
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`
|
|
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
|
-
β οΈ **
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
251
|
-
check
|
|
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*
|
|
922
|
-
|
|
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)
|
|
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)
|
|
1122
|
-
>
|
|
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
|
|
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.
|
|
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,
|