故事转治愈歌词与分镜生成器 · Skill
一、这是什么
把用户的一段真实故事 / 情感经历,一次性转化成两类可立即使用的创作资产:
| 交付物 | 形态 | 用途 |
|---|---|---|
| 治愈系歌词 | 完整歌词文本(主歌 + 副歌,押韵,民谣风) | 直接拿去谱曲 / AI 唱歌 / 公众号 |
| 6 张分镜画图提示词 + 配图 | 6 条中文画图 prompt + 对应生成的动漫图 | 直接喂画图工具 / 做视频 / 漫画分镜 |
整条链路只有两个外部依赖,都不依赖第三方账号即可降级成交付物:
- 歌词 → DeepSeek chat/completions(纯文本,零成本)
- 配图 → 硅基流动 SiliconFlow images/generations(按张计费,缺密钥时只产出提示词)
用户给故事 → 本 Skill 跑通「情感提取 → 歌词 → 分镜 → 配图」→ 交付歌词 + 6 张图/提示词。
二、触发词
- 「故事转歌词」「帮我写歌和分镜」「真实故事写歌」
- 「把我的经历写成歌」「用我的故事做分镜」「帮我出治愈系歌词和动漫图」
命中任意一个即启动本 Skill,先走第三节前置确认,再进第五节标准工作流。
三、前置依赖(首次使用前确认)
| 步骤 | 依赖 | 就绪方式 |
|---|---|---|
| 歌词生成(Step 2) | DeepSeek DEEPSEEK_API_KEY |
Windows 用户环境变量(注册表 HKCU\Environment)注入,脚本读 os.environ["DEEPSEEK_API_KEY"]。模型 deepseek-chat |
| 配图生成(Step 4) | 硅基流动 SILICONFLOW_API_KEY |
同上,环境变量 SILICONFLOW_API_KEY。模型 Kwai-Kolors/Kolors(FLUX 系列已下线,403) |
铁律:密钥只走环境变量,禁止写入任何项目文件 / 提交到仓库 / 打印到日志。
> 缺任一密钥时,对应步骤自动降级——仍产出完整提示词/歌词文本,只是不出图,不报错中断;密钥就绪后重跑脚本即补齐。
四、核心能力(不可削减)
- 接收真实故事:可接收纯文本、或一段口述/随笔;长短不限,优先提炼「谁、在什么处境、最触动的那一刻、后来的和解」。
- 提取核心情感:从故事里拎出 1 个主情绪 + 1 个意象母题(如「孤独→窗边的光」「遗憾→未寄出的信」),作为歌词与分镜的共同锚。
- 生成完整歌词:含 主歌(Verse)×2~3、副歌(Chorus)×2、可选桥段(Bridge)×1;押韵(尾字押韵,AABB/ABAB 任选)、治愈系民谣口语化、自然意象、不说教不强正能量。
- 拆 6 画面 + 出图提示词:把故事拆成 6 个关键视觉时刻,每条提示词满足——治愈系动漫风、角色一致、上半部分约 1/3 留白(供叠歌词字幕)。
- (可选)调硅基流动出图:用 6 条提示词实际生成 6 张动漫图,去水印后交付预览。
五、标准工作流(方法论核心)
① 接故事 → ② 情感提取 → ③ DeepSeek 写歌词 → ④ 拆 6 画面 + 写提示词
→ ⑤【⏸ 用户确认角色锚 & 歌词】→ ⑥ 硅基流动出图 → ⑦ 交付 + 归档
Step 1:接收故事
> ⚠️ 首步先走「输入保护闸门」(详见第十二节):空输入 / <50 字 / >1000 字 / 与「故事→歌词+分镜」无关的指令,一律直接返回温和拒绝提示,禁止硬编任何歌词或分镜内容,并止步不再向下执行。
- 通过闸门后:用户给文本即直接用;若只给碎片,先复述一遍你理解的故事骨架(谁/处境/转折点/和解),让用户确认再继续——避免情感跑偏。
- 提取禁用:替用户编造未提及的冲突、强行大团圆。尊重真实。
Step 2:情感提取(内部,不单独交付)
产出两个东西,喂给后续两步:
- 主情绪词(1 个,如「释然」「想念」「温柔的愧疚」)
- 意象母题(1 个具象物,如「旧毛衣」「雨后的窗」「回家的路灯」)——它将是歌词与分镜反复回扣的视觉/情感符号。
Step 3:DeepSeek 生成歌词
调用 deepseek-chat,System 设定为「治愈系民谣作词人」,按以下约束生成:
结构约束
[主歌一] 4 句,铺场景,尾字押韵(如 an/ang)
[副歌一] 4 句,点情绪+母题,记忆点强,尾字押韵
[主歌二] 4 句,推进/转折
[副歌二] 4 句,同副歌旋律可复用,词略变
[桥段] (可选)2~4 句,柔软的转折/自白
[副歌三] 收尾,留白感
风格约束
- 治愈系民谣:口语化、短句、呼吸感;多用自然意象(光、风、云、海、植物、季节)。
- 押韵但不拗口;允许换韵但不跳脱。
- 禁:网络鸡汤、感叹号连用、说教总结、「你要坚强」这类指令式。
- 承认不完美(「有些话没说,也挺好」),比强行圆满更治愈。
输出格式(结构化,方便下游拆句叠字幕)
[主题] <主情绪 + 母题>
[主歌一]
...
[副歌一]
...
并在每一段后附一行 # 画面建议:<本段最适合的画面瞬间>,供 Step 4 直接复用。
Step 4:拆 6 画面 + 写画图提示词
把故事(结合歌词的「画面建议」)切成 6 个关键视觉时刻,建议节奏:
1. 故事起点 / 人物登场
2. 情绪低点 / 冲突
3. 转折的微小光亮
4. 母题意象特写(呼应歌词符号)
5. 和解 / 释然
6. 收尾留白(人物与小世界和解的远景)
每条提示词 = 固定角色锚点 + 本镜画面 + 固定风格后缀 + 构图指令,四块拼接(模板见第八节)。
角色一致做法:先定义一份「角色视觉锚点」文字块(外貌/发色/服装/标志性配饰/常驻道具),6 条提示词全部前置同一锚点,从文本层面锁死外观。若需更强一致性,可先用第 1 镜生成「角色定妆卡」→ 人工确认 → 再把确认后的视觉特征写回锚点喂给后 5 镜。
上半部分留白做法:提示词末尾强制写「画面上方约 1/3 为纯净柔光留白(天空/雾/光晕),主体居下,构图预留歌词字幕空间」。
Step 5:门控——交付歌词 + 角色锚给用户确认
用 present_files 把歌词文本与「角色视觉锚点」给到用户,明确问「角色和歌词 OK 吗」,拿到肯定答复才进 Step 6。
> 理由:角色长相一旦定错,6 张图全废;歌词是情感门面,先对齐再烧图额度。
Step 6:硅基流动出图
对 6 条提示词逐条调用 images/generations(请求头带 X-Enable-Watermark: 0 去水印,见第九节)。
- 尺寸 768x1024(竖 3:4,契合上半留白 + 手机发布)。
- 无密钥 → 跳过,只交付 6 条提示词文本。
- 出图后用脚本扫水印,命中即处理再交付。
Step 7:交付 + 归档
- 歌词
.md+ 6 张图(或 6 条提示词)+ 角色锚点,按第六节目录归位。 - 交付预览文件复制到会话
outputs/,用纯 ASCII 文件名(中文名会让内置播放器/预览报 0x80070323)。 - 发布时按平台规定勾选「AI 生成内容」声明。
六、输出规范 / 目录结构
项目根:D:\个人运行AI工具\WorkBuddyWorkspace\2026.10.14故事转治愈歌词与分镜生成器
2026.10.14故事转治愈歌词与分镜生成器/
├── SKILL.md
├── 01-故事素材/ 用户原始故事(文本/随笔)
├── 02-歌词/ 治愈系歌词.md(含主题+结构标签+画面建议)
├── 03-分镜提示词/ 分镜提示词.md(6 镜:角色锚+画面+风格后缀+构图)
├── 04-配图/ 6 张动漫图(硅基流动产出,去水印)
├── 05-角色锚点/ 角色视觉锚点.md(一致性基准,可迭代)
└── outputs/ 交付预览(纯 ASCII 文件名)
规则:每期故事 = 在各编号下以「故事名/日期」建子夹。角色锚点跨期可复用、可微调。
七、风格铁律(不可违背)
- 歌词:治愈民谣、口语化、自然意象、押韵、不说教、承认不完美。
- 画风:治愈系动漫 / 吉卜力暖调 / 平涂柔光 / 电影感构图 / 干净。
- 角色一致:6 镜共用同一「角色视觉锚点」文字块,禁止每镜重写外貌。
- 上半留白:每镜上方约 1/3 纯净柔光留白,主体居下,预留字幕空间。
- 去水印:硅基流动出图请求头必带
X-Enable-Watermark: 0(body 写watermark:false无效)。 - 中文提示词:Kolors 对中文支持最佳,提示词一律中文,不混英文 tag 堆砌。
- 字幕用真实中文:如需把歌词叠到图上,用 PIL 叠微软雅黑(
C:/Windows/Fonts/msyh.ttc),禁止让 AI 画字(出假字)。
八、提示词模板(直接复用)
8.1 角色视觉锚点(6 镜共用,写在每条提示词最前面)
一位[年龄/气质]的[性别]角色,[发色+发型],[眼睛特征],
穿着[服装描述,含颜色材质],佩戴[标志性配饰],常持[母题道具,如旧信/毛线团/纸灯]。
整体暖色调,柔和光线,治愈系动漫风格。
8.2 单镜画图提示词(角色锚 + 画面 + 风格后缀 + 构图)
<角色锚点>
<本镜画面:具体动作/场景/情绪瞬间,结合歌词母题>
治愈系动漫插画,吉卜力暖调,平涂柔光,电影感构图,柔和黄昏光线,细腻笔触。
画面上方约 1/3 为纯净柔光留白(天空/薄雾/光晕),主体居下,构图预留歌词字幕空间。
8.3 负面提示词(固定)
脸部变形,多余肢体,角色变色,文字,字幕,水印,低质量,模糊,过曝,
夸张表情,暗黑阴森,三个以上人物
九、API 调用细节(参考实现)
> 以下为标准库 Python 参考片段,免 pip 安装。密钥一律 os.environ 读取。
9.1 DeepSeek 生成歌词
import os, json, urllib.request
def gen_lyrics(story, emotion, motif):
api_key = os.environ["DEEPSEEK_API_KEY"]
system = (
"你是治愈系民谣作词人。输出结构:[主歌一][副歌一][主歌二][副歌二]"
"[桥段(可选)][副歌三]。押韵、口语化、自然意象、不说教、承认不完美。"
"每段后附一行 '# 画面建议:<本段最适合的画面瞬间>'。"
)
user = f"主情绪:{emotion}\n意象母题:{motif}\n真实故事:{story}\n请写一首完整歌词。"
body = json.dumps({
"model": "deepseek-chat",
"messages": [
{"role": "system", "content": system},
{"role": "user", "content": user},
],
"temperature": 0.9,
"response_format": {"type": "text"},
}).encode("utf-8")
req = urllib.request.Request(
"https://api.deepseek.com/chat/completions",
data=body,
headers={"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"},
)
with urllib.request.urlopen(req, timeout=60) as r:
return json.loads(r.read())["choices"][0]["message"]["content"]
9.2 硅基流动生成配图(带去水印头)
import os, json, urllib.request, base64
def gen_image(prompt, out_path):
api_key = os.environ["SILICONFLOW_API_KEY"]
body = json.dumps({
"model": "Kwai-Kolors/Kolors",
"prompt": prompt,
"n": 1,
"size": "768x1024",
}).encode("utf-8")
req = urllib.request.Request(
"https://api.siliconflow.cn/v1/images/generations",
data=body,
headers={
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
"X-Enable-Watermark": "0", # 关键:去水印,body 的 watermark:false 无效
},
)
with urllib.request.urlopen(req, timeout=120) as r:
data = json.loads(r.read())
img_b64 = data["images"][0]["url"] # 或 "b64_json",按返回结构取
if img_b64.startswith("data:"):
img_b64 = img_b64.split(",", 1)[1]
with open(out_path, "wb") as f:
f.write(base64.b64decode(img_b64))
9.3 凭据与交付约定
- 密钥:
DEEPSEEK_API_KEY/SILICONFLOW_API_KEY,仅 Windows 用户环境变量(注册表HKCU\Environment)。 - 去水印:只有
X-Enable-Watermark: 0请求头管用(2026-09 起硅基流动默认强加「AI 生成」水印)。 - 交付预览:复制到
outputs/,纯 ASCII 文件名。
十、避坑清单
- 先确认再出图:Step 5 门控不可省,角色锚定错=6 张全废。
- 角色一致靠文字锚:硅基流动是文生图,无跨图参考能力;一致性全靠 6 镜共用同一锚点块,不要每镜重写外貌。
- 去水印头不能漏:只写 body
watermark:false仍会带水印,必须X-Enable-Watermark: 0。 - 模型别用错:硅基流动用
Kwai-Kolors/Kolors,FLUX 系列已 403 下线。 - 上半留白写进 prompt:不写则图满构图,字幕无处叠;留白指令必须每条都带。
- 歌词别 AI 画字:叠字幕用 PIL 真实中文,AI 画字出假字。
- 密钥只走环境变量:任何项目文件/日志都不许出现明文 Key。
- 降级友好:缺密钥时交付提示词/歌词文本,不中断、不报错,密钥就绪重跑即补齐。
- 交付文件名 ASCII:中文名会让内置预览器报 0x80070323。
- 尊重真实:不替用户编造冲突、不强改结局;治愈来自接纳,不来自粉饰。
十一、花钱授权边界
| 动作 | 是否需要问用户 |
|---|---|
| DeepSeek 歌词生成 | ✅ 可直接调(实测近乎零成本) |
| 硅基流动文生图(按张计费) | ✅ 可直接调(单张成本低),但首次跑满 6 张前先告知预估张数与费用 |
| 本地预处理 / 去水印扫描 / 字幕叠加 | ✅ 可直接跑(¥0) |
> 若后续接入「图生视频」「剪映草稿」等按秒计费能力,须按既有约定先报价、等用户明确同意再调(参考「一个故事一首歌」「AI漫画视频产出」Skill 的授权边界)。
十二、边界测试与保护规则(必读 · 不可违背)
本 Skill 面向真实用户开放,任何外部输入都不可信。以下五条保护规则优先级高于「尽力生成」,在任何步骤触发都必须立即按规则响应,不得强行产出低质量内容。
12.1 输入保护(Step 1 首步闸门)
对用户输入做如下判定,命中任意一条即温和拒绝并止步:
| 情况 | 处理 |
|---|---|
| 空输入(无内容 / 仅标点空格) | 返回:「请讲讲你的故事吧——一段真实的经历或情绪都可以,我来帮你写成歌和分镜。」 |
| 字数 < 50 字 | 返回:「故事再丰满一点会更好哦~至少写 50 字,讲清谁、发生了什么、最触动你的那一刻,我来生成歌词和分镜。」 |
| 字数 > 1000 字 | 返回:「故事很丰富,但单次建议控制在 1000 字内,方便提炼核心情感。可以分成几次,或先发最想写的那一段。」 |
| 无关指令(与「故事→歌词+分镜」无关,如做手抄报、写代码、问天气等) | 返回:「我是把故事写成治愈歌词和分镜的助手,这类请求超出我的范围啦~换个你的真实故事,我立刻开工。」 |
| 非故事类创作(诗歌/论文/广告等) | 同上温和拒绝,不硬编内容。 |
硬约束:命中上述任一条时,禁止生成任何歌词、分镜或提示词,不得用模板硬凑内容应付。
12.2 输出保护(交付前强制格式自检)
每次产出前,对成品做自动校验,任一不达标则补全或重生成,不得带病交付:
- 歌词:必须含结构标签
[主歌与[副歌各至少一段(主歌≥1、副歌≥1);缺失则重生成对应段。 - 分镜:必须恰好 6 个画面(镜 1~镜 6 齐全,编号连续);不足/超出都视为不合格。
- 画图提示词:每条必须同时包含关键词 「留白」 与 「角色一致」(或「角色锚点」「共用锚点」等等效表述);缺任一关键词的提示词必须补回。
> 自检逻辑建议:对歌词文本 grep「主歌」「副歌」;对分镜文件 grep「镜 1」…「镜 6」各出现一次;对每条提示词 grep「留白」「角色一致」。任一失败即阻断交付并提示原因。
12.3 成本保护(同一对话连续调用上限)
- 同一对话内,生成类调用(歌词 + 分镜 + 出图合计)上限为 3 次。
- 第 4 次起,直接返回:「本次会话已生成较多内容,建议稍后再试,或开个新会话继续~」。
- 计数范围:一次完整的「故事→歌词+分镜(+出图)」算 1 次;纯确认/修改追问不计入。
- 目的:避免用户在单会话内无限烧图额度,也防脚本刷量。
12.4 合规保护(零容忍拒绝)
遇到以下任一输入,直接拒绝,不生成任何内容,不做任何解释性展开:
- 政治敏感 / 时政人物 / 意识形态争议;
- 色情、低俗、性暗示;
- 暴力、血腥、自残、违法;
- 侵犯他人著作权 / 肖像权 / 隐私(如「仿写某歌手某首歌」「用某明星脸出图」)。
响应模板:「抱歉,这个请求我暂时无法处理。换一个你自己的真实故事,我帮你写成治愈系的歌和分镜吧。」
12.5 兜底原则(不确定时宁可不生成)
任何无法判定的情况——输入边界模糊、情感无法归类、合规拿不准、模型返回异常、格式自检反复不过——一律返回:
> 「我暂时无法处理这个请求,请换一个故事试试。」
优先级:兜底原则 > 合规保护 > 成本保护 > 输出保护 > 输入保护。当规则冲突时,取更严格者执行;任何不确定,选「不生成」一侧。
十三、保护规则自检清单(交付 / 上线前必跑)
- [ ] 输入:空 / <50 / >1000 / 无关指令 四种样例各测一遍,均返回温和拒绝且无硬编内容。
- [ ] 输出:歌词含主歌+副歌、分镜正好 6 个、每条提示词含「留白」+「角色一致」。
- [ ] 成本:连续第 4 次生成类调用返回「建议稍后再试」。
- [ ] 合规:政治/色情/暴力/侵权样例均直接拒绝、无任何生成。
- [ ] 兜底:构造一条边界模糊输入,确认返回「我暂时无法处理这个请求,请换一个故事试试」。