Skip to content

foundation: scroll-unwrap-pipeline — wrap meshes to unwrap videos#1037

Open
giorgioangel wants to merge 1 commit into
mainfrom
feature/scroll-unwrap-pipeline
Open

foundation: scroll-unwrap-pipeline — wrap meshes to unwrap videos#1037
giorgioangel wants to merge 1 commit into
mainfrom
feature/scroll-unwrap-pipeline

Conversation

@giorgioangel

Copy link
Copy Markdown
Member

What

foundation/scroll-unwrap-pipeline/ — a production pipeline that takes textured Herculaneum wrap segments (binary PLY + ink predictions in the same UV space) to finished unwrap animations:

  • exact PLY->OBJ conversion (bit-equal round-trip gates, SHA-verified textures)
  • perceptually-gated UV-preserving decimation (keep-fraction ladder, render-SSIM + Hausdorff gates)
  • carbon-black ink-overlay baking (recto-only via two-sided materials)
  • self-intersection-free unwrap animation: rolling-contact kinematics with a closed-form plane-clearance barrier, chart sanitation (injectivity enforcement, junk-tail trim), and a per-frame roll-vs-sheet clearance certificate as a hard gate; deformation-gradient fallback ladder with clearance-dominant ranking
  • headless EGL alpha-cutout renderer -> 4K masters + 1080p derivatives (plain / ink / reveal variants, 16:9 + 9:16), per-frame textured OBJs (ink as a two-sided thin shell)
  • signature-keyed batch staging so artifacts from different code revisions can never silently coexist

Specs & layout

Binding contracts in docs/: MESH-IO, UNWRAP-MATH, RENDER-STYLE, QUALITY-GATES (incl. the vision-review JSON interface for the final gate). src/scrollkit (io | decimate | ink | unwrap | metrics | render), stage CLIs + gate_m0..m5 under scripts/, synthetic-fixture tests under tests/.

Checks

  • Full pytest suite green in this tree's own environment (uv sync && uv run pytest): 38/38 — IO convention traps, analytic-cylinder kinematics, render orientation pinning, ink grading.
  • All stage CLIs import and parse args cleanly; gates exit RED correctly on an empty tree.

🤖 Generated with Claude Code

Production pipeline for textured Herculaneum wrap segments: exact PLY->OBJ
conversion (bit-equal round-trip gates), perceptually-gated UV-preserving
decimation, carbon-black ink-overlay baking, and self-intersection-free
unwrap animations rendered headlessly to 4K (plain / ink / reveal variants,
16:9 + 9:16, per-frame textured OBJs with two-sided ink shells).

Core: rolling-contact unwrap kinematics with a closed-form plane-clearance
barrier and chart sanitation (injectivity enforcement, junk-tail trim); a
per-frame roll-vs-sheet clearance certificate as a hard non-waivable gate;
a deformation-gradient fallback ladder with clearance-dominant ranking;
strict mesh-IO layer with library quarantine and convention-trap CI
fixtures; signature-keyed batch staging so artifacts from different code
revisions cannot silently coexist.

Specs in docs/ (MESH-IO, UNWRAP-MATH, RENDER-STYLE, QUALITY-GATES).
Checks: full pytest suite green in this tree's own environment.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 11, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
scrollprize-org Ignored Ignored Jun 11, 2026 10:45am

Request Review

@giorgioangel giorgioangel marked this pull request as ready for review June 11, 2026 13:41
@giorgioangel giorgioangel requested a review from jrudolph as a code owner June 11, 2026 13:41
@giorgioangel

Copy link
Copy Markdown
Member Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 983bcf308b

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

"""True per face iff the texture alpha at the face's UV centroid exceeds alpha_min.
Meshes without alpha (RGB textures / no texture) are fully visible."""
src = Path(src)
group = group_of_source(src)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve the A/B group for decimated animations

In the production path I inspected, scripts/produce.py invokes animate.py with only row["decimated_obj"], so src is an outputs/decimated/... OBJ rather than a file under textured_ply_march or textured_ply_may. Because group_of_source() only recognizes those original PLY parent directories, this line classifies every decimated A/B animation input as group C, and the alpha visibility mask is then sampled with audit["tex_orientation"]["C"] instead of the mesh's true A/B orientation. That makes the M3 visible-face gates and metrics include/exclude the wrong texture regions for normal production runs; pass the group through from the M2/production manifest or store it in metadata instead of inferring it from the decimated path.

Useful? React with 👍 / 👎.

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.

1 participant