Skip to content

V3: Connected Dots layer (graph, blobs, plexus) - #184

Merged
git-chad merged 102 commits into
git-chad/shader-lab-v3-planfrom
git-chad/v3-connected-dots
Oct 1, 2026
Merged

git-chad merged 102 commits into
git-chad/shader-lab-v3-planfrom
git-chad/v3-connected-dots

Conversation

@git-chad

Copy link
Copy Markdown
Collaborator

Stacked on #183. Part of the V3 stack (parent #150); nothing merges to main until the plan is complete.

What

A new Connected Dots layer (Core, after Dot Grid), for the connected-dots portrait (reference 21). It runs in the transform role.

  • Points: jittered per grid cell (Spacing, Jitter, Seed). Each reads its tone and color from the image; Cutoff drops light tones so the background shows, and Invert flips this.
  • Links: each point connects to its 8 neighbors, with width and chance growing in the darks (Links, Link Threshold, Thin and Thick Links).
  • Modes:
    • Graph: a crisp union of dots and links.
    • Blobs: a smooth minimum, so dots and links melt into ink masses.
    • Plexus: thin lines that fade with distance (Range, Line Width).
  • Dots: circle, square, plus or ring, sized by tone.
  • Color: palette by tone (flat nearest-stop bands, ramp up to 8 stops), source colors, or ink. Background: color, image or transparent.
  • Motion: Drift and Speed; links form and break as points wander.
  • Styles: Portrait Graph (default, ref 21), Ink Blobs, Plexus, Constellation.

Review

In the first renders, links were too wide and filled the shadows solid. They're now tuned into dense graphs with holes, as in 21. Ink Blobs gets an organic ink mass in the darks, with loose dots and worm shapes in the mid tones.

Tests

bun run check passes, and the full bun run test:composition suite passes. connected-dots.mjs adds 75 checks:

  • Light areas stay background; isolated dots appear.
  • Links add coverage, and blobs merge further.
  • Dark tones get bigger dots; cutoff and invert work.
  • Square dots, and plexus range reaching more neighbors.
  • Palette, source colors, and transparent background.
  • No drift stays fixed; drift moves the points.
  • Editor/runtime parity, history, duplication, save/reopen, shader export and runtime pixel parity.

Manual check: tests/composition/CONNECTED-DOTS-MANUAL-QA.md.

Open

  • The user's visual acceptance.
  • Planned second pass: Mesh (triangulated fills) and points snapped to edges.
  • Plexus range tops out below three spacings, since each point only links to its 8 grid neighbors.

🤖 Generated with Claude Code

@vercel

vercel Bot commented Sep 23, 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 2:04pm UTC

@greptile-apps

greptile-apps Bot commented Sep 23, 2026

Copy link
Copy Markdown

RetriggerConfidence Score: 4/5

The PR is not yet safe to merge because Image background mode makes transparent source coverage opaque.

Summary

Connected Dots adds a transform-role graph, blob, and plexus renderer across the editor and package runtime.

  • Registers controls, presets, catalog metadata, persistence, and shader export.
  • Adds palette LUT support, motion, transparent/image/color backgrounds, and editor/runtime parity tests.
  • The Image background currently loses source alpha, while video performance and duplication coverage need strengthening.

Reviews (1) · Last reviewed commit: "Add a Connected Dots layer: tone graphs,..."

Comment thread src/renderer/connected-dots-pass.ts Outdated
Comment thread src/renderer/connected-dots-pass.ts
Comment thread tests/composition/connected-dots.mjs
…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.
Cap the neighbor row and column search to two cells each side so the
worst-case cellAt count per fragment is 25 instead of unbounded in the
packed minimum-size, maximum-stroke configuration. Mirrored in the
runtime package.
…e on buttons

Clear the active paint layer when the layer stops being paintable (selection,
mode, visibility or lock change) so Paint never resumes without Edit Paint.
Only preventDefault on Space for non-interactive targets so focused buttons
and links still activate.
Seed is now part of ErosionStyleValues, so changing it flips the style to Custom and applying a style restores its seed.
…note

Relief now outputs the sampled source alpha (editor and runtime) instead of forcing 1. The preset note is deduplicated and states that Height From and Amount are not part of a style.
Divide the ray and core light by its coverage before blending with the
source so glow over transparent or translucent pixels is not darkened by
being treated as premultiplied. Applied to the runtime mirror too.
…ansforms

Allow shared hard edges for polygons when rotation step and jitter are zero.
Derive extended outlines from the outermost band's offset and rotation via a
shared bandLocal helper, in both the app and runtime copies.
… duplicate test

- Extend the gaussian pyramid to 10 levels so radii up to 400 document pixels keep increasing (app and SDK copies)
- Add a oneOf visibility condition and gate Focus, Focus Range and Center to the modes that read them
- Make the duplicate independence test change a real parameter
Add Mask Feather parameter definition for brush masks so the timeline shows the user-facing label. Update the manual QA Limits paragraph to match the Feather and keyframe contract.
Derive output alpha from the red, green and blue samples so displaced
fringes survive at transparent edges. Skip the blur pyramid when distance
and frost are both zero, in the app and runtime copies.
…est, video benchmark

- Image background keeps the input alpha instead of forcing opaque (editor and runtime passes)
- Duplication check edits the real mode param and asserts both layers
- Add a --dots scenario set (graph, blobs, plexus) to the effect video benchmark
@git-chad
git-chad force-pushed the git-chad/v3-connected-dots branch from 0efd706 to c840376 Compare October 1, 2026 14:03
@git-chad
git-chad changed the base branch from git-chad/v3-glass to git-chad/shader-lab-v3-plan October 1, 2026 15:14
@git-chad
git-chad merged commit c840376 into git-chad/shader-lab-v3-plan Oct 1, 2026
4 of 5 checks passed

This branch was successfully deployed

1 active deployment
Preview — c840376c 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