Repository navigation
fix(family): close up the preview lineup and draw two arms at their own depth - #98
Merged
Merged
Conversation
…wn depth The README previews spread the five characters about 1.5x wider than the group painting they came from. Offsets now follow the painting's face spacing (0, 352, 657, 1022, 1355 scene px; scene left 192 -> 319 to recentre). Closing the gap makes two overlaps that no single depth order can draw: Roa stands behind Luna with her arm over Luna's shoulder, and Jinni stands in front of Luna with her arm behind Luna's. Each is drawn as a second instance of one character from the same pose, at another z, clipped to a path around that arm (scripts/preview-overlaps.json). The paths are measured, not drawn: measure-preview-overlaps.py renders each character alone at its lineup place (new --isolate flag), takes the arm's slots (sleeves; handwear_r for office Jinni; a row window for office Roa, whose arm is painted into topwear), intersects with the other character over all 101 captured frames, grows by 2 px and traces it. Rejected: - Hand-placed boxes: in homewear and swimwear the box edge crossed the sleeve, mug and shawl and left a visible step. - Cutting the box out of the base instance: the two anti-aliased clip edges left a faint seam line; drawing the overlay over an unchanged base leaves none. - Slot-only overlays without a path: Jinni's sleeve lies over her own torso (3505-4699 px per outfit near Luna), so moving the sleeve below Luna also moves it below her own body. Verification: PREVIEW_LOOP_PASS on all four outfits; render-readme-preview tests 5/5; outfit switch cut frame outside clothing at threshold 8 2361 -> 432 px. 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. |
This was referenced Nov 2, 2026
Closed
firejune
added a commit
that referenced
this pull request
Nov 2, 2026
… over Naru (#100) Owner review of the #98 previews: Roa's forearm across Luna's neck read as bending it; Jinni's legs crossed over Luna's; Jinni's skirt belongs in front of Naru. Three layer changes, all measured by measure-preview-overlaps.py: - roa-hand-over-luna: Roa's arm is drawn over Luna's body only (Luna's hair, face and neck slots excluded) and only left of Luna's front hair (column 393 in every outfit). Luna's throat is painted into topwear, so the slot exclusion alone left the forearm over her throat. - jinni-legs-behind-luna: Luna drawn over Jinni below the skirt's hem (office 650, uniform 618) or, where legs are painted into bottomwear, where the arm's path ends (homewear 500) and in the gap below the sarong's edge (swimwear 670). - jinni-skirt-over-naru: Jinni drawn over Naru inside her bottomwear's overlap with Naru. Rejected: stopping the hand at Luna's face column (431). It cut the forearm with a visible vertical edge over Luna's collar. Stopping at her front hair hides the forearm behind a painted edge. Verification: PREVIEW_LOOP_PASS on all four outfits; render-readme-preview tests 5/5; render-outfit-switch exit 0. Co-authored-by: Roa <342598975+fj-roa[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #97.
Change. Preview lineup offsets follow the group painting's face spacing (0, 352, 657, 1022, 1355; scene recentred, left 192 → 319). z is now 10/30/40/50/60 (Roa behind Luna, Jinni in front of Luna, Nova in front of Naru).
Two arms at their own depth. At the closer spacing, two overlaps cannot be drawn by any single depth order. Roa stands behind Luna but has her arm over Luna's shoulder. Jinni stands in front of Luna but her arm goes behind Luna's. Each is drawn again from the same pose, at another z, clipped to a path around the arm. The paths are in
family/scripts/preview-overlaps.json, per outfit.The paths are measured.
measure-preview-overlaps.pyrenders each character alone at its lineup place (new--isolate key[:slots]; it writes frames plusisolate.jsonand no preview). It takes the arm (the arm's slots, or a row window where the arm is painted into another slot, intersects it with the other character over all 101 frames, grows the result 2 px, and traces it.Rejected
Verification
Subtest: help and import require no renderer or output and list the four actual outfits
ok 1 - help and import require no renderer or output and list the four actual outfits
duration_ms: 117.468166
type: 'test'
...
Subtest: unknown, duplicated, missing or mixed-probe arguments refuse before renderer import
ok 2 - unknown, duplicated, missing or mixed-probe arguments refuse before renderer import
duration_ms: 875.306
type: 'test'
...
Subtest: invalid outfit, dimensions, quality and extension refuse before renderer import
ok 3 - invalid outfit, dimensions, quality and extension refuse before renderer import
duration_ms: 795.02425
type: 'test'
...
Subtest: preflight with --out pointing into family/docs is refused by name
ok 4 - preflight with --out pointing into family/docs is refused by name
duration_ms: 434.170875
type: 'test'
...
captured 0/2
{"output":"/Users/firejune/Workspace/Firejune/.worktrees/rig-examples/roa-97/.lane-evidence/test-preflight-no-out/evidence/family-preview.webp","evidence":"/Users/firejune/Workspace/Firejune/.worktrees/rig-examples/roa-97/.lane-evidence/test-preflight-no-out/evidence","bytes":12,"sha256":"c2e4b78a6398934bfffe4575fe3ab77b122062c8850ff14e508baeab23729ddf","preflightOnly":true}
Subtest: preflight without --out writes into evidence and leaves family/docs/family-preview.webp byte-identical
ok 5 - preflight without --out writes into evidence and leaves family/docs/family-preview.webp byte-identical
duration_ms: 545.592
type: 'test'
...
1..5
tests 5
suites 0
pass 5
fail 0
cancelled 0
skipped 0
todo 0
duration_ms 2907.691291 | 5/5 pass |
| | ×4 |
| | exit 0. Cut frame outside the clothing, threshold 8: 2361 → 432 px. Shared slots only: 68880 → 15354 px |
The model hashes recorded in the docs JSON changed because the previous JSON predates the current models. This PR changes no rig.
🤖 Generated with Claude Code
EOF
)