Phyllotaxis

Seeds spiral out at the golden angle into a sunflower head, then one Fibonacci arm turns accent and pulses outward while the head slowly turns

Installation
$ pnpm dlx shadcn@latest add @remocn/phyllotaxis

Usage

Phyllotaxis places seeds the way a sunflower head does: seed i sits at i × 137.508°, the golden angle, at a radius proportional to √i. The seeds pop in from the center outward, each with a small overshoot, and the outer ones are drawn a little larger.

When the head is grown, every arm-th seed turns accent and swells slightly, and a faint accent line connects them. With a Fibonacci number these seeds line up into one spiral arm. Then a soft pulse travels outward along the arm again and again, swelling each seed as it passes. The whole head turns slowly the entire time.

tsx
import { Phyllotaxis } from "@/components/remocn/phyllotaxis";
 
export const Growth = () => <Phyllotaxis />;

The component fills its parent and paints its own background. The head is centered and its outer edge sits at 44% of the short side, so it keeps its framing at any aspect ratio. Everything comes from the Remotion frame, so renders are deterministic.

Timing

At 30 fps, speed={1} and the defaults:

FramesMotion
0–70Seeds pop in from the center outward; seed i starts at growFrames × √(i / count) and pops over 10 frames
60–74The arm seeds turn accent, swell by 25% and the spine line fades in
70–115The first pulse travels from the center to the rim
every 45 framesThe next pulse starts
0 onwardThe head turns at rotation degrees per second

The square-root schedule moves the reveal front outward at a steady radial speed, so the dense center does not flash in at once. The build is complete at growFrames + 14 frames, 74 at the defaults; after that the pulse repeats every pulseFrames frames for as long as the Sequence runs. The docs preview shows two pulses, 165 frames. Divide by speed for faster playback; rotation is in degrees per second and scales with speed as well.

The pulse cycle is seamless on its own. With the default rotation the head keeps turning, so the idle never repeats exactly; set rotation={0} for a loop of pulseFrames frames after frame 70.

Variations

arm picks which seeds form the accent spiral. Fibonacci numbers (8, 13, 21, 34, 55) give a clean spiral arm; other values give curved spokes or scattered dots. Lower count and raise size for a bold, graphic head with few seeds.

tsx
<Phyllotaxis
  count={180}
  size={1.4}
  arm={13}
  rotation={-6}
  background="#f6f1e7"
  color="#3d2c1e"
  accent="#e09f3e"
/>

Props10

PropTypeDefault
count
number420

Number of seeds, rounded, minimum 1

size
number1

Seed size multiplier

growFrames
number60

Frames until the last seed starts to pop in

pulseFrames
number45

Frames per pulse along the accent arm once grown

arm
number21

Every n-th seed forms the accent arm; a Fibonacci number reads as one spiral

rotation
number4

Rotation of the head in degrees per second; 0 holds still, negative turns the other way

background
string"#111111"

Background fill

color
string"#FFFFFF"

Seed color

accent
string"#E5322D"

Arm seeds and spine line

speed
number1

Playback multiplier

  • countnumber

    Number of seeds, rounded, minimum 1

    Default420

  • sizenumber

    Seed size multiplier

    Default1

  • growFramesnumber

    Frames until the last seed starts to pop in

    Default60

  • pulseFramesnumber

    Frames per pulse along the accent arm once grown

    Default45

  • armnumber

    Every n-th seed forms the accent arm; a Fibonacci number reads as one spiral

    Default21

  • rotationnumber

    Rotation of the head in degrees per second; 0 holds still, negative turns the other way

    Default4

  • backgroundstring

    Background fill

    Default"#111111"

  • colorstring

    Seed color

    Default"#FFFFFF"

  • accentstring

    Arm seeds and spine line

    Default"#E5322D"

  • speednumber

    Playback multiplier

    Default1