Skip to content

V3: Blob Tracking brackets, edge dots and label modes - #170

Merged
git-chad merged 55 commits into
git-chad/shader-lab-v3-planfrom
git-chad/v3-blob-tracking-upgrade
Oct 1, 2026
Merged

git-chad merged 55 commits into
git-chad/shader-lab-v3-planfrom
git-chad/v3-blob-tracking-upgrade

Conversation

@git-chad

Copy link
Copy Markdown
Collaborator

Part 1 of the technical annotations direction (roadmap 6.3): upgrades Blob Tracking with the elements from reference 19 while keeping every existing scene identical.

  • Frame: Outline (unchanged default), Corner brackets with Bracket Length, or None. The legacy showOutline toggle is hidden and migrates to frameStyle on import, so saved layers with the outline off open as Frame: None.
  • Edge Dots: the tracker now keeps up to 64 boundary cells per blob from the 64×36 analysis grid; the pass scatters seeded dots along that silhouette with density and size controls, leading them by the same velocity lookahead as the boxes. Off by default.
  • Label Text: Coordinates (unchanged default), Prefix + ID (PERSON 47K2, code from a deterministic hash of the seed and the track id so it never flickers), or Custom list (one per line, each track keeps its pick). The label atlas gains letters and punctuation; labels are 20 characters. The panel states that labels are decorative, not recognition.

Editor and runtime passes and trackers stay byte-identical apart from imports. The video benchmark gains --blob scenarios: on SwiftShader at 1080p the outline scene takes 57 ms median and brackets + dots + ID labels 62 ms, so the decorations add about 4.5 ms; not native timing (roadmap 7.2).

Validation:

  • bun run check — passes; the same three preexisting lint warnings.
  • bun run test:composition — full suite passes, including tests/composition/blob-tracking.mjs: tracker edge points on a synthetic grid, label hashing and atlas coverage, editor/runtime renders over a synthetic block (outline versus brackets at corners and edge midpoints, legacy showOutline, dot density and placement, the three label modes, alpha parity), and the frameStyle migration. The existing-project expectation mirrors the new appended defaults. Legacy baselines untouched.
  • bun tests/composition/blob-tracking-ui.mjs — actual editor: Frame select, Bracket Length visibility, Prefix + ID with prefix input, Custom list textarea, Edge Dots with conditional Dot Size, save/reopen.

Not in this slice (part 2, after confirmation): per-element colors and the standalone Annotations layer with edge-guided and seeded placement, rulers, target circles and metadata blocks. Stacked on #169 (git-chad/v3-text-editing), within integration #150. Nothing merges to main before V3 is complete. Focused user test: tests/composition/BLOB-TRACKING-MANUAL-QA.md.

@vercel

vercel Bot commented Sep 21, 2026 •

Copy link
Copy Markdown
Contributor

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

Project Deployment Actions Updated
shader-lab Ready Ready Preview Oct 1, 2026 7:06am UTC

@greptile-apps

greptile-apps Bot commented Sep 21, 2026

Copy link
Copy Markdown

RetriggerConfidence Score: 4/5

The PR should not merge until bracket mode accumulates bracket-shaped trails rather than full rectangular outlines.

Summary

This PR expands Blob Tracking with corner-bracket frames, silhouette dots, seeded/custom labels, legacy frame migration, editor/runtime parity work, and composition/UI/performance coverage.

  • Adds boundary-point extraction and instanced edge-dot rendering.
  • Adds frame and decorative label controls with project-file migration.
  • Extends the editor and React runtime implementations in parallel.
  • Adds focused rendering, persistence, UI, and video benchmark coverage.

Reviews (1) · Last reviewed commit: "Add corner brackets, edge dots and decor..."

Comment thread src/renderer/blob-tracking-pass.ts Outdated
@git-chad

Copy link
Copy Markdown
Collaborator Author

Follow-up after the user's video test: motion detection now dilates the frame difference (radius 2 plus diagonals) on a 128×72 analysis grid (was 64×36; 96 wide broke the async readback because rows must stay 256-byte aligned), cells keep their state down to 55% of the threshold, and Auto only falls back to luminance when fewer than two cells move for a second. On aura.mp4 the mean motion blob grew from 0.3% to 2.4% of the grid with unchanged ID churn (tests/composition/blob-motion-probe.mjs). Also adds Lock 1:1 in Shapes and starts Trail Decay at 0 for new layers. 1080p SwiftShader timing unchanged at 55–57 ms.

@git-chad

Copy link
Copy Markdown
Collaborator Author

Lock 1:1 is now on by default for new Blob Tracking layers. Saved scenes migrate to free aspect so their frames do not change.

Importing a project now disarms the armed remix draft and clears the remix origin alongside the active draft, so later edits cannot autosave under the previous remix title.
…handle unmount

Mask coordinates are now measured against the composition crop frame in the
renderer and the handles overlay, so preview and export agree when the
viewport and composition aspect ratios differ.
Unmounting the handles mid-drag no longer writes the drag-start mask back,
which overwrote the result of an undo.
… imports

- Recompute outputSize from the restored scene config when applying a history snapshot
- Normalize Custom imports whose saved composition differs from the guide size, keeping fixed Custom documents intact
… 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.
@git-chad
git-chad force-pushed the git-chad/v3-text-editing branch from fbb0a86 to 70a3ff9 Compare October 1, 2026 07:05
@git-chad
git-chad force-pushed the git-chad/v3-blob-tracking-upgrade branch from df1a627 to ffb8e48 Compare October 1, 2026 07:05
@git-chad
git-chad changed the base branch from git-chad/v3-text-editing to git-chad/shader-lab-v3-plan October 1, 2026 15:13
@git-chad
git-chad merged commit ffb8e48 into git-chad/shader-lab-v3-plan Oct 1, 2026
5 checks passed

This branch was successfully deployed

1 active deployment
Preview — ffb8e487 Deployed Oct 1, 2026 by vercel[bot]
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