Vibe Coding 课程-干货集训
02 【实战】用Claude Skills做PPT

重要原则
- 和AI描述清楚你的需求/问题
- 把你的成熟经验传授给它
- 把AI当合作伙伴,和它共创Skill
行动指南
Step 1:安装Skill-Creator
- 用Claude官方提供的Skill-Creator,它能帮你梳理结构和逻辑,事半功倍
https://github.com/anthropics/skills/tree/main/skills/skill-creatorStep 2:描述你的问题/需求
- 在Claude Code里描述你的需求,让Claude通过询问,完全理解你的需求细节
我想创建一个大师级的Claude Skill,帮我解决问题提高效率
请先问我几个问题,帮我理清思路:
1. 我想解决什么问题?
2. 这个Skill需要完成哪些具体任务?
3. 有没有参考示例或现有的工具?
在充分了解我的需求后,请帮我:
1. 规划Skill的整体架构(包含哪些文件、目录结构)
2. 设计Skill的工作流程(从用户输入到最终输出的完整步骤)Step 3:让AI设计Skill的结构和流程
- 明确需求后,Claude会使用Skill-Creator帮你设计Skill的架构和流程
Step 4:和AI讨论调整,确认最终的结构和流程
- AI会考虑不周到,你需要给它一些个人经验和建议,优化它的工作流
- 确认结构和工作流程后,继续下一步


Step 5:AI开始完善Skill
- 让AI完善各部分文档,包括SKILL.md,各种Python脚本等等
Step 6:讨论并完善Skill细节
- 随时打开Thinking流,看看它的想法有没有劈叉
- ‼️AI写完的SKILL.md,要仔细看一遍
Step 7:测试生成效果,优化Skill
- 跑测试,每次测试发现问题,都截图给Claude,让它优化
- 优化N轮后,最终你的SKILL就会变成一个稳定输出的、大师级别的作品
实操方法
新建项目
- 打开VS code,新建项目


确定需求
- 在Claude Code中输入这段提示词,让Claude和你明确问题/痛点
我想创建一个新的PPT Skill,帮我自动生成PPT
我想解决的问题
1. PPT文字编排很费时间
2. 我做不出好看的PPT
请先跟我确认需求细节:
1. 我想解决什么问题?
2. 这个Skill需要完成哪些具体任务?
在充分了解我的需求后,请帮我:
1. 规划Skill的整体架构(包含哪些文件、目录结构)
2. 设计Skill的工作流程(从用户输入到最终输出的完整步骤)确定Skill结构和工作流程
- Claude确认需求后,开始调用Skill-Creator设计Skill的结构和工作流程
- 要注意看Skill给你生成的工作流程
- 确定工作流程后,Claude开始完善Skill
配置生图API
- 须知
- 如果你能稳定Gemini,那就直接用Gemini API。通过这里获得API Key
- 如果你不能稳定使用Gemini,使用以下方法
- 中转平台:https://api.apicore.ai/login
- 打开首页,进入控制台

- 新增令牌
- 进入「API令牌面板」,点击「添加令牌」

- 设置一个令牌名称

- 模型可以选择gemini-2.5-flash-image-hd 或 gemini-3-pro-image-preview-4k

- 点击保存,令牌生成

- 充值
- 点击个人设置 - 「钱包」

- 可以预充值10元(大概能生成40-50张照片)
- 配置API Key
- 完成充值后,回到VS code,让Claude帮你配置好API Key
这是我的生图API Key xxxx(替换为你的密钥) 这是服务接入的文档 https://doc.apicore.ai/api-314031054
增加风格文档
- 点击项目中的「Style」文件夹,点击新增文件的按钮

- 命名文件,必须是.py后缀,点击回车保存


- 把这段提示词复制粘贴进去。保存
--- id: deep-space-tech name: 深空科技风格 description: Apple 发布会极简主义 + 棱镜流光玻璃 + 深空神秘氛围 tags: [科技, AI, 发布会, 高端, 硬科技] --- # 深空科技风格 ## 适用场景 - 科技产品发布会 - AI/硬科技公司路演 - 技术架构展示 - 高端品牌提案 - 未来趋势报告 --- ## SYSTEM_PROMPT 你是一位专家级 UI/UX 演示设计师,请生成高保真的 16:9 演示文稿幻灯片。 --- ## DESIGN_SYSTEM ### STYLE_OVERVIEW 风格融合 Apple 发布会的极简克制、棱镜流光的优雅科技感和深空的神秘氛围。整体气质需要高端、优雅、深邃且有诗意的浪漫感。画面要极度克制,大量留白,让核心元素成为绝对焦点。3D 元素要有"呼吸感",像是有生命的能量体。 ### COLOR 纯黑 #000000 或极深空灰 #0a0a0a 作为绝对基底,营造深空感。3D 元素使用棱镜色散产生的彩虹光谱: - 主色调:光谱蓝紫 → 青 → 粉的渐变流动 - 棱镜折射产生的自然彩虹色(红橙黄绿蓝靛紫的光谱过渡) - 类似肥皂泡或油膜的 iridescent(彩虹光泽)效果 文字使用纯白 #ffffff,与深色背景形成强对比。 ### LIGHTING 采用柔和的体积光,创造梦幻的光影氛围。关键技法: - 棱镜色散效果(chromatic dispersion):光线穿过玻璃产生彩虹光谱分离 - 柔和的边缘光晕(soft rim glow)而非锐利切割 - 从 3D 物体内部向外散射的柔光 - 轻微的光雾弥漫(light mist)增加氛围感 光照要有诗意和呼吸感,像北极光或星云的柔和流动。 ### LAYOUT 采用极简精准的网格系统,大量使用负空间(60%+ 留白)。内容区域使用精准对齐,无装饰性边框。如需容器,使用极细的发光描边(1px, 20% 透明度)或轻微的深色玻璃材质,绝不使用厚重的卡片或阴影。字体层级要有戏剧化对比:超大标题 + 极小正文。 ### MATERIAL 渲染优雅的 3D 流光玻璃体作为视觉锚点。核心设计语言: - **材质**:透明/半透明的棱镜玻璃,光线穿过时产生彩虹色散(chromatic dispersion / prismatic refraction)。表面有液态金属般的流动光纹,类似参考图中的玻璃蝴蝶或玻璃键帽质感。材质要有多层次的透明度和复杂的内部折射。 - **形状**:有机流动的曲面为主——像液态玻璃凝固的瞬间、飘动的丝带、展翅的蝴蝶、流体雕塑。边缘柔和有呼吸感,而非硬边切割。可以有几何感但要融入有机曲线。 - **色彩**:通过棱镜折射产生自然的彩虹光谱流动(红→橙→黄→绿→青→蓝→紫),类似肥皂泡的 iridescent 效果。颜色是光线穿过玻璃自然产生的,而非人工着色。 - **光效**:柔和的内部散射光,边缘有梦幻的光晕而非锐利轮廓。整体像在发光但又很优雅克制。 - **氛围**:物体周围可有轻微的光雾或星尘弥漫,增加诗意和呼吸感。 ### BACKGROUND 深邃的黑色基底,可加入极其细微的星云纹理或轻微的径向渐变(从中心的深灰 #111 到边缘的纯黑 #000),营造深空感。可有若隐若现的星云光带增加诗意,但要非常克制,不能抢夺 3D 元素的焦点。 ### TYPOGRAPHY 使用干净的无衬线字体(SF Pro、Inter、Helvetica Neue),建立极端的层级对比。标题可超大且加粗,正文保持克制。如有图表,使用发光描边的线性图表、带能量感的环形进度条或悬浮的大数字,图表风格要精密但不花哨。 ### RENDER_QUALITY 超高清渲染,真实的玻璃折射和棱镜色散效果,柔和的光影过渡。整体质感要像高端艺术装置或概念设计——优雅、有生命力、科技与艺术的融合。参考:玻璃雕塑、液态金属、北极光的诗意美感。 --- ## RULES ### [MUST] 中文渲染 Chinese text rendering is CRITICAL. Follow these rules strictly: - All Chinese characters must be perfectly clear, sharp, and 100% legible - Use professional sans-serif Chinese fonts (like PingFang, Noto Sans SC, Source Han Sans) - Each character must have correct strokes - no merged, blurry, or malformed characters - Maintain proper character spacing (not too tight, not too loose) - Text must have strong contrast against background (white text on dark background) - VERIFY: Every Chinese character must be recognizable and correctly formed ### [MUST] 约束 Do NOT add any text, logos, or elements not specified in the content below. Keep the composition extremely minimal. --- ## PAGE_TEMPLATES ### cover **构图**:标题为绝对主角,配合一个优雅的 3D 流光玻璃体作为视觉锚点。大量留白,深空背景。 **PROMPT**: ``` 请生成封面页。 标题:{{TITLE}} 副标题:{{SUBTITLE}} 标题使用超大粗体白色字,位置居中或偏左下。画面中放置一个优雅的 3D 流光玻璃体作为视觉锚点——形态是有机流动的曲面,像液态玻璃凝固的瞬间、飘动的丝带或展翅的蝴蝶。材质为透明棱镜玻璃,光线穿过时产生彩虹色散效果(chromatic dispersion),表面有液态金属般的流动光纹和 iridescent 彩虹光泽。边缘有柔和的光晕而非锐利轮廓,整体像在呼吸的能量体。背景是纯黑的深空,可有轻微的光雾弥漫。整体画面极度克制,60% 以上为负空间,让标题和 3D 物体成为仅有的焦点。 ``` ### content **构图**:极简网格布局,内容精准对齐,大量留白。可用极细的发光线条分隔区域。 **PROMPT**: ``` 请生成内容页。采用极简的网格布局,将以下内容精准排列。 标题:{{TITLE}} 要点: {{ITEMS}} 背景为纯黑。标题使用中等大小的白色粗体字,位于页面上方。要点内容使用较小的白色或浅灰色字体,排列整齐。可使用极细的发光线条(1px, 科技蓝, 20% 透明度)作为视觉分隔。每个要点前可配一个极简的发光图标或光点作为标记。页面保持 50% 以上留白,内容区域精准对齐,体现精密感。不使用卡片、阴影或厚重的容器。 ``` ### data **构图**:数据可视化为主角,使用有科技感的图表样式,配合发光效果。 **PROMPT**: ``` 请生成数据页。 数据内容: {{CONTENT}} 使用有科技感的数据可视化:发光描边的环形进度条、带能量脉冲效果的柱状图、或悬浮的超大关键数字。图表使用科技蓝作为主色,配合发光效果。关键数字可以超大显示,带有轻微的发光光晕。背景纯黑,图表元素像是悬浮在深空中。整体风格精密、克制,数据清晰易读,避免过多装饰。 ``` ### end **构图**:极简收尾,中心放置感谢语或行动号召,配小型 3D 流光装饰物。 **PROMPT**: ``` 请生成结束页。画面极简有力。 中心展示: {{CONTENT}} 文字使用白色大字居中显示。可配一个精致的小型 3D 流光玻璃体——形态优雅流动,材质为透明棱镜玻璃,有彩虹色散和 iridescent 光泽。边缘有柔和光晕,像在轻轻呼吸。背景为纯黑深空,可有轻微的光雾点缀。画面主体是文字,3D 元素作为点睛,整体保持极度克制和诗意美感。 ``` --- ## TECH_SPECS - 推荐模型:gemini-2.0-flash-exp 或 gemini-3-pro-image-preview - 比例:16:9 - 分辨率:2K (2752×1536) 或 4K (5504×3072) - 推荐分辨率:2K(平衡质量和生成速度) - 生成时间:2K 约 30 秒/页,4K 约 60 秒/页
测试&优化PPT Skill
- 项目走到这里,Skill基本能正常工作。接下来要做的就是:不断优化
- 测试
- 你可以用Claude帮你写一篇测试文章作为输入,比如让它写“Claude Skills新手指南”
- 这份作为参考
- 把它放进项目中

- 让Claude开始生成ppt
@article.md 生成这个文章的ppt
- 你可以用Claude帮你写一篇测试文章作为输入,比如让它写“Claude Skills新手指南”
- 优化
- 如果发现ppt糊,怎么办?让Claude写个脚本把图片变清晰
- 我让Claude Code写的超分脚本,清晰度直接拉到4K
#!/usr/bin/env python3 """ AtomSlides - Image Upscaler =========================== 将图片放大到更高分辨率(2K → 4K) 使用方法: python upscale.py --image slide.png --scale 2 --output slide-4k.png 支持多种放大方式: 1. Pillow 内置(LANCZOS)- 基础质量,无需额外依赖 2. Real-ESRGAN - 高质量 AI 放大(需要安装) """ import argparse import sys from pathlib import Path try: from PIL import Image except ImportError: print("错误: 请安装 Pillow 库") print("运行: pip install Pillow") sys.exit(1) def upscale_pillow(image_path, scale, output_path, method="lanczos"): """ 使用 Pillow 进行图片放大 Args: image_path: 输入图片路径 scale: 放大倍数(2 = 2倍放大) output_path: 输出图片路径 method: 放大算法 (lanczos, bicubic, bilinear) Returns: bool: 是否成功 """ resample_methods = { "lanczos": Image.Resampling.LANCZOS, "bicubic": Image.Resampling.BICUBIC, "bilinear": Image.Resampling.BILINEAR, } resample = resample_methods.get(method.lower(), Image.Resampling.LANCZOS) try: img = Image.open(image_path) original_size = img.size new_size = (int(img.width * scale), int(img.height * scale)) print(f"放大中...") print(f"原始尺寸: {original_size[0]}x{original_size[1]}") print(f"目标尺寸: {new_size[0]}x{new_size[1]}") print(f"放大算法: {method.upper()}") # 放大图片 img_upscaled = img.resize(new_size, resample) # 确保输出目录存在 output_path = Path(output_path) output_path.parent.mkdir(parents=True, exist_ok=True) # 保存 img_upscaled.save(str(output_path), quality=95) print(f"已保存: {output_path}") return True except Exception as e: print(f"错误: {e}") return False def try_realesrgan(image_path, scale, output_path): """ 尝试使用 Real-ESRGAN 进行 AI 放大 Returns: bool: 是否成功(如果未安装则返回 False) """ try: from basicsr.archs.rrdbnet_arch import RRDBNet from realesrgan import RealESRGANer import numpy as np import cv2 print("使用 Real-ESRGAN 进行 AI 放大...") # 加载模型 model = RRDBNet(num_in_ch=3, num_out_ch=3, num_feat=64, num_block=23, num_grow_ch=32, scale=4) upsampler = RealESRGANer( scale=4, model_path='weights/RealESRGAN_x4plus.pth', model=model, tile=0, tile_pad=10, pre_pad=0, half=False ) # 读取图片 img = cv2.imread(str(image_path), cv2.IMREAD_UNCHANGED) # 放大 output, _ = upsampler.enhance(img, outscale=scale) # 保存 cv2.imwrite(str(output_path), output) print(f"AI 放大完成: {output_path}") return True except ImportError: return False except Exception as e: print(f"Real-ESRGAN 错误: {e}") return False def upscale_image(image_path, scale, output_path, method="auto"): """ 放大图片 Args: image_path: 输入图片路径 scale: 放大倍数 output_path: 输出图片路径 method: 放大方式 (auto, pillow, realesrgan) Returns: bool: 是否成功 """ input_path = Path(image_path) if not input_path.exists(): print(f"错误: 文件不存在: {image_path}") return False if method == "auto": # 首先尝试 Real-ESRGAN if try_realesrgan(image_path, scale, output_path): return True # 回退到 Pillow print("Real-ESRGAN 不可用,使用 Pillow LANCZOS 放大") return upscale_pillow(image_path, scale, output_path, "lanczos") elif method == "realesrgan": if try_realesrgan(image_path, scale, output_path): return True print("错误: Real-ESRGAN 不可用") print("安装方法: pip install realesrgan basicsr") return False else: return upscale_pillow(image_path, scale, output_path, method) def batch_upscale(images_dir, output_dir, scale, method="auto"): """ 批量放大目录中的所有图片 Args: images_dir: 输入图片目录 output_dir: 输出目录 scale: 放大倍数 method: 放大方式 Returns: tuple: (成功数, 总数) """ images_path = Path(images_dir) output_path = Path(output_dir) if not images_path.exists(): print(f"错误: 目录不存在: {images_dir}") return 0, 0 # 收集所有图片 image_extensions = {'.png', '.jpg', '.jpeg', '.webp'} images = sorted([ f for f in images_path.iterdir() if f.suffix.lower() in image_extensions ]) if not images: print(f"错误: 目录中没有图片: {images_dir}") return 0, 0 output_path.mkdir(parents=True, exist_ok=True) success_count = 0 for i, img in enumerate(images, 1): print(f"\n[{i}/{len(images)}] 处理: {img.name}") output_file = output_path / f"{img.stem}-{scale}x{img.suffix}" if upscale_image(str(img), scale, str(output_file), method): success_count += 1 return success_count, len(images) def main(): parser = argparse.ArgumentParser( description="AtomSlides - 图片放大工具" ) parser.add_argument( "--image", help="输入图片路径(单张图片)" ) parser.add_argument( "--images", help="输入图片目录(批量处理)" ) parser.add_argument( "--output", required=True, help="输出路径(文件或目录)" ) parser.add_argument( "--scale", type=float, default=2, help="放大倍数(默认: 2)" ) parser.add_argument( "--method", choices=["auto", "pillow", "lanczos", "bicubic", "realesrgan"], default="auto", help="放大方式(默认: auto)" ) args = parser.parse_args() # 验证输入 if not args.image and not args.images: print("错误: 请指定 --image(单张)或 --images(目录)") sys.exit(1) if args.image and args.images: print("错误: --image 和 --images 不能同时使用") sys.exit(1) # 处理方法映射 method = args.method if method in ["lanczos", "bicubic"]: method = "pillow" # 执行放大 if args.image: # 单张图片 success = upscale_image(args.image, args.scale, args.output, method) sys.exit(0 if success else 1) else: # 批量处理 success, total = batch_upscale(args.images, args.output, args.scale, method) print(f"\n完成: {success}/{total} 张图片放大成功") sys.exit(0 if success == total else 1) if __name__ == "__main__": main() - 如果发现文字崩了,完全错乱了,怎么办?让Claude生成图片后Double Check,出现字体问题要重新生成该图片

- 如果发现ppt糊,怎么办?让Claude写个脚本把图片变清晰