Repository navigation
feat: step 9b — a hello the producer builds: hm? → heh → elbow-down wave → weight-shift settle (#9) - #11
Conversation
…ave → weight-shift settle (#9) scripts/hello.ts writes one motion spec (rigc-motion/1, animation "hello": 16 tracks, 97 keys over 4 s at 24 fps) that the config names in motion.animations_from; rig-parts build gates it beside the idle. An authored test motion, no footage. The leg IK reads the leg bones from out/rig/rig.json so both ankles stay planted through the 6 px hip shift. Why the arm stays elbow-down: the upper-arm image is the puff sleeve and the arm as one piece under a sleeveless top, so swinging it out opens background at the armhole (the step-9 wave opens 3,772 px there). The hello keeps sleeve_r0 within 4.0 deg of rest and waves from the elbow. Why the weight shift is 6 px: the thigh art starts at the hem. Measured on the walkthrough's build (parts 1.48.0, rig-c 2.64.1, pose 0.37.0, play 1.12.0): all 15 seam pairs within gap <= 25 / ghost <= 50 px (worst: forearm_r|upperarm_r 1/25), pass-through 0/97, ANIMATIONS_DO_NOT_FOLD PASS, check PASS, build PASS; sleeve_r0 range 4.00 deg; ankles drift <= 0.0007 px. - README: step 9b with the exact commands and expected lines; step 10 plays idle on track 0 and hello on track 1 (&under=idle), keeps the wave link - scripts/play.html: optional &under=<anim> (track 0 under anim on 1) - scripts/check-adapters.ts: runs 9b, asserts idle + hello in the build and both step-10 links' tracks - docs/REFERENCE.md: versions, run-4 timings, the 9b section with the bars and the 15-pair table Closes #9 Co-Authored-By: Roa <342598975+fj-roa[bot]@users.noreply.github.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 85e63aec5b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| const n = Math.round(seconds * fps); | ||
| const r4 = (x: number) => Math.round(x * 1e4) / 1e4 || 0; | ||
| let maxUpper = 0; | ||
| let maxShift = 0; | ||
| const tracks = curves.map(([target, property, f, group]) => { | ||
| const keys = []; | ||
| for (let i = 0; i <= n; i++) { | ||
| const t = i / fps; |
There was a problem hiding this comment.
Keep the final key at the requested duration
When --seconds * --fps is not an integer, rounding the frame count and then calculating each timestamp as i / fps makes the last key fall before or after the declared animation duration. For example, --seconds 1 --fps 1.5 emits keys at 0, 0.66667, and 1.33333 while declaring a one-second animation; rounding downward can instead omit the rest-pose endpoint and cause a visible loop jump. Either constrain the accepted values or generate timestamps so the final key is exactly seconds.
Useful? React with 👍 / 👎.
|
HQ sign on 85e63ae: owner eye-checked the clip and accepted ("안녕 많이 좋아졌다"); producer-first (one motion spec via config motion.animations_from, no hand overlay), bars stated before measuring and met (15 seam pairs inside, pass-through 0/97, sleeve_r0 4.00°, hip 5.96 px), README-as-written re-run byte-identical. Arming. |
Closes #9.
What
scripts/hello.ts(Bun, node:fs only, wave.ts's style) writes one motion spechello.anim.json—rigc-motion/1, animationhello, 16 tracks × 97 keys, 4 s at 24 fps, loopable — that the config names inmotion.animations_from(a string path relative to the config; set with the existingtake.ts).rig-parts build … --loopgates it beside the idle:ANIMATIONS_DO_NOT_FOLD: PASS,check: PASS,build: PASS. Producer-first; no hand overlay. Authored test motion, no footage.sleeve_r0≤ 4°, forearm up then ±15° at 2 Hz, two waves) → settle (hip −6 px with IK legs, ankles planted, skirt links following).&anim=hello&under=idle(idle on track 0, hello on track 1) and keeps the wave link;scripts/play.htmlgains the optional&under=;scripts/check-adapters.tsruns 9b and asserts the build holdsidle+helloand both step-10 links' tracks (local run: exit 0, every[bar:*]PASS);docs/REFERENCE.md: versions, timings, the 9b section with bars and the 15-pair table.Why elbow-down / why 6 px — the upper-arm image is the puff sleeve + arm as one piece under a sleeveless top: swinging it out opens background at the armhole (step 9's wave: 3,772 px; even 25 % of its swing 1,070). Single-bone sweep: shoulder gap 0 at −3°, 50 at −6°; the forearm is free at the elbow. The thigh art starts at the hem, so a hip move past ~6 px opens the hem; shoes are one image on root, so no foot lifts. An overhead hello needs a raised-arm painting set (alternate set with its own skeleton), not a wider deform.
Bars (stated before measuring): seam gap ≤ 25 px, ghost ≤ 50 px, pass-through 0,
sleeve_r0within ±4°, hip ≤ 6 px.Measured (walkthrough's build, current npm: parts 1.48.0, rig-c 2.64.1, pose 0.37.0, play 1.12.0;
rigc render --fps 24 --seam … --pass-through …):--angle-range sleeve_r0:chest: 4.00° max. Hip 5.96 px of world travel; ankles ≤ 0.0007 px.Reproduction: the README's
shblocks from a clean folder (hello.ts copied in place of the unpublished clone) → identicalhello.anim.json,config.json, both builds (byte-identical to the measured run). Warm-cache run: steps 1–10 133 s + 9b 81 s. The "about 3 minutes" heading now reads ~3.6 min on this machine; left unchanged because its anchor is referenced (separate decision).Candid read of the result: the wave is the strongest beat; "hm?" and "heh" are subtle at full-body size (a squint-smile, not a closed-curve eye-smile — that needs a curved lash image); the settle is invisible by design (it returns the loop to rest).
🤖 Generated with Claude Code