Skip to content

fix(family): close up the preview lineup and draw two arms at their own depth - #98

Merged
firejune merged 1 commit into
mainfrom
roa/97-family-previews-lineup-spread-wider-than
Nov 2, 2026
Merged

firejune merged 1 commit into
mainfrom
roa/97-family-previews-lineup-spread-wider-than

Conversation

@firejune

@firejune firejune commented Nov 2, 2026

Copy link
Copy Markdown
Collaborator

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.py renders each character alone at its lineup place (new --isolate key[:slots]; it writes frames plus isolate.json and 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.

outfit pair arm overlap px path box (capture px) rest of character inside path, max px
office roa-arm-over-luna rows < 400 (arm painted in ) 4438 360,246–467,349 0
office jinni-arm-behind-luna 4270 498,299–539,491 43
homewear roa-arm-over-luna 5072 362,243–471,365 174
homewear jinni-arm-behind-luna 5507 500,289–539,516 50
swimwear roa-arm-over-luna 9862 366,246–465,404 258
swimwear jinni-arm-behind-luna 2375 493,292–531,467 16
uniform roa-arm-over-luna 5022 362,244–470,349 16
uniform jinni-arm-behind-luna 3812 503,301–540,478 576

Rejected

  • Hand-placed boxes. In homewear and swimwear the box edge crossed the sleeve, the mug and the shawl, and left a visible step.
  • Cutting the box out of the base instance. The two anti-aliased clip edges met and 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 near Luna, per outfit). Moving the sleeve below Luna would also move it below her own body.

Verification

command result
TAP version 13

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
)

…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>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 2, 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-11-02T14:22:13.855783Z 0ef012e PR opened
ℹ️ 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.

@firejune
firejune merged commit 1334da1 into main Nov 2, 2026
2 checks passed
@firejune
firejune deleted the roa/97-family-previews-lineup-spread-wider-than branch November 2, 2026 14:47
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>
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.

family previews: lineup spread wider than the source group

1 participant