Communitygithub.com

CrziDev/claude-skills

当用户输入 /generate-project-frames 或需要当前项目的作品集/展示图片(即截取最佳页面并加框)时使用。

claude-skills 是什么?

此技能用于自动捕获当前项目的最佳页面截图,并为这些截图添加精美的框架,生成适合作品集或展示的图片。它支持多种类型的项目,包括企业管理应用、仪表板/分析工具、内容/营销/电商网站、编辑器/创意工具以及开发者工具/文档。技能会智能扫描项目中的用户界面页面,根据项目类型推荐最多5个代表性页面,并引导用户选择页面、配色方案和角色。捕获过程会处理应用启动、会话管理和页面准备,使用高分辨率(2880×1800 PNG)进行截图,并自动检测和修复常见问题(如加载错误、覆盖层、空图表等)。最终输出原始截图和加框后的成品,并生成封面图片。该技能在 Claude Code 中运行,需要依赖子技能 generate-frame 来完成加框和封面制作。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/CrziDev/claude-skills/tree/HEAD/generate-project-frames

在你喜欢的 AI 中提问

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

文档

生成项目框架

截取当前项目的最佳页面,然后为它们加框。此技能负责发现、应用准备和原始截图质量;必需的子技能: generate-frame 负责加框和封面制作。先运行它的第1步(定位并检查 frame-kit),如果失败则停止。<frame-kit> 是其解析出的路径。

输出,绝不混合:原始图 → ~/Pictures/<project>-portfolio/raw/,加框图 → ~/Pictures/<project>-portfolio/framed/。

1. 扫描

发现面向用户的页面:路由、页面/视图组件、管理资源(Filament、Nova…)、导航菜单。阅读代码以了解如何运行应用、存在哪些角色以及每个角色能看到哪些页面。不要猜测端口、URL或登录信息;通过运行应用或询问来验证它们。

2. 提议最多5个

确定此产品属于哪种类型,然后根据页面展示产品实际功能的效果进行排名。问题是:一张图片就能让陌生人理解这个产品,会是哪张?

产品最强页面
商业/管理应用(POS、CRM、库存)包含真实数据的核心工作流,然后是仪表板,再是数据丰富的列表
仪表板/分析工具主仪表板、一个钻取页面、一个报告页面
内容/营销/电商网站着陆页/英雄区、列表页、详情页、购物车或结账页
编辑器/构建器/创意工具带有内容的画布,然后是画廊或项目列表
开发者工具/文档使用中的主界面、结果/输出视图

跳过登录页、简单表单、设置页、错误页和几乎重复的页面。少于5个也没问题。列出每个页面的名称、路径、角色和一句话理由。

3. 询问

AskUserQuestion,multiSelect(每个问题最多4个选项;如果需要可拆分为两个问题)。在用户做出选择之前不要开始捕获。同时询问:浅色还是深色(仅当应用同时支持两者时),以及使用哪个角色/账户。凭证来自用户的环境或现有会话;切勿将它们写入脚本、文件或输出中,也切勿绕过访问控制(所选角色看不到的页面将被跳过,而不是强制访问)。

4. 准备应用

  • 如果应用未运行,则在一个空闲端口上启动它;记住停止你启动的应用。
  • 打开选定的页面。空数据或占位数据 → 说明情况并提供添加真实演示数据的选项。数据填充需要明确确认,将写入单独的或临时的数据库,未经确认绝不触碰开发数据库。优先使用UI可以创建的状态(如将商品添加到购物车)而不是直接写入数据库。
  • 不要向用户的项目添加依赖项或文件。脚本放在 scratchpad 中。

5. 捕获

在 scratchpad 中编写脚本,从 <this skill>/scripts/capture.mjs 导入 capturePages:

import { capturePages } from '<this skill>/scripts/capture.mjs';
const results = await capturePages({
  frameKit: '<frame-kit>', outDir: '<raw dir>', colorScheme: 'light',   // 批次使用一种配色
  storageState: process.env.APP_STORAGE_STATE,        // 保存的会话;或 login: async (page) => {...} 读取 process.env
  setup: (ctx) => ctx.addInitScript(() => localStorage.setItem('theme', 'light')),  // 应用自身的主题切换(如果有)
  pages: [{ name: '01-dashboard', url: 'http://localhost:8000/admin', prepare: async (page) => { /* 打开购物车,关闭引导提示… */ } }],
});
console.log(JSON.stringify(results, null, 2));

它为整个批次使用一个 1440×900 @2x 的上下文(PNG 尺寸为 2880×1800),等待网络空闲、字体和延迟内容加载完成,并报告每个页面的 issues:控制台/页面错误、HTTP ≥ 400、重定向(通常表示缺少登录)、损坏的图片、可见的旋转器/骨架屏、覆盖层/ Cookie 横幅、空图表容器。按照提议顺序将文件命名为 NN-<slug>.png。通过 loadingSelectors/overlaySelectors/hideCss(toast、调试工具栏)传递应用自身的选择器。

交互式界面(购物车、编辑器、看板)需要先在 prepare 中添加示例内容。

对于每个有问题的页面:修复它(关闭覆盖层、等待元素、登录)并仅重新拍摄该页面;或者告诉用户该问题无法修复并放弃该页面。对于你认为无害的警告(例如 favicon 404),可以接受,但要说明。然后检查每张 PNG:确保内容真实、没有半加载状态、没有不应发布的私人数据(电子邮件、令牌、真实客户名称);如果不确定,请与用户确认。

6. 加框

运行 generate-frame 的第2到第4步,以原始文件夹作为输入:--out <framed dir>,--url "<app host>/{name}",一个 --resolution(默认最大值)。部分失败需要报告,而不是隐藏:仅重新拍摄或重新加框失败的文件。报告原始文件夹、加框文件夹、封面图片对、放弃的页面及原因,以及任何局限性(例如未检查图片)。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相关技能