RemotionUI

Orbit Motion

Elements orbiting a centre point, with depth. Install with npx remotion-ui@latest add orbit-motion.

PrimitivePrimitives

orbit-motion30fps · 960×540
Install
$ npx remotion-ui@latest add orbit-motion

Satellites around a hub.

import { OrbitMotion } from "@/remotion/primitives/orbit-motion";

<OrbitMotion periodInFrames={120} center={<Logo />} showPath>
  <Chip label="Scenes" />
  <Chip label="Atoms" />
  <Chip label="Cuts" />
</OrbitMotion>

Depth is what makes it an orbit

The ellipse is the easy half. What separates an orbit from a circular slide is that a child on the far side of the ring is smaller, dimmer, and painted behind whatever sits at the centre. All three come from the same sine, so the pass behind the middle happens by itself — there is nothing to schedule and nothing to get out of sync.

Set depth={0} for a flat, diagrammatic ring; raise it for a tilted, physical one.

Multiple children

Every child gets its own slot, evenly spaced, so a satellite diagram is the default case rather than something you assemble by hand.

Give them different content. Identical children on an evenly spaced ring make the whole picture repeat every periodInFrames / count frames, which looks like a much faster loop than the one you asked for — and, if you are sampling stills, can make a moving component look frozen.

Layout

centerX and centerY are percentages of the frame; radiusX and radiusY are pixels. upright keeps children level while they travel, which is almost always what type wants; turn it off for something that should bank into the curve.

The ellipse is the easy half; depth is what makes it an orbit. One sine drives scale, opacity and `zIndex` together, so a satellite passes behind whatever is at the centre by itself. Give satellites different content — identical ones make the ring repeat every revolution divided by their count.

Agent notes

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

Import
@/remotion/primitives/orbit-motion
  • Use when: frame-level motion primitives and reusable animation wrappers.
  • Customize: radiusX, radiusY, periodInFrames, phase, 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 { OrbitMotion } from "@/remotion/primitives/orbit-motion"; <OrbitMotion periodInFrames={120} center={<Logo />}> <Chip label="One" /> <Chip label="Two" /> </OrbitMotion>

API Reference

PropTypeDescription
childrenReactNodeEach child gets its own slot on the ring, evenly spaced.
radiusXnumberHorizontal radius, in px.
radiusYnumberVertical radius. Smaller reads as a tilted ring.
periodInFramesnumberFrames for one revolution.
phasenumberWhere the first child starts, in degrees.
tiltnumberTilt of the whole ring, in degrees.
direction"cw" | "ccw"Which way it turns.
centerXnumberCentre of the orbit, in percent of the frame.
centerYnumberCentre of the orbit, in percent of the frame.
depthnumberScale difference between the near and far side. 0 is flat.
depthFadenumberHow much the far side dims.
uprightbooleanKeep children upright instead of letting them ride the ring.
showPathbooleanDraw the ring itself.
pathColorstringColour of the drawn ring.
centerReactNodeWhat sits at the centre.

Related

On this page