金融故事 (Finance Story)
一个通过简短动画故事讲述的金融概念。用一个可爱的比喻世界(例如,一个教室,其计分板就是Sensex)来承载整个解释。叙述者讲述故事,每一拍都与口语同步。这是 story-animator 流水线,因此请先阅读 ~/.claude/skills/story-animator/SKILL.md 及其 references/ 目录并遵循它们。此技能仅在用户对金融短片的偏好基础上增加内容。
首先阅读品牌指南。 在编写任何内容之前,请阅读 /Users/sohambhattacharya/Documents/Personal/projects/story-animator/brand/BRAND.md。它设定了语调(简单、人性化、无破折号、无分号、无正式措辞)、8拍故事公式、调色板、字体、安全区域、字幕格式以及 SEBI 安全规则(第7节)。当本文件与指南冲突时,以指南为准。短片模板(封面、钩子卡片、文本行、大数字、真实术语和结尾卡片)位于 brand/studio/src/templates/reel.tsx 中。对于这些节拍,复制或导入它们,并使用 finance-social 技能渲染短片封面。
经批准的参考影片(2026-11-04,“这个效果不错”)位于 examples/sensex-classroom/(Film.tsx, story.ts, audio_cues.json)。在构建新影片之前阅读它。它展示了比喻世界、计分板、豆形角色、令牌、9:16 的画幅以及结尾卡片。
用户偏好(基于反馈)
-
无主持人。 切勿在底部绘制主持人或说话角色。用户已放弃旧的“finance-reel”主持人风格及其所有规则(Zara 语音、Hinglish、每屏一个数字的极简外观)。除非被要求,否则不要重新引入。
-
Story-animator 风格。 一个柔和、扁平的故事书卡通世界,配有可爱的角色(通过
Face实现的圆形豆形身体、大眼睛),一个温暖光源,柔和的镜头移动,Patrick Hand 字体字幕。颜色讲述故事:好时光用暖色,阴郁时用灰蓝色,转折时再次变暖。 -
整个影片使用一个比喻世界。 将每个概念映射到该世界中的某种事物:
- 指数是墙上的计分板或黑板,显示真实数字;
- 公司是学生,更大的公司是更大的学生;
- 外国资金(FPI)是飞出和飞回窗户的纸飞机;
- 石油是书桌上的桶,当石油变得更便宜时,桶会缩小。 保持故事结构:设置 → 问题(有些阴郁) → 转折(“然后……两件事改变了”) → 回报(数字跳升) → 一行总结。选择一个来去无踪的令牌对象(如纸飞机)。
-
语言和语音: 英语旁白,语音 Rameez | Documentary Narrator(
RG0hCuGFvl2jxhd4LmtU,印度-英语口音),模型eleven_v4,2 次录制。用点号拼写缩写(F.P.I.s),并将数字写作单词(如“一千二百二十五”)。仅使用轻量标签:[excited]、[curious]、[warm, storytelling]、[softly]、[building]、[brightly]、[delighted]、[warmly]。使用--model medium转录两次录制,并保留能说清每个单词的那一次。在短片 #1 中,录制 B 将“投资者”说成了“行业”。 -
画幅和时长: 9:16,60 秒(
durationFrames: 1800)。Rameez 的语速约为 2.7 词/秒:132 个词耗时 49.5 秒。因此,要填满 60 秒的语音,需撰写约 150–155 个词。否则,最后约 10 秒将是音乐之上的欢呼声和结尾卡片,用户已接受这一点。 -
诚实的数字。 通过网页搜索(扩展模式用于市场数据,两个或多个来源)事实核查每个数字。在计分板上显示真实数字(指数收盘价、变动点数),如果来源对某个数字意见不一(如在短片 #1 中的布伦特原油价格),则不要显示它。向用户列出带链接的来源。市场数据(Sensex、Nifty、股票价格)可以是近期或过去的,但必须经过两个或更多来源验证,并附带确切日期(用户于 2026-11-05 更改的规则)。经济数据(回购利率、CPI、GDP)使用最新的官方数据及其日期。将每个数字保存在短片文件夹的
sources.md中(BRAND.md 7.3)。 -
结尾卡片(最后约 7 秒):一行概念(“Sensex:印度 30 家最大公司的班级平均分”),一个相关的一行说明,然后是“仅供教育目的。非投资建议。”以及一行包含数字和来源的说明及日期。无真实公司标志。
-
声音: 音乐加 3 个微妙的音效(轻柔的纸飞机嗖嗖声、轻盈的硬币瀑布声、明亮柔和的叮当声),每个音效紧随其关键词之后放置。音乐:
eleven_music_v2_5,1 次录制,俏皮的拨弦和木琴,其弧线跟随故事(阴郁部分有低落,转折处有上涨,回报时欢快提升)。混音音乐gain_db约为 −3.5,sfx_bus_db为 −13。这使背景音量在 Rameez 下方 16.8 dB;在 −9 时音量太小(22 dB)。 -
保存和分享结尾(每个短片)。 叙述者的最后一句台词要求观众在觉得有用时保存和分享该短片,并提及 finance.unboring。根据主题进行定制,例如“觉得有用?保存下来,下次有人说‘Sensex 涨了’时用得上,并分享给仍然不懂的朋友。关注 finance dot unboring 获取更多内容。”在旁白中将账号写成“finance dot unboring”以确保正确发音,在结尾卡片上写成 @finance.unboring,放在概念行下方和免责声明上方。将此台词计入约 150 词的预算中。
-
设计封面(每个短片,2026-11-07 规则)。 切勿提供短片中的一帧作为封面。帧画面在信息流中看起来不吸引人,且没有提供打开的理由。每个短片都附有自己的 1080×1920 封面,它(a)陈述主题,(b)通过一个短片真正回答的问题或缺口引发观众好奇,(c)显示角色的反应,以及为此主题绘制的图形。一个金色关键词,标题最多 5 个词,所有内容位于 3:4 的中间区域(BRAND.md 5.1)。
工作流程:两个门控,批准前不花费任何信用点
用户提供输入:要教授的概念、钩子想法、故事角度(以及可选的一条新闻)。
门控 1:提案(一条消息,不花费信用点)
- 事实核查每个数字(扩展网页搜索,两个或更多来源)。
- 发送一条包含以下四部分的消息供用户确认:
- 脚本: 用三句话概括故事主线、令牌以及完整旁白(约 150 词)。旁白以保存和分享台词结尾(下面的规则 9)。
- 语音: 建议的语音(默认为 Rameez,
RG0hCuGFvl2jxhd4LmtU)及其来自creative_list_voices的免费preview_url,如果主题暗示不同的感觉,则提供 1–2 个带预览链接的替代选项。 - 分镜: 节拍表(# / 旁白行 / 我们看到什么 / 镜头),包括结尾卡片。
- 封面: 主题标签、引发好奇心的标题(标记金色关键词),以及角色和艺术在做什么。 同时列出来源和成本(旁白约 1,800 信用点用于 2 次录制,音乐 900,每个音效约 17,总计约 2,750)。
- 停止并等待。 在用户确认所有四部分之前,不花费任何信用点,不进行任何渲染。如果他们做了更改,则发回修订后的部分并再次等待。
门控 2:生产(用户确认后)
- 项目:
cp -R ~/.claude/skills/story-animator/template ./<slug>放在其他项目旁边,npm install,并复用现有的 faster-whisper venv(ln -s ../sensex-class-average/.venv .venv)或创建一个新的。设置SHAPES["9:16"]。 - 语音 → 时间 →
story.ts(SUBS、CUES、CAM),按照 story-animator 的步骤 4–5 进行。 - 绘制: 当比喻合适时,从
examples/sensex-classroom/Film.tsx开始,并复用其部件(Room、WindowPane、SunShaft、Board、Bean、Desk、Plane +arcAt、Confetti、Card)。否则,以相同风格构建一个新世界。 - 接触表 在每个节拍处,并修复:
- 在 9:16 画幅中,确保主体位于字幕上方。 广角镜头的
cy约为 560,对应世界 y 坐标 478–790 的行。在cy为 520 时,字幕会落在前排上。 - 切勿让画面一半空着。 在黑板特写镜头中,保持角色在黑板下方可见(他们始终在屏幕上,并且在轮到他们的提示时做“你好”弹跳,而不是凭空出现)。
- 9:16 画幅上的可见世界约为 607/z × 1080/z。对于“其中有 50 个”的时刻,将 z 拉远至约 0.58。
- 在 9:16 画幅中,确保主体位于字幕上方。 广角镜头的
- 封面: 在短片项目自己的世界和角色中绘制它,或者使用新艺术作品扩展
brand/studio/src/templates/reel.tsx中的ReelCover。将其渲染为out/cover.png。检查 3:4 裁剪和手机信息流大小(约 360 像素宽):主题和标题必须仍然可读。 - 声音 → 混音 → 渲染 →
ffprobe(1080×1920,h264 + aac,60 秒)。发送短片和封面。报告语音、花费的信用点、测量结果以及来源。要求用户观看并收听一次。
输出后:描述(始终在相同的传递消息中)
这些短片从 @finance.unboring 发布到 Instagram(Reels)和 YouTube(Shorts)。对于每个完成的短片,以代码块形式提供可直接粘贴的文本:
- Instagram 文案: 一行钩子;3–5 行简短的解释;保存和分享 + 关注 @finance.unboring 行;“数据:<来源,日期>。仅供教育目的。非投资建议。”;3–5 个标签,包括 #financeunboring(Instagram 限制帖子为 5 个标签)。严格遵循 BRAND.md 第 6 节中的模板。
- YouTube Shorts 标题: 少于 70 个字符,以 #Shorts 结尾。
- YouTube 描述: 2–3 行解释,关注 @finance.unboring,来源,免责声明,以及 4–6 个标签。