Repository navigation
V3: designer-focused composition and experimental graphics - #150
Merged
Merged
Conversation
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This was referenced Sep 17, 2026
Merged
Merged
Lossy, transparency and duplicate-frame optimization bring it from 3.8 MB to 2.0 MB with the same frames, size and palette.
Pattern motifs could keep their own colors but not change them. With Color Mode set to Motif colors, the custom motif section now lists the colors found across its SVG motifs and edits them through the same File colors control as SVG shapes, which moves into a shared SvgColorPalette. The palette is stored in a new internal motifPalette param; Pattern passes in the editor and the runtime fetch each SVG motif, apply the palette and rebuild the atlas when it changes. Bitmap motifs and an empty palette take the old loading path, so existing projects render unchanged.
Zooming in only scaled the fitted canvas with CSS, so a 300% view showed magnified render pixels. The editor now raises the renderer's pixel ratio by the zoom factor once zooming settles for 150 ms, capped at 4096 device pixels on the long edge so the GPU cost stays bounded. Zoom at or below 100% keeps the previous pixel ratio, and exports are unaffected.
…olors in the roadmap Depth parallax on an Apple Metal 3 GPU costs 0.8 ms without depth and 1.6, 3.0 and 4.0 ms at Low, Medium and High per 1080p frame. Large rotated text only clips where it leaves the frame, the same in the editor and the PNG export, so that limit is closed without changes.
SVG shapes, the animatable Gradient Map ramp, the Grain layer, Connected Dots edge snap and the Annotations additions were accepted on 13 October 2026, which completes the required V3 scope.
Scene settings gain a Grid section with columns, rows, gap and margin in document pixels and an overlay opacity, drawn in the orange accent at 6% by default. Shift+G and a toolbar button show or hide it. The grid is an SVG guide over the artboard, saved with the project in sceneConfig.grid, and is never rendered or exported; a static project exports byte-identical PNGs with it on and off. The field is optional, so existing projects and fixtures are unchanged, and it stays out of undo history. The model gizmo now ignores Shift so Shift+G no longer starts a grab.
While the grid is visible, dragging a shape, text, mask or annotation snaps its edges or center to column and row edges, the margins and the artboard center and edges within 8 screen pixels, and size, rotation and gradient end handles snap their point to the same lines. An orange guide marks each active snap. Holding Cmd or Ctrl turns snapping off for that drag, and a hidden grid never snaps.
Shapes, text, masks and annotation targets used a center dot plus an X handle that rotated and resized at once and a Y handle for height. They now share a transform box: drag inside it to move (Shift locks the axis), drag a corner or an edge to resize from the opposite side (Shift keeps the ratio, Alt resizes from the center), and drag just outside a corner to rotate around the center (Shift snaps to 15 degrees). Corner squares rotate with the box, cursors follow the box angle, and the size in document pixels sits under it. Text scales its font size uniformly and annotation targets stay square and upright. Grid snapping and Esc to cancel still apply. Masks draw a dashed box with round handles and a center dot, so they read apart from the layer's own box and sit above it without stealing its drags. The text box now wraps the text for every anchor, and rotating or scaling keeps the box center fixed instead of pivoting on the anchor point. Handles hide while a paint mode is active so brush strokes reach the canvas. The manual UI tests and QA notes follow the new handles.
…errors Arrow keys move the selected shape, text, annotation target or mask by one document pixel, ten with Shift, while the pointer is over the canvas and the handles are showing, so the timeline keeps its arrow keys everywhere else. Each nudge is one undo step. A mask nudges only when its layer has no box of its own. CI's lint failed on three nested ternaries in the new handles, now rewritten.
The inner effect section skipped every text parameter, so ASCII had no Custom Chars field and Annotations had no word list or metadata text. Visible text parameters now render as an input or textarea like in Properties, while internal ones such as palettes stay hidden. Picking an Annotations text preset inside an inner effect also fills its words and metadata, as it does on the layer.
Collaborator
Author
|
@greptileai review — both earlier P1s (hidden audio video on publish, missing media links on import) were fixed in 6aff54a; please re-review the current head. |
…e, simple distortion and looping motion The old presets were high-frequency warps with tonemapped colors, so they read as oily blotches rather than a mesh gradient, and the names did not match the results. Eight new presets (Peach, Lagoon, Dusk, Citrus, Mint, Aurora, Ink, Basement) are soft color fields with exact colors and light grain, and a new gradient now starts from Peach. Each color point shows on the canvas while the layer is selected: drag to move it (Shift locks the axis), double-click to pick its color, Alt-drag to change its reach. Shuffle replaces Randomize: it builds a harmonious OKLCH palette (analogous, split complementary, triad or monochrome with a dark and a light anchor) or reuses a preset palette, lays the points out evenly, and keeps distortion, motion and finish. Distortion gains a Simple mode with Softness, Warp and Detail, which give each point a soft core so low-weight points no longer form hard dots; the raw controls live under Advanced. Motion gets styles (Drift, Breathe, Swirl, Flow) built from whole harmonics of the timeline duration, which passes now receive through updateTimelineDuration in the editor and the runtime, so a video export loops without a seam. Saved gradients migrate to Advanced with their Original motion and old preset ids fall back to Custom, so they render exactly as before.
…otif colors, and mark Mesh Gradient as reworked - Painted brush masks stay inside their saved bounds, and an empty brush mask hides the layer - The runtime accepts every inner effect the editor offers, so exported Blob Tracking projects keep them - Pattern motif images rebuild when the palette changes - Mesh Gradient shows the orange reworked dot
V3: Mesh Gradient rework (presets, canvas points, shuffle, simple distortion, looping motion)
…work Tests turned gradients off with the legacy animate param, which the new Breathe default overrides, so a hidden group looked animated. The Edge Snap field also relied on the old Aurora default, so it now sets those points and Advanced distortion explicitly.
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.
Shader Lab V3 makes composition easier for designers and expands its visual direction toward experimental editorial collage, analog photographic grunge, and digital psychedelia.
This is the integration PR for V3. Small implementation PRs are stacked: the first targets
git-chad/shader-lab-v3-plan, and each successor targets the preceding feature branch. This PR stays in draft and must not merge intomainuntil the required roadmap scope and final validation are complete. SeeV3-ROADMAP.mdfor requirements, dependencies, and acceptance criteria.Phase 8 (composition grid) is optional and does not block V3. Candidate effect families and exploratory features remain subject to the decisions specified in the roadmap.
Priority update (September 17): transparent text (#156) is implemented and user-confirmed. The displaced-ring prototype (#157), already listed in phase 3, adds offset half-discs and effect-specific coverage; the user confirmed its visual direction and will tune its defaults. Later designer feedback supersedes the mask postponement: the user approved gradient (linear/radial), ellipse, rectangle, and brush masks, with no pen tool. Preserve tailored effect modes. Technical annotations and the related Blob Tracking quality pass now have a prominent artistic role in roadmap 6.3.
Initial changes: commit the roadmap and enable existing CI checks for PRs targeting the V3 integration branch. No rendering behavior has changed in this initial commit.
Implementation PRs:
V3: freeze composition baselines before alpha changes #151 — Freeze composition baselines before alpha changes (first slice of steps 1.1–1.2; not phase-1 completion).
V3: transparent borders for newly contained media #152 → V3: freeze composition baselines before alpha changes #151 — Transparent borders for newly contained image/video layers, preserving saved-project appearances (first source-boundary fix in step 1.2).
V3: preserve alpha through source and effect composition #153 → V3: transparent borders for newly contained media #152 — Alpha-aware source/effect composition, alpha-preserving materials/texture copies/grading, and 100 new GPU checks (shared foundation in step 1.2; existing mask semantics retained).
V3: render isolated groups in editor and runtime pipelines #154 → V3: preserve alpha through source and effect composition #153 — Isolated group rendering in editor/runtime pipelines, eight-level nesting, lifecycle handling, and 52 new group checks (renderer foundation for step 1.3; editor controls, persistence, undo, and masks remain pending).
V3: add editor groups, persistence, and runtime export #155 → V3: render isolated groups in editor and runtime pipelines #154 — Editor group controls, nested ordering and membership, project-v7 persistence, undo/redo, descendant animation/audio handling, and runtime config export. CI passes; the user confirmed the focused photo/effect isolation, group-opacity, and collapse test. The broader regression checklist remains for final validation.
V3: insert text over transparent backgrounds #156 → V3: add editor groups, persistence, and runtime export #155 — Transparent text defaults, preserved saved-text fallback/settings, 18 new editor/runtime pixel checks and real hydration/save/reopen coverage. Includes the revised roadmap priorities above. The user confirmed the focused text-insertion check.
Add Displaced Rings with grouped photographic cutouts #157 → V3: insert text over transparent backgrounds #156 — Displaced Rings prototype: 1–128 bands, half-discs, progressive transforms, seeded offsets, grouped Cutout coverage, catalog preview, and editor/runtime export. Local checks and the complete composition suite pass, including 34 new GPU cases and 48 distinct bands. CI and preview deployment pass. The user confirmed the visual direction and supplied new defaults, applied in Add Photographic Cells and user-curated ring defaults #159. This does not close phase 3.
Fix dragging layers into and out of groups #158 → Add Displaced Rings with grouped photographic cutouts #157 — Fix group-aware layer dragging: atomic reparenting/reordering, subtree moves, collapsed targets, destination feedback, cancellation, and edge scrolling. Local validation, composition regressions, and desktop/mobile/touch UI tests pass, including actual .lab save/reopen and undo/redo. CI and preview deployment pass; the user confirmed the group-drag behavior.
Add Photographic Cells and user-curated ring defaults #159 → Fix dragging layers into and out of groups #158 — Photographic Cells prototype: tone/random-selected blocks with photographic detail, grouped cutouts, optional outlines, and editor/runtime/export support. Applies the user's supplied defaults to new rings while preserving saved settings. Includes deferred Pass Through scope and a proposed shape expansion for later discussion. Local checks and full composition regressions pass, including 104 cell GPU cases and the Gap/outline correction. The user accepted it as a useful prototype; reference-driven refinements continue in Add connected photographic regions and perimeter outlines #160.
Add connected photographic regions and perimeter outlines #160 → Add Photographic Cells and user-curated ring defaults #159 — Connected Photographic Cells regions with independent Region Size / Cell Size, tone or seeded selection, and None / Perimeter / Every Cell outlines. Perimeters follow holes and irregular rows without internal seams; saved layers keep their earlier defaults. Local build/type/lint checks, full composition suite (154 cell cases), actual editor controls/.lab export, and photo/color render review pass. CI and user visual acceptance passed. Paint selection follows in Add painted reveals to Photographic Cells #161; Edge Scatter and fine-dot/color curation remain later work.
Add painted reveals to Photographic Cells #161 → Add connected photographic regions and perimeter outlines #160 — Painted reveals in Photographic Cells: Reveal/Erase, Brush Size, reversible Clear, Edit/Done, temporary source guide, atomic stroke history, pan/zoom alignment and persisted runtime coverage. Reuses the mask texture while source frames change. Local checks, full composition suite (178 Cells GPU cases), real editor gestures/.lab save-reopen and bounded decoded-video benchmarks pass. Native GPU/thermal validation remains open; user visual acceptance passed, with automatic editing when choosing Paint.
Add customizable dark and light colors to Threshold #162 → Add painted reveals to Photographic Cells #161 — Custom dark/light Threshold colors, preserved black/white defaults, unchanged boundary/noise behavior and editor/runtime parity. Local checks, full composition suite (44 new Threshold cases including decoded video), actual UI history and .lab save/reopen pass. User visual review remains open; they explicitly authorized continuing with Cells/halftone/color curation while away.
Add Cells edge scatter and editable editorial studies #163 → Add customizable dark and light colors to Threshold #162 — Bounded, seeded Edge Scatter for Cells Regions/Paint plus two editable editorial studies with existing fine Halftone/color layers, photographic reveals, type and original SVG marks. Zero preserves existing edges; no extra source samples or render pass. Local checks, full composition suite (216 Cells cases), actual UI history/.lab import-export, reference render review and a short decoded-video comparison pass. User visual acceptance and native sustained performance remain open.
Approved designer-feedback roadmap update: clean starting state first, then reusable masks/local Gradient Map, shape and text composition tools linked to the optional grid, technical annotations, and depth/parallax feasibility research. Custom Pattern uploads (SVG/images), manual light-to-dark motif ordering, original colors and explicit SVG recoloring are recorded at low priority. The neutral-start slice is implemented in #164 pending user acceptance; the remaining ideas are planning changes. Current feature visual acceptance remains separate; no merges.