Communitygithub.com

Imgcli

使用 Imgcli 构建 Remotion 视频——一个基于 shadcn 的复制粘贴动画组件和时间轴驱动 UI 原语库。用于在 Remotion 项目中组合视频场景、添加文字动画、转场、背景、UI 模块、品牌/社交卡片或完整合成。

Imgcli 是什么?

Imgcli 是一个面向 Remotion 视频制作的开源组件库,采用经典的 shadcn 模式——通过 `npx shadcn@latest add` 命令安装组件,代码直接落地到项目的 `components/imgcli/` 目录中,用户完全拥有代码所有权。该库分为两大层:**动画层**(场景与动画)和 **UI 原语层**(`snap-cn-ui`,时间轴驱动的 shadcn 风格原语)。动画层组件共享 `speed`(时间倍率)属性,并针对 1280×720 @ 30fps 的画布标准进行了优化;而 UI 原语则基于状态驱动(如 `state`、`style`、`size`、`theme`),没有 `speed` 属性。组件涵盖文字动画、标题、字幕、AI 聊天输入模拟、屏幕/设备框架、Logo 动画、完整场景、社交证明以及特效等多个类别。Imgcli 还提供了丰富的参考文档,包括组合指南、原型构建配方、设计规范(防止 AI 生成的低质量内容)和动作原则,帮助开发者和 AI 代理系统地构建高质量视频。该库兼容 Cursor、Claude Code、Codex 等主流 AI 编码工具,支持通过工作流技能(如 `remotion-product-demo`、`remotion-launch-video`)辅助完成完整视频的制作。

兼容平台~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/imgcli/skills/tree/main/skills/imgcli

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Imgcli 是做什么的?

用于 Remotion 视频的复制粘贴组件。组件通过 shadcn 安装并放置在 components/imgcli/ 目录下——你拥有代码的所有权。

安装

前提:一个 Remotion 项目(npx create-video@latest)。

# 从 Imgcli 注册表安装
npx shadcn@latest add https://imgcli.com/r/text-reveal.json

# 组件落地到 components/imgcli/text-reveal.tsx

要使用更短的 @imgcli/<name> 形式,请在 components.json 中将 @imgcli 映射到 https://imgcli.com/r/{name}.json。请参阅安装指南了解项目设置。

依赖项自动安装

许多组件通过 registryDependencies 拉取其他组件 —— shadcn 会传递式安装。例如,安装 search-typing 也会同时安装 snap-cn-ui、input 和 caret。

  • @imgcli/snap-cn-ui 是共享的核心库(时间轴折叠 hook、主题上下文、颜色计算)。大多数 UI 原语都依赖它。你很少直接安装它。

两层架构

Imgcli 有两种组件——它们具有 不同的 API:

  • 动画层(场景和动画)—— 文字动画、转场、背景、UI 模块模拟、品牌/社交卡片、完整合成。帧驱动。共享属性:speed(时间倍率),对于文字还有:fontSize、color、fontWeight。
  • UI 原语(snap-cn-ui)—— 时间轴驱动的 shadcn 风格原语。目前提供两个:input 和 caret。基于状态的属性(state、style、size、theme)—— 打开/输入状态是时间轴的纯函数。没有 speed 属性。 基于 @imgcli/snap-cn-ui 构建。

组件分类

根据你要构建的内容选择。目录按每个组件一个文件的方式拆分在 references/components/ 下。从 references/components/index.md 开始 —— 这是一个按上述分类分组的路由表,每个组件带有“用于”/“避免用于”的信号。扫描它,挑选候选组件,然后只打开你需要的 references/components/<name>.md 文件(完整属性、示例、所有使用/不使用注意事项)。不要读取每个文件。

分类层级组件
文字与标题Animationtext-reveal、type-morph、text-swell、text-highlight、text-swap、text-build、text-rewrite、text-select、word-flip、punch-lines、word-gather、word-wheel
字幕Animationword-captions、karaoke-captions
AI 聊天输入Animationprompt-send、search-typing、prompt-zoom、answer-stream、answer-highlight、agent-steps
屏幕与设备Animationphone-frame、laptop-frame、terminal-simulator、screen-recording、cursor-track
标志Animationlogo-assemble、logo-flicker、logo-collapse、logo-drift、block-wordmark、wordmark-cut
场景Animationannounce-title、hero-launch、orbit-gallery、moodboard-reveal、status-cycle、count-grid、roster-grant、orb-swarm、reel-collage、card-rail、cut-lockup、bloom-lockup、gather-lockup、sky-lockup
社交证明Animationfollower-rush、channel-thread
特效Animationpulsing-border
UI 原语snap-cn-uiinput、caret(+ snap-cn-ui,共享核心库)

使用实时组件索引确认哪些名称是可安装的。下面的参考资料包括旧名称及其替代品。

组件模式

不同层级的约定不同——不要在 UI 原语上假设动画层的属性。

动画层(场景和动画)

  • 每个组件有命名的 Props 接口(例如 TextRevealProps)。
  • speed?: number —— 全局时间倍率(默认为 1),作为 frame * speed 应用。
  • 文字组件:fontSize、color、fontWeight。
  • 场景之间的转场不在此注册表中 —— 请使用 Remotion 自带的 @remotion/transitions(slide、wipe、fade、flip)在 <TransitionSeries> 内部。
  • 根元素上可添加 className?: string。

UI 原语(snap-cn-ui)

  • 基于状态,不基于 speed:state(例如 "open" / "closed")、style、variant、size、theme?: Partial<SnapCnTheme>。
  • 打开/关闭/激活状态是时间轴的纯函数(关键帧预设)。
  • 通过触发元素组合模态层原语(dialog、alert-dialog、drawer)—— 参见每个组件的示例。

动画 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 } });

// 确定性随机数(永远不要使用 Math.random())
import { random } from "@remotion/random";
const jitter = random(`seed-${frame}`);

合成结构

import { Sequence, Series } from "remotion";

<Sequence from={30} durationInFrames={60}>
  <TextReveal text="Ship it in React" />
</Sequence>

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

画布与时间

  • 画布标准: 1280×720 @ 30fps。组件为此布局而设计。
  • 预算每个 Sequence 的时间应匹配组件的自然长度 —— 参见 components/index.md 中的“长度”列(以及每个文件的“自然长度”)。预算不足会剪裁动画,预算过多则会产生静默空白。
  • 语调匹配: 每个目录条目都带有 vibe 标签(tech/premium/data/clean/playful/social)—— 选择语调契合品牌的组件。
  • 调色板与字体: 保持在库的令牌范围内(references/design.md → 令牌),以便你自己的元素不会冲突。

设计默认值——避免 AI 生成的粗制滥造

当你编写自己的文本、场景装饰或卡片(非预制组件)时,请保持克制:

  • 不要在你添加的正文/标题文本上使用装饰性的 letter-spacing。
  • 不要使用 text-transform: uppercase / 全大写的默认值 —— 优先使用句子大小写(Launch,而不是 LAUNCH)。
  • 不要使用渐变文字填充或装饰性渐变渐变 —— 渐变仅用作有意的背景。
  • 不要使用发光/彩色投影或大的模糊半径(blur > ~24px、扩散、多层)—— 仅使用微妙的 1px 提升。

例外: 不要从本质就是效果的组件中去除这些属性 —— word-flip 的渐变词、block-wordmark 的彩色组合、announce-title 的发光、pulsing-border 本身,以及字幕预设的粗轮廓都是合理的。规则约束的是你的添加,而不是库本身。

完整的做/不做示例:references/design.md。关于运动质量(时间控制、预期动作、舞台布置、缓动),请参见 references/motion-principles.md。

注意事项(Imgcli 特有)

  • 不提供转场组件 —— 场景切换使用来自 @remotion/transitions 的 <TransitionSeries.Transition>,而不是 Imgcli 组件。text-swap 交换的是一行文字,而不是场景。
  • 终端滚动是瞬间的 —— 阶跃函数 translateY,永远不要对滚动使用 spring 或 ease。
  • 分割布局上使用 overflow: hidden —— 防止在宽度动画期间内容溢出。
  • 光标闪烁是确定性的 —— Math.floor(frame / 15) % 2 === 0,不使用间隔。
  • 静态文件放在 public/ 目录下 —— 通过 staticFile('cursor.svg') 加载,而不是通过导入。
  • 社交卡片离线渲染 —— avatarUrl="" / coverUrl="" 会回退到渐变;不进行网络请求。

通用的 Remotion 规则(不使用 Math.random()、不使用 setInterval、动画化 transform 而不是 top/left、在渲染前加载字体)位于 Remotion 自己的技能中,不在此技能中:npx skills add remotion-dev/skills。

组成一个视频

不要随意堆放组件——要讲述一个故事。当被要求构建一个完整视频(“制作产品演示”、“更新日志视频”、“为我的落地页制作介绍”)时:

  1. 决定策略 —— 使用现成模板 vs 从组件组合 vs 构建新组件。参见 references/anatomy.md §1。
  2. 遵循节拍 —— 一个产品演示是:Hook → 定位 → 产品展示 → 功能 → 证明 → CTA(最后两个可选)。参见 references/anatomy.md §2。
  3. 使用配方 —— references/archetypes/index.md 路由到按原型构建的指南:内容合约(推断 → 询问 → 占位符)、时长变体、节拍到组件槽位,以及一个完整的 <TransitionSeries> 骨架示例。
  4. 为每个节拍选择一个组件 —— 从 references/components/index.md 中选择;将 vibe 标签与品牌匹配,并根据其自然长度为每个 <Sequence durationInFrames> 进行预算。
  5. 检查质量标杆 —— 一个强调色、句子大小写的动态排版、真实内容、无发光光环、无功能列表枚举、无装饰性渐变背景。参见 references/anatomy.md §3。

工作流

对于整个视频,如果可能,请使用匹配的工作流技能。每个工作流技能都会节拍式地组合 Imgcli 组件,并在 Remotion 中检查结果。代理指南涵盖了安装和公共组件发现。

  • remotion-launch-video 用于发布视频、公告、Product Hunt / X 推广。
  • remotion-product-demo 用于基于真实屏幕录制的导览、CLI 和 AI 应用演示。
  • remotion-motion-graphics 用于动态排版、标志小片段、统计数据和简短开场。
  • remotion-kinetic-typography 用于文字动画和标题卡片。
  • remotion-logo-animation 用于标志展示、开场和结束小片段。
  • remotion-explainer-video 用于带内嵌字幕的叙述式解说视频。

参考

  • references/anatomy.md —— 组成完整视频:策略(模板/组合/新建)、产品演示节拍、以及高质量与低质量内容的分界线。
  • references/archetypes/index.md —— 按原型构建配方的路由器(产品演示旗舰 + 更新日志、功能公告、开源展示、CLI 工具演示、推荐视频、年度回顾、定价展示、标志小片段):内容合约、时长变体、节拍到组件槽位映射。
  • references/components/index.md —— 路由表(所有组件,按分类分组,带有“用于”/“避免用于”标记)。打开 references/components/<name>.md 查看单个组件的完整属性、示例及使用/不使用注意事项。
  • references/design.md —— 反 AI 粗制滥造的设计默认值(做/不做)+ 设计令牌(调色板、字体、画布)。
  • references/motion-principles.md —— 适用于 Imgcli + Remotion 的运动设计原则。
  • references/anti-patterns.md —— 常见生成错误及其修复方法。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

相关技能