Skip to content

feat: add Ripple and Tide motions, motion depth and direction, crisp Contours - #12

Merged
simien merged 1 commit into
mainfrom
feat/ripple-tide-depth
Sep 14, 2026
Merged

simien merged 1 commit into
mainfrom
feat/ripple-tide-depth

Conversation

@simien

@simien simien commented Sep 14, 2026

Copy link
Copy Markdown
Owner

What changes

Two new motions. Ripple is rain: seven seeded drops, each born at its own moment in the cycle, whose rings swell the density along their crests and pull the drawn cells the way water refracts what is under it, so every texture bulges and settles as a ring passes. Layer B is pulled less than A, so the two slide against each other. Tide is the one motion in which the layers act on each other: each layer's field is read at coordinates pushed along the gradient of the other layer's field, rising and settling once per cycle. Both close exactly. Tide opens on the still; Ripple's first frame has rings in flight, and the guide says which.

Depth and Direction, under Speed. Depth scales how far every motion but Drift goes, from a quarter to twice its reach (Drift's travel is its period and cannot change). Direction runs the cycle backwards, which Drift and Wind show as travel against the flow without the still changing. Both are link tail fields whose zero is today's behaviour, so every existing link opens as it did. Links grow from 82 to 83 characters.

Contours gets a crisp edge. The linear falloff made it sparkle under motion at every speed: a quarter-cell shift per frame re-rolled the dither across the whole line, and the flips landed as scatter. The edge now dithers over 4% of a level and the lines crawl instead. Coverage equals the density slider all the way to solid, and the level count never drops below one, which is what the readout already said. Existing Contours compositions render sharper than before.

Smaller fixes. Pulse reads the field at phase 0 and hits the cache instead of resampling an identical field every frame. A moving frame's field is no longer cached, since it only evicted the stills. The Layer B offset comment says eighth of a turn, as the constant does. The guide no longer calls Pulse the one kind that moves without field strength.

Verification

  • Every existing motion renders bit-identical to the old generator across all six textures, five symmetries, and three phases, except Contours, whose profile changed on purpose.
  • Ripple and Tide close exactly under every texture and symmetry; Tide opens on the still.
  • At depth 1 and forward, or with the fields absent, output is bit-identical. A reversed frame at phase p equals the forward frame at 1 - p.
  • Frame cost at 1200 by 630 in the browser: Tide 38ms against Loop's 29ms on the same composition; Ripple adds about 14ms to a frame.
  • checks.py origin/main passes, including the cache bust and the link-format comparison.
  • The guide, the animated-backgrounds explainer (now six live panes), the README table, and CLAUDE.md are updated, with example clips for Ripple and Tide.

🤖 Generated with Claude Code

…Contours

Two motions join the four. Ripple is rain: seven seeded drops, each
born at its own moment in the cycle, whose rings swell the density
along their crests and pull the drawn cells the way water refracts
what is under it, so every texture bulges and settles as a ring
passes. Layer B is pulled less than A, so the two slide against each
other. Tide is the one motion in which the layers act on each other:
each layer's field is read at coordinates pushed along the gradient of
the other layer's field, rising and settling once per cycle. Both
close exactly; Tide opens on the still, Ripple's first frame has
rings in flight, and the guide says which.

Depth and Direction sit under Speed. Depth scales how far every
motion but Drift goes, from a quarter to twice its reach; Drift's
travel is its period and cannot change. Direction runs the cycle
backwards, which Drift and Wind show as travel against the flow. Both
travel in links as tail fields whose zero is today's behaviour, so
every existing link opens as it did.

Contours' line now has a crisp edge with a thin dithered rim. The
linear falloff made it sparkle under motion at every speed, since a
quarter-cell shift re-rolled the dither across the whole line; the
thin edge lets the lines crawl instead. Coverage equals the density
slider all the way to solid, and the level count never drops below
one, which is what the readout said.

Also: Pulse reads the field at phase 0 and hits the cache rather
than resampling an identical field every frame, a moving frame's field
is no longer cached (it was only evicting the stills), the Layer B
offset comment says eighth of a turn as the constant does, and the
guide no longer calls Pulse the one kind that moves without field
strength.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
flield 20c3ecc Commit Preview URL

Branch Preview URL
Sep 14 2026, 12:47 AM

@simien
simien merged commit df5cff1 into main Sep 14, 2026
2 checks passed
@simien
simien deleted the feat/ripple-tide-depth branch September 14, 2026 00:49
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