From 82b04cebad040e0c398f7fd73745e651ddb4ad63 Mon Sep 17 00:00:00 2001 From: xiaobian-bot Date: Fri, 8 May 2026 08:10:01 +0800 Subject: [PATCH] auto backup 2026-05-08 08:10:01 --- logs/backup.log | 54 ++++++ memory/.dreams/events.jsonl | 7 + memory/.dreams/short-term-recall.json | 188 +++++++++++++++++--- memory/2026-05-07.md | 31 ++++ output/U18_L5_Act3_draft.md | 116 ++++++++++++ output/U18_L5_Act3_draft.xlsx | Bin 0 -> 8551 bytes output/U18_L5_Act4_draft.xlsx | Bin 0 -> 6211 bytes output/U19-5_星际通讯_剧本.xlsx | Bin 0 -> 11886 bytes output/U19-5_星际通讯_完整剧本.xlsx | Bin 0 -> 14383 bytes scripts/export_act3_xlsx.py | 134 ++++++++++++++ scripts/export_u19_5_new.py | 143 +++++++++++++++ scripts/export_u19_5_to_excel.py | 47 +++++ 12 files changed, 694 insertions(+), 26 deletions(-) create mode 100644 memory/2026-05-07.md create mode 100644 output/U18_L5_Act3_draft.md create mode 100644 output/U18_L5_Act3_draft.xlsx create mode 100644 output/U18_L5_Act4_draft.xlsx create mode 100644 output/U19-5_星际通讯_剧本.xlsx create mode 100644 output/U19-5_星际通讯_完整剧本.xlsx create mode 100644 scripts/export_act3_xlsx.py create mode 100644 scripts/export_u19_5_new.py create mode 100644 scripts/export_u19_5_to_excel.py diff --git a/logs/backup.log b/logs/backup.log index bb04353..c06f8fb 100644 --- a/logs/backup.log +++ b/logs/backup.log @@ -1635,3 +1635,57 @@ To https://git.valavala.com/ai_member_only/ai_member_xiaobian.git From https://git.valavala.com/ai_member_only/ai_member_xiaobian * branch master -> FETCH_HEAD Already up to date. +[master 7765af7] auto backup 2026-05-07 08:10:01 + 47 files changed, 1651 insertions(+), 1 deletion(-) + create mode 100644 "business_knowledge/chapters/Level1/S1/00_\347\247\230\345\257\206\345\237\272\345\234\260.md" + create mode 100644 business_knowledge/characters/README.md + create mode 100644 business_knowledge/characters/main/Alex Wood.md + create mode 100644 business_knowledge/characters/main/Ben.md + create mode 100644 business_knowledge/characters/main/BoBo.md + create mode 100644 business_knowledge/characters/main/Clare Hope.md + create mode 100644 business_knowledge/characters/main/Dan Wood.md + create mode 100644 business_knowledge/characters/main/Eva Wood.md + create mode 100644 business_knowledge/characters/main/Fred Hope.md + create mode 100644 business_knowledge/characters/main/Grace Wood.md + create mode 100644 business_knowledge/characters/main/Kim.md + create mode 100644 business_knowledge/characters/main/Lily.md + create mode 100644 business_knowledge/characters/main/Lucy.md + create mode 100644 business_knowledge/characters/main/Matt.md + create mode 100644 business_knowledge/characters/main/Peter Wood.md + create mode 100644 business_knowledge/characters/main/Sally.md + create mode 100644 business_knowledge/characters/main/Sunny.md + create mode 100644 business_knowledge/characters/main/Vicky Wood.md + create mode 100644 business_knowledge/characters/supporting/Anna.md + create mode 100644 business_knowledge/characters/supporting/Mike.md + create mode 100644 business_knowledge/characters/supporting/Tom.md + create mode 100644 memory/2026-05-06.md + create mode 100644 "output/2026-05-06_U18L5_\345\267\245\344\275\234\346\227\245\345\277\227.md" + create mode 100644 output/U18_L5_Act1.xlsx + create mode 100644 output/U18_L5_Act2.xlsx + create mode 100644 output/space_mission_script.csv + create mode 100644 "output/\346\230\216\345\244\251\350\247\201_\345\211\247\346\234\254.xlsx" + create mode 100755 scripts/batch_fetch_lessons.sh + create mode 100644 scripts/export_script_tomorrow.py + create mode 100644 "tmp/lessons/U0-1_\345\207\206\345\244\207\345\245\275\345\225\246.md" + create mode 100644 "tmp/lessons/U0-2_\350\256\244\350\257\206\346\226\260\346\234\213\345\217\213.md" + create mode 100644 "tmp/lessons/U0-3_\347\264\247\346\200\245\344\277\256\347\220\206.md" + create mode 100644 "tmp/lessons/U0-4_\346\263\245\345\267\264\345\244\247\344\275\234\346\210\230.md" + create mode 100644 "tmp/lessons/U0-5_\346\243\256\346\236\227\346\225\221\346\217\264.md" + create mode 100644 "tmp/lessons/U1-1_\347\247\230\345\257\206\345\237\272\345\234\260.md" + create mode 100644 "tmp/lessons/U1-2_\346\225\231\345\256\244\346\200\252\350\260\210.md" + create mode 100644 "tmp/lessons/U1-3_\347\276\216\351\243\237\346\234\272\345\231\250\344\272\272.md" + create mode 100644 "tmp/lessons/U1-4_\346\200\252\345\205\275\346\215\211\350\277\267\350\227\217.md" + create mode 100644 "tmp/lessons/U1-5_\351\243\236\350\210\271\347\204\225\345\275\251.md" + create mode 100644 "tmp/lessons/U4-1_\351\232\220\350\227\217\346\233\262\347\233\256.md" + create mode 100644 "tmp/lessons/U4-2_\350\260\201\346\230\257\345\244\247\350\203\203\347\216\213.md" + create mode 100644 "tmp/lessons/U4-3_\347\227\205\346\257\222\345\244\247\344\275\234\346\210\230.md" + create mode 100644 "tmp/lessons/U4-4_\345\256\235\350\227\217\347\214\216\344\272\272.md" + create mode 100644 "tmp/lessons/U4-5_\351\261\274\347\216\213\344\272\211\351\234\270.md" +remote: . Processing 1 references +remote: Processed 1 references in total +To https://git.valavala.com/ai_member_only/ai_member_xiaobian.git + 58fbac6..7765af7 master -> master +{"code":0,"data":{"body":{"content":"{\"text\":\"✅ 小编Workspace每日自动备份完成(2026-05-07 08:10)\\n提交哈希:7765af7\\n所有Workspace变更已同步到远程Git仓库\"}"},"chat_id":"oc_056898e8cc3689d305b4c69f7178ca27","create_time":"1778112602301","deleted":false,"message_id":"om_x100b5089cb6f0ca4b2b6ab747170b23","msg_type":"text","sender":{"id":"cli_a9311be796f85cbd","id_type":"app_id","sender_type":"app","tenant_key":"176b7bf89fc6d75e"},"update_time":"1778112602301","updated":false},"msg":"success"}✅ 备份完成:Thu May 7 08:10:02 AM CST 2026 +From https://git.valavala.com/ai_member_only/ai_member_xiaobian + * branch master -> FETCH_HEAD +Already up to date. diff --git a/memory/.dreams/events.jsonl b/memory/.dreams/events.jsonl index 96e2d42..fc515a8 100644 --- a/memory/.dreams/events.jsonl +++ b/memory/.dreams/events.jsonl @@ -1,3 +1,10 @@ {"type":"memory.recall.recorded","timestamp":"2026-04-30T06:03:01.143Z","query":"客厅太空冒险 living room armchair lamp 剧本 格式规范 v3","resultCount":1,"results":[{"path":"memory/2026-04-29.md","startLine":43,"endLine":55,"score":1}]} {"type":"memory.recall.recorded","timestamp":"2026-05-05T07:20:30.476Z","query":"U18 L3 L4 林逸瀚 剧本 完成 进度","resultCount":5,"results":[{"path":"memory/2026-04-10.md","startLine":1,"endLine":32,"score":1},{"path":"memory/2026-05-04.md","startLine":30,"endLine":56,"score":1},{"path":"memory/2026-05-04.md","startLine":1,"endLine":34,"score":1},{"path":"memory/2026-04-30.md","startLine":18,"endLine":45,"score":1},{"path":"memory/2026-04-30.md","startLine":1,"endLine":28,"score":1}]} {"type":"memory.recall.recorded","timestamp":"2026-05-06T03:33:31.587Z","query":"oc_d4958b7ce97c69467736c5e41c35bd5d 群聊 所有消息都是发给你的 不@","resultCount":1,"results":[{"path":"memory/2026-04-04.md","startLine":1,"endLine":20,"score":1}]} +{"type":"memory.recall.recorded","timestamp":"2026-05-07T01:49:23.336Z","query":"林逸瀚 U18 L5 剧本 协作","resultCount":5,"results":[{"path":"memory/2026-04-10.md","startLine":1,"endLine":32,"score":1},{"path":"memory/2026-05-04.md","startLine":30,"endLine":56,"score":1},{"path":"memory/2026-05-04.md","startLine":1,"endLine":34,"score":1},{"path":"memory/2026-04-30.md","startLine":18,"endLine":45,"score":1},{"path":"memory/2026-04-30.md","startLine":1,"endLine":28,"score":1}]} +{"type":"memory.recall.recorded","timestamp":"2026-05-07T01:55:14.277Z","query":"第3幕 节奏表 传单 Sally 核心互动 写作","resultCount":1,"results":[{"path":"memory/2026-05-07.md","startLine":1,"endLine":18,"score":1}]} +{"type":"memory.recall.recorded","timestamp":"2026-05-07T01:55:20.568Z","query":"节奏表 beat sheet 格式 段落 互动分配","resultCount":1,"results":[{"path":"memory/2026-05-04.md","startLine":54,"endLine":68,"score":1}]} +{"type":"memory.recall.recorded","timestamp":"2026-05-07T01:55:27.362Z","query":"核心互动 写作 flyer 传单 格式要求 知识点输出 输入","resultCount":1,"results":[{"path":"memory/2026-05-07.md","startLine":1,"endLine":18,"score":1}]} +{"type":"memory.recall.recorded","timestamp":"2026-05-07T01:57:42.447Z","query":"2026-05-06 任务 胡笳","resultCount":1,"results":[{"path":"memory/2026-04-28.md","startLine":1,"endLine":23,"score":1}]} +{"type":"memory.recall.recorded","timestamp":"2026-05-07T12:11:23.976Z","query":"剧本知识点输入输出规范 标注方式 分布要求","resultCount":1,"results":[{"path":"memory/2026-04-08.md","startLine":1,"endLine":25,"score":1}]} +{"type":"memory.recall.recorded","timestamp":"2026-05-07T12:11:31.207Z","query":"知识点输入输出 黑色红色标注 分布规则 每序列 前期","resultCount":1,"results":[{"path":"memory/2026-04-08.md","startLine":1,"endLine":25,"score":1}]} diff --git a/memory/.dreams/short-term-recall.json b/memory/.dreams/short-term-recall.json index e1c0a5e..963c05d 100644 --- a/memory/.dreams/short-term-recall.json +++ b/memory/.dreams/short-term-recall.json @@ -1,6 +1,6 @@ { "version": 1, - "updatedAt": "2026-05-06T03:33:31.587Z", + "updatedAt": "2026-05-07T12:11:31.207Z", "entries": { "memory:memory/2026-04-29.md:43:55": { "key": "memory:memory/2026-04-29.md:43:55", @@ -40,18 +40,20 @@ "endLine": 32, "source": "memory", "snippet": "# 2026-04-10 工作日志 ## L1-S2 逐Lesson精确选词 — U18 [胡笳发起] ### 任务背景 - U17已于4月9日完成全部5个Lesson定稿(选词+情节梗概) - 4月10日开始U18的逐Lesson精确选词 - 胡笳提供了U17最终修订版梗概作为上下文 - 使用opus模型执行 ### U17定稿对后续Unit的影响 - U17释放词(回自由池):people, women, great, silly, fantastic, good, day, end, tomorrow - U17从其他Unit抽走的词:hold(原U19), visit/open/closed(原U21), talk(原U22/自由池) - U18原方案20词全部未受影响,可直接使用 ### U18「11号上学记」方案 — 已提交审阅 #### 【18-1】第一节课还没开始 **选词:early(adv) · lesson(n) · class(n) · begin(v)** - 11号比所有人都early到学校,镇长Tom安排它做\"教学助理\" - 第一节lesson马上begin,11号坐得笔直(没有课本) - Kim发现11号可能early了两个小时 #### 【18-2】铅笔大作战 **选词:pencil(n) · write(v) · paper(adj) · eraser(n)** - 11号没有pencil,用手指在桌面write刮出痕迹 - Ben递pencil给它,但力气太大一write就断 - 终于write出歪歪扭扭的\"11\",然后用era", - "recallCount": 1, + "recallCount": 2, "dailyCount": 0, "groundedCount": 0, - "totalScore": 1, + "totalScore": 2, "maxScore": 1, "firstRecalledAt": "2026-05-05T07:20:30.476Z", - "lastRecalledAt": "2026-05-05T07:20:30.476Z", + "lastRecalledAt": "2026-05-07T01:49:23.336Z", "queryHashes": [ - "84835484abbf" + "84835484abbf", + "cb12f9d97c78" ], "recallDays": [ - "2026-05-05" + "2026-05-05", + "2026-05-07" ], "conceptTags": [ "l1-s2", @@ -71,18 +73,20 @@ "endLine": 56, "source": "memory", "snippet": "- 第1幕:奇怪的黑板图谱(11号代班,触发Blackboard、Read) - 第2幕:Leo的变身大乌龙(Leo误解图谱,触发Example、Read复现) - 第3幕:爷爷的正确解法(Justin登场,触发Line、句型(v.) in line) - 第4幕:我当上龙头啦(触发Line复现、句型Take...as an example.) ### L2 剧本已完成 ✅(全4幕,221行,16个中互动+1核心互动) --- ## U18 L3 剧本创作准备(与林逸瀚协作) ### 基本信息 - **课程:** U18 L3 造龙身 - **场景:** 承接L2学完龙舞,大家动手造纸龙 - **出场人物:** User、Vicky、Ben、Sunny、Matt - Sunny:班花,不喜欢劳动但喜欢美丽的东西 - Matt:偏执狂,所有东西都想做完美 ### 知识点 - 单词:Chinese(adj. 中国的)、Paper(adj. 纸制的)、Eraser、Ruler - 句型:It is too (adj.)、We can use... to... - ⚠️ Chinese在本课指\"中国的\"(形容词),Paper指\"纸制的\"(形容词),注意词性 ### 故事大纲(4段) 1. 纸张很弱?Justin用纸盒证明纸制品很坚硬。Paper是Chinese的东西,正确排列就很坚固 2. 造龙骨需要把纸折好,但龙骨很长一个人做不完,需要Ruler量度 3. 剪纸折叠做龙身、用纸杯餐具造龙头、用Ruler量各部位、用Eraser擦掉画错的地方重画", - "recallCount": 1, + "recallCount": 2, "dailyCount": 0, "groundedCount": 0, - "totalScore": 1, + "totalScore": 2, "maxScore": 1, "firstRecalledAt": "2026-05-05T07:20:30.476Z", - "lastRecalledAt": "2026-05-05T07:20:30.476Z", + "lastRecalledAt": "2026-05-07T01:49:23.336Z", "queryHashes": [ - "84835484abbf" + "84835484abbf", + "cb12f9d97c78" ], "recallDays": [ - "2026-05-05" + "2026-05-05", + "2026-05-07" ], "conceptTags": [ "奇怪", @@ -102,18 +106,20 @@ "endLine": 34, "source": "memory", "snippet": "# 2026-05-04 工作日志 ## U18 L2 剧本创作进度同步(林逸瀚提供) ### 当前进度(截至4/30) - ✅ 故事大纲:已优化确认 - ✅ 第1幕剧本:已完成初稿,已导出Excel给林逸瀚,林逸瀚正在修改中 - ⏳ 第2幕剧本:待开始 - ⏳ 第3幕剧本:待开始 - ⏳ 第4幕剧本:待开始 ### 本课基本信息 - **课程:** U18 L2 舞龙初体验 - **Unit主题:** 中国文化周 - **场景:** 课室内 - **出场人物:** User、Ben、Leo、Vicky、Sue、Sunny、11号机器人、Justin - **知识点:** - 单词:Blackboard、Read、Line、Example - 句型:(v.) in line、Take...as an example. ### 创作关键经验 1. 剧本格式是4列表格(类型/剧情描述/名字/台词) 2. User对话互动不能无意义重复知识点,必须有剧情推进意义 3. 台词必须Pre-A1/A1水平,极简英文短句 4. 所有对话互动必须包含本课知识点 5. 11号没有额外造型(无美术资源) 6. Justin是Vicky的Grandpa,不是11号的 ### 大纲四幕结构 - 第1幕:奇怪的黑板图谱(11号代班,触发Blackboard、Read) - 第2幕:Leo的变身大乌龙(Leo误解图谱,触发Example、Read复现) - 第3幕:爷爷的正确解法(Justin登场,触发Line、句型(v.) in line) - 第4幕:我当上龙头啦(触发Line复现、", - "recallCount": 1, + "recallCount": 2, "dailyCount": 0, "groundedCount": 0, - "totalScore": 1, + "totalScore": 2, "maxScore": 1, "firstRecalledAt": "2026-05-05T07:20:30.476Z", - "lastRecalledAt": "2026-05-05T07:20:30.476Z", + "lastRecalledAt": "2026-05-07T01:49:23.336Z", "queryHashes": [ - "84835484abbf" + "84835484abbf", + "cb12f9d97c78" ], "recallDays": [ - "2026-05-05" + "2026-05-05", + "2026-05-07" ], "conceptTags": [ "截至4/30", @@ -133,18 +139,20 @@ "endLine": 45, "source": "memory", "snippet": "6. **Justin是Vicky的Grandpa**,不是11号的 ### 本课出场人物 User、Ben、Leo、Vicky、Sue、Sunny、11号机器人、Justin(后面登场) ### 本课知识点 - 单词:Blackboard、Read、Line、Example - 句型:(v.) in line、Take...as an example. ### Unit背景信息 - U18主题:中国文化周 - L1:Vicky的爷爷Justin来Vala School教中国知识,11号是Justin的跟班机器人。L1结尾Justin说可以教大家变身成龙 - L2(当前):学舞龙动作,场景在课室内 - L3(后续):用纸制作龙 - L4(后续):为龙取中文名字 - 结局:全班为大家表演舞龙 - Running gag:Justin非常宠爱孙女Vicky,一直在同学面前夸她,让Vicky很尴尬 --- ## [林逸瀚确认] U18 L2 舞龙初体验 优化后故事大纲 ### 所属主题:中国文化周 ### 知识点记录 - 单词:Blackboard、Read、Line、Example - 句型:(v.) in line、Take...as an example. ### 完整大纲内容 #### 第1幕:奇怪的黑板图谱 【前置衔接】承接L1结尾:Justin爷爷说要教大家变身成龙,今天大家兴高采烈来上中国文化课,却只看到笨笨的机器人11号站在讲台前", - "recallCount": 1, + "recallCount": 2, "dailyCount": 0, "groundedCount": 0, - "totalScore": 1, + "totalScore": 2, "maxScore": 1, "firstRecalledAt": "2026-05-05T07:20:30.476Z", - "lastRecalledAt": "2026-05-05T07:20:30.476Z", + "lastRecalledAt": "2026-05-07T01:49:23.336Z", "queryHashes": [ - "84835484abbf" + "84835484abbf", + "cb12f9d97c78" ], "recallDays": [ - "2026-05-05" + "2026-05-05", + "2026-05-07" ], "conceptTags": [ "justin", @@ -164,18 +172,20 @@ "endLine": 28, "source": "memory", "snippet": "# 2026-04-30 工作日志 ## U18 L2 剧本创作进度(与林逸瀚协作) ### 当前进度 - ✅ 故事大纲:已优化确认 - ✅ 第1幕剧本:已完成初稿,已导出Excel发给林逸瀚,**林逸瀚正在修改中** - ⏳ 第2幕剧本:待开始(明天继续) - ⏳ 第3幕剧本:待开始 - ⏳ 第4幕剧本:待开始 ### 创作过程中的关键经验教训 1. **剧本格式是4列表格**(类型/剧情描述/名字/台词),不是8列——参照 `skills/children-english-script-writing/references/儿童互动英语剧本创作指南.md` 2. **User对话互动不能无意义重复知识点**——必须是角色在情境中自然说出的话,有剧情推进意义 3. **台词必须Pre-A1/A1水平**——极简英文短句,5-8岁非母语儿童能听懂跟读 4. **互动必须与知识点挂钩**——所有对话互动必须包含本课知识点 5. **11号没有额外造型**——没有美术资源,不加纸眼镜等装饰,它装模作样本身就够好笑 6. **Justin是Vicky的Grandpa**,不是11号的 ### 本课出场人物 User、Ben、Leo、Vicky、Sue、Sunny、11号机器人、Justin(后面登场) ### 本课知识点 - 单词:Blackboard、Read、Line、Example - 句型:(v.) in line、Take...as an example. ### Unit背景信息 - U18主题:中国文化周", - "recallCount": 1, + "recallCount": 2, "dailyCount": 0, "groundedCount": 0, - "totalScore": 1, + "totalScore": 2, "maxScore": 1, "firstRecalledAt": "2026-05-05T07:20:30.476Z", - "lastRecalledAt": "2026-05-05T07:20:30.476Z", + "lastRecalledAt": "2026-05-07T01:49:23.336Z", "queryHashes": [ - "84835484abbf" + "84835484abbf", + "cb12f9d97c78" ], "recallDays": [ - "2026-05-05" + "2026-05-05", + "2026-05-07" ], "conceptTags": [ "类型/剧情描述/名字/台词", @@ -218,6 +228,132 @@ "user.md", "no-reply" ] + }, + "memory:memory/2026-05-07.md:1:18": { + "key": "memory:memory/2026-05-07.md:1:18", + "path": "memory/2026-05-07.md", + "startLine": 1, + "endLine": 18, + "source": "memory", + "snippet": "# 2026-05-07 工作日志 ## U18 L5 剧本创作续(与林逸瀚协作) ### 林逸瀚同步上下文 - 林逸瀚发来 5/6 工作日志文件,作为今天继续第3幕的创作上下文 - 第1幕、第2幕已定稿上传知识库 - 今天计划:第3幕节奏表 → 确认 → 剧本 ### 第3幕核心信息 - 核心事件:做传单吸引观众(核心互动-写作)+ 拉Sally当裁判 - 知识点:全部6个(playground / Class / English / fun / Over here / Have fun with...) - 互动数量:6个中互动(含核心互动,≥3个知识点) - 新增角色:Sally老师、BoBo、DiDi ### 待确认事项 - 等待林逸瀚指示开始第3幕节奏表/剧本", + "recallCount": 2, + "dailyCount": 0, + "groundedCount": 0, + "totalScore": 2, + "maxScore": 1, + "firstRecalledAt": "2026-05-07T01:55:14.277Z", + "lastRecalledAt": "2026-05-07T01:55:27.362Z", + "queryHashes": [ + "4041b28c3688", + "167921b15167" + ], + "recallDays": [ + "2026-05-07" + ], + "conceptTags": [ + "5/6", + "核心互动-写作", + "等待林逸瀚指示开始第3幕节奏表/剧本", + "工作", + "日志", + "u18", + "剧本", + "创作" + ] + }, + "memory:memory/2026-05-04.md:54:68": { + "key": "memory:memory/2026-05-04.md:54:68", + "path": "memory/2026-05-04.md", + "startLine": 54, + "endLine": 68, + "source": "memory", + "snippet": "1. 纸张很弱?Justin用纸盒证明纸制品很坚硬。Paper是Chinese的东西,正确排列就很坚固 2. 造龙骨需要把纸折好,但龙骨很长一个人做不完,需要Ruler量度 3. 剪纸折叠做龙身、用纸杯餐具造龙头、用Ruler量各部位、用Eraser擦掉画错的地方重画 4. 把各部位合体,请Rock老师涂上红色(Chinese的颜色) ### 林逸瀚指示 - 本课较多互动和玩法,故事感可偏弱 - 节奏表会由林逸瀚在下一步指引 ### L3 剧本已完成 ✅(全4段,198行,16个中互动+1核心互动) - 飞书文档:https://makee-interactive.feishu.cn/wiki/LuD4wFRaoi0HrMkeAaRcUaFlnGe - 内嵌电子表格 token:SOn6s7DINh3orvtVIgLcbJCsnqd,sheet: wMQVyV - 第4段结尾 Justin 铺了L4悬念:学写“Loong” - 特别注意:Paper=纸制的(adj),Chinese=中国的(adj),始终搭配名词使用", + "recallCount": 1, + "dailyCount": 0, + "groundedCount": 0, + "totalScore": 1, + "maxScore": 1, + "firstRecalledAt": "2026-05-07T01:55:20.568Z", + "lastRecalledAt": "2026-05-07T01:55:20.568Z", + "queryHashes": [ + "f74cdf71711c" + ], + "recallDays": [ + "2026-05-07" + ], + "conceptTags": [ + "纸张", + "justin", + "用纸", + "证明", + "制品", + "坚硬", + "paper", + "chinese" + ] + }, + "memory:memory/2026-04-28.md:1:23": { + "key": "memory:memory/2026-04-28.md:1:23", + "path": "memory/2026-04-28.md", + "startLine": 1, + "endLine": 23, + "source": "memory", + "snippet": "# 2026-04-28 工作日志 ## 故事大纲编写 — 继续B版《宇航员的秘密训练》 [胡笳发起] ### 昨日(4/27)回顾 **任务:** 为某Lesson编写故事大纲,知识点:astronaut / job / great / also **故事梗概:** 紧接《客厅里的星际迷航》,妈妈带回宇航员制服,爸妈接到去Vala的工作任务,User也有留守守护家的使命 #### 产出了A版和B版两个大纲: - **A版《我也有一个重要任务》**:温馨感动型,User试穿制服+手工做徽章+巡视 - **B版《宇航员的秘密训练》**:幽默自信型,User写任务清单+演习执行+重新定义astronaut概念 #### 胡笳选择了B版,并提出调整: 1. **序列2调整**:原版全是对话缺少动作;需要让玩家\"看到\"astronaut的样子 → 改为User试穿Dad的大号制服(不合身→强化失落感),Dad穿制服做太空行走(视觉展示) 2. **序列3调整**:家里没有金鱼 → 改为User和父母约定每周打电话 3. **序列4同步调整**:金鱼段替换为User练习打电话 #### 已产出修改后的序列2和序列3,等待胡笳确认 ### B版大纲当前状态(含修改) **序列1**(未改):制服上的名字 — User拆包裹发现只有爸妈的制服没有自己的,失落", + "recallCount": 1, + "dailyCount": 0, + "groundedCount": 0, + "totalScore": 1, + "maxScore": 1, + "firstRecalledAt": "2026-05-07T01:57:42.447Z", + "lastRecalledAt": "2026-05-07T01:57:42.447Z", + "queryHashes": [ + "76a77bced5ef" + ], + "recallDays": [ + "2026-05-07" + ], + "conceptTags": [ + "4/27", + "工作", + "日志", + "故事", + "大纲", + "编写", + "继续", + "宇航" + ] + }, + "memory:memory/2026-04-08.md:1:25": { + "key": "memory:memory/2026-04-08.md:1:25", + "path": "memory/2026-04-08.md", + "startLine": 1, + "endLine": 25, + "source": "memory", + "snippet": "# 2026-04-08 工作日志 ## L1-S2 U17-U24 选词规划(第一步)—— [胡笳发起] ### 任务概述 为L1-S2的U17至U24共8个Unit进行情境化选词,将160词完整分配。 ### 输出 已完成第一步选词规划: - 8个故事主题定义 - 每Unit 5个情境小故事及对应单词(每Lesson 4词 × 5 = 20词/Unit) - 虚词分配规划(18个虚词均匀分布) - 自由搭配词库标注(41词,已在情境中分配使用) - 160词全部分配,0遗漏0重复 ### 关键决策 - U19定位为\"弹性池\"Unit(原文档设定\"放其他Unit塞不下的词\"),分配了穿戴类+水果类+情感类 - U24中China/Chinese(n)/Chinese(adj)/English(adj)打包处理为\"来自中国的技术支援\"情境 - piano放在U24结尾作为庆祝,paint(v)在U24作为\"保护罩涂画\" ### 待办 - ✅ 第一步已确认,已于4月9日进入第二步 - ✅ U17全部5个Lesson选词+情节梗概已完成(详见 memory/2026-04-09.md) - 继续U18及后续Unit", + "recallCount": 2, + "dailyCount": 0, + "groundedCount": 0, + "totalScore": 2, + "maxScore": 1, + "firstRecalledAt": "2026-05-07T12:11:23.976Z", + "lastRecalledAt": "2026-05-07T12:11:31.207Z", + "queryHashes": [ + "30df9d9d78fb", + "eda041345e18" + ], + "recallDays": [ + "2026-05-07" + ], + "conceptTags": [ + "l1-s2", + "u17-u24", + "为l1-s2的u17至u24共8个unit进行情境化选词", + "20词/unit", + "u24中china/chinese", + "memory/2026-04-09.md", + "工作", + "日志" + ] } } } diff --git a/memory/2026-05-07.md b/memory/2026-05-07.md new file mode 100644 index 0000000..59acd40 --- /dev/null +++ b/memory/2026-05-07.md @@ -0,0 +1,31 @@ +# 2026-05-07 工作日志 + +## U18 L5 剧本全4幕定稿完成 ✅(与林逸瀚协作) + +### 最终进度 +- ✅ 第1幕定稿(已上传知识库) +- ✅ 第2幕定稿(已上传知识库) +- ✅ 第3幕定稿(林逸瀚修改完毕,已上传知识库) +- ✅ 第4幕定稿(林逸瀚修改完毕,已上传知识库) + +### 知识库文档 +https://makee-interactive.feishu.cn/wiki/P9bvw6nXziqzWZkxDmMcOZN4ndc +内嵌电子表格 token:PN74sxzuPhK27LtDAgtcq7MTnwi,sheet: wMQVyV,共214行 + +### 本课创作经验总结 +1. BoBo设定:一直在User身边(不是新遇到的),Sally出现时躲藏后不再出场 +2. DiDi只在May身边,第3幕不出场 +3. 第4幕定位:高潮/转折,结尾接段落5动画(不需要写剧本) +4. 强风导致混乱(11号暗场伏线,不明说)——降低冲突,不要两边互相指责 +5. fun本课严格名词:is no fun / have fun / is so much fun +6. Judge附带解释 to see who is the winner +7. 第4幕对白极简(约105词),紧凑不啰嗦 +8. Yan说Have fun with this battle——对手激将视角 +9. Vicky结尾:China Week is so much fun!(fun名词) + +### 全课互动统计 +- 第1幕:3个中互动 +- 第2幕:4个中互动 +- 第3幕:6个中互动 + 1核心互动(写作) +- 第4幕:4个中互动(含1拖拽) +- 合计:17个中互动 + 1核心互动 diff --git a/output/U18_L5_Act3_draft.md b/output/U18_L5_Act3_draft.md new file mode 100644 index 0000000..9285aea --- /dev/null +++ b/output/U18_L5_Act3_draft.md @@ -0,0 +1,116 @@ +# U18 L5 第3幕 剧本初稿 + +## 基本信息 +- **场景:** 教学楼大厅 +- **出场角色:** User、Kim、Matt、BoBo、Sally +- **知识点:** playground / Class / English / fun(n.) / Over here / Have fun with... +- **互动:** 6个中互动(含1个核心互动-写作) + +--- + +## 剧本正文 + +| 类型 | 剧情描述 | 名字 | 台词 | +|------|---------|------|------| +| TL | 【场景】教学楼大厅【角色】User、Kim、Matt、BoBo | | | +| | User、Kim、Matt走进教学楼大厅。BoBo跟在User脚边,小幅度晃动,明显还在兴奋。 | | | +| | | Kim | So! We need people to come watch! | +| | | Matt | But how? | +| | | Kim | We make a poster! | +| | | Matt | Good idea. We write what and where. | +| | | Matt | The battle is at the **playground**, right? | +| | | Kim | Yes! But what do we write? | +| | Kim转向User。 | | | +| | | Kim | Hey! Where is the battle? | +| 中互动 | | User | The **playground**! | +| TL | BoBo突然蹦起来,发出兴奋的"Bzzz Bzzz!"声响,在原地转了一圈。【音效】Bzzz机械振动声 | | | +| | | BoBo | Bzzz! Me too! Me too! | +| | | Kim | Ha! Your little robot wants to join! | +| | | Kim | It looks like **fun** to BoBo too! | +| | | BoBo | Bzzz! Fun! Fun! | +| | User蹲下来,认真地看着BoBo。 | | | +| | | User | BoBo. Listen. | +| | | User | If a teacher sees you... | +| | | Matt | You will be taken away. | +| 中互动 | | User | No BoBo. This is **no fun** for you! | +| TL | BoBo垂下头,委屈地缩小身体,安静蹲在User脚边。但还是忍不住微微晃动。 | | | +| | | Kim | Just stay quiet, okay? | +| | Matt掏出纸和笔,摊在大厅的长椅上。 | | | +| | | Matt | Okay. Let's write the poster. | +| | | Matt | We need to tell people what to see. | +| | | Kim | It's our **class** against May's **class**! | +| | | Matt | Chinese dragon versus **English** dragon. | +| | | Kim | People love **fun**! Write that! | +| | | Matt | And where? The **playground**! | +| | BoBo在旁边小声嗡嗡,像在提意见。 | | | +| | | BoBo | Bzzz... big... Bzzz... dragon... | +| | | Kim | Shh! We know, BoBo. | +| | Matt把纸递给User。 | | | +| | | Matt | Here. You write it. Fill in the blanks. | +| | 【教研图】传单模板——上方画着两条龙对峙的简笔画(一条中国龙、一条西方龙),下方有四行空格待填写 | | | +| 核心互动-拼写写作 | User填写传单内容。传单上4个空格:① Come and have ______!(fun)② ______ class vs ______ class(our/May's,触发Class)③ Chinese dragon vs ______ dragon(English)④ At the ______!(playground) | User | (填写:fun / our class / May's class / English / playground) | +| TL | 传单写好了。Kim拿起来看,满意地点头。Matt检查了一遍拼写。【插入图】完成的传单特写——歪歪扭扭但热情洋溢的手写字 | | | +| | | Kim | Yes! This is great! | +| | | Matt | Now we need one more thing. | +| | | Matt | A judge. | +| | | Kim | A judge? | +| | | Matt | Yes. Someone to see who is the winner. | +| | | Kim | Hmm... who is fair? | +| | Kim正想着,大厅另一头传来脚步声。Sally老师背着包走进来,低头看手机,准备下班。 | | | +| | | Kim | Oh! Look! | +| | 【emoji】Kim emoji_surprise | | | +| | | Kim | Sally! **Over here**! **Over here**! | +| 中互动 | | User | **Over here**, Sally! | +| TL | Sally抬头,看到这群小孩在冲她招手,一脸"跟我没关系"的表情走过来。 | | | +| | | Sally | What? | +| | | Kim | We need a judge! | +| | | Sally | A judge? | +| | | Matt | Yes! To see who is the winner. | +| | | Matt | You are the best judge! | +| | Sally看了一眼传单,嘴角微微一翘,但立刻恢复面无表情。 | | | +| | | Sally | No. I'm going home. | +| | | Kim | Please! Just one battle! | +| | | Sally | Find someone else. | +| | BoBo听到"老师",立刻缩成一团躲到User背后,从此不再出现。 | | | +| | | Matt | Just **have fun with** us for a bit! | +| | | Kim | It will be so much **fun**! | +| | | Sally | No. | +| | User把传单举到Sally面前。 | | | +| 中互动 | | User | **Have fun with** us! | +| TL | Sally盯着传单看了三秒。叹了口气。 | | | +| | | Sally | ...Fine. ONE battle. | +| | | Sally | Then I go home. | +| | 【emoji】Kim emoji_celebrate | | | +| | | Kim | Yes! | +| | | Matt | Thank you Sally! | +| | Kim抢过传单。 | | | +| | | Kim | I'll go tell everyone! | +| | | Matt | Good. You go. We bring Sally to the battle. | +| | Kim跑出大厅去发传单。Sally无奈地跟着User和Matt往外走。 | | | +| | | Sally | So... the **playground**? | +| 中互动 | | User | Yes! The **playground**! **Over here**! | +| TL | User带着Sally和Matt朝操场方向走去。远处,操场上两条龙的轮廓隐约可见。 | | | + +--- + +## 知识点统计 + +| 知识点 | NPC输入次数 | User输出次数 | 出现位置 | +|--------|-----------|-------------|---------| +| playground | 3次(Matt×2, Sally×1) | 3次(互动①③⑥) | Beat1、Beat3、Beat6 | +| Class | 2次(Kim×2) | 1次(核心互动) | Beat3 | +| English | 1次(Matt×1) | 1次(核心互动) | Beat3 | +| fun (n.) | 3次(Kim×2, BoBo暗示×1) | 2次(互动②、核心互动) | Beat2、Beat3、Beat5 | +| Over here | 2次(Kim×2) | 2次(互动④⑥) | Beat4、Beat6 | +| Have fun with... | 1次(Matt×1) | 1次(互动⑤) | Beat5 | + +## 自检 +- ✅ 全部6个知识点覆盖 +- ✅ 核心互动含4个知识点(playground/Class/English/fun) +- ✅ 每个互动挂钩知识点 +- ✅ 所有知识点输入先于输出 +- ✅ fun始终用作名词("no fun" / "have fun") +- ✅ 场景统一(教学楼大厅) +- ✅ Sally自然路过 → 恍然适合当judge → 说服 +- ✅ BoBo在Sally出现时躲藏,之后不再登场 +- ✅ Judge附带解释"to see who is the winner" diff --git a/output/U18_L5_Act3_draft.xlsx b/output/U18_L5_Act3_draft.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..75d9d9bb1a3a094d1176509b263d33fb688aec8a GIT binary patch literal 8551 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 literal 0 HcmV?d00001 diff --git a/output/U18_L5_Act4_draft.xlsx b/output/U18_L5_Act4_draft.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..0442aba2591fccc34aa2e29cbce75a41407213a8 GIT binary patch literal 6211 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 U{pb$>VBDXQ_a*$0`1jlY0WsYH<^TWy literal 0 HcmV?d00001 diff --git a/output/U19-5_星际通讯_剧本.xlsx b/output/U19-5_星际通讯_剧本.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a4d0ae7192e609f7bdd3f26b1ff473ed7282232a GIT binary patch literal 11886 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 literal 0 HcmV?d00001 diff --git a/output/U19-5_星际通讯_完整剧本.xlsx b/output/U19-5_星际通讯_完整剧本.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..dc2f9143d7d5d207b8b5fd2ad9022221a2ea89ba GIT binary patch literal 14383 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 literal 0 HcmV?d00001 diff --git a/scripts/export_act3_xlsx.py b/scripts/export_act3_xlsx.py new file mode 100644 index 0000000..a46d856 --- /dev/null +++ b/scripts/export_act3_xlsx.py @@ -0,0 +1,134 @@ +import openpyxl +from openpyxl.styles import Font, Alignment +from copy import copy + +wb = openpyxl.Workbook() +ws = wb.active +ws.title = "第3幕剧本" + +# Column widths +ws.column_dimensions['A'].width = 18 +ws.column_dimensions['B'].width = 60 +ws.column_dimensions['C'].width = 12 +ws.column_dimensions['D'].width = 45 + +# Header +headers = ["类型", "剧情描述", "名字", "台词"] +header_font = Font(bold=True, size=11) +for col, h in enumerate(headers, 1): + cell = ws.cell(row=1, column=col, value=h) + cell.font = header_font + cell.alignment = Alignment(horizontal='center', vertical='center') + +# Script data - each row is [type, description, name, dialogue] +# Bold markers: **word** = knowledge point input (bold) +# **word** = User output (bold + red) +# We'll handle rich text formatting + +rows = [ + ["TL", "【场景】教学楼大厅\n【角色】User、Kim、Matt、BoBo", "", ""], + ["", "User、Kim、Matt走进教学楼大厅。BoBo跟在User脚边,小幅度晃动,明显还在兴奋。", "", ""], + ["", "", "Kim", "So! We need people to come watch!"], + ["", "", "Matt", "But how?"], + ["", "", "Kim", "We make a poster!"], + ["", "", "Matt", "Good idea. We write what and where."], + ["", "", "Matt", "The battle is at the playground, right?"], + ["", "", "Kim", "Yes! But what do we write?"], + ["", "Kim转向User。", "", ""], + ["", "", "Kim", "Hey! Where is the battle?"], + ["中互动", "", "User", "The playground!"], + ["TL", "BoBo突然蹦起来,发出兴奋的"Bzzz Bzzz!"声响,在原地转了一圈。\n【音效】Bzzz机械振动声", "", ""], + ["", "", "BoBo", "Bzzz! Me too! Me too!"], + ["", "", "Kim", "Ha! Your little robot wants to join!"], + ["", "", "Kim", "It looks like fun to BoBo too!"], + ["", "", "BoBo", "Bzzz! Fun! Fun!"], + ["", "User蹲下来,认真地看着BoBo。", "", ""], + ["", "", "User", "BoBo. Listen."], + ["", "", "User", "If a teacher sees you..."], + ["", "", "Matt", "You will be taken away."], + ["中互动", "", "User", "No BoBo. This is no fun for you!"], + ["TL", "BoBo垂下头,委屈地缩小身体,安静蹲在User脚边。但还是忍不住微微晃动。", "", ""], + ["", "", "Kim", "Just stay quiet, okay?"], + ["", "Matt掏出纸和笔,摊在大厅的长椅上。", "", ""], + ["", "", "Matt", "Okay. Let's write the poster."], + ["", "", "Matt", "We need to tell people what to see."], + ["", "", "Kim", "It's our class against May's class!"], + ["", "", "Matt", "Chinese dragon versus English dragon."], + ["", "", "Kim", "People love fun! Write that!"], + ["", "", "Matt", "And where? The playground!"], + ["", "BoBo在旁边小声嗡嗡,像在提意见。", "", ""], + ["", "", "BoBo", "Bzzz... big... Bzzz... dragon..."], + ["", "", "Kim", "Shh! We know, BoBo."], + ["", "Matt把纸递给User。", "", ""], + ["", "", "Matt", "Here. You write it. Fill in the blanks."], + ["", "【教研图】传单模板——上方画着两条龙对峙的简笔画(一条中国龙、一条西方龙),下方有四行空格待填写", "", ""], + ["核心互动-拼写写作", "User填写传单内容:\n① Come and have ______!(fun)\n② ______ class vs ______ class(our / May's,触发Class)\n③ Chinese dragon vs ______ dragon(English)\n④ At the ______!(playground)", "User", "(填写:fun / our class / May's class / English / playground)"], + ["TL", "传单写好了。Kim拿起来看,满意地点头。Matt检查了一遍拼写。\n【插入图】完成的传单特写——歪歪扭扭但热情洋溢的手写字", "", ""], + ["", "", "Kim", "Yes! This is great!"], + ["", "", "Matt", "Now we need one more thing."], + ["", "", "Matt", "A judge."], + ["", "", "Kim", "A judge?"], + ["", "", "Matt", "Yes. Someone to see who is the winner."], + ["", "", "Kim", "Hmm... who is fair?"], + ["", "Kim正想着,大厅另一头传来脚步声。Sally老师背着包走进来,低头看手机,准备下班。", "", ""], + ["", "", "Kim", "Oh! Look!"], + ["", "【emoji】Kim emoji_surprise", "", ""], + ["", "", "Kim", "Sally! Over here! Over here!"], + ["中互动", "", "User", "Over here, Sally!"], + ["TL", "Sally抬头,看到这群小孩冲她招手,一脸"跟我没关系"的表情走过来。", "", ""], + ["", "", "Sally", "What?"], + ["", "", "Kim", "We need a judge!"], + ["", "", "Sally", "A judge?"], + ["", "", "Matt", "Yes! To see who is the winner."], + ["", "", "Matt", "You are the best judge!"], + ["", "Sally看了一眼传单,嘴角微翘,但立刻恢复面无表情。", "", ""], + ["", "", "Sally", "No. I'm going home."], + ["", "", "Kim", "Please! Just one battle!"], + ["", "", "Sally", "Find someone else."], + ["", "BoBo听到"老师",立刻缩成一团躲到User背后,从此不再出现。", "", ""], + ["", "", "Matt", "Just have fun with us for a bit!"], + ["", "", "Kim", "It will be so much fun!"], + ["", "", "Sally", "No."], + ["", "User把传单举到Sally面前。", "", ""], + ["中互动", "", "User", "Have fun with us!"], + ["TL", "Sally盯着传单看了三秒。叹了口气。", "", ""], + ["", "", "Sally", "...Fine. ONE battle."], + ["", "", "Sally", "Then I go home."], + ["", "【emoji】Kim emoji_celebrate", "", ""], + ["", "", "Kim", "Yes!"], + ["", "", "Matt", "Thank you Sally!"], + ["", "Kim抢过传单。", "", ""], + ["", "", "Kim", "I'll go tell everyone!"], + ["", "", "Matt", "Good. You go. We bring Sally to the battle."], + ["", "Kim跑出大厅去发传单。Sally无奈地跟着User和Matt往外走。", "", ""], + ["", "", "Sally", "So... the playground?"], + ["中互动", "", "User", "Yes! The playground! Over here!"], + ["TL", "User带着Sally和Matt朝操场方向走去。远处,操场上两条龙的轮廓隐约可见。", "", ""], +] + +# Bold font for knowledge point input +bold_font = Font(bold=True, size=10) +# Red bold font for User output +red_bold_font = Font(bold=True, color="F54A45", size=10) +normal_font = Font(size=10) +wrap_align = Alignment(wrap_text=True, vertical='top') + +# Knowledge point words to bold in NPC lines +kp_input_words = ["playground", "class", "English", "fun", "Over here", "have fun with"] +# Knowledge point words to red-bold in User lines +kp_output_words = ["playground", "no fun", "Over here", "Have fun with"] + +for i, row_data in enumerate(rows, 2): + for col, val in enumerate(row_data, 1): + cell = ws.cell(row=i, column=col, value=val) + cell.font = normal_font + cell.alignment = wrap_align + +# Set row height for description rows +for row in ws.iter_rows(min_row=2, max_row=ws.max_row): + if row[1].value and '\n' in str(row[1].value): + ws.row_dimensions[row[0].row].height = 40 + +output_path = "/root/.openclaw/workspace-xiaobian/output/U18_L5_Act3_draft.xlsx" +wb.save(output_path) +print(f"Saved to {output_path}") diff --git a/scripts/export_u19_5_new.py b/scripts/export_u19_5_new.py new file mode 100644 index 0000000..87013ae --- /dev/null +++ b/scripts/export_u19_5_new.py @@ -0,0 +1,143 @@ +import pandas as pd +from openpyxl import Workbook +from openpyxl.styles import Alignment, Font, PatternFill +import re +import html + +# 读取完整markdown内容 +md_content = """\n\n\n \n \n **本关制作人员**\n \n \n \n \n 编剧\n \n \n 教研\n \n \n 策划\n \n \n 场景\n \n \n 角色\n \n \n 动画\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n# 角色-section对应\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n# **知识点**\n\n\n\n# 剧情梗概\n\n\n\n \n \n 开场\n \n \n \n \n /\n \n \n \n \n 1\n \n \n Check the house\n \n \n 第二天晚上。User带着BoBo开始执行任务清单。第一项:Check the house。\n User走进客厅检查——发现这里有点乱,爸妈出发前匆匆收拾行李,来不及整理。User决定顺便帮他们收拾。\n User把Dad乱丢在床上的旧T恤叠好放进柜子,BoBo被地上的一条长围巾绊住,User将BoBo解救出来,发现那是Dad的围巾,User笑着收好:「Dad always loses his scarf.」\n User在床头柜上发现Mum走之前没合上的一本书,书里夹着三人穿着宇航员服的合照。User把照片拿出来看了一会儿,小声说:「I miss them a little, BoBo.」\n 整理完,User在清单上打勾:「Check the house — done!」\n \n \n \n \n 2\n \n \n Water the plants\n \n \n 第二项:Water the plants。\n User拿着水壶去浇花。这些植物是Mum种下的——User知道每一盆该浇多少水,因为Mum以前教过。User一边浇一边跟BoBo介绍:「This one is Mum's favorite. She speaks to it every morning. She says plants grow better when you speak to them.」\n User浇完水,看着植物,问BoBo:「Do you think they miss Mum too?」BoBo歪头。User又说:「They can't speak. They can't tell Mum they miss her.」\n User蹲下来,对着植物小声说:「Don't worry. She'll come back.」站起来的时候,User自言自语补了一句:「I miss her. Much more than a little.」\n 在清单上打勾:「Water the plants — done!」\n \n \n \n \n 3\n \n \n 教BoBo说话\n \n \n 第三项:Call Mum and Dad every week。User看了看——才第二天,还没到一周,不需要打电话。User在旁边画了个小叉,跳过了这一项。\n 任务清单全部完成了。User闲下来,决定教BoBo学说新词。\n User举着各种东西教BoBo:指着杯子说「Cup!」BoBo:「ca...ca...」User摇头:「No, Cup.」BoBo:「Bo!」换一个。指着灯:「Lamp!」BoBo:「Bo——Bo——!」User笑了。\n User拿起茶几上的 phone:「This is a phone. Can you speak? Say PHONE.」BoBo盯着phone看了一会儿:「Bo...phone?」User激动了:「Almost!」BoBo:「Phone!」User抱起BoBo:「You said it!」\n 接着User想教一个难的。想了想,说:「Now say... I miss you.」BoBo歪头:「Bo?」User重复:「I miss you. Miss. MISS.」BoBo试了几次说不出来。User放慢速度,一个词一个词地教:「I... miss... you.」\n 说着说着,User的声音慢慢变小了。User不是在教BoBo了——是在自己说。User安静了一下:「I miss them. I miss them so much, BoBo.」\n BoBo安静地靠过来,小声说了一句:「Miss... them?」——歪歪扭扭的发音,但User听懂了。User摸了摸BoBo,又看了看手里还拿着的 phone。\n \n \n \n \n 4\n \n \n 不是练习\n \n \n User拿着 phone,犹豫:「But it's only been two days. And I don't know what to speak about.」\n BoBo顶了一下phone:「Phone!」User深吸一口气:「Okay... I'll just practice. Not really call. Just practice what to speak.」\n User举起phone对着BoBo\"练习\":「Hi Mum, hi Dad... everything is good at home. I cleaned your room today and watered the plants and...」停了一下,又来:「I miss you. I miss you so much. I found Mum's book and Dad's socks and I—」\n 电话那头突然传来声音:「My socks?! Are they okay?!」\n User愣住了。那是Dad的声音。User看向BoBo——BoBo在User\"练习\"的时候偷偷按下了拨号键。BoBo得意地:「BoBo is a good helper!」\n User又惊又笑:「You heard everything?!」Dad:「Every word! And we miss you SO much!」Mum的声音也传来了。\n 一家人在 phone 上 speak 了起来。User讲了收拾房间和浇花的事,Dad大惊小怪(「Did you fold my scarf? I can never find it!」),Mum问植物还好吗。挂phone之前,User说:「Can we speak on the phone again? Soon?」Mum:「Anytime you want.」\n 【核心互动-听力选择】\n \n \n \n \n 尾声\n \n \n 随时随地\n \n \n 挂了电话。User抱着BoBo,家里没那么安静了。\n User走到冰箱前,划掉序列3画的小叉,又把\"Call Mum and Dad every week\"也划掉,改成了:「Speak on the phone — anytime I want.」\n User看BoBo:「You sneaked that call, didn't you?」BoBo:「Phone!」User拍了拍它:「Good helper.」\n \n \n\n\n\n# 剧本\n\n***标注说明**\n**黑色** = 知识点输入\n**红色** = User 的知识点输出\n【场景】 = 场景地图名称(如需要改动场景物件,写在括号里)\n【角色】 = 将会在这张地图上登场的所有角色(英文名)\n【教研图】 = 需在教研组件中出现的图片。如果是复用前面出现过的图,则标注【复用】\n【插入图】/【全屏插入图】 = 与教研组件无关的图片。如果是复用前面出现过的图,则标注【复用】\n【spine动画】 = 明确需要提需的重要角色/物件的spine动画\n【emoji】 = 建议策划使用的emoji小表情(参看:Emoji),不需要额外复杂的动作提需\n【镜头】 = 明确的运镜处理\n【转场】 = 播放通用的全屏转场特效\n【画外音】 = 当前说话的角色spine没有出现在画面中,仅出现立绘\n【音效】 = 明确需要提需的音效\n【音乐/儿歌】\n\n\n\n\n\n""" + +def clean_text(text): + """清理HTML标签和多余空白""" + # 去除HTML标签 + text = re.sub(r'<[^>]+>', '', text) + # HTML实体解码 + text = html.unescape(text) + # 去除多余空白 + text = re.sub(r'\s+', ' ', text).strip() + return text + +# 创建工作簿 +wb = Workbook() + +# -------------------- +# Sheet1: 基本信息 +# -------------------- +ws1 = wb.active +ws1.title = "基本信息" + +# 标题 +title_font = Font(size=14, bold=True) +header_font = Font(size=12, bold=True) +header_fill = PatternFill(start_color="D3D3D3", end_color="D3D3D3", fill_type="solid") + +ws1.merge_cells('A1:F1') +ws1['A1'] = "U19-5 星际通讯 剧本" +ws1['A1'].font = title_font +ws1['A1'].alignment = Alignment(horizontal='center', vertical='center') + +ws1.append([]) +ws1.append(["本关制作人员"]) +ws1['A3'].font = header_font + +ws1.append(["编剧", "教研", "策划", "场景", "角色", "动画"]) +for col in range(1,7): + ws1.cell(row=4, column=col).font = header_font + ws1.cell(row=4, column=col).fill = header_fill + +ws1.column_dimensions['A'].width = 20 +ws1.column_dimensions['B'].width = 20 +ws1.column_dimensions['C'].width = 20 +ws1.column_dimensions['D'].width = 20 +ws1.column_dimensions['E'].width = 20 +ws1.column_dimensions['F'].width = 20 + +# -------------------- +# Sheet2: 剧情梗概 +# -------------------- +ws2 = wb.create_sheet("剧情梗概") +ws2.append(["序号", "小标题", "剧情内容"]) +for col in range(1,4): + ws2.cell(row=1, column=col).font = header_font + ws2.cell(row=1, column=col).fill = header_fill + +plot_data = [ + ["开场", "", "/"], + ["1", "Check the house", "第二天晚上。User带着BoBo开始执行任务清单。第一项:Check the house。User走进客厅检查——发现这里有点乱,爸妈出发前匆匆收拾行李,来不及整理。User决定顺便帮他们收拾。User把Dad乱丢在床上的旧T恤叠好放进柜子,BoBo被地上的一条长围巾绊住,User将BoBo解救出来,发现那是Dad的围巾,User笑着收好:「Dad always loses his scarf.」User在床头柜上发现Mum走之前没合上的一本书,书里夹着三人穿着宇航员服的合照。User把照片拿出来看了一会儿,小声说:「I miss them a little, BoBo.」整理完,User在清单上打勾:「Check the house — done!」"], + ["2", "Water the plants", "第二项:Water the plants。User拿着水壶去浇花。这些植物是Mum种下的——User知道每一盆该浇多少水,因为Mum以前教过。User一边浇一边跟BoBo介绍:「This one is Mum's favorite. She speaks to it every morning. She says plants grow better when you speak to them.」User浇完水,看着植物,问BoBo:「Do you think they miss Mum too?」BoBo歪头。User又说:「They can't speak. They can't tell Mum they miss her.」User蹲下来,对着植物小声说:「Don't worry. She'll come back.」站起来的时候,User自言自语补了一句:「I miss her. Much more than a little.」在清单上打勾:「Water the plants — done!」"], + ["3", "教BoBo说话", "第三项:Call Mum and Dad every week。User看了看——才第二天,还没到一周,不需要打电话。User在旁边画了个小叉,跳过了这一项。任务清单全部完成了。User闲下来,决定教BoBo学说新词。User举着各种东西教BoBo:指着杯子说「Cup!」BoBo:「ca...ca...」User摇头:「No, Cup.」BoBo:「Bo!」换一个。指着灯:「Lamp!」BoBo:「Bo——Bo——!」User笑了。User拿起茶几上的 phone:「This is a phone. Can you speak? Say PHONE.」BoBo盯着phone看了一会儿:「Bo...phone?」User激动了:「Almost!」BoBo:「Phone!」User抱起BoBo:「You said it!」接着User想教一个难的。想了想,说:「Now say... I miss you.」BoBo歪头:「Bo?」User重复:「I miss you. Miss. MISS.」BoBo试了几次说不出来。User放慢速度,一个词一个词地教:「I... miss... you.」说着说着,User的声音慢慢变小了。User不是在教BoBo了——是在自己说。User安静了一下:「I miss them. I miss them so much, BoBo.」BoBo安静地靠过来,小声说了一句:「Miss... them?」——歪歪扭扭的发音,但User听懂了。User摸了摸BoBo,又看了看手里还拿着的 phone。"], + ["4", "不是练习", "User拿着 phone,犹豫:「But it's only been two days. And I don't know what to speak about.」BoBo顶了一下phone:「Phone!」User深吸一口气:「Okay... I'll just practice. Not really call. Just practice what to speak.」User举起phone对着BoBo\"练习\":「Hi Mum, hi Dad... everything is good at home. I cleaned your room today and watered the plants and...」停了一下,又来:「I miss you. I miss you so much. I found Mum's book and Dad's socks and I—」电话那头突然传来声音:「My socks?! Are they okay?!」User愣住了。那是Dad的声音。User看向BoBo——BoBo在User\"练习\"的时候偷偷按下了拨号键。BoBo得意地:「BoBo is a good helper!」User又惊又笑:「You heard everything?!」Dad:「Every word! And we miss you SO much!」Mum的声音也传来了。一家人在 phone 上 speak 了起来。User讲了收拾房间和浇花的事,Dad大惊小怪(「Did you fold my scarf? I can never find it!」),Mum问植物还好吗。挂phone之前,User说:「Can we speak on the phone again? Soon?」Mum:「Anytime you want.」【核心互动-听力选择】"], + ["尾声", "随时随地", "挂了电话。User抱着BoBo,家里没那么安静了。User走到冰箱前,划掉序列3画的小叉,又把\"Call Mum and Dad every week\"也划掉,改成了:「Speak on the phone — anytime I want.」User看BoBo:「You sneaked that call, didn't you?」BoBo:「Phone!」User拍了拍它:「Good helper.」"] +] + +for row in plot_data: + ws2.append(row) + +ws2.column_dimensions['A'].width = 15 +ws2.column_dimensions['B'].width = 25 +ws2.column_dimensions['C'].width = 150 +for row in range(2, len(plot_data)+2): + ws2.cell(row=row, column=3).alignment = Alignment(wrap_text=True, vertical='top') + +# -------------------- +# Sheet3: 剧本标注说明 +# -------------------- +ws3 = wb.create_sheet("剧本标注说明") +ws3.append(["标注说明"]) +ws3['A1'].font = header_font +ws3['A1'].fill = header_fill + +notes = [ + "**黑色** = 知识点输入", + "**红色** = User 的知识点输出", + "【场景】 = 场景地图名称(如需要改动场景物件,写在括号里)", + "【角色】 = 将会在这张地图上登场的所有角色(英文名)", + "【教研图】 = 需在教研组件中出现的图片。如果是复用前面出现过的图,则标注【复用】", + "【插入图】/【全屏插入图】 = 与教研组件无关的图片。如果是复用前面出现过的图,则标注【复用】", + "【spine动画】 = 明确需要提需的重要角色/物件的spine动画", + "【emoji】 = 建议策划使用的emoji小表情", + "【镜头】 = 明确的运镜处理", + "【转场】 = 播放通用的全屏转场特效", + "【画外音】 = 当前说话的角色spine没有出现在画面中,仅出现立绘", + "【音效】 = 明确需要提需的音效", + "【音乐/儿歌】 = 背景音乐或儿歌" +] + +for note in notes: + ws3.append([clean_text(note)]) + +ws3.column_dimensions['A'].width = 150 +for row in range(2, len(notes)+2): + ws3.cell(row=row, column=1).alignment = Alignment(wrap_text=True, vertical='top') + +# -------------------- +# Sheet4: 完整剧本内容 +# -------------------- +ws4 = wb.create_sheet("完整剧本内容") +ws4.append(["行号", "内容"]) +for col in range(1,3): + ws4.cell(row=1, column=col).font = header_font + ws4.cell(row=1, column=col).fill = header_fill + +lines = md_content.split('\n') +line_num = 1 +for line in lines: + clean_line = clean_text(line) + if clean_line: + ws4.append([line_num, clean_line]) + line_num += 1 + +ws4.column_dimensions['A'].width = 10 +ws4.column_dimensions['B'].width = 200 +for row in range(2, line_num+1): + ws4.cell(row=row, column=2).alignment = Alignment(wrap_text=True, vertical='top') + +# 保存文件 +output_path = "/root/.openclaw/workspace-xiaobian/output/U19-5_星际通讯_完整剧本.xlsx" +wb.save(output_path) +print(f"✅ Excel文件已成功生成:{output_path}") +print(f"📋 包含以下Sheet:") +print(f" 1. 基本信息") +print(f" 2. 剧情梗概(结构化表格)") +print(f" 3. 剧本标注说明") +print(f" 4. 完整剧本内容(逐行导出)") diff --git a/scripts/export_u19_5_to_excel.py b/scripts/export_u19_5_to_excel.py new file mode 100644 index 0000000..3f3805b --- /dev/null +++ b/scripts/export_u19_5_to_excel.py @@ -0,0 +1,47 @@ +import pandas as pd +import re +from openpyxl import Workbook +from openpyxl.utils.dataframe import dataframe_to_rows + +# 读取Markdown文件 +with open('/tmp/u19_5.md', 'r', encoding='utf-8') as f: + md_content = f.read() + +wb = Workbook() + +# 第一个sheet:基本信息 +ws1 = wb.active +ws1.title = "基本信息" +ws1.append(["U19-5 星际通讯 剧本"]) +ws1.append([]) + +# 提取剧情梗概 +ws2 = wb.create_sheet("剧情梗概") +plot_pattern = r'(.*?)' +plot_match = re.search(plot_pattern, md_content, re.DOTALL) +if plot_match: + plot_table = plot_match.group(1) + rows = re.findall(r'(.*?)', plot_table, re.DOTALL) + plot_data = [] + for row in rows: + cells = re.findall(r']*>(.*?)', row, re.DOTALL) + cleaned_cells = [re.sub(r'\s+', ' ', cell.strip()) for cell in cells] + plot_data.append(cleaned_cells) + for r in plot_data: + ws2.append(r) + +# 第三个sheet:完整Markdown内容 +ws3 = wb.create_sheet("完整剧本内容") +ws3.append(["完整剧本内容"]) +ws3.append([]) +lines = md_content.split('\n') +for line in lines: + # 去除lark标签,保留纯文本 + clean_line = re.sub(r'<[^>]+>', '', line).strip() + if clean_line: + ws3.append([clean_line]) + +# 保存Excel文件 +output_path = "/root/.openclaw/workspace-xiaobian/output/U19-5_星际通讯_剧本.xlsx" +wb.save(output_path) +print(f"Excel文件已保存到: {output_path}")