RemotionUI

Funnel Chart

Stage bars narrowing with drop-off percentages. Install with npx remotion-ui@latest add funnel-chart.

PrimitiveData & media

funnel-chart30fps · 960×540
Install
$ npx remotion-ui@latest add funnel-chart

Stage bands narrowing toward the bottom, with the loss between each pair printed alongside.

import { FunnelChart } from "@/remotion/primitives/funnel-chart";

<FunnelChart
  stages={[
    { label: "Visited docs", value: 42800 },
    { label: "Ran the CLI", value: 18600 },
    { label: "Shipped it", value: 1750 },
  ]}
  staggerInFrames={15}
/>

The taper is the number

Each band runs from its own width down to the next stage's width, so the shape carries the drop before anyone reads a label. The last band is a rectangle: there is no next stage to taper to, and inventing one would overstate the final step.

Why the labels sit outside

Names and values live in a left gutter, not inside the bands. A real funnel ends narrow, and type set inside the last band would either overflow it or shrink until it was unreadable — which is usually where the interesting number is. labelWidth sizes that gutter; drop-off chips get their own on the right.

Timing

Bands wipe downward in order. Each drop-off chip waits for the band below it, because the chip is a claim about two stages and cannot land before both exist.

With exitAtInFrames the funnel drains bottom-up, narrow end first.

Each band tapers from its own width to the next stage's, so the shape carries the loss before a label is read; the last band is a rectangle because there is no next stage to taper to. Names and values sit in a left gutter — a real funnel ends narrow, and type inside the last band would have to shrink until it was unreadable.

Agent notes

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

Import
@/remotion/primitives/funnel-chart
  • Use when: data stories, metrics, charts, and numeric proof points.
  • Customize: stages, width, height, gap, 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 { FunnelChart } from "@/remotion/primitives/funnel-chart"; <FunnelChart stages={[ { label: "Visited docs", value: 42800 }, { label: "Ran the CLI", value: 18600 }, { label: "Shipped it", value: 1750 }, ]} staggerInFrames={15} />

API Reference

PropTypeDescription
stagesFunnelStage[]`{ label, value, color? }`, top to bottom.
widthnumberOverall width: label gutter, funnel and drop-off gutter.
heightnumberOverall height. Bands split it evenly.
gapnumberSpace between bands.
tailOpacitynumberOpacity of the last band; earlier bands ramp toward 1.
labelWidthnumberLeft gutter holding stage names and values.
showDropoffbooleanDrop-off chip between consecutive stages.
showConversionbooleanShare of the first stage, printed beside each value.
durationInFramesnumberLength of one band's wipe.
staggerInFramesnumberFrames between one band and the next.
exitAtInFramesnumberFrame the funnel drains on, narrow end first.
framenumberFrame override — pass the parent frame inside a `<Sequence>`.

Related

On this page