Repository navigation
V3: Depth map and parallax on Image layers - #173
Merged
git-chad merged 68 commits intoOct 1, 2026
Merged
Conversation
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
…roup failures Media load callbacks now ignore replaced or removed passes and pending loads are cleared on disposal. Strict-mode pass failures are reported once at the originating pass instead of at every group boundary.
Publishing now drops every descendant of a hidden group and clears the parentId of any retained layer (the audio source) whose parent was removed, so the published scene passes hierarchy validation on reopen.
… UI test docs - GeometryHandles: keep restore in a ref so rerenders during a drag no longer cancel it - shape-pass (editor and runtime): atan2 returns +-PI on the negative axis when y is zero - shader-export: add shape to SupportedShaderExportLayerType - Document shape-layers-ui.mjs in SHAPE-LAYERS-MANUAL-QA.md
…th limit - restore font size when a text handle resize is cancelled - rotate the edit textarea around the anchor on both axes - cap in-place text edits at the Text parameter's 600 characters
…bracket mode Body: the trail ribbon now accumulates the corner-masked bracket stroke instead of the full outline, in both the app and the React runtime copy.
…ait edge readback on export, hide snapped handles, widen export type - Painted placement falls back to the undrifted anchor when drift would leave the stroke - Edge placement lays out nothing until the edge field exists and the export prepare step awaits the pending readback - Annotation target handles are hidden while Snap to Strongest Edge is active - Add annotations to SupportedShaderExportLayerType
…dges, depth validation - Keep the Missing depth map warning when the color image finishes loading - Drive built-in parallax from the composition timeline time in the editor media pass - Make Depth Edges Stretch cover exposed areas inside the frame when Contain has transparent borders (editor and runtime media passes) - Drop depth references on non-image layers or non-image assets during import
git-chad
force-pushed
the
git-chad/v3-annotations
branch
from
October 1, 2026 07:05
8520b7f to
d258666
Compare
git-chad
force-pushed
the
git-chad/v3-depth-parallax
branch
from
October 1, 2026 07:05
85a0277 to
c198525
Compare
git-chad
changed the base branch from
git-chad/v3-annotations
to
git-chad/shader-lab-v3-plan
October 1, 2026 15:13
This branch was successfully deployed
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.
Stacked on #172. Roadmap 6.4, stage 1 (feasibility prototype).
What
depthAssetId; exported to the runtime config asdepthAsset). Source → Depth map offers Attach / Replace / Remove. History, duplication, .lab save/reopen (missing depth reported as "Missing depth map"), shader export and MCP summaries carry it.MediaPass(editor and runtime) marches depth layers from near to far with five binary refinement steps, inside a TSLFn; nearer content covers what is behind it. Color and depth are sampled with explicit gradients from the undisplaced UV. Layers without a depth map keep the previous shader.Known behaviour
Where a near subject uncovers what was behind it, its trailing edge stretches into the gap (DepthFlow does the same without inpainting). Soft depth edges hide it. The depth map is sampled with the photo's UVs and not realigned. Video layers and depth generation are out of scope.
Verification
bun run check(3 preexisting warnings).bun run test:compositionincluding the newdepth-parallax.mjs(77 checks: camera math, editor/runtime passes, leading-edge parallax, occlusion, inversion, edge modes, quality, orbit/dolly over time, detach, parity, project file, history, duplication, missing-depth reopen, export, both pipelines).depth-parallax-ui.mjsagainst the dev server: attach, gated controls, motion select, remove, undo, actual .lab saves.tests/composition/DEPTH-PARALLAX-MANUAL-QA.md. Visual acceptance can now use any photo: Estimate generates the map in the app.🤖 Generated with Claude Code
Depth generation in the app
<name>-depth.png, Invert Depth off. SVG sources fall back to Attach.depth-estimate-ui.mjsruns the real download and inference against the dev server (106 s on SwiftShader including a 10 s download) and checks the attached asset, Invert off and the Show Depth preview.@huggingface/transformers4.3.0. ONNX runtime wasm binaries load from its default CDN.Scene depth (stage 2)
depth-parallax.mjsnow has 103 checks including the aux texture, Input → Depth vs luminance, fallback, depth mask and inversion, groups, runtime pipeline, plus a 1080p timing line ({"plain":32.3,"depthMedium":714.8,"depthHigh":1214.1,"depthLow":433.6}ms median on SwiftShader). Full suite anddepth-parallax-ui.mjspass.Keyframable masks
mask.*parameter tracks (teal). The editor frame builder and the runtime fold the evaluated values back into the mask; audio links can drive them too.depth-parallax.mjs(108 checks) renders a keyframed sweep at several times in both pipelines; the UI test creates a mask keyframe from the panel.