Community图像github.com

YuukiFST/stageshow

构建看起来像真实产品的虚拟产品UI,既可作为静态插画,也可作为带光标的动画演示。适用于浏览器窗口、应用仪表盘、手机界面、通知、终端、bento网格及光标引导等场景,并按照营销页面、功能卡片或文档封面所需的方式进行框定、遮罩和裁剪。每当用户需要虚假或模拟的UI、产品演示或引导动画、应用封面或功能卡片插画、以及精美营销网站风格的产品截图时(即便他们未明确提及“虚假UI”),即可使用此技能。支持React和纯CSS。

stageshow 是什么?

Stageshow是一个专注于构建高度真实的虚拟产品UI的AI技能,适用于营销页面、产品演示和功能卡片等场景。其核心理念是构建一个“可信的界面”——观众能够识别出屏幕并看到具体事件发生。该技能通过一系列严格的规则和流程确保质量:从规划布局、确定外观(支持浅色、深色、蓝图、玻璃等多种主题)、设计叙事结构(3-5个节拍,10-16秒),到复用精选的金色示例作为起点并进行定制化改造。它提供了丰富的组件库(如`Bar`、`Text`、`Row`)和动画编排API(`Act`),支持静态插画和包含光标移动、内容变化等交互的动画演示。该技能主要针对Claude Code等AI编程助手设计,但同样适用于Cursor、Codex等工具,通过提供的Markdown文档和示例代码指导AI构建高质量的、非重复的UI插图。

兼容平台~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/YuukiFST/agent-dotfiles/tree/HEAD/skills/stageshow

Installed? Explore more 图像 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

在你喜欢的 AI 中提问

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

文档

stageshow 是做什么的?

微缩产品UI:一个可信的界面,在其空间中框定,作为一张静态图或一个只有一件事发生的短视频动画。观众能识别出这个屏幕,并看到发生的事件。

核心理念

它看起来像一个真实的产品,简化到观众需要的内容,有意图地框定,并且每个动作都有其原因。

五种失败的情况:

  • 信息过载。 每一行都有真实文本,到处是数字,内容塞得满满当当。细节越多,看起来就越像生成出来的。
  • 线框图。 两个灰色区块加一个按钮。构建得太小,或者去掉了让它可识别的特征。
  • 盒子化。 整个窗口被缩小并居中放入一个卡片中,四周留白均匀:看起来像是粘贴的截图,而不是产品展示图。
  • 扁平。 所有对象在同一个带边框的卡片中具有相同的视觉权重。眼睛没有落点。
  • 平淡。 一个灰色窗口加一个光标,无论需求是什么都这样。需求中的外观和活力(如蓝图、色彩上的玻璃质感、灵动岛、吉祥物)才是关键;接受需求并按规则构建,就像examples/hero-demo那样,它有一个打字弹窗和一个终端卫星(卫星是指较小的第二个对象,如收据、手机或详情卡片,跨越主视觉的边缘)。

解决方案:一个完整、结构清晰的屏幕,使用安静的灰色,只在故事所涉及的内容上使用真实文字,其余部分用占位行,留出呼吸空间,通过裁剪将视线引导至故事所在处。简化文字,而不是简化上下文。一个空旷的角落,列表下方的空白,撑满面板的行,漂浮在底板(其背后的背景或半透明场)上的窗口:显得未完成,但并非平静。

这些是精心编排的插画,不是浏览器自动化:a.click() 绘制光标按下的动作,a.set() 改变场景。

标准有多高

按照产品设计师构建一个将受人评判的发布页面那样去构建。examples/ 中的黄金示例是标准,而非参考:如果你的作品与最接近的黄金示例相比显得更空、更平或更小,那这就是首先要修复的问题。然后,像你所认识的最苛刻的设计师那样审视画面,那个设计师会截取一个错误点并回复“这是什么?”:一个偏离头像的点、一个单独成行的单位、灵动岛下出现抓取器、文字接触到卡片边缘。如果你能想象出那张截图,你就找到了下一个需要修复的问题。

工作流程

大部分质量在编写任何代码之前就已决定。首先编写计划:它位于何处,焦点对象是什么,动作是什么,成果是什么,哪些内容可以省略。

  1. 介质与位置。 静态或动画(循环、进入视野时播放一次、或悬停时触发)。页面、其背景、其宽度。按最终被观看的大小进行设计,对于旁有正文的主视觉(hero-demo)约为 720 × 340,对于全宽主视觉(linear)为 900 到 1100 宽,对于卡片为 400 × 300,以 1:1 显示;对于演示来说,宽度绝不能低于约 320,尽管bento磁贴或卫星卡片可能更小。每一个可以放在手机列中的演示都需要提供一个适配该列宽度的 compact 设计(358像素),这是一个重新设计而非单纯挤压(参见 references/framing.md,小型格式与页面)。磁贴网格是一个整体:使用 references/bento.md 进行规划。
  2. 外观。 手头有产品的代码或网站时,将其设计令牌映射到工具包的令牌(参见 references/looks.md);如果开发者要求使用他们自己的组件,则在舞台内使用它们,而不是工具包的小部件。否则,选择一个主题(浅色、深色、蓝图、玻璃)、一个调色板(强调色、单色)和一种精细度:minimal 全是条状,standard 在承载含义的地方使用文字而其他地方使用条状,realistic 则所有地方都是真实内容。默认为浅色、强调色、标准精细度;在主视觉规模、针对指定真实产品,或主题为列表或页面的静态图时,使用真实精细度。使用 Text filler 编写一次占位文字,精细度决定其显示。产品自有的图标、真实的界面装饰、使其可识别的内容。带有风格(如可爱、纸张、海报色彩)的需求则完全按照该风格实现,但仍遵循这些规则。
  3. 故事。 其形态(参见 references/motion.md,故事部分):使用感受、操作流程,或系统正在做什么。三到五个节拍和一个成果,持续 10 到 16 秒。没有无法解释的光标移动。没有无缘无故的、在视野中回退的数据。在更丰富的故事和更平静的画面之间,选择画面。
  4. 从示例开始。 找到最接近的黄金示例(下方的黄金示例表)并拍摄它(node scripts/film.mjs "<preview>/?capture=<gold>" --select '#example' --still --out gold.png;npm run dev 启动预览)。将其目录复制到你的项目中作为起点;不要仅凭一瞥就重写。最快的循环:在此处复制到 examples/<yours>/,预览会拾取它,?capture=<yours> 拍摄它,当它通过审查后,再将其移到宿主项目中并修复其工具包导入路径。保留其结构:舞台大小、裁剪与出血、行和字体大小、间距、脚本的节拍、工具包部件。现在完整阅读 references/craft.md:它很短,并且包含了黄金示例无法展示给你的静态帧规则,以及你的黄金示例恰好没有包含的案例。然后用需求中的产品替换它的外观和内容:步骤 2 中的令牌,产品自有的图标、界面装饰和文字。只更改名称的复制是不完整的:它应该读起来像需求中的产品,而不是黄金示例。如果没有黄金示例讲述你的故事,则分两部分选择:先选布局(从 references/framing.md 的表格中挑选;每个布局都命中了其示例),即使故事不同也复制该示例;然后从故事最接近的示例中借运动方式用于你的节拍,并用相同的风格构建两者都没有的部分。然后框定它:裁剪到故事发生的面板,以最终可见的裁剪为准进行评判(references/framing.md 包含规则和布局表)。简而言之:一个完整的排水槽(间距)或更多;只有填充内容可以出血;打开的内容保持可见;窗口保持其形状;页面是背景,因此在白色或深色页面上,主视觉下方不应有底板,也不应有四面留空的完整窗口;仅当开发者要求时才使用 unframed;没有死角落。在与黄金示例相同的宽度下拍摄一张静态图;如果你的作品显得更空、更平或更像盒子,先修复构图,再进行动画制作。
  5. 屏幕。 统计真正的字符串数量,通常在 3 到 7 个之间(参见 references/craft.md,克制部分):这是文字预算,不是元素预算。使用工具包的令牌构建,如 Bar、Text 和 Row。在光标移动之前,确保每个控件内的文本都适应。用 data-target 和 data-cursor 标记光标触摸的内容;使用 rect() 进行测量,切勿硬编码。
  6. 编排。 使用 Act API。保持已挂载的内容可见,并通过切换其状态来使退出动画生效(Bubble 和 Fly 明确交接)。动画化的是关系,而不仅仅是对象:一个新行会携带其下方的行一起移动,一个调整大小的表面绝不应该拉伸其文本。节拍重叠,组交错,成果定格,循环结束时回到起点,或通过一个可见的原因重置。
  7. 排练。 首先设置 poster:大多数人只看到那个帧(缩略图、减少动画、截图),所以它应该是能独立讲述故事的节拍,绝不能是变化中途的帧,并且结果应留在屏幕上而非被清除(参见 references/motion.md,故事部分)。然后拍摄整个循环,而不仅仅是静态图:在显示宽度和 390 宽度下生成接触表,并逐步检查每一次按键、菜单、变形和循环接缝(参见 references/rehearse.md)。一张静态图无法展示弹出效果。阅读每一帧,首先修复最大的可见缺陷(构图、然后是层次结构、然后是运动、然后是打磨),重新拍摄。然后将其与最接近的黄金示例并列,并将 references/teaching.md 中的整体构图和风格对作为关于你静态图的问题来回答(眼睛首先落到哪里,是不是结果?一个窗口、磁贴或设备是否明确领先?);任何“否”都是最大的缺陷。film.mjs --gate 以 rehearsal passed 结束是必要的,但不是充分的。然后执行 references/rehearse.md 中的最后一步:新人审查(references/review.md)和组件旁边的 REHEARSAL.md(模板见 references/verify.md,交接部分):你复制的黄金示例,你更改的内容,你没有检查的内容。

每轮都会出现的常见缺陷及其修复规则;在交接前检查它们:

  • 内容切换 而非移动(参见 references/motion.md,文本和数值的变化部分)。
  • 灰色条出现在视线落点处; 填充内容应位于边缘(参见 references/craft.md,克制部分)。
  • 窗口背后有底板,或窗口四面留空; 窗口或手机应至少占据舞台三分之二,并在某个边缘处超出画面(参见 references/framing.md,规则 5 和小型格式与页面部分)。
  • 空白条带、被截断的控件和阴影(参见 references/craft.md,克制部分;references/framing.md,规则 4)。
  • 通用的AI风格和虚构标志: 闪光、紫色、彩色方块中的字母(参见 references/craft.md,图标和标志部分)。
  • 拥挤的行和不均匀的缩进(参见 references/craft.md,克制以及间距与对齐部分)。
  • 长时间的停顿和无缘无故的重置(参见 references/motion.md,循环部分)。
  • 选区不在 I 型光标下方(参见 references/motion.md,拖拽与选区部分)。
  • 手绘的状态栏或Home指示器; Phone 组件会绘制这两者(参见 references/craft.md,界面装饰和设备部分)。
  • 居中金额与货币符号一起居中(参见 references/craft.md,间距与对齐部分)。

示例

在开始前拍摄最接近的示例(步骤 4)。黄金示例是质量标准;产品研究用于借用交互方式,而非借用其他产品的身份;样板表是目录,而非构图。所有示例都通过 npm install 和 npm run dev 运行。teaching/ 目录包含错误/正确配对(references/teaching.md),用于诊断问题;错误的半部分绝不能作为起点。

黄金示例

需求示例学习要点
静态图或功能卡片static-card安静的层次结构,硬裁剪,一个卫星,只有所选客户、其邻居和总数使用真实文字
深色静态图dark-bento一个信号只传达一次;专辑封面确保它看起来是音乐应用
动画主视觉,一个手势hero-demo五个节拍,命名目标,一个注释,一个向前运动的终端
编排,无光标payout-flow缓慢的重叠到达,阅读时间,一个保持状态的成果
内容原地变化choreography保留的轨道,软遮罩,依赖时间
AI回答ai-chat发送的问题,思考中,答案以滚动高度流式输出,来源最后出现;没有闪光,没有紫色
带卡片的AIai-cards一个被回答并保留为记录的多选卡片,一个在对话中打开的选项卡片,通过其自身按钮预订
表单验证form-error错误出现在引起它的字段上,通过修复该字段清除,然后按钮在自身之上确认
拖拽排序reorder一行通过其拖拽手柄升起,其他行为其腾出空间,放入位置
图表擦洗chart-scrub跟随指针的细线和点,标题值滚动到指针下方的日期
表格内编辑table-edit单元格原地编辑,然后其关联的总和一个节拍后滚动更新
加载到内容loading按照内容自身几何形状的骨架屏,行从上到下解析,全程使用真实界面装饰
深色主视觉dark-hero通过黑色上的表面层次创造深度,一种亮色,在自身药丸形状上变化的状态
实时协作者presence每个人在每个地方用一种颜色标识,名字跟随其光标,工作体现在文档自身的标记中
系统故事subscriptions一个芯片飞入一行,MRR(月经常性收入)滚动,第二个场景是重置
特写close-up一个控件以 1.4 倍大小显示,带有其窗口的界面装饰,完整的行,一个相匹配的大光标
同类项目的多个many-of-one一个物件的网格触及每个边缘,其中一个磁贴通过景深获得焦点,唯一一个带有文字
淡出裁剪fade-crop窗口在其底部淡出,覆盖在填充内容之上,而不是直接伸出边缘
产品上的面板panel-annotation产品页边距上的设置面板,从设置项到其更改的内容的一个引线
重叠窗口overlap窗口前面的卡片,其边缘位于窗口侧边栏线上
叠放卡片stacked-cards同一宽度的两个组件,小间隙,下面的组件超出底部
对角布局opposite-corners一个bento磁贴:底部左角的文字,产品从右上角悬挂下来
倾斜堆叠tilted-stack松散的一叠纸,小交替角度,只有最上面的卡片有文字
角落芯片corner-chip一个小芯片居中放在窗口的角落上,一半在外面
单色monochrome一排其他公司的产品,灰度,底部淡出
窗口排列window-row相同高度的并排放置的会话窗口:通过景深来表明焦点,相邻窗口被舞台裁剪,只有填充内容被裁剪
窗口与手机device-pair一个仪表盘和一个锁屏讲述同一个事件;手机跨越页边距,但绝不会覆盖人物主体
相关对象story一张发票,一个计划,一个连接器,滚动总计
日历拖拽calendar一个已填充的周视图,一个焦点事件,一个可测量的拾取动作
自由拖拽freeform-drag抓取偏移,可测量网格,一个可吸附的放置槽位
手机应用phone-touch一张卡片作为一个对象打开到其屏幕中,循环再折叠回去
灵动岛dynamic-island一个黑色形状,其内容是单独的图层
消息messages撰写框,输入状态,回执,气泡的生命周期
光标cursors, cursor-morph, cursor-resize五种样式,元素驱动的类型,调整大小边缘和角落,以及完全没有光标的情况
注释annotations引线、尺寸、流程和移动目标;references/annotations.md
功能网格bento一个主视觉,一个窗口,一个统计数据,一个对象,一个图表
深色规则网格ruled-bento共享的网格线和技术影像
消费者网格staggered-bento偏移的磁贴,图形艺术,实物对象
图像引导的主视觉网格hero-grid不同的背景

…

[为翻译截断]

相关技能