Video Studio
GitHub

Studio / Tokens

Design tokens

Read from studio/src/lib/tokens.ts: 48 values. Change them there, never inline in a scene. Rules for using them are in the design system.

On this page

Palette

One accent. Everything else is neutral. The accent marks the focal point only: one word, one bar, one number.

color.bg#0D0E10Frame background
color.surface#16181CCards, plates
color.surfaceRaised#1E2126Neutral bars, raised panels
color.linergba(242, 241, 236, 0.10)Hairlines, grid, borders
color.lineStrongrgba(242, 241, 236, 0.22)Hairlines, grid, borders
color.text#F2F1ECPrimary text
color.textMuted#9A9CA1Supporting text, labels
color.textFaint#5E6168Metadata, timecodes
color.accent#5B8CFFThe focal point only
color.onAccent#0D0E10Text that sits on the accent colour.

Type scale

Sizes are for the 1080 px short side, so the same scale works in 16:9, 9:16 and 1:1. Samples are drawn at about a third of video size. Fonts in the films: Inter Tight for reading, JetBrains Mono for labels.

type.display132 px / 1.02 / 600-0.035em
Motion explains
type.h196 px / 1.05 / 600-0.03em
Motion explains
type.h264 px / 1.1 / 600-0.02em
Motion explains
type.body44 px / 1.3 / 400-0.01em
Motion explains
type.caption48 px / 1.25 / 500-0.01em
Motion explains
type.label26 px / 1.2 / 5000.08em
LABEL 00:12

Video-native type ramp

For hero moments. Sizes are a percent of the composition width, so a keyword can be as large as the frame allows.

wordmark
30 vw576 px at 1920One giant keyword or wordmark, one per film.
stat
18 vw346 px at 1920Big numeral that is the whole point of a scene.
display
14 vw269 px at 1920One or two words filling the frame.
claim
6.5 vw125 px at 1920A claim line (6 to 9 vw in the source ramp; 6.5 so a five-word line fits the safe area).
reading
3.2 vw61 px at 1920Reading text on a hero frame.
label
1.4 vw27 px at 1920Chrome labels (ticks, units, metadata). Exactly the floor.

Spacing and radii

An 8 px base grid for gaps and padding.

space.xs
8 px
space.s
16 px
space.m
24 px
space.l
40 px
space.xl
64 px
space.xxl
96 px
radius.s8 px
radius.m16 px
radius.l28 px

Safe margins per format

Key text and logos stay inside the inner box. 9:16 reserves extra room at the top and bottom for platform interface. Re-compose for each format instead of scaling.

16:9 1920×1080
top 96, right 128, bottom 96, left 128
9:16 1080×1920
top 220, right 80, bottom 380, left 80
1:1 1080×1080
top 96, right 96, bottom 96, left 96

Spring presets

Plotted over two seconds with the same step the Remotion spring() function takes each frame. The dashed line is the target.

springs.smooth

No overshoot. Default for text, masks, panels.

damping 200, stiffness 100, mass 1
overshoot 0.0%, settles in about 23 frames

springs.snappy

Quicker, no visible overshoot. Small UI elements, bars.

damping 28, stiffness 220, mass 0.7
overshoot 0.0%, settles in about 13 frames

springs.settle

Tiny overshoot, then settle. One element per scene at most.

damping 18, stiffness 120, mass 1
overshoot 1.1%, settles in about 20 frames

Easing curves

Bezier curves for interpolate(). Never animate linearly unless it is a counter or a constant drift.

ease.out

Default for entrances: fast start, long soft landing.

cubic-bezier(0.16, 1, 0.3, 1)

ease.in

For exits: gentle start, quick finish.

cubic-bezier(0.7, 0, 0.84, 0)

ease.inOut

For moves between two resting states and wipes.

cubic-bezier(0.65, 0, 0.35, 1)

buoyant()

"Buoyant" ease: a cubic ease-out plus a half-sine bob over the WHOLE lifetime, so a rising element keeps drifting through its peak instead of freezing. Returns 0 at t=0 and exactly 1 at t=1; in between it overshoots by about bob and settles back.

plotted with the default bob of 0.03 from the formula in its doc comment

Timing defaults

In frames at 30 fps.

TokenFramesSecondsMeaning
timing.enter200.67 sLength of a typical entrance.
timing.exit120.40 sLength of a typical exit (exits are faster than entrances).
timing.wordStagger30.10 sDelay between words in a stagger.
timing.charStagger1.50.05 sDelay between characters in a stagger.
timing.lineStagger50.17 sDelay between lines or list items.
timing.hold451.50 sMinimum time a finished state is held before anything else moves.
timing.transitionFrames150.50 sScene transition length.
timing.count401.33 sNumber counters and chart growth.