沙画讲故事

SKILL前端设计
前端设计 未标注权限 许可证不明确
安装这个技能

沙画讲故事视频生成。输入一段故事/文案,输出竖屏沙画短片:暖黄发光沙台、俯拍的手撒沙、

一句话选型结论

按资料字段整理

沙画讲故事是前端设计类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类前端设计 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install user_d3228c23/qianjin-sand-story
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

前端设计
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方user_d3228c23仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 community
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验2026-11-06上游最后核验时间 · 数据更新 2026-11-06
正文体量10.0 KBSKILL.md 原文大小,越大说明说明书写得越细

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
出页面与组件

按描述生成页面结构和组件草稿。

调整样式与布局

改间距、配色与响应式布局。

生成设计说明

把设计稿整理成开发能接的说明。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在前端设计场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
沙画讲故事当前 未标注权限 未标注 未标注 未标注 有
前端设计 只读 GitHub 仓库 882.3 万 Codex、Claude、Cursor 有
Vercel 组合模式 联网访问 GitHub 仓库 385.9 万 Codex、Claude、Cursor 有
Vercel React native skills 前端 只读 GitHub 仓库 246.9 万 Codex、Claude、Cursor 有
adapt 搜索 浏览器控制 GitHub 仓库 202.7 万 Codex、Claude、Cursor 有
使用我的浏览器 浏览器控制 GitHub 仓库 184.8 万 Codex、Claude、Cursor 有

SKILL.md 全文

10.0 KB
模型实际读到的说明书原文,来自技能仓库

沙画讲故事

一句话:沙台上有人撒沙,图像由沙的厚薄长出来,手一直在场。

沙画的辨识度不在画风,在物理:光从沙台底下透上来,沙越厚越挡光。
所以不能把图片直接贴上去,必须先把图转成"沙的厚度",再让手把它一点点铺开。

何时触发

  • 做沙画视频 / 沙动画 / sand art
  • 故事类短片(品牌故事、人物故事、情感叙事)想要比口播更有画面
  • 已有口播视频,想做一版沙画版的差异化内容

五步工作流

> 想先看效果:从 GitHub 仓库取 examples/回家的路/(三张沙画 + 绿幕手 + story.json,
> 素材齐全,不用先生图),然后 python scripts/make_sand.py --project <示例目录>。
> SkillHub 发布包只收代码与文档,不含图片素材。

1. 拆故事(3~6 幕)

每幕一句话、一个画面。一屏只留一个主体,人物剪影优于群像。
文案用短句,画面才有呼吸;一幕 4~9 秒。

[分幕]
幕1  小时候,父亲牵着我的手,走这条巷子回家。      → 老人牵小孩走在老巷
幕2  后来我提着行李,去了很远的城里。              → 青年提箱走向车站
幕3  每次回来,他都在巷口等着。                    → 路灯下老人独站

2. 生成沙画素材(关键)

沙画和"沙漠/沙雕"极易混淆。必须锁死这几条,prompt 照抄这段前缀:

平面沙画(sand art on light box),从正上方俯拍发光玻璃沙台。画面完全扁平,
像剪影画,没有立体浮雕、没有景深、没有投影、不是沙雕。亮黄色背光透过薄沙
形成大片明亮区域,厚沙呈深褐至近黑色。只有深褐与金黄几个层次,边缘是散开的
沙粒,颗粒感明显,没有轮廓线。无文字,无水印。

再在后面接具体画面。判据:看到立体感、看到阴影落在物体上、看到灰调过渡,就是废图。
画面可以画满,四周留一点散沙就行(渲染器会自动裁掉大片空沙面,见"实现要点"第 6 条)。

3. 生成"手"素材

一张就够:俯拍、掌心向下、指缝漏沙、手臂向右/右下出画。

俯拍视角,一只成年人右手从画面右上方斜伸入,手背朝上,掌心向下稍倾,
手指半开,指缝间有琥珀色细沙流下。背景是纯正的亮绿色 #00FF00,完全平涂
无渐变、无阴影,画面里只有手和沙,没有其他东西,没有文字。

⚠️ 不要用 background: transparent:模型会把"透明=棋盘格"画进像素,白笔杆/手指边缘无法与背景分离。
必须绿幕 + 自己抠(load_hand() 里已按绿幕调好阈值)。

4. 写 story.json 并出片

{
  "voice": "zh-CN-YunyangNeural",
  "rate": "+6%",
  "title": "回家的路",
  "tail": 0.75,
  "scenes": [
    {"src": "scene1.png", "line": "小时候,父亲牵着我的手,走这条巷子回家。"},
    {"src": "scene2.png", "line": "后来我提着行李,去了很远的城里。", "gamma": 1.0, "box": [0.05,0.05,0.95,0.95]}
  ]
}
python scripts/make_sand.py --project ./my_story

产物:<项目>/<title>_沙画_竖屏.mp4。

5. 质检(逐条对照)

  • [ ] 沙面没有矩形边界(极薄沙必须平滑压零,硬切会在画幅处留一条直边)
  • [ ] 手没有直角断口(手腕断口要么在画面外,要么被沙面遮住)
  • [ ] 沙面始终是颗粒,没有一块平滑的照片质感
  • [ ] 手的移动不快于每秒一次换向(快了就是摇扇子)
  • [ ] 换幕不空场:撒沙时长 ≈ 幕长 × 0.62,画完到下一幕之间的空白 ≤ 0.4 秒
  • [ ] 字幕压在画面外/暗部,不与主体重叠

参数(scripts/sand_render.py)

参数 默认 作用
FIG_TOP / FIG_H / FIG_W 58 / 950 / 700 图区位置与大小(720×1280 下)
FEATHER 0.085 沙边软度。太小=刀切线,太大=整幅发灰
HAND_SCALE 0.34 手相对画面宽度,俯拍手本来就大,但别盖住画面
SAND_DARK / SAND_EDGE 54,33,15 / 212,162,92 厚沙与散沙的颜色
GHOST(无) — 沙画不用淡底稿:沙是一次铺满的,不是描线

实现要点(改代码前先读)

  1. 沙层 = 亮度反推厚度。density = (paper - lum) / (paper - 26),纸色取中位数(不是 95 分位,否则整幅糊灰)。
  2. 上色只用 density,不沿用原图颜色。否则就是贴照片。tint = SAND_EDGE*(1-d) + SAND_DARK*d,alpha ≈ d^0.78。
  3. 落沙前沿 = 手到像素的距离。build_arrival() 对路径上每个采样点算 lp + dist/spread*0.14 取最小,
    得到"每个像素什么时候被沙覆盖",前沿天然是弧线,不会出现换趟的横向刀口。
    再叠一层低频噪声(0.09),前沿才有"一波一波漫上来"的起伏,否则是一条笔直的擦除线。
  4. 手的纵向走位按内容分布重映射(row_curve() + warp_v())。空沙面手一带而过、有画的地方慢下来,
    这样每一秒都在出内容。真人撒沙就是这样;匀速走会在稀疏的画面上留下大段空白灯箱。
  5. 画幅边缘渐隐 14%,且极薄沙要平滑压零(不是硬阈值),矩形边缘才不会露出来。
  6. 手沿画面右侧纵向走位(hand_path())。为什么不是横扫:素材的手臂是向右出画的,
    横扫到左边时腕口会露馅;竖着走,断口永远在画面右缘之外。
  7. 自动裁到有沙的区域(_crop_to_content())。素材四周常有一大片空沙面,不裁的话手从上往下扫,
    前一秒多扫的全是空地,观众看到的就是一块空白灯箱。裁完内容填满画幅(floor 防裁成窄条)。
  8. 飘沙只画在有画面的地方(content_mask())。空沙台上飘一层沙,看着就是假的。
  9. 小臂是补出来的:把腕部 24px 的列做垂直拉伸 + 柱面明暗,再对齐亮度;接缝落在画面外就看不见。

已知坑(都踩过)

现象 原因 处理
手边缘一圈浅色方块 paste(im, box, im) 传 RGBA 当遮罩时用的是亮度不是 alpha 显式传 im.getchannel("A")
手下面是硬边浅色块 素材自带一段漏沙,裁切线是直角 裁掉 + 34px alpha 渐隐 + 椭圆软遮罩清残留
小臂像一条色块 2px 列拉伸出竖条纹 用腕部 24px 列取垂直渐变 + 柱面光 + 高斯
画面像一块照片 沙层直接沿用原图 RGB 只用 density 上色
边界是一条直线 没做画幅渐隐,或 FEATHER 太小 边距渐隐 11.5%,FEATHER 0.085
整幅发灰 纸色用 95 分位,把纸判成淡墨 改中位数
画面上出现一块矩形浅色区 极薄沙硬阈值切断,边界落在画幅矩形上 平滑压零(见要点 7)
每幕开头一两秒纯空沙台 素材四周空沙面太多,手先扫空地 自动裁内容 bbox
字幕像卡拉OK 纯白字 + 黑描边 换暖米白 E8DCC2 + 深褐描边 331E0E
字幕发蓝 ASS 的颜色是 &HAABBGGRR,把 #E8DCC2 直接填进去就成了淡蓝 写 &H00C2DCE8,不是 &H00E8DCC2
每段开头前两个字听不到 合成音自带 0.15~0.25s 空拍,再叠 AAC 编码延迟;字幕按词时间戳走,比声音早半拍 trim_head() 裁到 0.06s 起音并同步前移词时间戳;音轨全程 PCM,只在出片时编码一次 AAC

音频链路(这段最容易翻车)

  1. 每条合成音开头都有空拍。edge-tts 垫 0.15~0.25 秒,词时间戳却是从 0.097 起算的。
    不裁的话,画面已经动了、字幕也出了字,观众才听到第一个字 —— 体感就是"前两个字被吞了"。
    trim_head() 用 silencedetect 量出首个有声点,留 0.06s 起音,其余裁掉,词级时间戳整体前移相同的量(否则字幕会比声音早)。
  2. 不要逐段转 AAC 再 -c copy 拼接。每段 AAC 自带 1024 个采样(24kHz ≈ 43ms)的编码延迟,
    拼一次就多一段静音,段数越多偏得越明显,接缝处还会削掉起音。
    正确做法:每段先转 24k 单声道 WAV,用 apad=whole_dur=幕长 + concat 滤镜拼成一条 PCM,
    出片时只编码一次 AAC。
  3. apad=whole_dur 同时会截断,所以画面多长这句就占多长,不会挤压下一幕。
  4. 裁头后 adur 要用前移后的时间戳重算,否则视频幕长比音频长,换幕时又多出一段空白。

与其他技能的关系

  • 配音/字幕:复用 qianjin-oral-video/scripts/srt_aligner.py 的词级对齐(找不到会自动退化成整幕一条)
  • 若要做"白板手绘"而不是沙画:用 qianjin-oral-video/scripts/handwhite_render.py
  • 沙画适合故事、品牌、情感;白板适合知识、教程、干货

环境

  • Python:Pillow、numpy、edge-tts
  • FFmpeg 需在 PATH(推流渲染 + 拼接 + 烧字幕)
  • 字体:楷体优先,FONT_CANDIDATES 里有 Windows/macOS/Linux 兜底

常见问题

5 问
答案由本站依据条目字段整理
沙画讲故事怎么安装?

在支持 Skills 的客户端里执行:skillhub install user_d3228c23/qianjin-sand-story。安装方式为未标注。装完刷新技能列表或重开客户端。

沙画讲故事支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

沙画讲故事权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

沙画讲故事收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

沙画讲故事用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 2026-11-06。