Skip to content

V3: Signal Rot effect layer - #175

Merged
git-chad merged 72 commits into
git-chad/shader-lab-v3-planfrom
git-chad/v3-signal-rot
Oct 1, 2026
Merged

git-chad merged 72 commits into
git-chad/shader-lab-v3-planfrom
git-chad/v3-signal-rot

Conversation

@git-chad

@git-chad git-chad commented Sep 23, 2026 •

Copy link
Copy Markdown
Collaborator

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

What

A new Signal Rot effect layer (Distort, after Slice). It consolidates Signal rot and scanner drag (6.1 #4) into one layer (roadmap 3.4). It's a single pass that remaps where each pixel samples, along the axis set by Streaks (vertical or horizontal):

  • Drag: held segments with wavy fronts drag the image into long streaks. Stretch varies the scan speed; Wobble makes the image snake sideways.
  • Tear: ragged bands shift, and Dropout lifts parts of them off to a paper color.
  • Signal: Chroma Shift, Crush (fewer tone levels) and Line Noise (scan lines jump and flicker).
  • Motion: Speed 0 freezes the damage; above 0 it rots over time. Seed rearranges it.

Three styles: Scanner Drag (default, reference 13), Signal Rot, Torn Scan. It's distinct from Slice (blocky offsets), CRT (display) and Circuit Bent (bent scanlines).

Cost: 3 texture samples per pixel, no feedback buffers.

References

Reference 13 was reviewed against renders of every style. The first renders showed two problems, both fixed before review:

  • Line noise and chroma ran along the wrong axis.
  • Drag fronts came out rectangular and sawtooth.

The streaks are only as rich as the photo: a flat sky gives flat streaks.

Tests

bun run check passes, and the full bun run test:composition suite passes. signal-rot.mjs adds 56 checks:

  • Neutral settings reproduce the input exactly.
  • Full drag holds columns into streaks, and rows in horizontal mode.
  • Tear shifts bands, dropout fills part of them, and chroma separates channels.
  • Full crush leaves at most four levels.
  • Speed 0 stays frozen, and speed above 0 animates and requests continuous rendering.
  • Every style gives finite output.
  • Editor/runtime parity, history, duplication, save/reopen, shader export and runtime pixel parity.

Manual check: tests/composition/SIGNAL-ROT-MANUAL-QA.md.

Open

  • Tuning of defaults (visually accepted by the user; Tape Wobble removed at their request).
  • Nothing accumulates between frames, so there are no feedback trails.
  • Cost hasn't been measured on native hardware.

🤖 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:03pm UTC

@greptile-apps

greptile-apps Bot commented Sep 23, 2026

Copy link
Copy Markdown

RetriggerConfidence Score: 5/5

The PR appears safe to merge with no actionable defects identified.

Summary

The PR adds the Signal Rot distortion layer across the editor and React runtime.

  • Implements drag, tear, dropout, wobble, chroma, crush, line-noise, seed, and motion controls in matching editor/runtime passes.
  • Adds four styles, catalog/sidebar integration, shader-export support, documentation, preview media, and composition coverage.
  • No actionable correctness, security, or repository-rule violations were identified.

Reviews (1) · Last reviewed commit: "Add a Signal Rot effect layer for scanne..."

…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.
…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
… fallback

- Weight diffusion, halation and edge samples by alpha so hidden RGB cannot bleed across coverage boundaries
- Fall back to the Lumen palette for malformed stops in editor and runtime
- Add lumen-print to SupportedShaderExportLayerType
- Clarify that styles do not set Amount or Seed
@git-chad
git-chad force-pushed the git-chad/v3-lumen-print branch from d1834f5 to 7ca20cc Compare October 1, 2026 14:02
@git-chad
git-chad force-pushed the git-chad/v3-signal-rot branch from 6938a58 to eaf3ee2 Compare October 1, 2026 14:02
@git-chad
git-chad changed the base branch from git-chad/v3-lumen-print to git-chad/shader-lab-v3-plan October 1, 2026 15:13
@git-chad
git-chad merged commit eaf3ee2 into git-chad/shader-lab-v3-plan Oct 1, 2026
5 checks passed

This branch was successfully deployed

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