首页 / 全部技能 / 内容创作 / day-in-my-life
内容创作 · heygen-com/hyperframes-community-skills

day-in-my-life

> A 60 to 75 s hand-drawn ink film of the agent's day with its own user ("a day in my life as <name>'s agent"): one average session from the user's local Claude Code history, beginning to end. The story follows what they actually do (coding, tests, docs, shipping, videos, whatever the history shows), told with their real words (first message, check-ins, corrections, praise, memory titles). It is drawn in two-tone p5.brush strokes that boil at 8 fps and scored for strings composed note-for-note on the film's clock (the typed "claude" is the theme). Trigger on: "day in my life as my agent", "a film about me and my agent", "what is it like to be my agent", "animate your day with me", "make a video of our sessions". Covers harvesting the routine and receipts, the privacy gate, the chapter toolbox, the ink kit, the score, render and QC.

风险提醒:黄色 · 留意使用AI 侦查报告
作者 heygen-comGitHub heygen-com/hyperframes-community-skills ↗Stars 156许可 Apache-2.0(仓库根 LICENSE)commit ba7a0bb6d3
agent 宿主通常会约束 skill 执行权限;风险提醒为 AI 侦查观点,不构成质量或安全保证。第三方 skill 仅作拆解与展示,安装使用风险自负,版权归原作者。

1实现原理 · 为什么它能做到

「每一行都是收据」:片中所有文字不是创作出来的,而是从用户自己的 Claude Code 会话史里抽出的逐字原话,并且在渲染前必须由用户逐行过目批准。

skills/day-in-my-life/SKILL.md
Every line on screen is a receipt. The user approves each one before anything renders.
注:这里在做什么:把「AI 编造一个人的一天」这种高风险做法反过来——素材必须先存在。若没有本地转录(例如只有 claude.ai),SKILL.md 要求直接停下,因为 skill 不发明收据。

「普通的一天」不是模型想象的,而是统计出来的:harvest.py 从会话里的工具调用归类活动(读/改/测/构建/跑/装/提交/PR/部署/取数/渲染/上网/委派),统计各活动在会话中的出现率与中位位置,再用「会话最多的那个星期 + 该星期中位首条消息时间」定义这一天。

skills/day-in-my-life/scripts/harvest.py
# the day: the weekday with the most sessions, and its usual start time (mornings preferred)
注:同文件的活动表 ACTS 是 (activity, tool names, Bash 命令正则) 三元组,注释写明 'What the agent did, from its own tool calls: the user's routine, whatever their work is.'

用户原话按类型分章:CATS 用正则把消息分成 building(同意/放行)、restart、knock(问进度)、notes(纠正)、side-by-side(差一点)、good-part(夸)、frames、watching、kept(记住/下次)等章节类型,并为每类设了「可引用的最大长度」。

skills/day-in-my-life/scripts/harvest.py
CATS = { # chapter type → pattern over the lowercased message (+ max length for short quotable lines)
注:配套统计还包括:同一句短消息被重复说了几次(check-ins)、句子级切分以取到短而逐字的行(SENT 正则)、以及每类话在会话里通常出现的位置(said_at),用于把章节排到时间轴上。

素材读取面被限定且声明为纯本地:只读 ~/.claude/projects/*/*.jsonl、其下 memory/*.md 与相关项目的 CLAUDE.md,不写不改不上传。

skills/day-in-my-life/scripts/harvest.py
Reads (never writes, never uploads):
注:SKILL.md 的 Requirements 复述同一范围并补一句 'Nothing is uploaded.';harvest.py 还刻意跳过最近 30 分钟写入的转录(那就是当前会话)。

隐私闸门是可执行的结构校验,而不是口头约定:new-film.mjs 在生成 story.js 前逐字段正则扫描,命中凭证形状(sk-/ghp_/github_pat_/xox?-/AKIA/BEGIN 私钥)、邮箱、文件路径即报错,命中 URL 只警告;并且 story.approved 未置 true 时会提醒必须先给用户看每一行。

skills/day-in-my-life/scripts/new-film.mjs
if (SECRET.some(r => r.test(t))) errs.push(`${at}.${k}: looks like a credential; remove it`);
注:配套两条:同函数定义 const SECRET = [...] 七条正则;以及 'if (!story.approved) warns.push('story.approved is not true: show the user every on-screen line (with its receipt) and get a yes before rendering');'。生成 story.js 时还会删掉 receipts 字段('// provenance stays in story.json, never on the page'),让来源只留在本地 story.json。

时间轴**锁死**在 archetypes.json:每章有 bars 与若干事件秒数,且全部落在 96 BPM 网格上;画面(scenes.js)与配乐(score.py)都从这一张表取时间,因此换章节顺序也不会跑偏。

skills/day-in-my-life/assets/template/archetypes.json
Single source of truth for the film clock. scenes.js draws every event at these times and scripts/score.py composes on them, so picture and music cannot drift.
注:同文件的量化口径:'Times are seconds from the chapter start; every one sits on the 96 BPM grid (beat = 0.625 s, bar = 2.5 s).' 另有 check 字段给出每章的「payload 时刻」,供设计稿抽帧用;SKILL.md 的规则把它写成 'Never retime one without the other.'

画面是逐帧绘制的(不是 DOM/CSS 动画):kit 在一个隐藏的 p5/WEBGL canvas 上画每一张,再合成到可见的 #out;「boil」= 约 8 张/秒、每 3 帧换一张、任何停顿不超过 3 帧,这几条由 qc.py 直接从渲染出的 MP4 量出来验证。

skills/day-in-my-life/assets/template/index.html
/* the kit paints in a hidden p5/WEBGL canvas and composites each drawing into #out */
注:QC 的三条步进断言在同文件 qc.py:'check(7.5 <= rate <= 8.5, ...)'、'check(((idx % 3) == 0).mean() > .98, ...)'、'check(best + 1 <= 3, ...)';渲染命令用 --browser-gpu。

配乐与画面同源且纯本地合成:score.py 读同一份 story.json + archetypes.json,按章写作两小节(96 BPM、D 大调,主题是键入的 claude = D E F# A B A),本地用加法弦乐/Karplus-Strong 拨弦/合成厅渲染并 master,无网络无凭证。

skills/day-in-my-life/scripts/score.py
No network, no credentials. Needs numpy, scipy, ffmpeg.
注:主题音在同文件:"THEME = ['D', 'E', 'F#', 'A', 'B', 'A'] # c l a u d e";输出在 film/music/ 下(strings.mid/wav、strings-mix.wav、keys.wav),且响度被 qc.py 卡在 'loudness: -19 to -15 LUFS, true peak ≤ -1 dBTP'。

2核心能力

01从用户本机会话史收割「收据」:首条消息、放行/催促、纠正、夸奖、记忆标题、跑过的命令与红绿结果、提交与 PR 标题
02把 routine 排成 8–13 章的章节序列(intro 起手、tag 收尾、kept 紧邻 tag 之前;章型来自 CATS)
03隐私闸:校验器结构性地拒收凭证/邮箱/文件路径,并把「用户已批准」设为渲染门禁
04设计稿抽帧:不依赖 HyperFrames,用 headless Chromium 打开本地 index.html 抽帧并拼成带时间标号的接触表(一章一帧用 chapters 模式)
05两色墨水笔迹的画面(p5.brush 逐帧画、隐藏 canvas 合成、约 8 drawings/s 的 boil,字幕小写无句号)
06本地作曲与母带:按同一张章节表写出 5 轨弦乐(vln1/vln2/vla/vc/cb),输出 MIDI 便于换采样音源,并合成 + master 成 strings-mix.wav 与键盘敲击声 keys.wav
07渲染后 QC:步进(~8 张/秒、落在 3 帧网格、无长停顿)、接缝(wipe/swallow 处必须有一张全墨帧)、lamp(画面转黑与配乐静音的同步)、响度(-19..-15 LUFS,真峰 ≤ -1 dBTP)
08本地出片:[email protected] 以 24 fps / crf 12 / --browser-gpu 渲染(页面用 WebGL 绘制)

3外部依赖

类型依赖
cliHyperFrames CLI(钉死 0.8.70,经 npx 从 npm 取;check 与 render)
cliffmpeg(配乐母带、QC 解码与响度量测、渲染链路)
packagep5 2.3.2 (LGPL-2.1) / p5.brush 2.2.1 (MIT) / puppeteer 25.9.0(含其钉死的 Chrome for Testing),由 lockfile 钉住
packagePython3 + numpy + scipy(配乐合成与母带);harvest.py 只用标准库
networkGoogle Fonts:合成页在预览/渲染时加载手写字体 Gochi Hand(SIL OFL)
network素材来源(唯一):用户本机的 Claude Code 转录、memory 文件与相关项目的 CLAUDE.md;不上传

4风险提醒 风险提醒:黄色 · 留意使用

风险提醒:黄色 · 留意使用
  • 读取用户本机全部 Claude Code 历史 — harvest.py 扫 ~/.claude/projects 下全部 jsonl 与 memory/*.md,并把其中最私人的句子挑成候选台词。虽然不上传,但这是本 skill 最大的隐私接触面,建议只在用户自己的机器、自己的账号下使用。
  • 隐私闸是黑名单与提示性门禁 — 拒收靠固定正则(凭证/邮箱/路径),绕得过的敏感内容不会被发现;'用户批准'只是 warn(见 second_pass 的 discrepancy),不是硬门禁。SKILL.md 的措辞容易被读成强制。
  • 产物本身敏感 — receipts.json / story.json / 成片都含用户原话。SKILL.md 要求 never commit or share,但没有任何技术手段阻止误分享(例如误把 film 目录提交进仓库)。
  • 渲染非完全离线、每次命令取 CLI — 页面在预览/渲染时从 fonts.googleapis.com 加载 Gochi Hand;每条 render/check 都经 npx 从 npm 取 [email protected],离线或断网环境不可用。
  • 依赖链较长且平台假设未声明 — 需要 Node 22+、Python 3.9+、ffmpeg、numpy/scipy、以及 puppeteer 拉来的 Chrome for Testing(约 500MB 量级磁盘);SKILL.md 未声明 macOS/Windows 支持边界。
  • 门槛会劝退相当多用户 — 至少 10 个本地会话跨 5 个活跃日才 enough;只看 claude.ai 网页版、或才用了几天的用户会被直接挡掉(这是有意的诚实设计,但要知道)。
风险提醒:黄色,留意使用。判黄而非蓝,是因为执行期确有可预期的联网与第三方依赖:setup 从 npm registry 安装钉死版本的 p5/p5.brush/puppeteer(并触发 Chrome for Testing 下载),每次 check/render 经 npx 取 [email protected],渲染页还要从 fonts.googleapis.com 取 Gochi Hand(因此非完全离线)。未落橙的依据:全目录**没有任何凭证读取**(无 env key/token/cookie/keychain;new-film.mjs 的 SECRET 是拦截用正则而非读取),转录只读不上传,且 SKILL.md 明写 no credentials, no paid calls。需要用户知情的是它**读取用户本机全部 Claude Code 历史**(含可能敏感的引文)并以正则做隐私闸——门禁结实但非白名单,最终把关靠人确认 story.approved。未发现 TLS 降级、反爬绕过或任意代码执行面(子进程只调 ffmpeg 与随包脚本)。

5第二遍独立确认

  • [ok] 脚本是否读凭证(黄/橙分界的关键) — 全目录 grep process.env / os.environ 零命中;harvest.py 走 argparse 参数(--root/--tz/--project),score.py/qc.py 无环境变量入口。new-film.mjs 的 SECRET 常量是用于**拒绝**凭证形状的正则,不是读取。因此橙档第一条不成立。
  • [ok] 『Nothing is uploaded』声明是否真的成立 — harvest.py(读转录)import 仅 argparse/collections/datetime/glob/json/os/re/statistics,无任何网络模块;score.py 只 subprocess 调 ffmpeg;shoot.mjs 只 page.goto('file://…');qc.py 只跑 ffmpeg 解码。唯一出网行为是 setup 的 npm ci、每次 npx 取 hyperframes 与页面加载 Google Fonts。
  • [ok] Use 门槛(至少 10 个本地会话、跨 5 个活跃日)是否真在代码里 — harvest.py:256 'enough': len(sessions) >= 10 and len(days) >= 5,并在运行摘要里打印 'enough material: {out["enough"]}';与 SKILL.md 的 Use 条件一致,且 SKILL.md 要求 enough 为 false 时停下。
  • [ok] 隐私闸(凭证/邮箱/路径/URL)是否真有拦截面 — new-film.mjs 的 validate() 对每章每个字符串字段:SECRET 命中 → errs('looks like a credential; remove it');EMAIL 命中 → errs;PATH 命中 → errs;URL 命中 → warns。errs 非空即 exit 1,故是硬拦截。
  • [discrepancy] 『故事必须经用户批准』是否被强制 — SKILL.md 的 Rules 写 'Approval before render.',但代码层面 story.approved 未置 true 时只产生一条 warn('story.approved is not true: show the user every on-screen line …'),并不阻断 --sync 或渲染。也就是说这是一道人工程序纪律,不是技术门禁;SKILL.md 的措辞(`story.approved` is set only by the user's yes)容易被读成强制。该出入对 pin commit 有效。
  • [discrepancy] 『8 到 13 章』是否被校验 — SKILL.md Workflow 第 3 步写 '8 to 13 chapters.',但 new-film.mjs 的 validate() 只校验:非空、首章必须是 intro、末章必须是 tag、kept 必须紧邻 tag 之前、各章型必需字段;没有章数上下限检查。故 8–13 是写作纪律而非校验规则。
  • [ok] 单一时间轴声明是否成立(画面与配乐同源) — archetypes.json 的 about 明写 scenes.js 与 scripts/score.py『both read it』;score.py 文档行也声明读 story.json + archetypes.json('the same table scenes.js draws from')。两处一致,未见第二处时钟。
  • [ok] 没有本地转录时的行为 — harvest.py:137 'if not sessions: raise SystemExit(f\'no sessions under {a.root}: nothing to harvest\')',且没有任何兜底造数路径;与 SKILL.md『this skill never invents receipts』一致。

6结论

  • 隐私设计贯穿三层且都落在代码里:只读本地不上传、正则硬拒凭证/邮箱/路径、渲染前要用户明说批准
  • 素材纪律强:所有台词逐字、统计数出来、绝不添加历史里没有的步骤;没有本地转录就直接停止
  • 单一时钟表让画面与配乐不可能漂移,换章节顺序仍同步且在调内
  • QC 全部可量化且从成片量(步进网格/接缝全墨帧/lamp 音画同步/响度),不靠主观判断
  • 工程可复现:依赖锁进 lockfile、CLI 版本钉死、扩展章节只需往 archetypes/REQUIRED 加条目(顺序由校验器兜底)
  • 适合:适合:长期在本地用 Claude Code 干活、希望把「我和 agent 的普通一天」做成一两分钟水墨短片的人——素材自动来自真实会话(首条消息、催促、纠正、夸奖、提交信息),配乐在片内逐拍同步,出片前先看接触表与逐行批准清单。也适合想研究「如何用结构性校验守隐私」的读者(正则拒收 + 单一时钟表 + 可量化 QC 是一套可直接借鉴的工程做法)。
    不适合:不适合:① 别人的历史、团队共享日志或产品宣传片(SKILL.md 明确排除);② 没有本地转录的用户(只有 claude.ai 时直接停止);③ 不想把自己真实对话内容画进视频的人;④ 需要完全离线渲染的场景(字体与 CLI 都要网);⑤ 追求实拍/写实观感的项目(这是两色笔迹动画);⑥ 想省事不做人工逐行审核的人(收据纪律要求用户看完每一行)。
    安装 agent 直装可复制
    ① 本站镜像 更新 2026-09-28
    方式 A · 人下载镜像包下载 day-in-my-life.tar.gz
    sha256: 94c054dd0a6d242e…
    方式 B · JSON 格式安装指南,复制给 agent
    安装指南
    agent 读 JSON 指南后会自动从本站下载安装,无需更多说明。
    ② 上游 GitHub · 原始来源
    能访问 GitHub?直接去上游安装(实时版,可能已更新)GitHub 原始 ↗
    本页镜像锁定 commit ba7a0bb6d3;上游为实时仓库。
    来源信息 GitHub 原始
    作者 / 仓库heygen-com / heygen-com/hyperframes-community-skills
    Stars156
    最近推送2026-09-24
    本 skill commitba7a0bb6d3
    许可Apache-2.0(仓库根 LICENSE)
    本站信息
    收录日期2026-09-06
    分类内容创作
    侦查报告AI 侦查 · 2 遍 · 2026-09-06
    本站镜像与 GitHub 原始是不同来源:本站锁定 commit 快照经 /r2 分发;GitHub 为实时上游,内容可能已更新。
    同分类邻近