Skip to content

feat(render): --extremes writes each animation's two farthest poses and their diffs - #1633

Merged
firejune merged 1 commit into
mainfrom
naru/1632-render-extremes
Oct 29, 2026
Merged

firejune merged 1 commit into
mainfrom
naru/1632-render-extremes

Conversation

@firejune

Copy link
Copy Markdown
Collaborator

Closes #1632.

rigc render … --extremes writes extremes.json, extremes.png and one EXTREMES line per animation set. Together they show the motion's two farthest poses and the diffs between them and the setup pose, so an agent can look at a picture before a person does. It is a reading: the exit status never moves.

Verification (pool, Bun 1.4.4 Linux) Exit Figures
bun run typecheck, bun run lint 0, 0
bun run selftest 0 40 extremes cases; RH05, CUR128 and TY17 pass; no FAIL lines
bun run smoke 0 22 cases
ordinary render before vs after 0 7 recipes, 407 files byte-identical; 365 tracked PNG pixel hashes current
both posers on the gallery — 344 frame pairs and 10 extreme sheets identical
planted baked line vs clean — `

Contradicted in the issue:

  • Every set getting a picture pair is not derivable. When an attachment source switches, there is no vertex correspondence; this happens on 4 of 14 gallery sets. Those sets SKIP the geometry pair by name and keep their channel extrema.
  • "min/max" means the earlier and later frame of the farthest geometry pair. It is not a synthetic pose combining channel extrema.

Rejected:

  • Choosing the pair by a single channel.
  • Clipped-triangle correspondence.
  • Aliasing same-name deform sources.
  • Diff amplification or downscaling.
  • Making it a gate.

🤖 Generated with Claude Code

…nd their diffs

An agent that cannot see a rig reports seams as numbers, and the
numbers miss what one look at a motion's extremes shows. A line baked
into a moving part reads as ghost cells in a seam count. In a diff of
the motion's two extreme poses it is an obvious moving stroke.

`render --extremes` writes three things into each animation set:
- `extremes.json`: for every animated channel (bone rotate, translate,
  scale, shear, held components included; deform offsets; slider
  mapped time where actually applied), the frame of its minimum and of
  its maximum on the set's own grid. Separately, it records the
  geometry pair: the two frames whose corresponding original attachment
  vertices lie farthest apart, with that distance in world units. The
  method and the tie rule are written into the file.
- `extremes.png`: setup | min | max | |max−min| | |min−setup| |
  |max−setup|, at the render's own scale. Each diff is the max channel
  difference of premultiplied RGBA, drawn as luminance on black with no
  amplification, and a legend row is included.
- one `EXTREMES` line per set.

It is a reading, not a gate: the exit status never moves. A still set,
or a set whose attachment source switches so that no vertex
correspondence exists, is a named SKIP for the geometry pair, and its
valid channel extrema are still reported. On the gallery the core and
spine posers give identical sheets (10 sheets, 344 frame pairs).
Ordinary renders are byte-identical with and without the change: 7
recipes, 407 files. The tracked render-hash base is unchanged.

Measured: a planted line baked into a moving part shows 10 nonzero
pixels in the |max−min| ROI; the same fixture without the plant shows 0.
Two runs give byte-identical JSON and PNG. Full selftest and smoke pass.

Rejected:
- choosing the pair by a single channel: arbitrary;
- clipped-triangle correspondence and same-name source aliasing:
  guessed identities;
- downscaling or amplifying the diff;
- making it a gate.

Closes #1632

Co-Authored-By: Naru <342599188+fj-naru[bot]@users.noreply.github.com>
Co-Authored-By: Roa <342598975+fj-roa[bot]@users.noreply.github.com>
@firejune

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-29T04:48:24.849409Z a8af434 Manual request
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Chef's kiss.

Reviewed commit: a8af43496b

ℹ️ 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".

@firejune
firejune merged commit e54602f into main Oct 29, 2026
15 checks passed
@firejune
firejune deleted the naru/1632-render-extremes branch October 29, 2026 04:56
@github-actions github-actions Bot mentioned this pull request Oct 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

render --extremes: write each animation's min and max pose and their diff, so an agent looks before a person does

1 participant