Agent Skills › Remocn/remocn

Remocn/remocn

GitHub

提供Remotion动画的交互最佳实践,确保动画对智能体直观且可在Studio Visual Mode中编辑。核心建议包括优先使用interpolate而非独立spring、使用独立的CSS变换属性以及保持可编辑值内联和效果无条件渲染。

2 skills 859

Install All Skills

npx skills add Remocn/remocn --all -g -y
More Options

List skills in collection

npx skills add Remocn/remocn --list

Skills in Collection (2)

提供Remotion动画的交互最佳实践,确保动画对智能体直观且可在Studio Visual Mode中编辑。核心建议包括优先使用interpolate而非独立spring、使用独立的CSS变换属性以及保持可编辑值内联和效果无条件渲染。
创建或审查Remotion动画代码 需要支持Remotion Studio Visual Mode编辑功能 优化动画性能与可维护性
.claude/skills/interactivity-best-practices/SKILL.md
npx skills add Remocn/remocn --skill interactivity-best-practices -g -y
SKILL.md
Frontmatter
{
    "name": "interactivity-best-practices",
    "description": "Best practices for writing Remotion animations that stay intuitive for agents and editable in Remotion Studio Visual Mode."
}

Interactivity Best Practices

Use these guidelines when creating or reviewing Remotion animations, especially if the animation should be editable in Remotion Studio Visual Mode.

Prefer interpolate() over standalone spring()

Prefer interpolate() for most animation values.

  • It is easier for humans and agents to reason about.
  • Bezier easings are familiar from CSS and can express snappy or jumpy motion.
  • Studio Visual Mode can edit interpolate() keyframes.

When an animation should feel like a spring, keep the editable value in interpolate() and pass Easing.spring() as the easing function.

Prefer:

style={{
  scale: interpolate(frame, [0, 30], [0, 1], {
    easing: Easing.spring({
      damping: 200,
    }),
  }),
}}

❌ Avoid using spring() as a separate driver when the same motion can be expressed as interpolate() easing:

const scale = spring({
  frame,
  fps,
  config: {
    damping: 200,
  },
});

style={{
  scale,
}}

Easing.spring() supports damping, mass, stiffness, and overshootClamping. It is normalized to the interpolation progress, so it does not take frame, fps, from, to, delay, reverse, durationInFrames, or durationRestThreshold.

Use standalone spring() only when the animation specifically needs a frame-driven physical spring simulation that cannot be represented as an easing on interpolate().

Prefer individual CSS transform properties

Use individual CSS transform properties such as scale, rotate, and translate instead of composing a transform string.

Prefer:

style={{
  scale: interpolate(frame, [0, 100], [0, 2]),
}}

❌ Avoid:

style={{
  transform: `scale(${interpolate(frame, [0, 100], [0, 2])})`,
}}

Individual transform properties are editable in Studio Visual Mode. Values hidden inside a transform string are not.

Keep editable values inline

Put the interpolation directly in the JSX style object when the value should be visually editable.

Prefer:

style={{
  scale: interpolate(frame, [0, 100], [0, 2]),
}}

❌ Avoid:

const scale = interpolate(frame, [0, 100], [0, 2]);

style={{
  scale,
}}

Inline computations and literal values let Studio Visual Mode discover and edit the keyframes and props.

This also applies to effect parameters. Keep editable effect values inline in the effect call.

Prefer:

effects={[
  radialProgressiveBlur({
    center: [0.5, 0.5],
    point1: [0.86, 0.36],
    point2: [0.68, 0.84],
  }),
]}

❌ Avoid hiding editable values behind constants:

const center = [0.5, 0.5] as const;

effects={[
  radialProgressiveBlur({
    center,
  }),
]}

Keep effects unconditional

When using the effects prop, keep the effect array shape unconditional. Studio Visual Mode cannot reliably edit an effect that only exists behind a conditional expression.

Prefer rendering separate elements when one version should have effects and another should not:

<CanvasImage src={src} width={1280} height={720} />
<CanvasImage
  src={src}
  width={1280}
  height={720}
  effects={[
    blur({
      radius: interpolate(frame, [0, 100], [0, 40]),
    }),
  ]}
/>

❌ Avoid conditionally including an effect:

<CanvasImage
  src={src}
  width={1280}
  height={720}
  effects={enabled ? [blur({radius: 40})] : []}
/>

Keep editable effect parameters inline inside the unconditional effect call. Do not pass variables for editable values such as coordinates, colors, numeric controls, or interpolations.

Interpolate rotation and translation directly

Interpolate CSS unit strings directly for rotate and translate.

Prefer:

style={{
  rotate: interpolate(frame, [0, 100], ["20deg", "90deg"]),
  translate: interpolate(frame, [0, 100], ["0px 0px", "100px 100px"]),
}}

❌ Avoid manually building strings around separately interpolated numbers when the property can be interpolated directly.

Direct interpolation of these properties is supported and works better with visual editing in Studio.

Use Interactive.* for tweakable elements

Use the Interactive namespace from remotion when an element is likely to be tweaked in Studio.

import {Interactive} from "remotion";

For example:

<Interactive.Div
  style={{
    color: "red",
    fontSize: 80,
  }}
>
  Hello
</Interactive.Div>

<Interactive.Div>, <Interactive.Span>, and the other Interactive.* components behave like their regular HTML equivalents, but enable interactivity in Studio.

Inline styles on these elements, such as text color and font size, can be standardized interactively.

用于Remotion视频开发的组件库,提供动画和UI原语。支持文本、转场、背景及shadcn风格交互组件,通过shadcn安装,适用于视频场景合成与演示制作。
remocn video component add animation text reveal scene transition product demo video remotion component typewriter terminal simulator glass code block video dialog video button command menu video select video tooltip
skills/remocn/SKILL.md
npx skills add Remocn/remocn --skill remocn -g -y
SKILL.md
Frontmatter
{
    "name": "remocn",
    "description": "Build Remotion videos with remocn — a shadcn registry of copy-paste animation components and timeline-driven UI primitives. Use when composing video scenes, adding text animations, transitions, backgrounds, UI blocks, brand\/social cards, or full compositions in a Remotion project. Triggers include \"remocn\", \"video component\", \"add animation\", \"text reveal\", \"scene transition\", \"product demo video\", \"remotion component\", \"typewriter\", \"terminal simulator\", \"glass code block\", and the UI-primitive tier: \"video dialog\", \"video button\", \"command menu\", \"video select\", \"video tooltip\". Even if the user doesn't mention remocn, activate when they need polished video primitives for Remotion."
}

remocn

Copy-paste components for Remotion videos. Components install via shadcn and land in components/remocn/ — you own the code.

Installation

Prerequisites: a Remotion project (npx create-video@latest).

# Add any component (namespaced shadcn registry)
shadcn add @remocn/blur-out-up

# Component lands at components/remocn/blur-out-up.tsx

@remocn/<name> is the canonical namespaced form (configured under registries in components.json). The plain registry URL https://remocn.dev/r/<name>.json also works.

Dependencies install automatically

Many components pull others via registryDependenciesshadcn installs them transitively. For example, shadcn add @remocn/typewriter also pulls @remocn/remocn-ui and @remocn/caret.

  • @remocn/remocn-ui is the shared core lib (timeline-fold hook, theme context, color math). Most UI Primitives depend on it. You rarely install it directly.

Two tiers

remocn has two kinds of components — they have different APIs:

  • Animation tier (remocn) — text animations, transitions, backgrounds, UI-block sims, brand/social cards, full compositions. Frame-driven. Shared props: speed (time multiplier), and for text: fontSize, color, fontWeight.
  • UI Primitives (remocn-ui) — timeline-driven shadcn-style primitives (button, dialog, select, command-menu, tooltip…). State-based props (state, style, variant, theme). No speed prop. Built on @remocn/remocn-ui.

Component categories

Pick by what you're building. The catalog is split one file per component under references/components/. Start at references/components/index.md — a router table grouped by these categories with a Use for / Avoid for signal per component. Scan it, pick candidates, then open only the references/components/<name>.md files you need (full props, example, all use / don't-use notes). Don't read every file.

Category Tier Use for
Text Animations remocn Reveal/replace/emphasize text (typewriter, blur-out-up, tracking-in, rolling-number, shimmer-sweep…)
Backgrounds & Effects remocn Animated foundations, cursors, one-shot effects (mesh-gradient-bg, dynamic-grid, spotlight-card, confetti, backdrop)
Shaders remocn WebGL shader backdrops, frame-driven for deterministic renders (shader-mesh-gradient, shader-warp, shader-voronoi, shader-god-rays, shader-metaballs…)
Transitions remocn TransitionSeries presentations between two scenes (whip-pan, push-through, focus-pull, grain-dissolve, wave-wipe…)
UI Blocks remocn Interface sims for product demos (terminal-simulator, glass-code-block, animated-bar-chart, progress-steps…)
AI & Social Cards remocn Brand/product card scenes (chat-gpt, claude-code, v0, github-stars, x-follow-card…)
UI Primitives remocn-ui shadcn-style primitives for video (button, dialog, select, command-menu, tooltip…)

Component patterns

Conventions differ by tier — don't assume animation-tier props on a primitive.

Animation tier (remocn)

  • Named Props interface per component (e.g. BlurOutUpProps).
  • speed?: number — global time multiplier (default 1), applied as frame * speed.
  • Text components: fontSize, color, fontWeight.
  • Transitions: lowercase factories (e.g. whipPan(props)) returning a TransitionPresentation — pass to TransitionSeries.Transition via presentation, pace with linearTiming / springTiming.
  • className?: string on the root.

UI Primitives (remocn-ui)

  • State-based, not speed-based: state (e.g. "open" / "closed"), style, variant, size, theme?: Partial<RemocnTheme>.
  • The opened/closed/active state is a pure function of the timeline (keyframed presets).
  • Compose modal-layer primitives (dialog, alert-dialog, drawer) with a trigger element — see each component's example.

Animation API

import { interpolate, spring, useCurrentFrame, useVideoConfig } from "remotion";

const opacity = interpolate(frame, [0, 30], [0, 1], { extrapolateRight: "clamp" });
const scale = spring({ fps, frame, config: { damping: 12, mass: 1, stiffness: 100 } });

// Deterministic randomness (NEVER Math.random())
import { random } from "@remotion/random";
const jitter = random(`seed-${frame}`);

Composition structure

import { Sequence, Series } from "remotion";

<Sequence from={30} durationInFrames={60}>
  <Typewriter text="npm install remocn" />
</Sequence>

<Series>
  <Series.Sequence durationInFrames={60}><SceneA /></Series.Sequence>
  <Series.Sequence durationInFrames={60}><SceneB /></Series.Sequence>
</Series>

Canvas & timing

  • Canvas standard: 1280×720 @ 30fps. Components are laid out for it.
  • Budget each Sequence around the component's natural length — the Length column in components/index.md (and each file's Natural length). Under-budgeting clips the animation; over-budgeting leaves dead air.
  • Tone matching: each catalog entry carries a vibe tag (tech/premium/data/clean/ playful/social) — pick components whose vibe fits the brand.
  • Palette & fonts: stay within the library's tokens (references/design.md → tokens) so your own elements don't clash.

Design defaults — avoid AI-slop

When you write your own text, scene chrome, or cards (not the prebuilt components), keep it restrained:

  • No decorative letter-spacing on body/heading text you add.
  • No text-transform: uppercase / ALL-CAPS defaults — prefer sentence case (Launch, not LAUNCH).
  • No gradient text-fills or decorative gradient washes — gradients only as intentional backgrounds.
  • No glow / colored drop-shadows or large blur radii (blur > ~24px, spread, multi-layer) — subtle 1px elevation only.

Exception: never strip these from components whose essence is the effect — tracking-in (letter-spacing), mesh-gradient-bg and social cards (gradients), and intentional elevation are all legitimate. The rules govern your additions, not the library.

Full do/avoid examples: references/design.md. For motion quality (timing, anticipation, staging, easing), see references/motion-principles.md.

Gotchas (remocn-specific)

  • Transitions wrap two scenes — pass from / to as ReactNode, not as a static instance.
  • Terminal scroll is instant — step-function translateY, never spring/ease the scroll.
  • overflow: hidden on split layouts — prevents content breakage during width animations.
  • Cursor blink is deterministicMath.floor(frame / 15) % 2 === 0, not intervals.
  • Static files go in public/ — load via staticFile('cursor.svg'), not imports.
  • Social cards render offlineavatarUrl="" / coverUrl="" fall back to gradients; no fetch.

General Remotion rules (no Math.random(), no setInterval, animate transform not top/left, load fonts before render) live in the remotion-best-practices skill.

Composing a video

Don't dump components — compose one story. When asked to build a full video ("make a product demo", "changelog video", "intro for my landing"):

  1. Decide the strategy — ready template vs compose from components vs build a new component. See references/anatomy.md §1.
  2. Follow the beats — a product demo is Hook → Positioning → Product reveal → Features → Proof → CTA (last two optional). See references/anatomy.md §2.
  3. Use the recipereferences/archetypes/index.md routes to per-archetype builds: content contract (infer → ask → placeholder), duration variants, beat→component slots, and a worked <TransitionSeries> skeleton.
  4. Pick each beat's component from references/components/index.md; match the vibe tag to the brand and budget each <Sequence durationInFrames> around its natural length.
  5. Check the quality bar — one accent, sentence-case kinetic type, real content, no glow halos, no feature-list enumeration, no mesh-gradient-bg. See references/anatomy.md §3.

Reference

  • references/anatomy.md — composing a full video: strategy (template/compose/new), the product-demo beats, and the good-vs-slop quality bar.
  • references/archetypes/index.md — router to per-archetype build recipes (product-demo flagship + changelog, feature-announcement, oss-showcase, cli-tool-demo, testimonial-reel, year-in-review, pricing-reveal, logo-bumper): content contract, duration variants, beat→slot map.
  • references/components/index.md — router table (all components, grouped by category, with Use for / Avoid for). Open references/components/<name>.md for one component's full props, example, and use / don't-use notes.
  • references/design.md — anti-slop design defaults (do/avoid) + design tokens (palette, fonts, canvas).
  • references/motion-principles.md — motion-design principles adapted to remocn + Remotion.
  • references/anti-patterns.md — common generation mistakes and their fixes.

Home - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-07-13 18:59
浙ICP备14020137号-1 $Map of visitor$