RemotionUI

Blob Morph

An organic blob that never settles, travelling a ring of generated shapes and coming back to where it started.

PrimitivePaths & shapes

blob-morph30fps · 960×540
Install
$ npx remotion-ui@latest add blob-morph

The blob loops through a ring of generated outlines and returns to the first, so the wrap from the end of the period back to the start lands on the same geometry and the loop has no seam. There is no entrance and no exit — it is alive from the first frame.

Outlines are generated, not authored: points around a circle, displaced by three sine harmonics whose phases come from the seed. Two harmonics leave a shape that reads as symmetrical; the third breaks it. Every variant uses the same point count, so they all reduce to the same number of curve commands and morph into each other without the interpolator inventing segments.

Control arms are computed from the point count rather than being a constant — the arm wants to be (4/3)·tan(π/2N) of the radius, taken along the neighbours' chord. A guessed constant gives you a polygon when it is too short and scalloped bulges between the points when it is too long, and both look like a bug rather than a blob.

rotation is continuous rather than wrapping, so for a seamless loop set it to 0 or a multiple of 360.

It is an SVG shape, not a background. Give it a colour and put it behind something, or hand the same idea to svg-mask-reveal as a mask.

Outlines are generated from three sine harmonics seeded by the seed prop — two alone leave a shape that reads as symmetrical. Every variant shares a point count so they reduce to the same curve commands and morph without invented segments. Control arms are computed from the point count, (4/3)·tan(π/2N) of the radius along the neighbours' chord: a guessed constant gives a polygon when short and scalloped bulges when long. No entrance or exit — it is alive from frame 0.

Agent notes

Install first, then import the copied source component locally. AI guide →

Import
@/remotion/primitives/blob-morph
  • Use when: frame-level motion primitives and reusable animation wrappers.
  • Customize: size, fill, stroke, strokeWidth, plus copied source for timing, layout, colors, and typography.
  • Rule: do not import this component from the remotion-ui npm package; it is copied into your project.

Usage

Example
import { BlobMorph } from "@/remotion/primitives/blob-morph"; <BlobMorph size={320} periodInFrames={96} amplitude={0.22} seed={1} />

API Reference

PropTypeDescription
sizenumberRendered size in pixels.
fillstringBlob fill. Pass undefined for an outline only.
strokestringOutline colour. Omit for a filled blob.
strokeWidthnumberOutline weight, when stroke is set.
periodInFramesnumberFrames for one full trip around the ring of shapes.
statesnumberHow many shapes the loop travels through. Three to six reads as organic.
pointsnumberPoints around the outline. More points, more detail and more wobble.
amplitudenumberHow far the outline deviates from a circle, as a fraction of the radius.
seednumberChanges the shape family without changing anything else.
rotationnumberDegrees per period. Continuous, so a seamless loop wants 0 or a multiple of 360.

Related