Motion

The brand in time-based media. Every static rule still applies — cream canvas, indigo accent, Inter, sentence case, one icon. This page adds only what's needed when frames move.

When it applies

Any time the brand is rendered in video: Remotion compositions, After Effects exports, screen-recording tutorials, social clips, stingers. The static system is the floor, not the ceiling — motion extends it without contradicting anything.

The canonical tool is Remotion. The canonical compositions live in the companion remotion project under src/compositions/brand/.

Formats

Three canonical aspects cover every platform. Pick one per piece — never mix aspects within a single piece, and never mix framerates within a single scene.

Landscape

1920 × 1080

30 fps · tutorials, explainers, embeds

Square

1080 × 1080

30 fps · X, feed posts

Vertical

1080 × 1920

30 fps · Reels, Shorts, TikTok

Framerate is 30 fps by default. Use 60 fps only for high-motion content or UI capture that would otherwise judder. Safe-area margin is 6% of the shorter edge — about 64 px on 1080, 115 px on 1920.

Canvas

Background is always #F8F7F2. No pure white, no pure black, ever — the warmth is the brand. When overlaying footage, wrap it in a 48 px cream frame rather than letting it bleed edge-to-edge. Never tint or grade footage to match the cream; frame it instead.

Type scale at 1080p

Inter variable, self-hosted from the fonts/ folder. Multiply by 1.5× for 4K, by 0.66× for 720p. Caveat is reserved for the single homepage greeting and rarely shows up in video.

Hero title 120–160 px · 600 · -0.025em

Hey, I'm Shibin.

Subtitle 52–64 px · 500 · -0.02em

Helping Shopify brands grow with AI.

Section heading 72–96 px · 600 · -0.02em

Brand motion in Remotion.

Lower-third name 44 px · 600

Shibin

Lower-third role 28 px · 400 · text-muted

Helping Shopify brands grow with AI

Body / quote 36–44 px · 400 · 1.5 leading

The only flourish is the accent. Everything else earns its space.

Label 22–26 px · 500 · uppercase · 0.12em

Motion primitives

Caption burn-in 44 px · 500 · cream pill

Captions sit on cream pills.

Motion primitives

Deterministic, Remotion-native. No CSS transitions on rendered frames. Four durations cover every beat; two easings cover every ramp. Springs are allowed only when damped past overshoot.

Durations @ 30fps

quick 6f · standard 12f · hero 24f · hold 45–90f

Easing

enter: Easing.out(Easing.cubic)
exit: Easing.in(Easing.cubic)

Default entrance

opacity 0→1 + translateY 12→0 px

Default exit

opacity 1→0 + translateY 0→-8 px

Scene transition

12f cross-fade through --background

Springs

damping ≥ 100, mass 1, stiffness 180. No overshoot.

// enter primitive (Remotion)
const opacity = interpolate(frame, [0, 12], [0, 1], {
  easing: Easing.out(Easing.cubic),
  extrapolateRight: "clamp",
});
const translateY = interpolate(frame, [0, 12], [12, 0], {
  easing: Easing.out(Easing.cubic),
  extrapolateRight: "clamp",
});

The accent line — motion signature

Web's 40 × 3 accent line becomes 120 × 9 at 1080p (pixel density at playback distance is about 3× the web reading distance). It draws left→right under any hero title over 12 frames, holds for the title's lifetime, fades with the title. This is the brand gesture in motion — the one thing an off-brand video will always be missing.

const scale = interpolate(frame, [0, 12], [0, 1], {
  easing: Easing.out(Easing.cubic),
  extrapolateRight: "clamp",
});

<div style={{
  width: 120, height: 9, borderRadius: 999,
  backgroundColor: "var(--accent)",
  transformOrigin: "left center",
  transform: `scaleX(${scale})`,
}} />

Blinking cursor in motion

Same rule as web: the indigo cursor appears only after the word "AI" in any restatement of the tagline. Nowhere else. At 1080p it's 9 px wide × 1.1em tall, step-end timing, opacity flips every 15 frames (1 s period).

I help Shopify brands grow with AI

The arrow

Lucide arrow-up-right, outline only, currentColor. Stroke weight 2 at video resolution — not 1.5 as on web. Thin 1.5 px strokes subpixel-shimmer during mobile playback; 2 px renders stably. The web "nudge" gesture survives: on a CTA reveal the arrow slides translate(6px, -6px) over 12 frames after the button fades in. That's the final beat of the shot.

Hover to preview the nudge.

Canonical compositions

Six drop-in compositions in the remotion repo under src/compositions/brand/. Each ships brand-correct defaults so a fresh render with no props is on-brand. Copy and modify only for one-offs.

  • SectionDivider

    Uppercase label over a section heading on cream. 45f hold. Use between scenes.

  • TitleCard

    Accent line draws → title fades up → subtitle fades up with a 4f stagger.

  • LowerThird

    Overlay. 3 × 40 vertical accent line left of the name + role. Use over talking-head footage.

  • EndCard

    Wordmark + URL + arrow. Arrow performs the nudge on appear. Use as the last scene.

  • CaptionTrack

    Subtitle burn-ins on cream pills, auto-break at 40ch. Compose with footage.

  • TypedHero

    Typewriter tagline with the blinking cursor armed only after "AI". Use sparingly.

Rendering defaults

Container · codec

H.264 MP4, CRF 18, Rec.709

Optional web embed

WebM (VP9), same CRF

Audio

Mono or stereo per platform. Integrated loudness -14 LUFS.

Framerate

30 fps default. 60 fps only for high-motion / UI capture.

Don't

  • × Dark backgrounds, pure white, or pure black.
  • × Gradients, glows, drop shadows, film grain.
  • × Spring overshoot, bounce, rubber-banding.
  • × Secondary accent colors or semantic encodings.
  • × Fonts other than Inter + Caveat.
  • × Unicode arrows, emoji, or icon fonts.
  • × Mixing framerates within a scene.
  • × Tinting or grading footage to match cream.