Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion content/docs/core.md
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ bun add -d @rig-c/core
bun rigc build --rig rig.json --motion motion.json --out build/
```

The published 2.74.0 package declares Bun 1.4.0 or later. The canonical npm package is `@rig-c/core`; `rig-c` is its convenience install name, and the command is `rigc`. Licensing by playback path: [Licensing](/docs/licensing/).
The published package declares Bun 1.4.0 or later. The canonical npm package is `@rig-c/core`; `rig-c` is its convenience install name, and the command is `rigc`. Licensing by playback path: [Licensing](/docs/licensing/).

## Inputs and outputs

Expand Down Expand Up @@ -164,6 +164,7 @@ The published 2.74.0 package declares Bun 1.4.0 or later. The canonical npm pack
- Start here: [/docs/getting-started/](/docs/getting-started/)

<!-- SOURCES (not published)
- install requirements: npm view @rig-c/core@2.81.0 engines and package.json at 666b30bf27b1447e71b02271b48253a8b47e7520 (2026-10-30): bun >=1.4.0; this is the declared runtime floor, not an older-runtime test result.
- declared runtime refreshed from npm rig-c@2.74.0 tarball package.json engines.bun (>=1.4.0); recorded cases below retain their original pins.
- key-pose film: rig-c/core@539572d (539572d34bb034b9e905e30dc2d45bcd2650b34f, the commit that last changed it; identical at v2.64.1 51dba78) assets/rigc-keypose.gif — 234 frames, 600x405, 5 cs each = 11.70 s, opaque; encoded by scripts/encode-video.sh row core-keypose (20 fps, cropped to 600x404); caption from films/two-keypose/README.md (summary, shot table, honesty stance; shot 2 = spine-rigc@0.9.0 output); "spine-rigc" is drawn in the caption band of every frame
- three cases: rig-c 2.61.0 on rig-c/examples@c239b09 family/roa/out/rig — verbatim fail.log / pass.log / guide.txt of each case (case run 2026-10-19)
Expand Down
3 changes: 2 additions & 1 deletion content/docs/getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ Repository: <https://github.com/rig-c/getting-started>

This builds a published example character whose painting and See-through layers are already made. Its joints are hand-placed, so this route needs **Bun 1.4.4** (the version tested below), `curl` and `tar`, with a macOS or Linux shell. The new reproduction below ran on Linux; Windows was not tested. Painting and layer generation happen before this recipe, on the [full guide's GPU or hosted routes](https://github.com/rig-c/getting-started#readme). A person still judges how the result looks.

**Choose a versioned run.** The commands here pin four packages, their dependency overrides, the helper-script commit and the example input commit. They reproduce this page's historical package combination; they are not an install of the latest packages. For a rolling-latest walkthrough, use the [upstream guide](https://github.com/rig-c/getting-started#try-it-first) and its existing [scheduled CPU walkthrough CI](https://github.com/rig-c/getting-started/actions/workflows/adapters.yml). Its [tested-with record](https://github.com/rig-c/getting-started/blob/main/docs/REFERENCE.md#tested-with) has its own date and versions. That job polls npm daily and runs weekly regardless.
**Choose a versioned run.** The commands here pin four packages, their dependency overrides, the helper-script commit and the example input commit. They reproduce this page's historical package combination; they are not an install of the latest packages. For a rolling-latest walkthrough, use the [upstream guide](https://github.com/rig-c/getting-started#try-it-first--no-gpu-about-3-minutes) and its existing [scheduled CPU walkthrough CI](https://github.com/rig-c/getting-started/actions/workflows/adapters.yml). Its [tested-with record](https://github.com/rig-c/getting-started/blob/main/docs/REFERENCE.md#tested-with) has its own date and versions. That job polls npm daily and runs weekly regardless.

### What the time records include

Expand Down Expand Up @@ -244,6 +244,7 @@ The full guide — making your own character, the GPU routes, troubleshooting an
The example inputs in step 2 come from [rig-c/exam](https://github.com/rig-c/exam) and are **CC BY-NC 4.0**, not MIT: free to use with credit, not for commercial use, and what you build from them carries that licence. Which terms each route brings: [Licensing](/docs/licensing/).

<!-- SOURCES (not published)
- rolling-latest upstream guide fragment: getting-started README at 78f44c247fbd7d8c416f597149bad83bbea65b99 (2026-10-30), Contents and heading: #try-it-first--no-gpu-about-3-minutes; historical recipe below remains separately pinned.
- The idle clip (drawn by @rig-c/play; the step-10 wave beside it came from the same run until 2026-10-21): one run of steps 1-10 as written, 2026-10-20, Apple M4, Bun 1.4.2, from an empty folder. `bun add` resolved @rig-c/parts 1.42.0, rig-c 2.64.1, @rig-c/pose 0.36.0, @rig-c/play 1.12.0 (bun.lock; `npm view` the same day gave the same four); rig-c/getting-started cloned at 2928714. Every command exited 0. Hand-placed keypoints (step 6's default), so step 7 printed 0 LINT lines; the 1.41.1 LINT line in step 6 is for the script-detected joints and was not re-run here.
- Expected lines matched: st_input_full.png 2432x2432; 29 layer(s): 29 with opaque pixels; 0 WARN line(s); head_box [616,32,1132,548]; st_input_head.png 516x516; 22 part(s) on a 832x1216 rig; recomposite mean |d|=1.13, within 8: 97.8%; coverage: 42 bone(s) - 29 checked and clean; check: PASS; 11 of 12 bar(s) measured, 1 skipped (STRESS_OFF_CHAIN); build: PASS; wave.ts: 73 frame(s), 3 s at 24 fps; GATE rigc build --profile spine-html: green; wrote wave.motion.json - animations: idle, wave.
- getting-started-idle.webp + getting-started-idle-poster.png: scripts/play-capture-webp.ts (written as scripts/getting-started-idle-webp.ts, generalised 2026-10-20; re-run through it with --root <run> --model out/check/build/skeleton.model.json --anim idle --fps 12 --frames 40 the WebP and poster came out md5-identical to these; Bun 1.4.2, Playwright 1.63.0 / Chromium 153 headless with --use-angle=metal, libwebp 1.6.0 img2webp) on the run's out/check/build/skeleton.model.json, drawn by the run's own @rig-c/play 1.12.0 through rig-c/getting-started@2928714 scripts/play.html + serve.ts (`bun serve.ts --port 0`, page /?model=out/check/build/skeleton.model.json&anim=idle), html/body/#stage made transparent and #bar hidden. Page on Playwright's fake clock (paused, so its rAF loop does not step); frame i = RigPlayer.seek(i/12) + draw(), screenshot of #stage with omitBackground -> RGBA PNG. idle duration from loadModel's assets.animations: 3.3333 s = 40 frames at 12 fps. Framing as rigc render --max 640: union of player.bounds() over the idle at 60 fps, padded 4% of the long side, long side 640 -> 317x640 (scale 0.50395), the same size as out/idle.png. Two runs gave identical frames (40 PNGs concatenated md5 53c314fdcbd3f61647bb065d413c16e3). WebP: lossy q85, -m 6, -exact, alpha lossless (libwebp default alpha_quality 100; decoded alpha equals the capture's, max error 0); frame durations round((i+1)*1000/12)-round(i*1000/12) = 27 x 83 ms + 13 x 84 ms = 3333 ms per loop; animation background colour set to 0,0,0,0 with webpmux. 713104 bytes (md5 6ac3e8c0b31c1949dc368cfa245e54a4); lossless was 2363528 bytes; q75 596356, q70 581414 - the lossless alpha plane alone is about 12 KB a frame, so no exact-alpha encode of this clip comes near 500 KB. Poster = captured frame 0, 121305 bytes, md5 a124eb937745fc4a36c0a32bd01285ed. Alpha: corners 0, interior 255, 3430 edge px at alpha 30-225 on frame 0; no grey fringe - composited over 232 the edge band's mean luminance differs from rigc render's by +0.02 (a fringe would bias it). Loop seam (scripts/loop-seam.py over --bg #070b18): captured frames 0.451 vs max step 0.552; WebP 0.865 vs 0.877 PASS (over #e8e8e8: 0.823 vs 0.868 PASS). Against rigc render (out/idle.png, md5 b958dbf8574d7939667d61a47d46b26a, composited capture over 232,232,232): MAD frame 0 1.655, mean over the 40 frames 1.674, max 1.771; interior 3.52, edge band 18.2, outside 0.01; silhouettes differ by 1923 of ~57k px. Same pose and framing; the difference is resampling - the browser scales the part images (CSS transform, 0.504) and rigc rasterizes them itself, so line art and edges land up to a pixel apart and play's is a little softer.
Expand Down
3 changes: 2 additions & 1 deletion content/docs/licensing.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Three separate questions, answered separately: the licence of rig-c's own code,

## rig-c's own code: MIT

`rig-c` (core), `@rig-c/parts`, `@rig-c/pose`, `@rig-c/review`, `@rig-c/play`, `@rig-c/pixi`, `@rig-c/phaser` and `@rig-c/three` are MIT — each repository's `LICENSE`. That grant covers rig-c's code. It says nothing about Spine, and it does not cover the sample assets below.
`@rig-c/core` (`rigc`), `@rig-c/parts`, `@rig-c/pose`, `@rig-c/review`, `@rig-c/play`, `@rig-c/pixi`, `@rig-c/phaser` and `@rig-c/three` are MIT — each repository's `LICENSE`. That grant covers rig-c's code. It says nothing about Spine, and it does not cover the sample assets below.

## Spine terms: they follow what plays the output

Expand All @@ -38,6 +38,7 @@ Esoteric Software's licence pages read *Last updated April 5, 2025* when this pa
The image models that generated those paintings, and See-through itself, have their own terms; each repository's `NOTICE.md` records them, and [rig-c/parts `NOTICE.md`](https://github.com/rig-c/parts/blob/main/NOTICE.md) collects See-through's. No rig-c package contains See-through code or weights.

<!-- SOURCES (not published)
- canonical core package identity: core README at 666b30bf27b1447e71b02271b48253a8b47e7520, canonical npm package / convenience install name; npm view @rig-c/core@2.81.0 name license (2026-10-30): @rig-c/core, MIT.
- MIT per repo: LICENSE files of rig-c/core, parts, pose, review, play, adapters (gh api .../LICENSE)
- "what the terms turn on is the integration", "neither adds those terms nor removes them": rig-c/core NOTICE.md "What that means for rigc" + README "Licensing, stated plainly" (origin/main)
- play/adapters link nothing from Esoteric, own core: rig-c/getting-started README "On a web page" licence line; rig-c/adapters README:99-104
Expand Down
3 changes: 2 additions & 1 deletion content/docs/parts.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ npm i -D @rig-c/parts
rig-parts --help
```

Declares [Bun](https://bun.sh) 1.4.0 or later in the published 1.68.0 package; rig-c comes with it as a dependency. Which Spine terms apply depends on what plays the output: see [Licensing](/docs/licensing/).
The published package declares [Bun](https://bun.sh) 1.4.0 or later; `@rig-c/core` comes with it as a dependency. Which Spine terms apply depends on what plays the output: see [Licensing](/docs/licensing/).

## Inputs and outputs

Expand Down Expand Up @@ -133,6 +133,7 @@ From the [1.68.0 README](https://github.com/rig-c/parts/blob/89a7671229d155976fc
- Character 1's own files: [its folder in rig-c/examples](https://github.com/rig-c/examples/tree/c239b09328ca7364361b9761fac817502c09ede0/family/roa)

<!-- SOURCES (not published)
- install requirements: npm view @rig-c/parts@1.78.0 engines dependencies and package.json at 97a123395b83f5bee9ebce6407735f2a408855a6 (2026-10-30): bun >=1.4.0, @rig-c/core ^2.72.0; feature/config references below retain their historical pins.
- hero clip parts-explode.mp4 + poster: scripts/parts-explode.py (reads rig-c/examples@c239b09 family/roa/out/parts/*.png + parts.json via git show; assembled frames = parts.json x/y in list order, placement vs out/recomposite_rig.png mean abs diff 0.0134; grid layout and dissolves are illustration)
- Character 1 assets: rig-c/examples@c239b09 family/roa — docs/roa_layers_sheet.png, out/parts/*.png, out/parts.json (17 parts, recomposite: mean_abs 0.873, within_share 0.9831, uncovered_error_px 6041, holes[0] 834 px bordering bottomwear), out/recomposite_rig.png, out/recomposite_error_rig.png, docs/idle.gif (41 frames, 80 ms), out/check/contact.png
- red = uncovered error, blue = covered error (>40 off): rig-c/parts docs/AUTHORING.md lines 2200, 2633
Expand Down
15 changes: 8 additions & 7 deletions content/docs/play.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,13 +79,13 @@ Runs in the browser as an ES module; rig-c's posing core is bundled, so there is
| (optional) your own `PosedFrame` records, via `DomRenderer.render` | |

## Limits
From the README's *Status* and *No counterpart in 1.0.0* (it has no limits section):
- **Status: "Production."** — 60 fps on every engine measured for the practical scenario (README §"Status").
- **Reads rigc's model only**: "a Spine export is refused by name"; `loadModel` reads a compiled model document and nothing else (README §"Why", §"No counterpart in 1.0.0").
- **Which render mode is faster where is "not measured on a device yet"**, so the default stays `dom` (README §"Status").
- **Dark/two-colour tint stays out of scope in DOM mode**; RGB tint needs reference-filter support, Safari 15+ (README §"Status").
- **Clipping caveats**: an inverse polygon matches Spine's clipper only when convex, and the cost of many `clip-path`s on real-device Safari is not measured (README §"Status").
- **No per-slot changes from code** (attachment, colour) and no `scale` on load; scaling the root element is the caller's (README §"No counterpart in 1.0.0").
From [REFERENCE.md §Status](https://github.com/rig-c/play/blob/main/docs/REFERENCE.md#status) and [MIGRATION.md §No counterpart in 1.0.0](https://github.com/rig-c/play/blob/main/docs/MIGRATION.md#no-counterpart-in-100):
- **Status: "Production."** — 60 fps on every engine measured for the practical scenario (REFERENCE.md §"Status").
- **Reads rigc's model only**: "a Spine export is refused by name"; `loadModel` reads a compiled model document and nothing else ([README §Why](https://github.com/rig-c/play#why), MIGRATION.md §"No counterpart in 1.0.0").
- **Which render mode is faster where is "not measured on a device yet"**, so the default stays `dom` (REFERENCE.md §"Status").
- **Dark/two-colour tint stays out of scope in DOM mode**; RGB tint needs reference-filter support, Safari 15+ (REFERENCE.md §"Status").
- **Clipping caveats**: an inverse polygon matches Spine's clipper only when convex, and the cost of many `clip-path`s on real-device Safari is not measured (REFERENCE.md §"Status").
- **No per-slot changes from code** (attachment, colour) and no `scale` on load; scaling the root element is the caller's (MIGRATION.md §"No counterpart in 1.0.0").

## Go deeper
- [Measured runtime costs and unresolved results](/docs/performance/) — historical package comparisons, with CPU, GPU and presentation boundaries.
Expand All @@ -97,6 +97,7 @@ From the README's *Status* and *No counterpart in 1.0.0* (it has no limits secti
- [How it works](https://github.com/rig-c/play#how-it-works)
- [npm](https://www.npmjs.com/package/@rig-c/play) · [CHANGELOG](https://github.com/rig-c/play/blob/main/CHANGELOG.md)
<!-- SOURCES (not published)
- six Limits bullets rechecked against @rig-c/play 1.21.1 (npm gitHead = main 7f84c22f1fb8dacbf8db4aa1333efa3fbac6120a, 2026-10-30): docs/REFERENCE.md Status (production, practical scenario, mode cost, tint and clipping caveats); docs/MIGRATION.md No counterpart in 1.0.0 (model input, no load scale, no per-slot API); README Why (Spine export refused). Older line references below document the original 1.12.0 page/recording.
- live player picks: the 20 Family rigs = rig-c/examples@c239b09 family/ (same pin as /examples/), each with one animation `idle` (skeleton.model.json animations); sizes measured on jsDelivr: skeleton.png 1.19–2.00 MB + model ~0.09 MB compressed
- live player: @rig-c/play 1.12.0 from jsDelivr; Character 1 office model assets/rigs/character-1-swing = the Pose case's swing-build (Character 1 rig @examples c239b09 + retargeted cup swing; rig-c 2.61.0, @rig-c/pose 0.35.0)
- minimal page: rig-c/play README "A minimal page" (lines 301-326), style attribute only in the sample code
Expand Down
Loading
Loading