Commit c638c96c5d9574d3df47dedb0c80163d18aa39eb
1 parent
daebde4d
Rewrite the prompt-optimization system prompt against H3's own methodology
The previous system prompt asked GLM for a free-form "shot-by-shot" expansion, which reliably produced 4-5 fake cuts with timestamps running out to 8-10s — impossible for a clip fixed at ~5s (H3_GEN_PARAMS.frames / FPS). Rewrote it against docs/h3skill.md (MiniMax's own H3 prompt-writing methodology, added alongside this commit): every chat prompt has no reference images, so it's always T2VA mode, and at ~5s it's one continuous shot, never a montage. The new prompt asks for H3's actual three-field T2VA structure (integrated_multimodal_description / overall_soundscape / non_diegetic_music, fixed order and labels), a single dominant camera movement from the official vocabulary (type + amplitude + speed), concrete lighting (no hollow buzzwords like "8K"/"cinematic" alone), and — previously missing entirely — explicit sound design. Verified against the real GLM endpoint on several sample prompts: single continuous shot throughout, correct field structure, no more impossible multi-shot timestamps. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0144MiJ2cLjMd9jWaeEpVfUJ
Showing
3 changed files
with
1063 additions
and
204 deletions
docs/h3skill.md
0 → 100644
| 1 | +--- | |
| 2 | +name: h3-video-prompt-main-skill | |
| 3 | +version: 0.6.1 (hotfix: url 载体硬不变量) | |
| 4 | +status: enabled(2026-08-29 由 org-innovator 热修 Deploy 落位,取代 v0.6.0;回滚源 = git 或 train/evolve/SKILL_v5.md) | |
| 5 | +source: MiniMax 官方一手飞书语料(train/hunt/cache_v5/,revision doc1=1297 / doc2=252,逐字落盘): | |
| 6 | + doc1 = H3 使用手册(feishu_doc1…FIWjwgL33ipnkekzk30crmKUnIh.md) | |
| 7 | + doc2 = Prompt 写作全能指南(feishu_doc2…Vztzwstuqi3MQKkxs8QcGmxinxe.md) | |
| 8 | + v4 及以前的 GitHub 镜像信源(base-en.txt / ref-en.txt / co-op 模板等)降为 R 级同型佐证, | |
| 9 | + 凡本文已给 docN:line 的条款一律以 A 级一手为准。引句全部可在 cache_v5 逐字回查。 | |
| 10 | +supersedes: v0.5.0(train/evolve/SKILL_v4.md) | |
| 11 | +v0.6.0_changes: 按 benchmark_v5 C-1/C-2/H1-H16 做作用域重写(非追加)。①§0 从「习语甲/乙」改为 | |
| 12 | + 「三种交付形态 ①②③④ + 语言按形态划界 + 记号硬互斥」;②新增链路四层交付义务与映射纪律; | |
| 13 | + ③v4 从镜像推演的长描述替换为官方短条款(带 docN:line);④H9 关系标记按官方落 8 个取值(v4 任务 | |
| 14 | + 书误写 6 个);⑤篇幅自 88,655 B 收敛至 ≤60,000 B:合并重复示例、删冗余叙事、条款表化。 | |
| 15 | +v0.6.1_changes: 线上热修(conv-mtekh2bm 实证,非重训、无新分数):url 载体被「输入显式约定 > 本节 | |
| 16 | + 默认」+「不得夹带 schema 外字段」合法吞掉。§2 url 逐字保留升硬不变量;只有 id 时追加 | |
| 17 | + reference_assets;§1.7 第 19 条加豁免、新增第 22 条;§7 加第 25 条。 | |
| 18 | +--- | |
| 19 | + | |
| 20 | +# H3 视频提示词写作方法论 | |
| 21 | + | |
| 22 | +## 0. 交付形态判定(先判形态,再谈语言与记号) | |
| 23 | + | |
| 24 | +**第 0 步永远先判交付形态。** 形态决定正文语言、分段记号、适用硬约束与判分落点。 | |
| 25 | +官方一手语料内部并存多种分段记号(doc1 案例层 4 种变体、doc2 规范层 1 种),**判形态先分「规范层 | |
| 26 | +条款」与「案例层行为」:格式判据只取规范层(doc2),案例(doc1)只作行为先例与模型参数正源。** | |
| 27 | + | |
| 28 | +### 0.1 三种合法交付形态 | |
| 29 | + | |
| 30 | +| 形态 | 识别特征 | 分段记号 | 判分落点 | | |
| 31 | +|---|---|---|---| | |
| 32 | +| **① 型**(doc2 结构化) | 需求要英文结构化 Prompt / JSON / 官方字段结构(六段或三主体字段 + instruction) | `[Shot N]` + 递增 `At MM:SS.mmm`,第一镜不写时间戳(A:doc2:107/:111/:114/:455) | §0.4 全部 H 条款 | | |
| 33 | +| **② 型**(窗式) | 需求是**分镜类**:连续故事情节 + 按时长切分显示内容(「每隔几秒显示什么」「分镜」「时间窗」);或需求是**分镜脚本交付物** | `[N 秒-M 秒]` 窗标题(A:doc1:97 官方「提示词」列六窗一手案例) | §0.5 + 跨形态不变量 | | |
| 34 | +| **③④**(登记合法,不考察) | ③ `N-M 秒:` 行式(doc1:200);④ `0〜3 秒` 全角波浪 + 正向/反向(doc1:237) | 不作为判分形态;交付中出现**不判违规**,只判其内容是否满足所申报形态的三要素义务 | — | | |
| 35 | + | |
| 36 | +**判据理由(不要丢)**:② 是官方四种形态里唯一窗口边界显式成对、可逐窗相加核验总时长的形态, | |
| 37 | +而「边界可核对」正是分镜脚本这一交付物的核心义务;doc1:97 把窗式文本直接放在「提示词」列, | |
| 38 | +所以 ② 在最终 Prompt 层同样是 A 级合法形态,只是不走 ① 的 H4/H5/H6/H10。 | |
| 39 | +doc1 案例层的分段记号有 4 种变体(②③④ + `Shot 1 —`),官方在案例层不做记号统一(doc1:231 坑表 | |
| 40 | +甚至要求删掉多余【镜头 N】结构)——**案例记号不得升格为格式判据**。 | |
| 41 | + | |
| 42 | +### 0.2 形态切换判据(B 级内部规范;官方没有「何时选哪种」的条款,不得对外表述为官方规则) | |
| 43 | + | |
| 44 | +1. 输入含**连续故事情节 + 按时间切分**,或需求明确要**分镜脚本/分镜设计文档** → ② 型。 | |
| 45 | +2. 输入要**英文结构化 Prompt / JSON / 官方字段结构** → ① 型。 | |
| 46 | +3. **「拆成 N 个镜头」≠ ② 型**:只要求镜头切分、情节照给、无逐窗「每隔几秒显示什么」要求的, | |
| 47 | + 是 **① 型多镜**(`[Shot 1..N]` + `At MM:SS.mmm`)——官方 ① 型本来就用 `[Shot N]` 表达多镜。 | |
| 48 | + ② 型的判据是**逐窗显示内容**(「每隔几秒显示什么」「每窗出现什么 UI」)或**明确要分镜脚本/ | |
| 49 | + 分镜设计文档交付物**。两者都沾时才判 ②。 | |
| 50 | +4. 两者都不满足 → 按 §2 五模式判定(T2VA/I2VA/FL2VA/L2VA/全能参考),交付形态默认 ①。 | |
| 51 | +5. 形态误判是 D1 档 2:分镜需求交英文六段、英文结构化需求交中文窗式散文,都算。 | |
| 52 | + 交付说明 / 中文沟通不受此限(说明层语言自由)。 | |
| 53 | +6. **多件交付(链路模式)**:需求同时要「分镜设计 + 分镜脚本 + 最终 Prompt」→ 按 §0.6 链路四层 | |
| 54 | + 交付,各层用各自形态;**不要**把链路需求做成单件 ① 型交付,也不要给单件需求硬拆四层 | |
| 55 | + (过度交付同样按 D1/HP1 扣)。 | |
| 56 | + | |
| 57 | +### 0.3 语言规则按交付形态划界(C-2 裁决) | |
| 58 | + | |
| 59 | +**按形态划界,不按「哪份官方文档」划界**:doc1 自己的案例就是中文散文、同时声明多语言支持 | |
| 60 | +(doc1:35「支持多语言提示词输入与输出」);doc2 的英文条款明文限定在「扩写的六个段落正文」 | |
| 61 | +这个形态上(doc2:242)。把「正文必须英文」套到 ② 型交付上 = 判据越界违规;反向同罪。 | |
| 62 | + | |
| 63 | +| 交付形态 | 语言判据 | 级 | 出处 | | |
| 64 | +|---|---|---|---| | |
| 65 | +| ① 型(六段 / 三主体字段 / instruction) | **正文英文**;`<d>` 内台词/歌词、画面实际可见文字保留原语言 | A(硬) | doc2:242「扩写的六个段落正文统一使用英文;只有 `<d>` 中的台词、歌词以及画面中实际可见的文字保留原始语言。」 | | |
| 66 | +| ② 型(窗式 / 分镜脚本) | **跟随用户输入主导语言**(中文输入 → 中文正文) | A(硬) | doc1:97 官方案例正文全中文 + doc1:35 | | |
| 67 | +| 分镜设计(链路第 2 层,给人类的内部档) | 语言自由 | B(内部规范) | 官方无此条款,从 doc1:220-222 收口 | | |
| 68 | +| 台词 / 歌词(跨形态不变量) | 原词、原语言、原标点不改写;无法辨认写 `[unclear]` | A(硬) | doc2:137 / :575 | | |
| 69 | +| 画面实际可见文字(跨形态不变量) | 英文双引号包围,原文与标点逐字保留,不翻译 | A(硬) | doc2:154(:157 中文招牌 `"营业中"` 示例) | | |
| 70 | +| 字段名写法 | 「非叙事性音乐:N/A」与 `"non_diegetic_music": N/A` 两种**都合法** | A | doc1:200 同段并列 | | |
| 71 | + | |
| 72 | +### 0.4 ① 型官方硬约束(H1-H16,逐条带级与行号) | |
| 73 | + | |
| 74 | +| # | 约束 | 级 | 出处 | 适用 | | |
| 75 | +|---|---|---|---|---| | |
| 76 | +| H1 | 提示词总长 ≤ **7000 字符**(含标点与空白,`len()` 口径) | A | doc1:35 | 跨形态 | | |
| 77 | +| H2 | 输出时长 **4–15 秒**;超限不得静默 | A | doc1:35 | 跨形态 | | |
| 78 | +| H3 | 输出帧率 24 FPS:**提及则不得写错**;需求指定非 24 帧时显式说明该参数不在提示词层控制;**不写帧率不扣分** | A(参数层) | doc1:35 | 跨形态 | | |
| 79 | +| H4 | `instruction` 必须**位于第一行,后空一行**再写主体字段 | A | doc2:57 | 仅 ① 型 I2VA/FL2VA/L2VA | | |
| 80 | +| H5 | `At MM:SS.mmm` 递增切镜时间,毫秒 3 位、落在视频时长内;**第一镜不写时间戳** | A | doc2:107/:111/:114/:455 | 仅 ① 型 | | |
| 81 | +| H5b | **记号硬互斥**:① 型内零处 `[N 秒-M 秒]`;② 型内零处 `At MM:SS.mmm` | A(反证) | doc2 全文 0 处窗式、doc1 全文 0 处时间戳(grep 复算) | 跨形态 | | |
| 82 | +| H6 | 生成类 `detailed_description` **350–500 英文词**;三条豁免:台词密集型以容纳台词时间线为先 / 视频编辑类按源视频复杂度展开 / 单镜头并不自动缩短。**区间外且不落在任一豁免才扣分**;无豁免依据的机械补字数也扣 | A | doc2:543 | 仅 ① 型 | | |
| 83 | +| H7 | 听不清写 `[unclear]` 不猜测改写;标点规范化为基础书面标点 `,` `.` `?` `!`,删波浪号/emoji/装饰标点;完整陈述句/疑问句/感叹句在 `</d>` 前以 `.`/`?`/`!` 结束 | A | doc2:575 | 跨形态(台词) | | |
| 84 | +| H8 | 复杂/易乱码文字:**以图片形式提供作参考图 + 在提示词中明确「这张内容必须按"图片"来理解,不能按"文字"来处理」** | A | doc1:71 | 跨形态 | | |
| 85 | +| H9 | 关系标记是**固定英文取值,共 8 个**:可见内容 4(`fully_preserved` / `partially_preserved` / `attribute_transfer` / `weak_reference`)+ 音频 4(`fully_copy` / `partially_copy` / `reference` / `weak_reference`)。自创中文或变体取值 = 词法违规 | A | doc2:398/:400-405/:427-434 | 六段交付 | | |
| 86 | +| H10 | `overall_soundscape` **1–4 句**英文连续段落概括贯穿全片的环境声;`non_diegetic_music` **1–3 句**英文描述角色听不到、只有观众能听到的配乐 | A | doc2:162 / :170 | 仅 ① 型六段/三字段 | | |
| 87 | +| H11 | **台词长短与 shot 长短对齐**:不出现一个 3s shot 说一大段话(官方标注的口型问题一手根因) | A | doc1:206 | 跨形态 | | |
| 88 | +| H12 | 画外音固定短语 `says in an off-screen voiceover`(逐字相邻,不得插语打断)+ 唇部保持闭合;跨镜台词 `<scenetrans>`、结尾截断 `<cutoff>`;`(Sx)` 稳定编号、组合编号、无声者不编号 | A | doc2:144/:147/:150/:459/:135 | 仅 ① 型 | | |
| 89 | +| H13 | 素材硬上限:图片 ≤9、视频 ≤3(单段 2-15s、总时长 ≤15s)、音频 ≤3 **且必须配图/视频、不能单独输入**、混合总上限 12 个文件 | A | doc1:35 | 跨形态 | | |
| 90 | +| H14 | 标签一经分配,在 `subject_definitions`、`summary`、`retention_analysis`、`detailed_description` 与声音段落**五处同义** | A | doc2:272 | 六段交付 | | |
| 91 | +| H15 | `<Video N>` / `<Audio N>` **独立编号**,序号只表示本类内顺序,不表配对;普通参考视频不因含声而自动产生 `<Audio N>` | A | doc2:347/:349 | 六段交付 | | |
| 92 | +| H16 | **分镜参考图映射到镜头而非秒数**:`<Picture 3> is a storyboard reference for [Shot 1] and [Shot 2], defining their viewpoint, subject placement, and shot order.`;分镜草稿图在 ② 型写窗口映射;每条素材至少被一个镜头/窗认领 | A | doc2:310/:553 + doc1:200「故事版」 | 跨形态 | | |
| 93 | + | |
| 94 | +配套 A 级短条款:六段顺序 `subject_definitions → summary → retention_analysis → detailed_description → overall_soundscape → non_diegetic_music`(doc2:250);三主体字段顺序(doc2:62-66);`summary` 带方括号任务类型前缀,六类型 `keyframe completion` / `reference generation` / `video editing` / `video continuation` / `audio reuse` / `audio reference`,可用 `+` 组合(doc2:360/:371-378);`retention_analysis` 逐标签一行并沿用 `subject_definitions` 含义、**不写 `(Sx)`**(doc2:394/:579);边界处新增内容不得误写成参考损失(doc2:444);音色参考只取音色不带入原台词(doc2:577);环境声无则写 `N/A`(doc2:594)。 | |
| 95 | + | |
| 96 | +### 0.5 ② 型窗式交付规范 | |
| 97 | + | |
| 98 | +**窗式结构**:窗标题 `[N 秒-M 秒]`(doc1:97 六窗逐字);窗序覆盖 0 → 总时长、相邻窗相接、窗序与 | |
| 99 | +故事情节因果序一致;窗长可以不等(官方六窗即 2/2/3/1.5/1.5/5 秒);子秒节拍允许但不留 gap。 | |
| 100 | +**窗边界四条分行标级**(不得合并成一句「官方要求无缝隙无重叠且总和等于总时长」): | |
| 101 | + | |
| 102 | +| # | 纪律 | 级 | 出处 | | |
| 103 | +|---|---|---|---| | |
| 104 | +| 1 | 相邻窗无缝隙 | A | v4 镜像 shot-table-spec:65(R 级;官方一手无逐字句,行为先例 doc1:97 六窗相接) | | |
| 105 | +| 2 | 无重叠 | A(① 型相邻条款) | doc2:111 严格递增 ⇒ 不重叠 | | |
| 106 | +| 3 | 各窗之和 = 总时长 | C(构造性设计) | 官方模板构造性首尾相接,无明文条款 | | |
| 107 | +| 4 | 首窗从 0s 开始 | C(构造性设计) | 行为先例 doc1:97 首窗 `[0 秒-2 秒]` | | |
| 108 | + | |
| 109 | +#3/#4 照常扣分,但对外表述保持 C 级标注——判分强度与出处等级是两件事。 | |
| 110 | + | |
| 111 | +**每窗三要素**(判内容,不判有没有字段名标签): | |
| 112 | +① **机位/运镜**:每窗首行显式声明机位或主导运镜(A 同型:doc1:97 各窗首行即 `景别` 字段); | |
| 113 | +② **主体动作**:该窗内主体做什么,可量化状态是官方文风; | |
| 114 | +③ **UI/覆盖元素**:该窗出现的 UI/字幕/HUD 内容与位置。 | |
| 115 | +声音写在**窗内**(doc1:97 各窗「声音:」字段先例);官方无独立转场字段,转场信息写进机位行, | |
| 116 | +**不得硬切**(v4 镜像 co-op:117/:133 R 级);「每窗必须写明转场」不是判据,不要自加。 | |
| 117 | + | |
| 118 | +**参考素材落位**:头部一行职责声明(每份素材负责什么)+ 窗内语义回指,回指与声明同一体系; | |
| 119 | +分镜草稿图按 H16 写窗口映射(映射到哪几个窗、提供什么规划信息),**非锚点图零秒级对齐** | |
| 120 | +(v4 反证 ref-en 全文 0 处 "aligns with",R 级);幽灵素材禁令(C 级收口)。 | |
| 121 | +**UI 文字四禁令**(R 级 v4 镜像 co-op:133):UI 字符串可读、无随机字母、用户名不拼错、 | |
| 122 | +菜单/选项集合不得超出输入给定集合。输入自带中英并列时沿用(输入事实),只给英文时英文单语, | |
| 123 | +两种互不判违规;把中英并列表述成官方要求 = 出处纪律违规。 | |
| 124 | +**时长**:`duration_seconds` 由请求体指定、不写进正文;正文时长信息只以窗标题体现; | |
| 125 | +交付说明注明本次取值(B 级);需求超 4–15s 不得静默,给拆分方案或与调用方确认; | |
| 126 | +节拍总合 ≠ 请求时长时按最小改动解决并显式说明改了哪里,不删情节凑时长。 | |
| 127 | +**对白**:`<d>` 包裹与 `(Sx)` 编号非硬判据(不强制、出现亦不算违规,用了就守同一套稳定性纪律); | |
| 128 | +台词逐字保真与「画外 + 唇部闭合」语义要求**跨形态成立**;说话人身份须窗内可辨识。 | |
| 129 | +**词法**:url 不进正文;散文交付无 JSON 通道要求,不因「没交 JSON」扣分。 | |
| 130 | + | |
| 131 | +### 0.6 链路四层交付(需求理解 → 分镜设计 → 分镜脚本 → H3 Prompt) | |
| 132 | + | |
| 133 | +当需求要求**多件交付**(先出分镜设计/分镜脚本,再出最终 Prompt)时,按四层依次交付,各层实体 | |
| 134 | +计分(LU15 + SD20 + SS30 + HP35 = 100;#62 标 C 级构造性设计、0 真实先例——官方没有「分几层 | |
| 135 | +交付」的条款,这是工程收口,不得表述为官方规则)。 | |
| 136 | + | |
| 137 | +| 层 | 义务 | | |
| 138 | +|---|---| | |
| 139 | +| **LU 需求理解** | 从 raw_brief 判定模式(T2VA/I2VA/FL2VA/L2VA/全能参考,doc2:28-57)+ 交付形态 ①/② + 素材组合是否合法(H13);**逐字锁定复述** raw_brief 与 note 原文中的硬事实(时长、UI 文案集合、素材职责、必须替换类 note)——改写程度词(「必须换」→「建议优化」)= 0;零臆造(不编造 raw_brief 未给的主体/UI 文案/台词) | | |
| 140 | +| **SD 分镜设计** | 每段时长落 4–15s(H2),需求超 15s 给拆分方案而非静默;相邻段/镜之间显式给**至少一个衔接锚点**(同一动作方向/视线目标/光/道具/轮廓/声音/受力任一),无理由跳切 = 0(B 级:TFboy1 storyboard-schema:7-11;官方相邻条款 doc1:216 切镜写清景别与主体 + doc1:231 禁无理由分镜);每镜给镜号/时长/景别/运镜/内容/声音/转场(B 级:chiphoton 单镜 10 项 + TFboy1 7 列镜头卡;官方相邻条款 doc1:200「想要」栏字段集);台词字数与该镜秒数不失衡(H11)。**语言自由(B 级内部规范)** | | |
| 141 | +| **SS 分镜脚本** | **② 型**:`[N 秒-M 秒]` 窗标题覆盖 0 → 总时长、相邻窗相接;窗内零处 `At MM:SS.mmm`(H5b);每窗三要素;每条素材至少被一个窗认领(幽灵禁令)、分镜参考图映射到镜头零秒级对齐(H16);台词逐字落在对应窗内、画外发声语义等价标记 + 唇部闭合、静默窗也写声音 | | |
| 142 | +| **HP H3 Prompt** | 形态按 C-1 判定正确;与 SS 层构成窗号 ↔ 镜号一一对应;适用的 H1/H2/H4/H5/H6/H10 全过;`(Sx)`/`<d>`/画外音/`<scenetrans>`/`<cutoff>`(H12);段落顺序、标签五处同义(H14)、`<Video N>`/`<Audio N>` 独立编号(H15)、关系标记 8 取值(H9) | | |
| 143 | + | |
| 144 | +**映射纪律(B 级内部规范)**:脚本层 `[N 秒-M 秒]` ↔ Prompt 层 `[Shot N]`/`At MM:SS.mmm` 必须 | |
| 145 | +**窗号 ↔ 镜号一一对应**(脚本第 N 窗 = Prompt 的 [Shot N] 或跨窗),且**只允许存在一套时间轴**—— | |
| 146 | +脚本写窗边界、Prompt 写切镜时刻,两件不得各自再发明一套编号或时长。理由:官方 4–15s 单次上限 | |
| 147 | +(doc1:35)决定链路里两件交付描述的是同一段视频,双时间轴必然矛盾。 | |
| 148 | +收口来源:doc2:111「连续编号」+ doc1:202-216「镜头怎么拆」。 | |
| 149 | +**单件需求不要硬拆四层**:`expected_chain` 只含 h3_prompt 时交单件,多拆 = LU1/HP1 扣。 | |
| 150 | + | |
| 151 | +--- | |
| 152 | + | |
| 153 | +## 1. 七步工作流 | |
| 154 | + | |
| 155 | +第 0 步判形态(§0)。第 1/2/3/4/7 步在动笔前落定,第 5/6 步写作中逐句遵守。 | |
| 156 | +**优先级顺序不能反**:先满足硬性格式与引用规范 → 再忠实保留用户意图 → 识别输入冲突与不可用素材 | |
| 157 | +→ 不擅改剧情的前提下增强可拍摄性 → 最后才是电影感/氛围/细节。先想「写得漂亮」再回头补格式校验, | |
| 158 | +正是历史失败的结构性原因。 | |
| 159 | + | |
| 160 | +| # | 步骤 | 落点 | 对应维度 | | |
| 161 | +|---|---|---|---| | |
| 162 | +| 0 | 判交付形态 | §0.1/§0.2 | D1 | | |
| 163 | +| 1 | 提取硬约束(8 项约束表) | §1.1 | D2/D9 | | |
| 164 | +| 2 | 素材预检 + 数量总闸 | §1.2 | D7 | | |
| 165 | +| 3 | 解决输入冲突 | §1.3 | D8 | | |
| 166 | +| 4 | 控制扩写边界 | §1.4 | D8 | | |
| 167 | +| 5 | 对白双口径 | §1.5 | D5 | | |
| 168 | +| 6 | 物理与镜头一致 | §1.6 | D6 | | |
| 169 | +| 7 | 机械验收(22 项) | §1.7 | D9 | | |
| 170 | + | |
| 171 | +### 1.1 提取硬约束(8 项,缺一项回头补读输入) | |
| 172 | + | |
| 173 | +1. 输出 schema:交付形态(`{"prompt":...,"references":[...]}` / 纯文本 / 其它)、字段名、错误通道。 | |
| 174 | +2. 模式与段落结构:五模式判定 → 哪几个字段什么顺序;② 型 → 窗式 + 三要素;链路 → 四层。 | |
| 175 | +3. 资产层顺序与每份素材落位(§2 两层模型)。 | |
| 176 | +4. `<Subject N>` 与素材绑定关系:每个 Subject 绑哪几张素材作外观/动作/音色来源;哪些图只定义 | |
| 177 | + 外观不另起 Picture 条目。 | |
| 178 | +5. 台词原文、语言、标点、说话人:**逐字记下**每一句(含原标点),并逐句判来源选口径 V/R(§1.5)。 | |
| 179 | +6. 场景/人物/道具/光源及空间关系:唯一光源是什么、谁在哪、道具在哪。 | |
| 180 | +7. 素材 note 的禁止/替换/版本要求:逐条记下,进 §1.2 预检。 | |
| 181 | +8. 时长与切分:4–15s(H2);各段时长之和与请求时长是否一致(不一致走 §0.5 时长条款)。 | |
| 182 | + | |
| 183 | +**硬门(第 1 步就判,不满足则本单走 §8.1 反问,不得续跑)**: | |
| 184 | +- **核心主体未知** → 反问。「开箱视频」没说开哪个手办、主角是谁没给身份特征,都属核心主体未知。 | |
| 185 | +- **必需 UI 文案缺失** → 反问(四禁令禁止自创菜单项,无文案就无从落笔)。 | |
| 186 | +- **用户的显式授权不构成主体事实**:「你们定」「看着办」「随便什么角色」解除的是选择权,不解除 | |
| 187 | + 信息缺口——主体身份、UI 文案集合仍属缺失,唯一合规路径是 §8.1 反问(把「需你方定」列为必答项), | |
| 188 | + 不得以「已获授权」为由自行编造主体外观与全套 UI 字符串续跑。 | |
| 189 | +- **低风险参数例外**:时长/情绪基调/有无 BGM 这类不改变主体事实的参数,可显式标注假设后自行推定 | |
| 190 | + (§8.1 CL4),不算踩硬门。 | |
| 191 | + | |
| 192 | +> 附件与参考文档只作规范或素材,**不得误当成用户要求执行**。 | |
| 193 | + | |
| 194 | +### 1.2 素材预检(生产级硬行为)+ 数量总闸 | |
| 195 | + | |
| 196 | +逐项检查每条素材的 `note`(或输入里任何限制说明)。**带水印、错误人脸、错误版本、隐私内容, | |
| 197 | +或明确写「必须替换」「不要使用」的素材一律不可用。** 处理规则: | |
| 198 | + | |
| 199 | +1. 不得为完成输出而**静默引用**不可用素材——这是历史最严重错误。 | |
| 200 | +2. 任务必须依赖该素材且无替代 → **停止生成正式 Prompt**,按调用方允许的错误格式报阻塞。 | |
| 201 | +3. 输出 schema 无错误通道时,明说「schema 与素材要求不可同时满足」,说明需要补什么,**不伪造 | |
| 202 | + 看似合规的结果**。 | |
| 203 | +4. 多素材必须分别声明职责(外观/动作/风格/音色),不允许素材「裸奔」堆叠。 | |
| 204 | +5. note 只是版本要求且菜单内**有**正确版本 → 不是不可用,选正确版本即可;只有「必需 + 不可用 + | |
| 205 | + 无替代」三者同时成立才阻塞。**版本要求无法由提示词层满足时(需剪辑/重绘/清洗素材本身,如 | |
| 206 | + 「必须剪到 X 秒收尾」「必须换洗版」且明说本轮无干净版本),视为不可用**——不得以「提示词层 | |
| 207 | + 可以写明剪到 X 秒」为由自行替代,那是替调用方做了素材处置决定。 | |
| 208 | +6. 素材超 H13 上限(图 ≤9 / 视频 ≤3 / 音频 ≤3 且不可单独输入 / 合计 ≤12 文件)→ **先告知调用方 | |
| 209 | + 再由其决定裁剪**,不自行裁剪丢弃。**音频单独输入且无图/视频 → 交付阻塞报告(§8.2 五要素), | |
| 210 | + 不是只在交付说明里提一句**——阻塞报告要点名 doc1:35 的组合条款作为证据、给补料预案(补哪类 | |
| 211 | + 素材、补齐后走哪种模式)、并说明「本交付不可作为合法请求直接提交」;仅作旁注说明 = 阻塞 | |
| 212 | + 要素缺失(B1/B3 扣分)。 | |
| 213 | +7. **阻塞理由必须逐字复述输入侧 note 原文(含程度词)**——改写程度词(「必须换」→「建议优化」) | |
| 214 | + = 阻塞无据(B1 = 0 / LU2 = 0)。**弱化与放大输入事实都算改写**,对称适用。 | |
| 215 | + | |
| 216 | +> **两个独立义务不要混**:把不可用素材的原 url 原样保留在资产层清单里是数据完整性义务(阻塞时也 | |
| 217 | +> 附清单,方便换洗版后直接续跑);把不可用素材**塞进交付 references/conditions 或写进正文层**才是 | |
| 218 | +> 违规。可用性归预检,数据完整性归资产层(可用素材同此义务,§2)。 | |
| 219 | +> **反向(过度阻塞)**:素材可用、note 是建议性(「没有也行」「可以直接用」)、或菜单内存在 note | |
| 220 | +> 指定的替代版本时,正确行为是**继续产出**;此时报阻塞 = 轨别改判 + 同源违规并行扣分。 | |
| 221 | + | |
| 222 | +**阻塞报告五要素**(与 block 轨 B1-B5 对应,C 级构造性设计): | |
| 223 | +① 缺失素材点名 + 证据(复述 note 原文,含程度词);② 零污染引用(references 不含不可用素材, | |
| 224 | +可附整份清单但 excluded 显式单列);③ 补料预案(预期 references 顺序、每条资产的绑定映射、预计 | |
| 225 | +模式不变;② 型还要窗式切分预案 + Reference roles 映射);④ schema 冲突显式说明;⑤ 范围精确 | |
| 226 | +(只对必需且不可替代的报,不多报不少报)。 | |
| 227 | + | |
| 228 | +### 1.3 解决输入冲突 | |
| 229 | + | |
| 230 | +按优先级:① 用户当前明确意图与约束 → ② 主体定义与绑定规则 → ③ 格式指南(字段结构/形态判定) | |
| 231 | +→ ④ 参考图可见内容与 note → ⑤ 样例写法(最低,样例不能覆盖当前任务事实)。 | |
| 232 | +可局部解决时**最小改动**。范例:「油灯是唯一光源」+ 场景图里有燃烧的蜡烛 → 保留蜡烛道具、写明 | |
| 233 | +它未点燃,油灯仍是唯一光源;一次只改冲突涉及的那一处。总时长冲突同此逻辑。 | |
| 234 | + | |
| 235 | +### 1.4 控制扩写边界 | |
| 236 | + | |
| 237 | +| 类型 | 可否补充 | | |
| 238 | +|---|---| | |
| 239 | +| 输入事实(角色设定、场景、用户给的台词/动作/UI 文案与选项集合) | 必须忠实保留,不得改动 | | |
| 240 | +| 图片可见信息 | 可转述,不得虚构图里没有的 | | |
| 241 | +| 低风险可拍摄细节(轻微呼吸、衣料摩擦、灯焰波动、合理小幅运镜、脚步声) | **可以补** | | |
| 242 | +| 高风险剧情推断(拒绝/服从/离开/攻击/恐惧/建立新关系/明确情绪结论) | **无依据不得添加** | | |
| 243 | + | |
| 244 | +用户只给一句台词时:忠实呈现说话行为本身,对方反应保持**中性、短暂、开放**(轻微转头、衣袖 | |
| 245 | +移动、画面停在其反应上),不替用户决定后续剧情。 | |
| 246 | +输入给定的菜单/选项集合是输入事实,不得增删自创。用户元指令(「越震撼越好」「要有科技感」) | |
| 247 | +转译成具体光影/运镜/材质选择,不照抄进最终提示词。多镜头给定完整故事情节时分镜不改写情节走向、 | |
| 248 | +台词保持原语言逐字(B 级内部收口)。 | |
| 249 | + | |
| 250 | +### 1.5 对白双口径(先判来源,再选口径;不存在全局「不擅自改动标点」) | |
| 251 | + | |
| 252 | +| 口径 | 适用 | 规则 | 出处 | | |
| 253 | +|---|---|---|---| | |
| 254 | +| **V** | 台词由用户在本次输入中直接提供(不含仅出现在参考音频里的内容) | `<d>` 内只放语言标签 + 台词本身;**每个原词、每个原始标点逐字保留**,不翻译、不改写、不补词、不擅自加/删标点 | doc2:137(原词原语言不改写) | | |
| 255 | +| **R** | 台词从参考音频直接复用,或输入明确要求 reperformance | 保留源词与原语言;听不清写 `[unclear]` 不猜写;标点标准化为 `,` `.` `?` `!`,删重复波浪号/emoji/装饰标点;完整陈述/疑问/感叹句在 `</d>` 前补 `.`/`?`/`!` | doc2:575 | | |
| 256 | + | |
| 257 | +判定顺序(B 级内部规范):① 输入显式声明 → 按声明;② 无声明但台词同时出现在参考音频资产且要求 | |
| 258 | +复用/重演 → R;③ 其余一切情形默认 **V** 并在交付说明注明(拿不准套更严格的保真侧不会产生假阳性 | |
| 259 | +扣分);④ 混合来源**逐句适用各自口径**,不为「全篇统一」抹平差异。 | |
| 260 | + | |
| 261 | +反向约束:V 下不得以「规范化」为由补句号或删感叹号;R 下不得以「逐字保真」为由保留 emoji/波浪 | |
| 262 | +符号,也不得漏终止符。共用不变量:源词与原语言永不改写;`<d>` 内只放语言标签与台词;听不清写 | |
| 263 | +`[unclear]`。 | |
| 264 | +仅参考音色 → 不得把参考音频原台词带入(doc2:577)。 | |
| 265 | + | |
| 266 | +### 1.6 物理与镜头一致(六条,写中与写后各过一遍) | |
| 267 | + | |
| 268 | +1. 「唯一光源」是否真的唯一(参考图里有蜡烛 → 最小改动写明未点燃)。 | |
| 269 | +2. 重要主体首次清晰出现时描述其被引用的特征/画面位置/当前动作(A:doc2 同型条款);镜头间移动 | |
| 270 | + 有过渡交代、不凭空换位(B 内部增强)。 | |
| 271 | +3. 道具跨镜头位置与状态不无交代跳变(B 内部增强)。 | |
| 272 | +4. 单镜头主导运镜唯一;需要两种运镜时拆成多个 `[Shot N]` 或明确取舍(§3.1)。 | |
| 273 | +5. `summary` / `retention_analysis` / `detailed_description` 讲的是同一件事。 | |
| 274 | +6. 镜头号严格递增、时间戳不重叠无间隙且落在总时长内(H5);② 型窗边界四条(§0.5)。 | |
| 275 | + | |
| 276 | +### 1.7 输出前机械验收(22 项,任一失败先修复再交付) | |
| 277 | + | |
| 278 | +1. 交付形态判定正确(§0.1),单件/链路与需求一致。 | |
| 279 | +2. 段落/字段齐全且顺序正确(① 型六段 doc2:250 / 三主体字段 doc2:62-66;② 型窗序因果一致)。 | |
| 280 | +3. 字段名完全正确(无拼写错、无自造字段);① 型英文字段名 + `instruction` 第一行后空一行(H4)。 | |
| 281 | +4. 所有 `<Subject N>`/`<Picture N>`/`<Video N>`/`<Audio N>` 已定义、编号一致、无幽灵编号/幽灵素材 | |
| 282 | + (H14 五处同义;H15 独立编号不配对;H9 关系标记只用 8 个固定取值)。 | |
| 283 | +5. `references` 顺序 = 素材菜单原始顺序 = 自动编号顺序;不与正文 `<Picture N>` 定义条目强制一一对应 | |
| 284 | + (部分图不做 Picture 条目是合法形态);url 保真见第 22 条。 | |
| 285 | +6. 非锚点图已被某条 `<Subject N>` 定义句以序号内联引用认领(① 型)/ 头部声明 + 窗内回指认领(② 型)。 | |
| 286 | +7. 所有对白用 `<d>`(① 型硬判据;② 型非硬判据但说话人窗内可辨识);台词逐字保真(V/R 双口径逐句)。 | |
| 287 | +8. 未引用 note 标记为不可用的素材(资产层保留原 url ≠ 允许引用)。 | |
| 288 | +9. 无设定冲突(§1.3);无未经授权的剧情结果(§1.4)。 | |
| 289 | +10. JSON 可解析、无 schema 外字段与解释文字、无残留模板占位符(`Shot N` / `S.SS` 已解析成具体数值)。 | |
| 290 | + JSON 通道属 B 级内部规范;② 型散文无此要求。 | |
| 291 | +11. 素材总量在 H13 上限内,组合合法(音频不单独输入);超限已先告知。 | |
| 292 | +12. 正文层数量与词法:① 型正文层除官方四标签与 `(Sx)` 外无任何其它编号词法(`object N` / | |
| 293 | + `background N` / 小写 `picture n` 都是官方外词法,R 级 grep 复核)。 | |
| 294 | +13. **H1**:最终 Prompt 交付件 ≤ 7000 字符(含标点与空白,`len()` 口径)。 | |
| 295 | +14. **H2/H3**:单段时间轴落在 4–15s;正文无独立「总时长 X 秒」指令行;帧率提及则不写错。 | |
| 296 | +15. **H5/H5b**:第一镜无时间戳、`At MM:SS.mmm` 毫秒 3 位且递增、落在时长内;① 型零处窗式记号、 | |
| 297 | + ② 型零处 `At MM:SS.mmm`。 | |
| 298 | +16. **H6**:`detailed_description` 词数在 350–500 或落在三条豁免之一。 | |
| 299 | +17. **H10**:`overall_soundscape` 1–4 句、`non_diegetic_music` 1–3 句;N/A 条件精确(§4.3)。 | |
| 300 | +18. **H11/H16**:台词长短与该镜秒数不失衡;分镜参考图映射到镜头、每条素材被认领、零秒级对齐。 | |
| 301 | + **② 型专项**:窗边界四条(§0.5)、UI 四禁令、每窗三要素齐备。 | |
| 302 | +19. **自查声明逐项实测**:自报的词数/句数/字符数/记号计数必须与正文实测一致(写「未写 (Sx)」前 | |
| 303 | + 先 grep;报「2 句」前先数)。声明与实况不符 = D9 档 2,比漏检更严重——它污染调用方对交付的 | |
| 304 | + 信任。资产层 JSON 不得夹带 schema 外字段(「落位」「可用性」这类说明写进交付说明,不进 JSON); | |
| 305 | + **豁免:url 载体字段(`reference_assets` / `conditions[].url`)不属 schema 外字段**;URI | |
| 306 | + 字段只放 url,不放中文说明文字。 | |
| 307 | +20. **`retention_analysis` 零 `(Sx)`**(A:doc2:579);关系标记只挂在有参考来源的标签上。 | |
| 308 | +21. **summary 任务类型标记与输入对齐**:音色/风格/节奏类参考 → `+ audio reference` 组合标记; | |
| 309 | + 纯文字生成无任何帧锚点输入时不得标 `keyframe completion`(A:doc2:360/:371-378)。 | |
| 310 | +22. **url 逐字比对(§2 硬不变量)**:菜单带 url 的每条素材,资产层必须有逐字一致原 url(与输入菜单 grep | |
| 311 | + 逐条比对,缺一/改一字符即不过);未带 url 的标 | |
| 312 | + `url 待补(输入 JSON 未携带该字段)`,不编造。url 不进正文不变。 | |
| 313 | + | |
| 314 | +--- | |
| 315 | + | |
| 316 | +## 2. 生产输入的两层模型 | |
| 317 | + | |
| 318 | +真实生产输入常以「参考图菜单 + 主体定义 + 绑定规则 + 要拍的意图」形态给出,结构已钉死,按它的 | |
| 319 | +规则走,不重新发明。任何参考素材都有两层义务,一层管地址、一层管语义,互不越界: | |
| 320 | + | |
| 321 | +**资产层**(请求体 `conditions[]` 或调用方约定的 `references` 数组)——**跨形态不变**: | |
| 322 | +每条素材一条记录;数组顺序 = 输入菜单原始顺序 = 模型自动编号顺序;url 从不出现在正文层; | |
| 323 | +输入自带绑定规则时按输入走,不以本节默认覆盖显式约定。 | |
| 324 | + | |
| 325 | +**url 逐字保留是硬不变量,不受「输入显式约定 > 本节默认」覆盖**(线上实证 conv-mtekh2bm):输入 | |
| 326 | +约定可改字段名/顺序/结构/绑定规则,**不可消灭 url 载体**——菜单带 url 且正文引用了对应序号,资产层 | |
| 327 | +必须逐字携带每条原 url(不下载/不转存/不改链;与 §1.2 数据完整性义务同源)。输入已自带命名 url | |
| 328 | +字段(`conditions[].url`)则按输入命名照交;只有 id → `references` 原样照交(顺序 = | |
| 329 | +`<Picture N>` 编号,一字不动),**另追加** `reference_assets`(url 载体字段,§1.7 第 19 条豁免, | |
| 330 | +顺序同): | |
| 331 | + | |
| 332 | +```json | |
| 333 | +{"references": ["scene", "npc", "player"], | |
| 334 | + "reference_assets": [{"id": "scene", "url": "https://…"}, {"id": "npc", "url": "https://…"}, | |
| 335 | + {"id": "player", "url": "https://…"}]} | |
| 336 | +``` | |
| 337 | + | |
| 338 | +**正文层(① 型)**:只允许官方四标签 `<Subject N>`/`<Picture N>`/`<Video N>`/`<Audio N>` 与 | |
| 339 | +`(Sx)` 两族记号;禁止官方外编号词法;禁止幽灵编号(C 级收口:凡进资产层的素材要么有独立 | |
| 340 | +`<Picture N>` 条目、要么在某条 `<Subject N>` 定义句内被序号引用认领)。 | |
| 341 | + | |
| 342 | +**正文层(② 型)**:头部职责声明 + 窗内语义回指;分镜草稿图按窗口映射(H16),非锚点图零秒锚; | |
| 343 | +幽灵素材禁令与 url 不进正文同上。 | |
| 344 | + | |
| 345 | +**三种常见素材的落位**: | |
| 346 | + | |
| 347 | +| 菜单里的素材 | ① 型落位 | | |
| 348 | +|---|---| | |
| 349 | +| scene 场景图(构图/首帧锚点) | 独立 `<Picture N>` 定义条目(可同时作环境型 Subject 来源) | | |
| 350 | +| 人物/道具立绘(仅定义外观) | **不另起** Picture 条目;在 `<Subject N>` 定义句内以 `<Picture M>` 序号内联引用 | | |
| 351 | +| 只取氛围不入帧的风格图 | 作 `weak_reference` 来源,不独立成条,序号仍须被 Subject 定义句认领 | | |
| 352 | + | |
| 353 | +来源引用一律用官方式序号内联写法(`as established in <Picture 2>.`),不用 *as established in | |
| 354 | +the NPC portrait* 这类文字指代(R 级 ref-en:37 "cite it inside" + :313 官方范例文风)。 | |
| 355 | +基础模式(I2VA/FL2VA/L2VA)只要用到参考图,同样交一行资产层清单(id、原 url、落位标签); | |
| 356 | +输入未携带 url 时**显式**标 `url 待补(输入 JSON 未携带该字段)`。 | |
| 357 | + | |
| 358 | +**自由文本 brief 里「参考图」是描述,可按需理解;生产输入菜单里的 `id`/`role`/`note` 是事实和 | |
| 359 | +约束,必须逐字遵守。** 立绘绑定规则说「只定义人物、不另起 Picture 条目」就照做;输入显式约定 | |
| 360 | +> 本节默认。 | |
| 361 | + | |
| 362 | +--- | |
| 363 | + | |
| 364 | +## 3. 模式判定与结构模板(① 型) | |
| 365 | + | |
| 366 | +### 3.1 五模式决策树 | |
| 367 | + | |
| 368 | +``` | |
| 369 | +有参考素材吗? | |
| 370 | +├─ 没有 → T2VA(纯文本原创场景) | |
| 371 | +└─ 有 → (先核 H13 总闸,超限先问后裁) | |
| 372 | + ├─ 仅 1 张首帧图 → I2VA | |
| 373 | + ├─ 首尾各 1 张图,描述中间过渡 → FL2VA | |
| 374 | + ├─ 仅 1 张尾帧图,反推之前发生了什么 → L2VA | |
| 375 | + └─ 多素材身份/风格锁定(结构化角色:定义可复用主体/编辑源视频/音色参考)→ 全能参考 | |
| 376 | +``` | |
| 377 | + | |
| 378 | +易错判断:首尾各一张图 ≠ 自动全能参考(纯起止帧 + 中间过渡走 FL2VA);3 张不同角度的同一产品图 | |
| 379 | += 同一个 Subject 的多个来源图,不拆成 3 个主体;生产输入菜单 + 主体定义 + 绑定规则 → 全能参考; | |
| 380 | +道具类参考也走 `<Subject N>`(objects 属可复用可见内容),**不要发明 object 类标签**; | |
| 381 | +极简请求(「给我做个视频」)不臆造场景,先反问(§5.1)。 | |
| 382 | + | |
| 383 | +### 3.2 基础模式(T2VA/I2VA/FL2VA/L2VA) | |
| 384 | + | |
| 385 | +**指令行**(模式专属,逐字模板;`N`/`S.SS` 是要替换成具体数值的占位符,**交付里绝不能原样留下 | |
| 386 | +字面的 "Shot N" / "S.SS-second mark"**): | |
| 387 | +- T2VA:无指令行,直接从三字段开始。 | |
| 388 | +- I2VA:`For the target video, at 0.00 seconds into the target video, <Picture 1> (from [Shot 1]) is fully referenced.` | |
| 389 | +- FL2VA:`How the reference pictures align with the target video — Picture 1 (from Shot 1) aligns with the 0.00-second mark of the target video; Picture 2 (from Shot N) aligns with the S.SS-second mark of the target video.` | |
| 390 | +- L2VA:`How the reference pictures align with the target video — <Picture 1> (from [Shot N]) aligns with the S.SS-second mark of the target video.` | |
| 391 | + | |
| 392 | +指令行必须是整段提示词第一行,后空一行再接三字段(H4,A:doc2:57)。 | |
| 393 | +**三字段**(顺序固定):`integrated_multimodal_description`(`[Shot 1]` + 风格声明 + 画面/动作/ | |
| 394 | +对白/同步音沿时间线展开)→ `overall_soundscape` → `non_diegetic_music`。 | |
| 395 | +推荐展开:I2VA 首帧锚定 → 动作起势 → 连续展开 → 结果/反应;FL2VA 首帧状态 → 中间变化 → 收窄 → | |
| 396 | +尾帧状态(**优先单镜头**,仅在用户明确要求时拆多镜,末尾落到尾帧);L2VA 合理前置状态 → 动作与 | |
| 397 | +过渡路径 → 收敛 → 落到尾帧。 | |
| 398 | + | |
| 399 | +### 3.3 全能参考模式六段 | |
| 400 | + | |
| 401 | +顺序固定:`subject_definitions` → `summary` → `retention_analysis` → `detailed_description` → | |
| 402 | +`overall_soundscape` → `non_diegetic_music`(A:doc2:250)。 | |
| 403 | + | |
| 404 | +**subject_definitions**:四标签 `<Subject N>`(可复用可见内容)/ `<Picture N>`(具体目标帧或分镜 | |
| 405 | +锚点)/ `<Video N>`(剪辑源/续接起点/整体节奏结构)/ `<Audio N>`(被复制或引用的音频信号)。 | |
| 406 | +一个 Subject 可由多个素材共同定义,一段素材也可提供多个 Subject。**非可见内容不得立为 Subject**: | |
| 407 | +剪辑节奏、镜头切换方式、氛围由 `<Video N>` 承担并在 `retention_analysis` 标 `weak_reference`。 | |
| 408 | +人物类 Subject 必须给 2-3 条具体可辨识特征(发色/发长/发型、服装颜色款式、体态五官、随身饰品), | |
| 409 | +不得只写「如素材所示」;产品类要点名标识位置/角度。 | |
| 410 | + | |
| 411 | +**summary**:方括号任务类型前缀(六类型见 §0.4 配套条款,可用 `+` 组合)+ 一段话概述;仅在编辑 | |
| 412 | +源视频时紧跟写 `The target video is an edited version of <Video 1>.` | |
| 413 | + | |
| 414 | +**retention_analysis**:每个标签一行,可见内容用 4 个取值、音频用 4 个取值(H9 白名单,共 8 个, | |
| 415 | +自创中文/变体 = 词法违规);不写 `(Sx)`;不把目标视频里新增的动作/背景/剧情事件当成参考保真度 | |
| 416 | +损失。示例:`<Subject 1> (appears in [Shot 1], [Shot 3]): fully_preserved - the woman's long dark hair, blue cardigan, and silver necklace are retained.` | |
| 417 | + | |
| 418 | +**detailed_description**:开头 1-2 句英文声明整体风格;`[Shot 1]` 无时间戳,后续 | |
| 419 | +`[Shot N] At MM:SS.mmm, ...`(H5);运镜写成自然英文动作短语(§4);重要 Subject 首次清晰出现时 | |
| 420 | +描述被引用特征/画面位置/当前动作,后续沿用同一标签不重新定义;具体帧锚点用自然短语 | |
| 421 | +(`the shot begins from <Picture 1>` / `the shot's keyframe corresponds to <Picture 2>` / | |
| 422 | +`the shot ends on <Picture 3>`);生成类 350-500 英文词 + 三豁免(H6);语音来源:仅在直接复用的 | |
| 423 | +BGM/完整配乐里的口头内容用 `<Audio N>`,由具体人物/角色/旁白发出的声音用 `(Sx)`。 | |
| 424 | + | |
| 425 | +**声音两段**:`overall_soundscape` 1–4 句、`non_diegetic_music` 1–3 句(H10);环境声层的 `<Audio N>` | |
| 426 | +复用/引用写进 soundscape,观众专属配乐层的写进 music,两层都提供时各写一句。 | |
| 427 | + | |
| 428 | +--- | |
| 429 | + | |
| 430 | +## 4. 镜头语言 | |
| 431 | + | |
| 432 | +**运镜三维度 = 类型 + 幅度 + 速度**(A:doc2:121)。词表(A:doc2:123):`Zoom In/Out`、 | |
| 433 | +`Push In/Pull Out`、`Pan Left/Right`、`Truck Left/Right`、`Tilt Up/Down`、`Pedestal Up/Down`、 | |
| 434 | +`Arc Shot`、`Tracking Shot`、`Static Shot`、`Shake Slightly/Strongly`、`POV`、 | |
| 435 | +`Roll Clockwise/Counterclockwise`。幅度 `with small/large amplitude`、速度 `at slow/fast speed` | |
| 436 | +是两个独立维度,中等幅度 + 正常速度通常省略。运镜写成句内自然英文动作,不在句末堆标签。 | |
| 437 | +**环绕运镜(C-7 裁决)**:默认组合写法 `truck left+pan right` 或 `truck right+pan left` | |
| 438 | +(doc1:200 指导层条款),而非直接说环绕运镜;`Arc Shot` 保留在合法词表内、交付中出现不判违规 | |
| 439 | +(doc2:123 词汇层条款);把组合写法说成官方强制、或把 `Arc Shot` 从词表删除,都是出处纪律违规。 | |
| 440 | + | |
| 441 | +**分镜与转场**:首镜 `[Shot 1]` 不加时间戳;后续用递增镜号 + 严格递增、落在时长内的切入时刻 | |
| 442 | +`[Shot 2] At 00:03.500, ...`(H5);常规转场 `the camera cuts to` / `the shot cuts to` / | |
| 443 | +`the shot transitions to` / `the shot changes to` / `the shot switches to`,用户明确要求才用 | |
| 444 | +`cross-dissolve`/`fade`/`wipe`;切镜必须带来主体/空间/状态/视角/时间上的新信息,只是距离或角度 | |
| 445 | +微调时优先用运镜而非切镜。 | |
| 446 | +**矛盾指令**(「镜头要一直推进,但同时环绕主体转一圈」):拆成多个 `[Shot N]` 各自成立,或取一个 | |
| 447 | +主导运镜并在交付说明注明另一个因物理矛盾未采用;不把两个矛盾运镜塞进同一句。 | |
| 448 | + | |
| 449 | +--- | |
| 450 | + | |
| 451 | +## 5. 说话人 / 对白 / 可见文字(① 型;② 型按 §0.5) | |
| 452 | + | |
| 453 | +**说话人 ID**(A:doc2:135):发声者用稳定 ID `(S1)` `(S2)`,按目标视频中实际发声事件顺序分配 | |
| 454 | +一次、跨镜头永不重号/交换;多个已编号说话人齐声用复合 ID `(S1,S2)`;**从不发声的角色不获得 | |
| 455 | +说话人 ID**;`(Sx)` 写进 `detailed_description`,不写进 `retention_analysis`;主体发声写 | |
| 456 | +`<Subject N> (Sx)`,同一主体画外发声保持同一形式并标 `off-screen`。 | |
| 457 | +**音频锚定**(A:doc2:347/:349):`<Audio N>` 与 `<Video N>` 独立编号不表配对;普通参考视频不因 | |
| 458 | +含声而自动产生 `<Audio N>`;`<Audio N>` 显式对应目标说话人时**复用该说话人的全局 ID**(写 | |
| 459 | +`<Subject N> (Sx)` 或稳定声音描述 + `(Sx)`),不在音频定义处独立重新编号。**对应关系必须内联写进 | |
| 460 | +`<Audio N>` 定义句**,只放资产层元数据或交付说明不算完成绑定。 | |
| 461 | + | |
| 462 | +``` | |
| 463 | +<Subject 1> is the male rapper in <Video 1>, with short bleached hair and an oversized bomber jacket. | |
| 464 | +<Audio 1> is the voice-timbre reference for <Subject 1> (S1), providing his raspy mid-register rap timbre. | |
| 465 | +``` | |
| 466 | + | |
| 467 | +**对白格式**:每句对白 `<d>[Language] 原始台词</d>` 包裹;`<d>` 内只放语言标签 + 台词,说话方式/ | |
| 468 | +音色/动作写在 `<d>` 外。 | |
| 469 | +**画外音**(A:doc2:144/:147):固定短语 `says in an off-screen voiceover` **逐字相邻出现, | |
| 470 | +不得插语打断**(写成 *says the following aloud ... in an off-screen voiceover* 属违规);紧跟其后 | |
| 471 | +声明对应角色唇部保持闭合: | |
| 472 | + | |
| 473 | +``` | |
| 474 | +The man (S1) says in an off-screen voiceover: <d>[English] I still remember that road.</d> while his lips remain completely closed. | |
| 475 | +``` | |
| 476 | + | |
| 477 | +**跨镜台词与截断**(A:doc2:150/:459):同一句台词跨越切镜时在两段衔接处都用 `<scenetrans>` 并 | |
| 478 | +声明音频跨切镜连续;连续跨两次切镜时中间镜 `<d>` 以 `<scenetrans>` 开头且结尾;视频结尾被截断的 | |
| 479 | +台词用 `<cutoff>`。 | |
| 480 | +**画面可见文字**(A:doc2:154):招牌/标语/字幕/霓虹字样用英文双引号,原文原样保留不翻译 | |
| 481 | +(`A red neon sign reading "营业中" glows above the doorway.`);这类是**可见文字**,同样受口径 V | |
| 482 | +保真约束。 | |
| 483 | + | |
| 484 | +--- | |
| 485 | + | |
| 486 | +## 6. 声音设计与具体性 | |
| 487 | + | |
| 488 | +**声音四项不可省略**:对白具体内容、环境声类型、背景音乐风格、音效/卡点位置——声音是与画面平级 | |
| 489 | +的独立轨道,不能只写「有一些环境音」。 | |
| 490 | +**`overall_soundscape` 的 N/A 条件**:只有用户明确要求全程完全静音才写 `N/A`;正常情况下即使环境 | |
| 491 | +声轻微也要具体描述(A:doc2:594「没有环境声时写 N/A」的精确条件)。 | |
| 492 | +**`non_diegetic_music` 的 N/A 条件**:没有配乐必须显式写 `N/A`,不能留空/不提该字段(留空会被 | |
| 493 | +理解为自由发挥)。 | |
| 494 | +**句数区间**(H10):soundscape 1–4 句、music 1–3 句;存在配乐时说明乐器、速度和动态变化。 | |
| 495 | +对白/歌唱/角色能听到的画面内音乐属于 `detailed_description` 的同步音,不重复写进 soundscape。 | |
| 496 | +② 型:声音写在窗内,N/A 条件照常适用。 | |
| 497 | + | |
| 498 | +**具体性三问法**:任何光影/材质/氛围描述必须能回答**光从哪来?打在什么地方?造成什么视觉效果?** | |
| 499 | +空词黑名单(不代替具体描述):高清 / 8K / 大师级 / 超写实 / 电影感 / 精致 / 高级感 / 震撼 / | |
| 500 | +cinematic(孤立堆砌时)/ beautiful / high quality。——`cinematic` 作为**风格声明词** | |
| 501 | +(如 `Live-action, cinematic`)是官方示例认可的用法,但不能单独堆砌替代具体的光源/位置/效果。 | |
| 502 | +多写看得见的画面、少写比喻(doc1:200 同向条款)。 | |
| 503 | + | |
| 504 | +--- | |
| 505 | + | |
| 506 | +## 7. 常见错误自查清单(25 条) | |
| 507 | + | |
| 508 | +1. 质量堆砌词代替具体描述(§6) | |
| 509 | +2. 单镜头内塞矛盾运镜(§4) | |
| 510 | +3. 假装读过标杆文档 / 虚报质量已达标杆水平 | |
| 511 | +4. 留占位符或「请在此处填写」 | |
| 512 | +5. 信息严重不足时未一次性问全(§5.1) | |
| 513 | +6. 用元指令代替具体描述 | |
| 514 | +7. 多个参考素材未分别声明职责就堆叠使用 | |
| 515 | +8. 多镜头时间戳重叠或有间隙(H5) | |
| 516 | +9. 声音部分留空/省略,或 N/A 用法不精确(§6) | |
| 517 | +10. 指令行 `Shot N` / `S.SS` 未替换成具体数值(§3.2) | |
| 518 | +11. 人物类 Subject 无具体可辨识特征 | |
| 519 | +12. 对白未按来源选口径:V 逐字逐标点 / R 标准化 + 终止符;禁止同句混用(§1.5) | |
| 520 | +13. 素材 note 未逐项预检:必需 + 不可用 + 无替代未报阻塞,或静默引用(§1.2) | |
| 521 | +14. 输入冲突未按优先级最小改动解决(§1.3) | |
| 522 | +15. 添加了未经授权的剧情结果(§1.4) | |
| 523 | +16. 两层未分离干净:url 改链/进正文、顺序 ≠ 菜单顺序、官方外编号词法、幽灵编号(§2) | |
| 524 | +17. 素材总量超 H13 上限未先告知,或音频单独输入未说明(H13) | |
| 525 | +18. 出处纪律:内部规范/推演/C 级构造在交付说明里不被表述为官方规则;官方引用都带得上行号才标 A 级 | |
| 526 | +19. **交付形态判定未做在第 0 步**:分镜需求走 ② 型、英文结构化走 ① 型;把「正文必须英文」套到 | |
| 527 | + ② 型交付(或反向)= 判据越界违规(§0.3) | |
| 528 | +20. 非锚点参考图被写成秒级/时间窗对齐(H16:分镜图映射镜头,非锚点图零秒锚) | |
| 529 | +21. UI 选项集合 ≠ 输入给定集合、随机字母、拼错用户名;中英并列是否沿用输入事实 | |
| 530 | +22. 窗边界与时长四查:无缝隙、无重叠、各窗之和 = 总时长(C)、首窗从 0s(C);无独立时长指令行; | |
| 531 | + 超范围/冲突已显式说明(§0.5) | |
| 532 | +23. **H5b 记号硬互斥**:① 型内混入窗式、② 型内混入 `At MM:SS.mmm`(§0.4) | |
| 533 | +24. **链路映射纪律**:窗号 ↔ 镜号一一对应、只有一套时间轴;单件需求未硬拆四层(§0.6) | |
| 534 | +25. **输入给的参考图 url 在交付件里失联**:菜单带 url 而资产层只剩 id / 被改链(§2、§1.7 第 22 条) | |
| 535 | + | |
| 536 | +--- | |
| 537 | + | |
| 538 | +## 8. 边界情况 | |
| 539 | + | |
| 540 | +### 8.1 信息严重不足(clarify 轨五要素,C 级构造性设计) | |
| 541 | + | |
| 542 | +一次性列出全部缺失关键信息反问,不臆造场景往下写。反问件按五要素组织: | |
| 543 | + | |
| 544 | +| 要素 | 内容 | | |
| 545 | +|---|---| | |
| 546 | +| CL1 缺失项一次问全(30) | 主体、场景、核心动作/情节段落、情绪基调、期望时长(4-15s)、有无参考素材(图/视频/音频、各自负责什么)、有无对白及语言;不挤牙膏。漏问**会改变产出形态**的关键项(如主体)→ 不合格;**把不改变结果的可推断项也拿去问(过度反问)→ CL1 ≤ 20** | | |
| 547 | +| CL2 零臆造(25) | 不编造主体/场景/剧情往下写、不产出「看似合规」的 Prompt 假装完成;替用户编造主体外观属越权;带出半成品 Prompt → 不合格并按 D8 并行扣分。**核心主体或必需 UI 文案完全缺失时,编造主体续跑 = CL2 = 0 且改判 prompt 轨并行扣 D8** | | |
| 548 | +| CL3 分支预判(15) | 预判各答案分支会走的模式与形态(「有情节+要分镜 → ② 型;要英文结构化 → ① 型;有参考素材 → 全能参考」),预告各自交付形态 | | |
| 549 | +| CL4 已知信息锁定 + 推定显式标注(15) | 已知信息明确锁定复述;仅对不改变主体事实的低风险参数(时长/基调)在**显式标注假设**前提下自行推定,不把推定混进反问 | | |
| 550 | +| CL5 通道与格式(15) | 不伪造看似合规的 JSON 交付;schema 无反问通道时明确说明信息不足;说明层与产出层分离干净 | | |
| 551 | + | |
| 552 | +**反向(过度反问)**:raw_brief 已给全部关键信息、仅余不改变主体事实的低风险参数(如有无 BGM / | |
| 553 | +节奏快慢)时,正确行为是**直接产出 + 显式标注推定**;此时发问清单 = 过度反问,改判 clarify 轨 | |
| 554 | +按 CL1 ≤ 20 计。不惩罚零臆造与锁定推定——那是正确保守行为。 | |
| 555 | + | |
| 556 | +### 8.2 素材阻塞(block 轨五要素) | |
| 557 | + | |
| 558 | +当 §1.2 判定「必需素材不可用且无替代」时,交付**阻塞报告**而不是 Prompt,按五要素①-⑤组织 | |
| 559 | +(§1.2)。schema 无错误通道时明确说明「schema 与素材要求不可同时满足」并给补齐后的处理预案。 | |
| 560 | +**不要**报阻塞的同时又附一个引用了不可用素材的 Prompt——比静默引用更不可接受。 | |
| 561 | +这不是失败,是正确行为。**反向**:素材可用 / note 为建议性 / 菜单内有替代版本时继续产出 | |
| 562 | +(§1.2 反向条款);此时报阻塞 = 过度阻塞。 | |
| 563 | + | |
| 564 | +--- | |
| 565 | + | |
| 566 | +## 9. 交付清单 | |
| 567 | + | |
| 568 | +- **最终提示词原文**:① 型 = 英文结构字段 + 保留原语言的 `<d>` 对白/可见文字;② 型 = 中文 | |
| 569 | + 时间窗散文 + 每窗三要素 + UI 四禁令;链路 = 四层齐全(§0.6)。 | |
| 570 | +- **资产层清单**(有参考素材时跨形态必交):`references`/`conditions[]` 数组,每条原 url 原样、 | |
| 571 | + 顺序 = 菜单顺序;不可用素材标 excluded 单列,不与可引用素材混列。 | |
| 572 | +- **交付说明(可中文,说明层语言自由)**:每个关键选择对应用户需求里的哪句话;注明本次 | |
| 573 | + `duration_seconds` 取值(B 级);冲突取舍/素材阻塞的处理方式;逐句台词适用口径 V 还是 R; | |
| 574 | + 涉及 C 级构造(窗之和、首窗 0s、幽灵禁令、master 序号回指、链路四层)如实标 C 级,不得表述为 | |
| 575 | + 官方条款。 | |
| 576 | +- 交付前必须通过 §1.7 的 22 项机械验收,任一不过先修复再输出。 | |
| 577 | + | |
| 578 | +--- | |
| 579 | + | |
| 580 | +## 10. 来源标注与篇幅登记 | |
| 581 | + | |
| 582 | +- **A 级**:MiniMax 官方一手飞书语料,`train/hunt/cache_v5/` 两篇全文落盘(doc1 rev 1297 / | |
| 583 | + doc2 rev 252),本文所有 `docN:line` 引句均可在 cache_v5 逐字回查(Digester 已用 python 逐行 | |
| 584 | + 抽取比对,benchmark_v5_revision_notes.md 附录 A;Evolver 侧 SKILL 引句另跑 R4 审计脚本留痕)。 | |
| 585 | +- **R 级(v4 镜像同型佐证)**:GitHub MiniMax-AI/MiniMax-H3 仓库 base-en.txt / ref-en.txt / | |
| 586 | + SKILL.md / co-op 模板 / shot-table-spec / storyboard-guidelines / README(sha256 已在 v3/v4 | |
| 587 | + 登记)。凡本文已给 docN:line 的条款以 A 级为准,镜像行号仅作同型佐证保留(窗边界 #1、UI 四禁令、 | |
| 588 | + `duration_seconds` 不进正文、非锚点图零秒锚、词法 grep 等暂无 A 级一手行号)。 | |
| 589 | +- **B 级(社区一手实践)**:chiphoton production-workflow.md(单镜 10 项)、TFboy1 | |
| 590 | + storyboard-schema.md(7 类衔接锚点 + 7 列镜头卡)。与官方冲突时以官方为准。 | |
| 591 | +- **C 级(构造性设计,0 真实先例)**:窗之和 = 总时长、首窗从 0s、幽灵素材禁令、中英并列 UI、 | |
| 592 | + master 序号回指、阻塞五要素、clarify 五要素、链路四层(#62)。对外不得表述为官方条款。 | |
| 593 | +- **篇幅登记**:v0.5.0 88,655 B → v0.6.0 50,281 B → v0.6.1 51809 B(净增 +1528 B,url 载体条款; | |
| 594 | + 收敛手法见 evolve_report_v5.md)。**下轮若分数反常,本文件长度仍是第一怀疑对象**。 | |
| 595 | +- 未解决登记:开放平台 schema 仍 blocked(新线索 `platform.minimaxi.com`,doc1:15);`conditions[].role` | |
| 596 | + 枚举第二信源缺;H1 字符计量口径官方未定义(取 `len()` 语义,B 级内部规范)。 | ... | ... |
library.json
| 1 | 1 | [ |
| 2 | 2 | { |
| 3 | + "id": "e9e9907999a3", | |
| 4 | + "source": "h3console", | |
| 5 | + "prompt": "明日香大战老太太", | |
| 6 | + "fullPrompt": "明日香大战老太太", | |
| 7 | + "edited": false, | |
| 8 | + "width": 480, | |
| 9 | + "height": 832, | |
| 10 | + "duration": 5, | |
| 11 | + "partition": "fl2va", | |
| 12 | + "likes": 0, | |
| 13 | + "createdAt": 1788254902903 | |
| 14 | + }, | |
| 15 | + { | |
| 16 | + "id": "13baa0ba32c5", | |
| 17 | + "source": "h3console", | |
| 18 | + "prompt": "明日香大战老太太", | |
| 19 | + "fullPrompt": "明日香大战老太太", | |
| 20 | + "edited": false, | |
| 21 | + "width": 480, | |
| 22 | + "height": 832, | |
| 23 | + "duration": 5, | |
| 24 | + "partition": "text", | |
| 25 | + "likes": 0, | |
| 26 | + "createdAt": 1788254902838 | |
| 27 | + }, | |
| 28 | + { | |
| 29 | + "id": "8d782b62dd8e", | |
| 30 | + "source": "h3console", | |
| 31 | + "prompt": "星际迷航穿越沙漠", | |
| 32 | + "fullPrompt": "星际迷航穿越沙漠", | |
| 33 | + "edited": false, | |
| 34 | + "width": 832, | |
| 35 | + "height": 480, | |
| 36 | + "duration": 5, | |
| 37 | + "partition": "text", | |
| 38 | + "likes": 0, | |
| 39 | + "createdAt": 1788254437728 | |
| 40 | + }, | |
| 41 | + { | |
| 42 | + "id": "1d116e9a5424", | |
| 43 | + "source": "h3console", | |
| 44 | + "prompt": "为什么跑这么快", | |
| 45 | + "fullPrompt": "为什么跑这么快", | |
| 46 | + "edited": false, | |
| 47 | + "width": 832, | |
| 48 | + "height": 480, | |
| 49 | + "duration": 5, | |
| 50 | + "partition": "text", | |
| 51 | + "likes": 0, | |
| 52 | + "createdAt": 1788254400661 | |
| 53 | + }, | |
| 54 | + { | |
| 3 | 55 | "id": "4af4c61b64a6", |
| 4 | 56 | "source": "h3console", |
| 5 | 57 | "prompt": "一只白猫坐着,镜头缓慢推进,最终定格", |
| ... | ... | @@ -10,8 +62,7 @@ |
| 10 | 62 | "duration": 1, |
| 11 | 63 | "partition": "fl2va", |
| 12 | 64 | "likes": 0, |
| 13 | - "createdAt": 1788251288958, | |
| 14 | - "lastPlayedAt": 1788254550116 | |
| 65 | + "createdAt": 1788251288958 | |
| 15 | 66 | }, |
| 16 | 67 | { |
| 17 | 68 | "id": "8024972d6019", |
| ... | ... | @@ -65,7 +116,8 @@ |
| 65 | 116 | "likes": 0, |
| 66 | 117 | "createdAt": 1788192916199, |
| 67 | 118 | "promptEn": "taoist eyes the old house suspiciously", |
| 68 | - "lastPlayedAt": 1788253021349 | |
| 119 | + "lastPlayedAt": 1788254770005, | |
| 120 | + "playCount": 1 | |
| 69 | 121 | }, |
| 70 | 122 | { |
| 71 | 123 | "id": "cb5baad5d724", |
| ... | ... | @@ -80,7 +132,8 @@ |
| 80 | 132 | "likes": 0, |
| 81 | 133 | "createdAt": 1788192915845, |
| 82 | 134 | "promptEn": "scholar watches the room warily", |
| 83 | - "lastPlayedAt": 1788253865811 | |
| 135 | + "lastPlayedAt": 1788256422749, | |
| 136 | + "playCount": 1 | |
| 84 | 137 | }, |
| 85 | 138 | { |
| 86 | 139 | "id": "e8cbb73560ef", |
| ... | ... | @@ -125,7 +178,8 @@ |
| 125 | 178 | "likes": 0, |
| 126 | 179 | "createdAt": 1788192914949, |
| 127 | 180 | "promptEn": "taoist acts tough but is nervous", |
| 128 | - "lastPlayedAt": 1788252613211 | |
| 181 | + "lastPlayedAt": 1788255954592, | |
| 182 | + "playCount": 1 | |
| 129 | 183 | }, |
| 130 | 184 | { |
| 131 | 185 | "id": "167ce1bfa285", |
| ... | ... | @@ -140,7 +194,8 @@ |
| 140 | 194 | "likes": 0, |
| 141 | 195 | "createdAt": 1788192914047, |
| 142 | 196 | "promptEn": "scholar looks scared, wants to flee", |
| 143 | - "lastPlayedAt": 1788252155012 | |
| 197 | + "lastPlayedAt": 1788254591422, | |
| 198 | + "playCount": 1 | |
| 144 | 199 | }, |
| 145 | 200 | { |
| 146 | 201 | "id": "053bc957b4f8", |
| ... | ... | @@ -155,7 +210,8 @@ |
| 155 | 210 | "likes": 0, |
| 156 | 211 | "createdAt": 1788192913886, |
| 157 | 212 | "promptEn": "taoist panics, freaked out", |
| 158 | - "lastPlayedAt": 1788253751763 | |
| 213 | + "lastPlayedAt": 1788256170460, | |
| 214 | + "playCount": 1 | |
| 159 | 215 | }, |
| 160 | 216 | { |
| 161 | 217 | "id": "45c1136d1e05", |
| ... | ... | @@ -170,7 +226,8 @@ |
| 170 | 226 | "likes": 0, |
| 171 | 227 | "createdAt": 1788192913551, |
| 172 | 228 | "promptEn": "taoist looking panicked and scared", |
| 173 | - "lastPlayedAt": 1788252637227 | |
| 229 | + "lastPlayedAt": 1788254914080, | |
| 230 | + "playCount": 1 | |
| 174 | 231 | }, |
| 175 | 232 | { |
| 176 | 233 | "id": "d169d42a67de", |
| ... | ... | @@ -185,7 +242,8 @@ |
| 185 | 242 | "likes": 0, |
| 186 | 243 | "createdAt": 1788192913492, |
| 187 | 244 | "promptEn": "scholar defiant out of desperation", |
| 188 | - "lastPlayedAt": 1788252431138 | |
| 245 | + "lastPlayedAt": 1788255404326, | |
| 246 | + "playCount": 1 | |
| 189 | 247 | }, |
| 190 | 248 | { |
| 191 | 249 | "id": "2abd2793fae9", |
| ... | ... | @@ -200,7 +258,8 @@ |
| 200 | 258 | "likes": 0, |
| 201 | 259 | "createdAt": 1788192913244, |
| 202 | 260 | "promptEn": "scholar cornered but still defiant", |
| 203 | - "lastPlayedAt": 1788253347544 | |
| 261 | + "lastPlayedAt": 1788255156196, | |
| 262 | + "playCount": 1 | |
| 204 | 263 | }, |
| 205 | 264 | { |
| 206 | 265 | "id": "bbf7efb467e0", |
| ... | ... | @@ -215,7 +274,8 @@ |
| 215 | 274 | "likes": 0, |
| 216 | 275 | "createdAt": 1788192912912, |
| 217 | 276 | "promptEn": "taoist charmed, hesitating", |
| 218 | - "lastPlayedAt": 1788253947848 | |
| 277 | + "lastPlayedAt": 1788256108674, | |
| 278 | + "playCount": 1 | |
| 219 | 279 | }, |
| 220 | 280 | { |
| 221 | 281 | "id": "f8da9934c823", |
| ... | ... | @@ -230,7 +290,8 @@ |
| 230 | 290 | "likes": 0, |
| 231 | 291 | "createdAt": 1788192912819, |
| 232 | 292 | "promptEn": "scholar dazed, charmed", |
| 233 | - "lastPlayedAt": 1788252975330 | |
| 293 | + "lastPlayedAt": 1788254860902, | |
| 294 | + "playCount": 1 | |
| 234 | 295 | }, |
| 235 | 296 | { |
| 236 | 297 | "id": "feb96d5be50f", |
| ... | ... | @@ -245,7 +306,8 @@ |
| 245 | 306 | "likes": 0, |
| 246 | 307 | "createdAt": 1788191432903, |
| 247 | 308 | "promptEn": "woman in white startled, a bit shy", |
| 248 | - "lastPlayedAt": 1788252189029 | |
| 309 | + "lastPlayedAt": 1788256332708, | |
| 310 | + "playCount": 1 | |
| 249 | 311 | }, |
| 250 | 312 | { |
| 251 | 313 | "id": "14f482bdae7f", |
| ... | ... | @@ -260,7 +322,8 @@ |
| 260 | 322 | "likes": 0, |
| 261 | 323 | "createdAt": 1788191432362, |
| 262 | 324 | "promptEn": "woman in white being intimate and alluring", |
| 263 | - "lastPlayedAt": 1788251702786 | |
| 325 | + "lastPlayedAt": 1788255084160, | |
| 326 | + "playCount": 1 | |
| 264 | 327 | }, |
| 265 | 328 | { |
| 266 | 329 | "id": "362b15ab1811", |
| ... | ... | @@ -290,7 +353,8 @@ |
| 290 | 353 | "likes": 0, |
| 291 | 354 | "createdAt": 1788191431505, |
| 292 | 355 | "promptEn": "woman in white scared, dodging the question", |
| 293 | - "lastPlayedAt": 1788252941314 | |
| 356 | + "lastPlayedAt": 1788256176464, | |
| 357 | + "playCount": 1 | |
| 294 | 358 | }, |
| 295 | 359 | { |
| 296 | 360 | "id": "667978d52305", |
| ... | ... | @@ -305,7 +369,8 @@ |
| 305 | 369 | "likes": 0, |
| 306 | 370 | "createdAt": 1788191431016, |
| 307 | 371 | "promptEn": "woman in white coldly threatening", |
| 308 | - "lastPlayedAt": 1788251764831 | |
| 372 | + "lastPlayedAt": 1788255162198, | |
| 373 | + "playCount": 1 | |
| 309 | 374 | }, |
| 310 | 375 | { |
| 311 | 376 | "id": "7f5213748d87", |
| ... | ... | @@ -334,8 +399,9 @@ |
| 334 | 399 | "partition": "ref2va", |
| 335 | 400 | "likes": 0, |
| 336 | 401 | "createdAt": 1788187365789, |
| 337 | - "lastPlayedAt": 1788251380546, | |
| 338 | - "promptEn": "woman in white being gentle and comforting" | |
| 402 | + "lastPlayedAt": 1788255462355, | |
| 403 | + "promptEn": "woman in white being gentle and comforting", | |
| 404 | + "playCount": 1 | |
| 339 | 405 | }, |
| 340 | 406 | { |
| 341 | 407 | "id": "88d71d85058f", |
| ... | ... | @@ -365,7 +431,8 @@ |
| 365 | 431 | "likes": 0, |
| 366 | 432 | "createdAt": 1788185090875, |
| 367 | 433 | "promptEn": "woman in white cold and threatening", |
| 368 | - "lastPlayedAt": 1788253487611 | |
| 434 | + "lastPlayedAt": 1788255142186, | |
| 435 | + "playCount": 1 | |
| 369 | 436 | }, |
| 370 | 437 | { |
| 371 | 438 | "id": "a46f1daa9ee0", |
| ... | ... | @@ -395,7 +462,8 @@ |
| 395 | 462 | "likes": 0, |
| 396 | 463 | "createdAt": 1788162094002, |
| 397 | 464 | "promptEn": "woman in old chinese robe talking, gentle but wary, in an old room", |
| 398 | - "lastPlayedAt": 1788250690213 | |
| 465 | + "lastPlayedAt": 1788254868055, | |
| 466 | + "playCount": 1 | |
| 399 | 467 | }, |
| 400 | 468 | { |
| 401 | 469 | "id": "e17cfe57f56a", |
| ... | ... | @@ -455,7 +523,8 @@ |
| 455 | 523 | "likes": 0, |
| 456 | 524 | "createdAt": 1788157177505, |
| 457 | 525 | "promptEn": "constable bursts in and blocks the door, talks to a pale woman behind the screen", |
| 458 | - "lastPlayedAt": 1788250622191 | |
| 526 | + "lastPlayedAt": 1788254955075, | |
| 527 | + "playCount": 1 | |
| 459 | 528 | }, |
| 460 | 529 | { |
| 461 | 530 | "id": "a9c4ba5e453b", |
| ... | ... | @@ -470,7 +539,8 @@ |
| 470 | 539 | "likes": 0, |
| 471 | 540 | "createdAt": 1788156878022, |
| 472 | 541 | "promptEn": "constable bursts in and blocks the door, talks to a pale woman behind the screen", |
| 473 | - "lastPlayedAt": 1788254209972 | |
| 542 | + "lastPlayedAt": 1788256376724, | |
| 543 | + "playCount": 1 | |
| 474 | 544 | }, |
| 475 | 545 | { |
| 476 | 546 | "id": "a0b752e7ac0d", |
| ... | ... | @@ -485,7 +555,8 @@ |
| 485 | 555 | "likes": 0, |
| 486 | 556 | "createdAt": 1788154942596, |
| 487 | 557 | "promptEn": "constable talking, looking scared", |
| 488 | - "lastPlayedAt": 1788252145004 | |
| 558 | + "lastPlayedAt": 1788254919873, | |
| 559 | + "playCount": 1 | |
| 489 | 560 | }, |
| 490 | 561 | { |
| 491 | 562 | "id": "b6608e2eac60", |
| ... | ... | @@ -500,7 +571,8 @@ |
| 500 | 571 | "likes": 0, |
| 501 | 572 | "createdAt": 1788153988474, |
| 502 | 573 | "promptEn": "astronaut at a martian canyon, visor reflecting alien ruins, then aerial view of the city", |
| 503 | - "lastPlayedAt": 1788253845801 | |
| 574 | + "lastPlayedAt": 1788256486789, | |
| 575 | + "playCount": 1 | |
| 504 | 576 | }, |
| 505 | 577 | { |
| 506 | 578 | "id": "194fc2b56cb5", |
| ... | ... | @@ -515,7 +587,8 @@ |
| 515 | 587 | "likes": 0, |
| 516 | 588 | "createdAt": 1788138492364, |
| 517 | 589 | "promptEn": "astronaut on a Martian canyon, helmet reflecting an alien ruined city", |
| 518 | - "lastPlayedAt": 1788253805777 | |
| 590 | + "lastPlayedAt": 1788255096170, | |
| 591 | + "playCount": 1 | |
| 519 | 592 | }, |
| 520 | 593 | { |
| 521 | 594 | "id": "f84b8f044ec5", |
| ... | ... | @@ -530,7 +603,8 @@ |
| 530 | 603 | "likes": 0, |
| 531 | 604 | "createdAt": 1788120171725, |
| 532 | 605 | "promptEn": "constable bursts in and blocks the door, talks to a pale woman behind the screen", |
| 533 | - "lastPlayedAt": 1788253571659 | |
| 606 | + "lastPlayedAt": 1788255758515, | |
| 607 | + "playCount": 1 | |
| 534 | 608 | }, |
| 535 | 609 | { |
| 536 | 610 | "id": "5c364152e54c", |
| ... | ... | @@ -560,7 +634,8 @@ |
| 560 | 634 | "likes": 0, |
| 561 | 635 | "createdAt": 1788106707982, |
| 562 | 636 | "promptEn": "constable bursts in and blocks the door, talks to a pale woman behind the screen", |
| 563 | - "lastPlayedAt": 1788247638248 | |
| 637 | + "lastPlayedAt": 1788254838039, | |
| 638 | + "playCount": 1 | |
| 564 | 639 | }, |
| 565 | 640 | { |
| 566 | 641 | "id": "1fa40bca47f5", |
| ... | ... | @@ -575,7 +650,8 @@ |
| 575 | 650 | "likes": 0, |
| 576 | 651 | "createdAt": 1788085282201, |
| 577 | 652 | "promptEn": "constable stands still, quietly says he won't make a sound, woman stays silent behind the screen", |
| 578 | - "lastPlayedAt": 1788254023891 | |
| 653 | + "lastPlayedAt": 1788255328296, | |
| 654 | + "playCount": 1 | |
| 579 | 655 | }, |
| 580 | 656 | { |
| 581 | 657 | "id": "683ab2fd4681", |
| ... | ... | @@ -590,7 +666,8 @@ |
| 590 | 666 | "likes": 0, |
| 591 | 667 | "createdAt": 1788071067702, |
| 592 | 668 | "promptEn": "constable stands still, quietly says he won't make a sound, woman stays silent behind the screen", |
| 593 | - "lastPlayedAt": 1788253999874 | |
| 669 | + "lastPlayedAt": 1788256078660, | |
| 670 | + "playCount": 1 | |
| 594 | 671 | }, |
| 595 | 672 | { |
| 596 | 673 | "id": "2e09fcd3d42c", |
| ... | ... | @@ -605,7 +682,8 @@ |
| 605 | 682 | "likes": 0, |
| 606 | 683 | "createdAt": 1788062322252, |
| 607 | 684 | "promptEn": "constable stands still, quietly says he won't make a sound, woman stays silent behind the screen", |
| 608 | - "lastPlayedAt": 1788252491166 | |
| 685 | + "lastPlayedAt": 1788255426343, | |
| 686 | + "playCount": 1 | |
| 609 | 687 | }, |
| 610 | 688 | { |
| 611 | 689 | "id": "12ea9ce00f36", |
| ... | ... | @@ -680,7 +758,8 @@ |
| 680 | 758 | "likes": 0, |
| 681 | 759 | "createdAt": 1788026876886, |
| 682 | 760 | "promptEn": "apartment manager in an eerie corridor, red elevator light flickering, holding out a key", |
| 683 | - "lastPlayedAt": 1788253825788 | |
| 761 | + "lastPlayedAt": 1788255138188, | |
| 762 | + "playCount": 1 | |
| 684 | 763 | }, |
| 685 | 764 | { |
| 686 | 765 | "id": "cdd03cca8461", |
| ... | ... | @@ -695,7 +774,8 @@ |
| 695 | 774 | "likes": 0, |
| 696 | 775 | "createdAt": 1788026569422, |
| 697 | 776 | "promptEn": "stitched-face long-haired curse on a subway platform, flickering lights, cruel smile", |
| 698 | - "lastPlayedAt": 1788253043365 | |
| 777 | + "lastPlayedAt": 1788256094667, | |
| 778 | + "playCount": 1 | |
| 699 | 779 | }, |
| 700 | 780 | { |
| 701 | 781 | "id": "b8dd0f62f648", |
| ... | ... | @@ -755,7 +835,8 @@ |
| 755 | 835 | "likes": 0, |
| 756 | 836 | "createdAt": 1788026568242, |
| 757 | 837 | "promptEn": "magma commander in a white coat, raising a lava fist on the battlefield", |
| 758 | - "lastPlayedAt": 1788254205974 | |
| 838 | + "lastPlayedAt": 1788256448766, | |
| 839 | + "playCount": 1 | |
| 759 | 840 | }, |
| 760 | 841 | { |
| 761 | 842 | "id": "1442013e94f0", |
| ... | ... | @@ -770,7 +851,8 @@ |
| 770 | 851 | "likes": 0, |
| 771 | 852 | "createdAt": 1788026068497, |
| 772 | 853 | "promptEn": "black-haired prince in a red cloak, pressing down an execution order in the trial hall", |
| 773 | - "lastPlayedAt": 1788253425586 | |
| 854 | + "lastPlayedAt": 1788255396328, | |
| 855 | + "playCount": 1 | |
| 774 | 856 | }, |
| 775 | 857 | { |
| 776 | 858 | "id": "0a5e37bb328c", |
| ... | ... | @@ -800,7 +882,8 @@ |
| 800 | 882 | "likes": 0, |
| 801 | 883 | "createdAt": 1788025640972, |
| 802 | 884 | "promptEn": "Voldemort in a graveyard, wand raised, stepping closer", |
| 803 | - "lastPlayedAt": 1788253469603 | |
| 885 | + "lastPlayedAt": 1788254858047, | |
| 886 | + "playCount": 1 | |
| 804 | 887 | }, |
| 805 | 888 | { |
| 806 | 889 | "id": "c3875fbd6cc4", |
| ... | ... | @@ -815,7 +898,8 @@ |
| 815 | 898 | "likes": 0, |
| 816 | 899 | "createdAt": 1788025632028, |
| 817 | 900 | "promptEn": "a giant mouth embedded in the wall at the end of an endless hotel corridor, slowly opening", |
| 818 | - "lastPlayedAt": 1788252701202 | |
| 901 | + "lastPlayedAt": 1788256138682, | |
| 902 | + "playCount": 1 | |
| 819 | 903 | }, |
| 820 | 904 | { |
| 821 | 905 | "id": "1c6e2df243f4", |
| ... | ... | @@ -830,7 +914,8 @@ |
| 830 | 914 | "likes": 0, |
| 831 | 915 | "createdAt": 1788025630249, |
| 832 | 916 | "promptEn": "white-haired villain in a ruined street at night, cracked smile, reaching out a hand", |
| 833 | - "lastPlayedAt": 1788251462624 | |
| 917 | + "lastPlayedAt": 1788254713983, | |
| 918 | + "playCount": 1 | |
| 834 | 919 | }, |
| 835 | 920 | { |
| 836 | 921 | "id": "d735f1fc010f", |
| ... | ... | @@ -845,7 +930,8 @@ |
| 845 | 930 | "likes": 0, |
| 846 | 931 | "createdAt": 1788025624377, |
| 847 | 932 | "promptEn": "cat-eared white-haired guard crouching in a ruined palace, purple aura around them", |
| 848 | - "lastPlayedAt": 1788252499167 | |
| 933 | + "lastPlayedAt": 1788255436346, | |
| 934 | + "playCount": 1 | |
| 849 | 935 | }, |
| 850 | 936 | { |
| 851 | 937 | "id": "b16b64e52f83", |
| ... | ... | @@ -860,7 +946,8 @@ |
| 860 | 946 | "likes": 0, |
| 861 | 947 | "createdAt": 1788025623833, |
| 862 | 948 | "promptEn": "cat-eared white-haired guard crouching in a ruined palace, purple aura around them", |
| 863 | - "lastPlayedAt": 1788253528965 | |
| 949 | + "lastPlayedAt": 1788255754514, | |
| 950 | + "playCount": 1 | |
| 864 | 951 | }, |
| 865 | 952 | { |
| 866 | 953 | "id": "0d721acbc298", |
| ... | ... | @@ -875,7 +962,8 @@ |
| 875 | 962 | "likes": 0, |
| 876 | 963 | "createdAt": 1788025622363, |
| 877 | 964 | "promptEn": "detective in a surveillance room squinting at the monitors", |
| 878 | - "lastPlayedAt": 1788253255505 | |
| 965 | + "lastPlayedAt": 1788256282688, | |
| 966 | + "playCount": 1 | |
| 879 | 967 | }, |
| 880 | 968 | { |
| 881 | 969 | "id": "639069dea7c5", |
| ... | ... | @@ -890,7 +978,8 @@ |
| 890 | 978 | "likes": 0, |
| 891 | 979 | "createdAt": 1788025620717, |
| 892 | 980 | "promptEn": "alien tyrant holding a glowing energy sphere, sneering on a rocky green battlefield", |
| 893 | - "lastPlayedAt": 1788253757767 | |
| 981 | + "lastPlayedAt": 1788255248247, | |
| 982 | + "playCount": 1 | |
| 894 | 983 | }, |
| 895 | 984 | { |
| 896 | 985 | "id": "9db41d807330", |
| ... | ... | @@ -935,7 +1024,8 @@ |
| 935 | 1024 | "likes": 0, |
| 936 | 1025 | "createdAt": 1788024900966, |
| 937 | 1026 | "promptEn": "player 101 blocking the path on a high glass bridge, threatening you", |
| 938 | - "lastPlayedAt": 1788253797782 | |
| 1027 | + "lastPlayedAt": 1788255958603, | |
| 1028 | + "playCount": 1 | |
| 939 | 1029 | }, |
| 940 | 1030 | { |
| 941 | 1031 | "id": "d6aab3fce63d", |
| ... | ... | @@ -950,7 +1040,8 @@ |
| 950 | 1040 | "likes": 0, |
| 951 | 1041 | "createdAt": 1788024747209, |
| 952 | 1042 | "promptEn": "wounded hunter leaning on a subway turnstile, ordering you into the tunnel", |
| 953 | - "lastPlayedAt": 1788253507622 | |
| 1043 | + "lastPlayedAt": 1788255324295, | |
| 1044 | + "playCount": 1 | |
| 954 | 1045 | }, |
| 955 | 1046 | { |
| 956 | 1047 | "id": "fdefca4e4980", |
| ... | ... | @@ -965,7 +1056,8 @@ |
| 965 | 1056 | "likes": 0, |
| 966 | 1057 | "createdAt": 1788024491625, |
| 967 | 1058 | "promptEn": "prince signs an execution order in the trial hall, points at the guillotine", |
| 968 | - "lastPlayedAt": 1788253737754 | |
| 1059 | + "lastPlayedAt": 1788255392324, | |
| 1060 | + "playCount": 1 | |
| 969 | 1061 | }, |
| 970 | 1062 | { |
| 971 | 1063 | "id": "8a933feb52c4", |
| ... | ... | @@ -1010,7 +1102,8 @@ |
| 1010 | 1102 | "likes": 0, |
| 1011 | 1103 | "createdAt": 1788016434846, |
| 1012 | 1104 | "promptEn": "pirate negotiation, catching Barbossa's flaw and turning the tables", |
| 1013 | - "lastPlayedAt": 1788251638752 | |
| 1105 | + "lastPlayedAt": 1788254979611, | |
| 1106 | + "playCount": 1 | |
| 1014 | 1107 | }, |
| 1015 | 1108 | { |
| 1016 | 1109 | "id": "03e32ff5f0ef", |
| ... | ... | @@ -1040,7 +1133,8 @@ |
| 1040 | 1133 | "likes": 0, |
| 1041 | 1134 | "createdAt": 1788015968838, |
| 1042 | 1135 | "promptEn": "pirate negotiation, held the goal but paid a price", |
| 1043 | - "lastPlayedAt": 1788249093401 | |
| 1136 | + "lastPlayedAt": 1788256104663, | |
| 1137 | + "playCount": 1 | |
| 1044 | 1138 | }, |
| 1045 | 1139 | { |
| 1046 | 1140 | "id": "b328649000d1", |
| ... | ... | @@ -1070,7 +1164,8 @@ |
| 1070 | 1164 | "likes": 0, |
| 1071 | 1165 | "createdAt": 1788015493445, |
| 1072 | 1166 | "promptEn": "pirate negotiation, went in head-on and Barbossa saw it coming", |
| 1073 | - "lastPlayedAt": 1788250790245 | |
| 1167 | + "lastPlayedAt": 1788256412747, | |
| 1168 | + "playCount": 1 | |
| 1074 | 1169 | }, |
| 1075 | 1170 | { |
| 1076 | 1171 | "id": "3f30f5097438", |
| ... | ... | @@ -1085,7 +1180,8 @@ |
| 1085 | 1180 | "likes": 0, |
| 1086 | 1181 | "createdAt": 1788015035234, |
| 1087 | 1182 | "promptEn": "pirate negotiation, stayed passive and got cornered", |
| 1088 | - "lastPlayedAt": 1788251632751 | |
| 1183 | + "lastPlayedAt": 1788255772518, | |
| 1184 | + "playCount": 1 | |
| 1089 | 1185 | }, |
| 1090 | 1186 | { |
| 1091 | 1187 | "id": "6a0d14cabe17", |
| ... | ... | @@ -1100,7 +1196,8 @@ |
| 1100 | 1196 | "likes": 0, |
| 1101 | 1197 | "createdAt": 1788014791733, |
| 1102 | 1198 | "promptEn": "pirate negotiation, stayed passive and got cornered", |
| 1103 | - "lastPlayedAt": 1788252169019 | |
| 1199 | + "lastPlayedAt": 1788254585426, | |
| 1200 | + "playCount": 1 | |
| 1104 | 1201 | }, |
| 1105 | 1202 | { |
| 1106 | 1203 | "id": "08120928cc77", |
| ... | ... | @@ -1115,7 +1212,8 @@ |
| 1115 | 1212 | "likes": 0, |
| 1116 | 1213 | "createdAt": 1788014790969, |
| 1117 | 1214 | "promptEn": "pirate negotiation, stayed passive and got cornered", |
| 1118 | - "lastPlayedAt": 1788253191467 | |
| 1215 | + "lastPlayedAt": 1788256262677, | |
| 1216 | + "playCount": 1 | |
| 1119 | 1217 | }, |
| 1120 | 1218 | { |
| 1121 | 1219 | "id": "e14fe7c3220e", |
| ... | ... | @@ -1130,7 +1228,8 @@ |
| 1130 | 1228 | "likes": 0, |
| 1131 | 1229 | "createdAt": 1788014563344, |
| 1132 | 1230 | "promptEn": "captain's cabin on the Black Pearl, surrounded by pirates, negotiation could turn into an execution", |
| 1133 | - "lastPlayedAt": 1788252563192 | |
| 1231 | + "lastPlayedAt": 1788254910082, | |
| 1232 | + "playCount": 1 | |
| 1134 | 1233 | }, |
| 1135 | 1234 | { |
| 1136 | 1235 | "id": "c6e8560f62a2", |
| ... | ... | @@ -1160,7 +1259,8 @@ |
| 1160 | 1259 | "likes": 0, |
| 1161 | 1260 | "createdAt": 1788014099497, |
| 1162 | 1261 | "promptEn": "glass bridge game, exploiting a flaw to push back player 101", |
| 1163 | - "lastPlayedAt": 1788251098395 | |
| 1262 | + "lastPlayedAt": 1788255994616, | |
| 1263 | + "playCount": 1 | |
| 1164 | 1264 | }, |
| 1165 | 1265 | { |
| 1166 | 1266 | "id": "24576c264a25", |
| ... | ... | @@ -1190,7 +1290,8 @@ |
| 1190 | 1290 | "likes": 0, |
| 1191 | 1291 | "createdAt": 1788013634333, |
| 1192 | 1292 | "promptEn": "glass bridge game, held the goal but paid a price", |
| 1193 | - "lastPlayedAt": 1788254355883 | |
| 1293 | + "lastPlayedAt": 1788256336707, | |
| 1294 | + "playCount": 1 | |
| 1194 | 1295 | }, |
| 1195 | 1296 | { |
| 1196 | 1297 | "id": "5b8ef21616d4", |
| ... | ... | @@ -1205,7 +1306,8 @@ |
| 1205 | 1306 | "likes": 0, |
| 1206 | 1307 | "createdAt": 1788013632065, |
| 1207 | 1308 | "promptEn": "glass bridge game, held the goal but paid a price", |
| 1208 | - "lastPlayedAt": 1788252935312 | |
| 1309 | + "lastPlayedAt": 1788256464777, | |
| 1310 | + "playCount": 1 | |
| 1209 | 1311 | }, |
| 1210 | 1312 | { |
| 1211 | 1313 | "id": "892b923eed29", |
| ... | ... | @@ -1220,7 +1322,8 @@ |
| 1220 | 1322 | "likes": 0, |
| 1221 | 1323 | "createdAt": 1788013393463, |
| 1222 | 1324 | "promptEn": "guessed wrong in a survival game, got countered", |
| 1223 | - "lastPlayedAt": 1788250071902 | |
| 1325 | + "lastPlayedAt": 1788256516804, | |
| 1326 | + "playCount": 1 | |
| 1224 | 1327 | }, |
| 1225 | 1328 | { |
| 1226 | 1329 | "id": "7880a91928c6", |
| ... | ... | @@ -1250,7 +1353,8 @@ |
| 1250 | 1353 | "likes": 0, |
| 1251 | 1354 | "createdAt": 1788012917294, |
| 1252 | 1355 | "promptEn": "standing on the glass bridge, facing off with player 101", |
| 1253 | - "lastPlayedAt": 1788253839798 | |
| 1356 | + "lastPlayedAt": 1788255356310, | |
| 1357 | + "playCount": 1 | |
| 1254 | 1358 | }, |
| 1255 | 1359 | { |
| 1256 | 1360 | "id": "8f23de61904f", |
| ... | ... | @@ -1265,7 +1369,8 @@ |
| 1265 | 1369 | "likes": 0, |
| 1266 | 1370 | "createdAt": 1788012917185, |
| 1267 | 1371 | "promptEn": "standing on the glass bridge, facing off with player 101", |
| 1268 | - "lastPlayedAt": 1788250786246 | |
| 1372 | + "lastPlayedAt": 1788256286703, | |
| 1373 | + "playCount": 1 | |
| 1269 | 1374 | }, |
| 1270 | 1375 | { |
| 1271 | 1376 | "id": "bb4a8351d822", |
| ... | ... | @@ -1280,7 +1385,8 @@ |
| 1280 | 1385 | "likes": 0, |
| 1281 | 1386 | "createdAt": 1788012679740, |
| 1282 | 1387 | "promptEn": "in the mental lair, exploiting a flaw to counter Vecna", |
| 1283 | - "lastPlayedAt": 1788250124975 | |
| 1388 | + "lastPlayedAt": 1788255036140, | |
| 1389 | + "playCount": 1 | |
| 1284 | 1390 | }, |
| 1285 | 1391 | { |
| 1286 | 1392 | "id": "3913752bbe3a", |
| ... | ... | @@ -1340,7 +1446,8 @@ |
| 1340 | 1446 | "likes": 0, |
| 1341 | 1447 | "createdAt": 1788011964828, |
| 1342 | 1448 | "promptEn": "facing Vecna, stayed passive and got cornered", |
| 1343 | - "lastPlayedAt": 1788247774359 | |
| 1449 | + "lastPlayedAt": 1788254655959, | |
| 1450 | + "playCount": 1 | |
| 1344 | 1451 | }, |
| 1345 | 1452 | { |
| 1346 | 1453 | "id": "7161aecafa32", |
| ... | ... | @@ -1355,7 +1462,8 @@ |
| 1355 | 1462 | "likes": 0, |
| 1356 | 1463 | "createdAt": 1788011727444, |
| 1357 | 1464 | "promptEn": "entering Vecna's mental lair, red lightning, twisted space", |
| 1358 | - "lastPlayedAt": 1788251520666 | |
| 1465 | + "lastPlayedAt": 1788254934172, | |
| 1466 | + "playCount": 1 | |
| 1359 | 1467 | }, |
| 1360 | 1468 | { |
| 1361 | 1469 | "id": "6a9af7e7368d", |
| ... | ... | @@ -1370,7 +1478,8 @@ |
| 1370 | 1478 | "likes": 0, |
| 1371 | 1479 | "createdAt": 1788011488775, |
| 1372 | 1480 | "promptEn": "graveyard standoff, exploiting a flaw to counter Voldemort", |
| 1373 | - "lastPlayedAt": 1788253875818 | |
| 1481 | + "lastPlayedAt": 1788255500375, | |
| 1482 | + "playCount": 1 | |
| 1374 | 1483 | }, |
| 1375 | 1484 | { |
| 1376 | 1485 | "id": "24845be71ea0", |
| ... | ... | @@ -1385,7 +1494,8 @@ |
| 1385 | 1494 | "likes": 0, |
| 1386 | 1495 | "createdAt": 1788011488667, |
| 1387 | 1496 | "promptEn": "graveyard standoff, exploiting a flaw to counter Voldemort", |
| 1388 | - "lastPlayedAt": 1788252803254 | |
| 1497 | + "lastPlayedAt": 1788254960102, | |
| 1498 | + "playCount": 1 | |
| 1389 | 1499 | }, |
| 1390 | 1500 | { |
| 1391 | 1501 | "id": "f1012a3d7aa7", |
| ... | ... | @@ -1415,7 +1525,8 @@ |
| 1415 | 1525 | "likes": 0, |
| 1416 | 1526 | "createdAt": 1788011013309, |
| 1417 | 1527 | "promptEn": "facing Voldemort, went in head-on and got seen through", |
| 1418 | - "lastPlayedAt": 1788252965327 | |
| 1528 | + "lastPlayedAt": 1788254930090, | |
| 1529 | + "playCount": 1 | |
| 1419 | 1530 | }, |
| 1420 | 1531 | { |
| 1421 | 1532 | "id": "682cbc166479", |
| ... | ... | @@ -1490,7 +1601,8 @@ |
| 1490 | 1601 | "likes": 0, |
| 1491 | 1602 | "createdAt": 1788009825082, |
| 1492 | 1603 | "promptEn": "facing Thanos, went in head-on and got seen through", |
| 1493 | - "lastPlayedAt": 1788252393143 | |
| 1604 | + "lastPlayedAt": 1788256098668, | |
| 1605 | + "playCount": 1 | |
| 1494 | 1606 | }, |
| 1495 | 1607 | { |
| 1496 | 1608 | "id": "a6ead2cbe03f", |
| ... | ... | @@ -1505,7 +1617,8 @@ |
| 1505 | 1617 | "likes": 0, |
| 1506 | 1618 | "createdAt": 1788009586293, |
| 1507 | 1619 | "promptEn": "facing Thanos, stayed passive and got cornered", |
| 1508 | - "lastPlayedAt": 1788253869815 | |
| 1620 | + "lastPlayedAt": 1788256306693, | |
| 1621 | + "playCount": 1 | |
| 1509 | 1622 | }, |
| 1510 | 1623 | { |
| 1511 | 1624 | "id": "438c98cf4973", |
| ... | ... | @@ -1535,7 +1648,8 @@ |
| 1535 | 1648 | "likes": 0, |
| 1536 | 1649 | "createdAt": 1788009108302, |
| 1537 | 1650 | "promptEn": "in the endless hotel, exploiting a flaw to counter the Eternity Devil", |
| 1538 | - "lastPlayedAt": 1788252247056 | |
| 1651 | + "lastPlayedAt": 1788255052143, | |
| 1652 | + "playCount": 1 | |
| 1539 | 1653 | }, |
| 1540 | 1654 | { |
| 1541 | 1655 | "id": "71c590b0ea8f", |
| ... | ... | @@ -1580,7 +1694,8 @@ |
| 1580 | 1694 | "likes": 0, |
| 1581 | 1695 | "createdAt": 1788008394344, |
| 1582 | 1696 | "promptEn": "facing the Eternity Devil, stayed passive and got cornered", |
| 1583 | - "lastPlayedAt": 1788252833268 | |
| 1697 | + "lastPlayedAt": 1788255400330, | |
| 1698 | + "playCount": 1 | |
| 1584 | 1699 | }, |
| 1585 | 1700 | { |
| 1586 | 1701 | "id": "1a57de01bad0", |
| ... | ... | @@ -1640,7 +1755,8 @@ |
| 1640 | 1755 | "likes": 0, |
| 1641 | 1756 | "createdAt": 1788007441156, |
| 1642 | 1757 | "promptEn": "battlefield in Jaku city, the city in ruins, heroes in crisis", |
| 1643 | - "lastPlayedAt": 1788253771767 | |
| 1758 | + "lastPlayedAt": 1788256522850, | |
| 1759 | + "playCount": 1 | |
| 1644 | 1760 | }, |
| 1645 | 1761 | { |
| 1646 | 1762 | "id": "68219d6b68c8", |
| ... | ... | @@ -1670,7 +1786,8 @@ |
| 1670 | 1786 | "likes": 0, |
| 1671 | 1787 | "createdAt": 1788006964122, |
| 1672 | 1788 | "promptEn": "grabbing an evidence flaw to counter L", |
| 1673 | - "lastPlayedAt": 1788253259502 | |
| 1789 | + "lastPlayedAt": 1788255550395, | |
| 1790 | + "playCount": 1 | |
| 1674 | 1791 | }, |
| 1675 | 1792 | { |
| 1676 | 1793 | "id": "0c6306b07f79", |
| ... | ... | @@ -1685,7 +1802,8 @@ |
| 1685 | 1802 | "likes": 0, |
| 1686 | 1803 | "createdAt": 1788006725887, |
| 1687 | 1804 | "promptEn": "facing off with L, went in head-on and got seen through", |
| 1688 | - "lastPlayedAt": 1788252617213 | |
| 1805 | + "lastPlayedAt": 1788255738510, | |
| 1806 | + "playCount": 1 | |
| 1689 | 1807 | }, |
| 1690 | 1808 | { |
| 1691 | 1809 | "id": "ee82188227fa", |
| ... | ... | @@ -1730,7 +1848,8 @@ |
| 1730 | 1848 | "likes": 0, |
| 1731 | 1849 | "createdAt": 1788006015175, |
| 1732 | 1850 | "promptEn": "on the ruined planet, exploiting a flaw to counter Frieza", |
| 1733 | - "lastPlayedAt": 1788252971329 | |
| 1851 | + "lastPlayedAt": 1788256212662, | |
| 1852 | + "playCount": 1 | |
| 1734 | 1853 | }, |
| 1735 | 1854 | { |
| 1736 | 1855 | "id": "e6fda5c2237d", |
| ... | ... | @@ -1745,7 +1864,8 @@ |
| 1745 | 1864 | "likes": 0, |
| 1746 | 1865 | "createdAt": 1788005778588, |
| 1747 | 1866 | "promptEn": "facing Frieza, held the goal but paid a price", |
| 1748 | - "lastPlayedAt": 1788249925828 | |
| 1867 | + "lastPlayedAt": 1788256090667, | |
| 1868 | + "playCount": 1 | |
| 1749 | 1869 | }, |
| 1750 | 1870 | { |
| 1751 | 1871 | "id": "b96cc9762cf6", |
| ... | ... | @@ -1775,7 +1895,8 @@ |
| 1775 | 1895 | "likes": 0, |
| 1776 | 1896 | "createdAt": 1788005305091, |
| 1777 | 1897 | "promptEn": "facing Frieza, stayed passive and got cornered", |
| 1778 | - "lastPlayedAt": 1788252623220 | |
| 1898 | + "lastPlayedAt": 1788254619433, | |
| 1899 | + "playCount": 1 | |
| 1779 | 1900 | }, |
| 1780 | 1901 | { |
| 1781 | 1902 | "id": "d680e111ade5", |
| ... | ... | @@ -1790,7 +1911,8 @@ |
| 1790 | 1911 | "likes": 0, |
| 1791 | 1912 | "createdAt": 1788005066484, |
| 1792 | 1913 | "promptEn": "Namek is about to be destroyed, the dragon ball wish still up for grabs", |
| 1793 | - "lastPlayedAt": 1788251174432 | |
| 1914 | + "lastPlayedAt": 1788255118176, | |
| 1915 | + "playCount": 1 | |
| 1794 | 1916 | }, |
| 1795 | 1917 | { |
| 1796 | 1918 | "id": "565059763888", |
| ... | ... | @@ -1820,7 +1942,8 @@ |
| 1820 | 1942 | "likes": 0, |
| 1821 | 1943 | "createdAt": 1788004590937, |
| 1822 | 1944 | "promptEn": "facing Mahito, held the goal but paid a price", |
| 1823 | - "lastPlayedAt": 1788253015358 | |
| 1945 | + "lastPlayedAt": 1788255308286, | |
| 1946 | + "playCount": 1 | |
| 1824 | 1947 | }, |
| 1825 | 1948 | { |
| 1826 | 1949 | "id": "9996a8ac8326", |
| ... | ... | @@ -1835,7 +1958,8 @@ |
| 1835 | 1958 | "likes": 0, |
| 1836 | 1959 | "createdAt": 1788004353928, |
| 1837 | 1960 | "promptEn": "facing Mahito, went in head-on and got seen through", |
| 1838 | - "lastPlayedAt": 1788251822858 | |
| 1961 | + "lastPlayedAt": 1788256418748, | |
| 1962 | + "playCount": 1 | |
| 1839 | 1963 | }, |
| 1840 | 1964 | { |
| 1841 | 1965 | "id": "971d80ec087c", |
| ... | ... | @@ -1850,7 +1974,8 @@ |
| 1850 | 1974 | "likes": 0, |
| 1851 | 1975 | "createdAt": 1788004115725, |
| 1852 | 1976 | "promptEn": "facing Mahito, stayed passive and got cornered", |
| 1853 | - "lastPlayedAt": 1788252799252 | |
| 1977 | + "lastPlayedAt": 1788256356716, | |
| 1978 | + "playCount": 1 | |
| 1854 | 1979 | }, |
| 1855 | 1980 | { |
| 1856 | 1981 | "id": "5dd52c568f66", |
| ... | ... | @@ -1865,7 +1990,8 @@ |
| 1865 | 1990 | "likes": 0, |
| 1866 | 1991 | "createdAt": 1788004115612, |
| 1867 | 1992 | "promptEn": "facing Mahito, stayed passive and got cornered", |
| 1868 | - "lastPlayedAt": 1788253899831 | |
| 1993 | + "lastPlayedAt": 1788256128678, | |
| 1994 | + "playCount": 1 | |
| 1869 | 1995 | }, |
| 1870 | 1996 | { |
| 1871 | 1997 | "id": "f4a2870386c6", |
| ... | ... | @@ -1925,7 +2051,8 @@ |
| 1925 | 2051 | "likes": 0, |
| 1926 | 2052 | "createdAt": 1788003166117, |
| 1927 | 2053 | "promptEn": "facing Enmu, stayed passive and got cornered", |
| 1928 | - "lastPlayedAt": 1788252727219 | |
| 2054 | + "lastPlayedAt": 1788254595913, | |
| 2055 | + "playCount": 1 | |
| 1929 | 2056 | }, |
| 1930 | 2057 | { |
| 1931 | 2058 | "id": "a3f39da74c1f", |
| ... | ... | @@ -1940,7 +2067,8 @@ |
| 1940 | 2067 | "likes": 0, |
| 1941 | 2068 | "createdAt": 1788002929455, |
| 1942 | 2069 | "promptEn": "facing Reiner, exploiting a flaw to counter him", |
| 1943 | - "lastPlayedAt": 1788254288010 | |
| 2070 | + "lastPlayedAt": 1788255768521, | |
| 2071 | + "playCount": 1 | |
| 1944 | 2072 | }, |
| 1945 | 2073 | { |
| 1946 | 2074 | "id": "ea8b38014674", |
| ... | ... | @@ -2000,7 +2128,8 @@ |
| 2000 | 2128 | "likes": 0, |
| 2001 | 2129 | "createdAt": 1788001981272, |
| 2002 | 2130 | "promptEn": "basement in Shiganshina, the titan secret weighing down on you", |
| 2003 | - "lastPlayedAt": 1788252675244 | |
| 2131 | + "lastPlayedAt": 1788255694482, | |
| 2132 | + "playCount": 1 | |
| 2004 | 2133 | }, |
| 2005 | 2134 | { |
| 2006 | 2135 | "id": "7c2351a27a96", |
| ... | ... | @@ -2015,7 +2144,8 @@ |
| 2015 | 2144 | "likes": 0, |
| 2016 | 2145 | "createdAt": 1788001508988, |
| 2017 | 2146 | "promptEn": "in the ruins of Konoha, exploiting a flaw to counter Pain", |
| 2018 | - "lastPlayedAt": 1788253801782 | |
| 2147 | + "lastPlayedAt": 1788255128181, | |
| 2148 | + "playCount": 1 | |
| 2019 | 2149 | }, |
| 2020 | 2150 | { |
| 2021 | 2151 | "id": "79304c061606", |
| ... | ... | @@ -2045,7 +2175,8 @@ |
| 2045 | 2175 | "likes": 0, |
| 2046 | 2176 | "createdAt": 1788001285796, |
| 2047 | 2177 | "promptEn": "in the ruins of Konoha, exploiting a flaw to counter Pain", |
| 2048 | - "lastPlayedAt": 1788253477606 | |
| 2178 | + "lastPlayedAt": 1788255410335, | |
| 2179 | + "playCount": 1 | |
| 2049 | 2180 | }, |
| 2050 | 2181 | { |
| 2051 | 2182 | "id": "808e89ca06a4", |
| ... | ... | @@ -2060,7 +2191,8 @@ |
| 2060 | 2191 | "likes": 0, |
| 2061 | 2192 | "createdAt": 1788001049233, |
| 2062 | 2193 | "promptEn": "facing Pain, held the goal but paid a price", |
| 2063 | - "lastPlayedAt": 1788254115931 | |
| 2194 | + "lastPlayedAt": 1788255476364, | |
| 2195 | + "playCount": 1 | |
| 2064 | 2196 | }, |
| 2065 | 2197 | { |
| 2066 | 2198 | "id": "7ecd480a3c31", |
| ... | ... | @@ -2090,7 +2222,8 @@ |
| 2090 | 2222 | "likes": 0, |
| 2091 | 2223 | "createdAt": 1788000577474, |
| 2092 | 2224 | "promptEn": "facing Pain, stayed passive and got cornered", |
| 2093 | - "lastPlayedAt": 1788253009344 | |
| 2225 | + "lastPlayedAt": 1788255208219, | |
| 2226 | + "playCount": 1 | |
| 2094 | 2227 | }, |
| 2095 | 2228 | { |
| 2096 | 2229 | "id": "5ef9489bdc5b", |
| ... | ... | @@ -2105,7 +2238,8 @@ |
| 2105 | 2238 | "likes": 0, |
| 2106 | 2239 | "createdAt": 1788000341927, |
| 2107 | 2240 | "promptEn": "Konoha destroyed by Shinra Tensei, Pain declaring order in the ruins", |
| 2108 | - "lastPlayedAt": 1788253434714 | |
| 2241 | + "lastPlayedAt": 1788255484369, | |
| 2242 | + "playCount": 1 | |
| 2109 | 2243 | }, |
| 2110 | 2244 | { |
| 2111 | 2245 | "id": "e245dbcc6d36", |
| ... | ... | @@ -2120,7 +2254,8 @@ |
| 2120 | 2254 | "likes": 0, |
| 2121 | 2255 | "createdAt": 1788000105889, |
| 2122 | 2256 | "promptEn": "facing Sakazuki, exploiting a flaw to counter him", |
| 2123 | - "lastPlayedAt": 1788253821783 | |
| 2257 | + "lastPlayedAt": 1788255314291, | |
| 2258 | + "playCount": 1 | |
| 2124 | 2259 | }, |
| 2125 | 2260 | { |
| 2126 | 2261 | "id": "c9be7c07b793", |
| ... | ... | @@ -2135,7 +2270,8 @@ |
| 2135 | 2270 | "likes": 0, |
| 2136 | 2271 | "createdAt": 1787999869694, |
| 2137 | 2272 | "promptEn": "facing Sakazuki, held the goal but paid a price", |
| 2138 | - "lastPlayedAt": 1788251688777 | |
| 2273 | + "lastPlayedAt": 1788255056146, | |
| 2274 | + "playCount": 1 | |
| 2139 | 2275 | }, |
| 2140 | 2276 | { |
| 2141 | 2277 | "id": "677941e683c4", |
| ... | ... | @@ -2150,7 +2286,8 @@ |
| 2150 | 2286 | "likes": 0, |
| 2151 | 2287 | "createdAt": 1787999633745, |
| 2152 | 2288 | "promptEn": "facing Sakazuki, went in head-on and got seen through", |
| 2153 | - "lastPlayedAt": 1788251912902 | |
| 2289 | + "lastPlayedAt": 1788255042142, | |
| 2290 | + "playCount": 1 | |
| 2154 | 2291 | }, |
| 2155 | 2292 | { |
| 2156 | 2293 | "id": "932d15f7f8bd", |
| ... | ... | @@ -2165,7 +2302,8 @@ |
| 2165 | 2302 | "likes": 0, |
| 2166 | 2303 | "createdAt": 1787999633670, |
| 2167 | 2304 | "promptEn": "facing Sakazuki, went in head-on and got seen through", |
| 2168 | - "lastPlayedAt": 1788253777771 | |
| 2305 | + "lastPlayedAt": 1788255204217, | |
| 2306 | + "playCount": 1 | |
| 2169 | 2307 | }, |
| 2170 | 2308 | { |
| 2171 | 2309 | "id": "a8b8b4430ee3", |
| ... | ... | @@ -2195,7 +2333,8 @@ |
| 2195 | 2333 | "likes": 0, |
| 2196 | 2334 | "createdAt": 1787999161013, |
| 2197 | 2335 | "promptEn": "execution platform at Marineford, Ace about to be executed, navy vs pirates", |
| 2198 | - "lastPlayedAt": 1788253025350 | |
| 2336 | + "lastPlayedAt": 1788254924211, | |
| 2337 | + "playCount": 1 | |
| 2199 | 2338 | }, |
| 2200 | 2339 | { |
| 2201 | 2340 | "id": "00476b62bf75", |
| ... | ... | @@ -2210,7 +2349,8 @@ |
| 2210 | 2349 | "likes": 0, |
| 2211 | 2350 | "createdAt": 1787903583872, |
| 2212 | 2351 | "promptEn": "constable asks if she's always been alone here, she doesn't answer", |
| 2213 | - "lastPlayedAt": 1788253047365 | |
| 2352 | + "lastPlayedAt": 1788255504379, | |
| 2353 | + "playCount": 1 | |
| 2214 | 2354 | }, |
| 2215 | 2355 | { |
| 2216 | 2356 | "id": "2ab2094e5679", |
| ... | ... | @@ -2240,7 +2380,8 @@ |
| 2240 | 2380 | "likes": 0, |
| 2241 | 2381 | "createdAt": 1787850191899, |
| 2242 | 2382 | "promptEn": "constable reaches out to touch her hand through the screen gap, no response", |
| 2243 | - "lastPlayedAt": 1788251708784 | |
| 2383 | + "lastPlayedAt": 1788255918582, | |
| 2384 | + "playCount": 1 | |
| 2244 | 2385 | }, |
| 2245 | 2386 | { |
| 2246 | 2387 | "id": "9bd8c9fbf1f6", |
| ... | ... | @@ -2255,7 +2396,8 @@ |
| 2255 | 2396 | "likes": 0, |
| 2256 | 2397 | "createdAt": 1787847447661, |
| 2257 | 2398 | "promptEn": "constable tells the woman behind the screen he'll trust her tonight", |
| 2258 | - "lastPlayedAt": 1788253581662 | |
| 2399 | + "lastPlayedAt": 1788256396733, | |
| 2400 | + "playCount": 1 | |
| 2259 | 2401 | }, |
| 2260 | 2402 | { |
| 2261 | 2403 | "id": "8cb493338cb3", |
| ... | ... | @@ -2285,7 +2427,8 @@ |
| 2285 | 2427 | "likes": 0, |
| 2286 | 2428 | "createdAt": 1787762342686, |
| 2287 | 2429 | "promptEn": "woman tells him from behind the screen to go check outside, he steps out warily", |
| 2288 | - "lastPlayedAt": 1788250091902 | |
| 2430 | + "lastPlayedAt": 1788255062148, | |
| 2431 | + "playCount": 1 | |
| 2289 | 2432 | }, |
| 2290 | 2433 | { |
| 2291 | 2434 | "id": "47a6de809c61", |
| ... | ... | @@ -2300,7 +2443,8 @@ |
| 2300 | 2443 | "likes": 0, |
| 2301 | 2444 | "createdAt": 1787762332289, |
| 2302 | 2445 | "promptEn": "woman behind the screen stirs and softly reassures him", |
| 2303 | - "lastPlayedAt": 1788251932913 | |
| 2446 | + "lastPlayedAt": 1788255220228, | |
| 2447 | + "playCount": 1 | |
| 2304 | 2448 | }, |
| 2305 | 2449 | { |
| 2306 | 2450 | "id": "0abf6e529c92", |
| ... | ... | @@ -2330,7 +2474,8 @@ |
| 2330 | 2474 | "likes": 0, |
| 2331 | 2475 | "createdAt": 1787762286261, |
| 2332 | 2476 | "promptEn": "constable stares at her through the screen, silent, saying nothing", |
| 2333 | - "lastPlayedAt": 1788251618745 | |
| 2477 | + "lastPlayedAt": 1788256182461, | |
| 2478 | + "playCount": 1 | |
| 2334 | 2479 | }, |
| 2335 | 2480 | { |
| 2336 | 2481 | "id": "59711a102e84", |
| ... | ... | @@ -2345,7 +2490,8 @@ |
| 2345 | 2490 | "likes": 0, |
| 2346 | 2491 | "createdAt": 1787762224218, |
| 2347 | 2492 | "promptEn": "constable stands under the lamp, holding her gaze through the screen, not backing away", |
| 2348 | - "lastPlayedAt": 1788253631690 | |
| 2493 | + "lastPlayedAt": 1788254940098, | |
| 2494 | + "playCount": 1 | |
| 2349 | 2495 | }, |
| 2350 | 2496 | { |
| 2351 | 2497 | "id": "f2e70205766b", |
| ... | ... | @@ -2375,7 +2521,8 @@ |
| 2375 | 2521 | "likes": 0, |
| 2376 | 2522 | "createdAt": 1787730413689, |
| 2377 | 2523 | "promptEn": "constable grabs the oil lamp and hurls it at the portrait, the scroll catches fire", |
| 2378 | - "lastPlayedAt": 1788253556971 | |
| 2524 | + "lastPlayedAt": 1788255020134, | |
| 2525 | + "playCount": 1 | |
| 2379 | 2526 | }, |
| 2380 | 2527 | { |
| 2381 | 2528 | "id": "e6c23c6adc42", |
| ... | ... | @@ -2405,7 +2552,8 @@ |
| 2405 | 2552 | "likes": 0, |
| 2406 | 2553 | "createdAt": 1787730331663, |
| 2407 | 2554 | "promptEn": "constable steps in from the rainy night, spots her, introduces himself with a cover story", |
| 2408 | - "lastPlayedAt": 1788253781772 | |
| 2555 | + "lastPlayedAt": 1788256000614, | |
| 2556 | + "playCount": 1 | |
| 2409 | 2557 | }, |
| 2410 | 2558 | { |
| 2411 | 2559 | "id": "84e8337de242", |
| ... | ... | @@ -2420,7 +2568,8 @@ |
| 2420 | 2568 | "likes": 0, |
| 2421 | 2569 | "createdAt": 1787724313620, |
| 2422 | 2570 | "promptEn": "first-person view bursting into the room, glancing back in fear, the woman startled", |
| 2423 | - "lastPlayedAt": 1788252843270 | |
| 2571 | + "lastPlayedAt": 1788254753999, | |
| 2572 | + "playCount": 1 | |
| 2424 | 2573 | }, |
| 2425 | 2574 | { |
| 2426 | 2575 | "id": "81b6c3789111", |
| ... | ... | @@ -2435,7 +2584,8 @@ |
| 2435 | 2584 | "likes": 0, |
| 2436 | 2585 | "createdAt": 1787708713767, |
| 2437 | 2586 | "promptEn": "constable stops looking around, turns to face the screen, speaks to her silhouette", |
| 2438 | - "lastPlayedAt": 1788254322029 | |
| 2587 | + "lastPlayedAt": 1788255720502, | |
| 2588 | + "playCount": 1 | |
| 2439 | 2589 | }, |
| 2440 | 2590 | { |
| 2441 | 2591 | "id": "5dc95a15cd5d", |
| ... | ... | @@ -2450,7 +2600,8 @@ |
| 2450 | 2600 | "likes": 0, |
| 2451 | 2601 | "createdAt": 1787708701547, |
| 2452 | 2602 | "promptEn": "constable gently tells her he'll stay and keep her company", |
| 2453 | - "lastPlayedAt": 1788252873286 | |
| 2603 | + "lastPlayedAt": 1788255778520, | |
| 2604 | + "playCount": 1 | |
| 2454 | 2605 | }, |
| 2455 | 2606 | { |
| 2456 | 2607 | "id": "8d9c1dad041f", |
| ... | ... | @@ -2480,7 +2631,8 @@ |
| 2480 | 2631 | "likes": 0, |
| 2481 | 2632 | "createdAt": 1787708684658, |
| 2482 | 2633 | "promptEn": "constable sees her silent gesture, lets go of his sword hilt, steps closer and agrees", |
| 2483 | - "lastPlayedAt": 1788251970926 | |
| 2634 | + "lastPlayedAt": 1788254641958, | |
| 2635 | + "playCount": 1 | |
| 2484 | 2636 | }, |
| 2485 | 2637 | { |
| 2486 | 2638 | "id": "abdbe25f3121", |
| ... | ... | @@ -2495,7 +2647,8 @@ |
| 2495 | 2647 | "likes": 0, |
| 2496 | 2648 | "createdAt": 1787708674508, |
| 2497 | 2649 | "promptEn": "constable sees through her painted disguise and rips her face off, revealing a demonic visage underneath", |
| 2498 | - "lastPlayedAt": 1788252661239 | |
| 2650 | + "lastPlayedAt": 1788254693983, | |
| 2651 | + "playCount": 1 | |
| 2499 | 2652 | }, |
| 2500 | 2653 | { |
| 2501 | 2654 | "id": "6d433dcc104c", |
| ... | ... | @@ -2510,7 +2663,8 @@ |
| 2510 | 2663 | "likes": 0, |
| 2511 | 2664 | "createdAt": 1787708663418, |
| 2512 | 2665 | "promptEn": "constable catches his breath, thanks her, and rests on the couch while she watches", |
| 2513 | - "lastPlayedAt": 1788253353548 | |
| 2666 | + "lastPlayedAt": 1788256266678, | |
| 2667 | + "playCount": 1 | |
| 2514 | 2668 | }, |
| 2515 | 2669 | { |
| 2516 | 2670 | "id": "cd22c2b491fc", |
| ... | ... | @@ -2540,7 +2694,8 @@ |
| 2540 | 2694 | "likes": 0, |
| 2541 | 2695 | "createdAt": 1787708648409, |
| 2542 | 2696 | "promptEn": "she reaches a hand through the screen gap beckoning him, he steps back and firmly refuses", |
| 2543 | - "lastPlayedAt": 1788254125936 | |
| 2697 | + "lastPlayedAt": 1788256362719, | |
| 2698 | + "playCount": 1 | |
| 2544 | 2699 | }, |
| 2545 | 2700 | { |
| 2546 | 2701 | "id": "3f0c28f5373a", |
| ... | ... | @@ -2555,7 +2710,8 @@ |
| 2555 | 2710 | "likes": 0, |
| 2556 | 2711 | "createdAt": 1787708646888, |
| 2557 | 2712 | "promptEn": "constable studies her through the screen growing suspicious, hand drifting to his sword", |
| 2558 | - "lastPlayedAt": 1788253697730 | |
| 2713 | + "lastPlayedAt": 1788255522386, | |
| 2714 | + "playCount": 1 | |
| 2559 | 2715 | }, |
| 2560 | 2716 | { |
| 2561 | 2717 | "id": "1c0c203cfb3b", |
| ... | ... | @@ -2570,7 +2726,8 @@ |
| 2570 | 2726 | "likes": 0, |
| 2571 | 2727 | "createdAt": 1787708641782, |
| 2572 | 2728 | "promptEn": "constable sits down at the table, studying her expression through the screen", |
| 2573 | - "lastPlayedAt": 1788252435140 | |
| 2729 | + "lastPlayedAt": 1788255934591, | |
| 2730 | + "playCount": 1 | |
| 2574 | 2731 | }, |
| 2575 | 2732 | { |
| 2576 | 2733 | "id": "89975be9def4", |
| ... | ... | @@ -2585,7 +2742,8 @@ |
| 2585 | 2742 | "likes": 0, |
| 2586 | 2743 | "createdAt": 1787708626228, |
| 2587 | 2744 | "promptEn": "constable drinks some water first, thanks her, watching the screen warily as he drinks", |
| 2588 | - "lastPlayedAt": 1788253265514 | |
| 2745 | + "lastPlayedAt": 1788254986119, | |
| 2746 | + "playCount": 1 | |
| 2589 | 2747 | }, |
| 2590 | 2748 | { |
| 2591 | 2749 | "id": "e08f7f7e54dd", |
| ... | ... | @@ -2600,7 +2758,8 @@ |
| 2600 | 2758 | "likes": 0, |
| 2601 | 2759 | "createdAt": 1787708622306, |
| 2602 | 2760 | "promptEn": "constable gives a clasped-hand salute and thanks her, she gives a subtle nod", |
| 2603 | - "lastPlayedAt": 1788250263997 | |
| 2761 | + "lastPlayedAt": 1788256382726, | |
| 2762 | + "playCount": 1 | |
| 2604 | 2763 | }, |
| 2605 | 2764 | { |
| 2606 | 2765 | "id": "538dc7e5746f", |
| ... | ... | @@ -2615,7 +2774,8 @@ |
| 2615 | 2774 | "likes": 0, |
| 2616 | 2775 | "createdAt": 1787708622178, |
| 2617 | 2776 | "promptEn": "constable gives a clasped-hand salute and thanks her, she gives a subtle nod", |
| 2618 | - "lastPlayedAt": 1788253057370 | |
| 2777 | + "lastPlayedAt": 1788256532860, | |
| 2778 | + "playCount": 1 | |
| 2619 | 2779 | }, |
| 2620 | 2780 | { |
| 2621 | 2781 | "id": "1721c75dbc3b", |
| ... | ... | @@ -2630,7 +2790,8 @@ |
| 2630 | 2790 | "likes": 0, |
| 2631 | 2791 | "createdAt": 1787708615415, |
| 2632 | 2792 | "promptEn": "she slides her hand through the screen gap asking him to warm it, he hesitates without touching", |
| 2633 | - "lastPlayedAt": 1788252911303 | |
| 2793 | + "lastPlayedAt": 1788254789321, | |
| 2794 | + "playCount": 1 | |
| 2634 | 2795 | }, |
| 2635 | 2796 | { |
| 2636 | 2797 | "id": "c2b145b111e2", |
| ... | ... | @@ -2645,7 +2806,8 @@ |
| 2645 | 2806 | "likes": 0, |
| 2646 | 2807 | "createdAt": 1787708613364, |
| 2647 | 2808 | "promptEn": "constable steps in, notices her behind the screen, greets her, she just watches silently", |
| 2648 | - "lastPlayedAt": 1788252945316 | |
| 2809 | + "lastPlayedAt": 1788254723988, | |
| 2810 | + "playCount": 1 | |
| 2649 | 2811 | }, |
| 2650 | 2812 | { |
| 2651 | 2813 | "id": "a5d5d353bbf8", |
| ... | ... | @@ -2660,7 +2822,8 @@ |
| 2660 | 2822 | "likes": 0, |
| 2661 | 2823 | "createdAt": 1787674768144, |
| 2662 | 2824 | "promptEn": "constable lifts a bronze mirror, reflecting candlelight onto the portrait on the wall", |
| 2663 | - "lastPlayedAt": 1788251856874 | |
| 2825 | + "lastPlayedAt": 1788255968600, | |
| 2826 | + "playCount": 1 | |
| 2664 | 2827 | }, |
| 2665 | 2828 | { |
| 2666 | 2829 | "id": "3be1f275fde2", |
| ... | ... | @@ -2675,7 +2838,8 @@ |
| 2675 | 2838 | "likes": 0, |
| 2676 | 2839 | "createdAt": 1787674743188, |
| 2677 | 2840 | "promptEn": "constable draws his sword and breaks the sealed talisman on the screen, revealing her behind it", |
| 2678 | - "lastPlayedAt": 1788252539184 | |
| 2841 | + "lastPlayedAt": 1788255174203, | |
| 2842 | + "playCount": 1 | |
| 2679 | 2843 | }, |
| 2680 | 2844 | { |
| 2681 | 2845 | "id": "693e0b9ca66a", |
| ... | ... | @@ -2705,7 +2869,8 @@ |
| 2705 | 2869 | "likes": 0, |
| 2706 | 2870 | "createdAt": 1787674716075, |
| 2707 | 2871 | "promptEn": "constable watches the oil lamp flame flicker, her silhouette motionless behind the screen", |
| 2708 | - "lastPlayedAt": 1788251352521 | |
| 2872 | + "lastPlayedAt": 1788255706491, | |
| 2873 | + "playCount": 1 | |
| 2709 | 2874 | }, |
| 2710 | 2875 | { |
| 2711 | 2876 | "id": "23d1ae1982e6", |
| ... | ... | @@ -2720,7 +2885,8 @@ |
| 2720 | 2885 | "likes": 0, |
| 2721 | 2886 | "createdAt": 1787674713724, |
| 2722 | 2887 | "promptEn": "constable enters and cautiously looks around, his gaze settling on her silhouette behind the screen", |
| 2723 | - "lastPlayedAt": 1788252056963 | |
| 2888 | + "lastPlayedAt": 1788254882052, | |
| 2889 | + "playCount": 1 | |
| 2724 | 2890 | }, |
| 2725 | 2891 | { |
| 2726 | 2892 | "id": "b69389094416", |
| ... | ... | @@ -2735,7 +2901,8 @@ |
| 2735 | 2901 | "likes": 0, |
| 2736 | 2902 | "createdAt": 1787674695703, |
| 2737 | 2903 | "promptEn": "constable stops, faces the screen, quietly promises to keep his voice down", |
| 2738 | - "lastPlayedAt": 1788252743222 | |
| 2904 | + "lastPlayedAt": 1788254661960, | |
| 2905 | + "playCount": 1 | |
| 2739 | 2906 | }, |
| 2740 | 2907 | { |
| 2741 | 2908 | "id": "94dc455e26bf", |
| ... | ... | @@ -2750,7 +2917,8 @@ |
| 2750 | 2917 | "likes": 0, |
| 2751 | 2918 | "createdAt": 1787674688717, |
| 2752 | 2919 | "promptEn": "constable agrees to stay, lets his guard down, she gives a barely-there nod", |
| 2753 | - "lastPlayedAt": 1788254161950 | |
| 2920 | + "lastPlayedAt": 1788256144453, | |
| 2921 | + "playCount": 1 | |
| 2754 | 2922 | }, |
| 2755 | 2923 | { |
| 2756 | 2924 | "id": "4874fe3fdbc9", |
| ... | ... | @@ -2780,7 +2948,8 @@ |
| 2780 | 2948 | "likes": 0, |
| 2781 | 2949 | "createdAt": 1787674642139, |
| 2782 | 2950 | "promptEn": "constable forms hand seals and summons a giant toad out of smoke", |
| 2783 | - "lastPlayedAt": 1788254251995 | |
| 2951 | + "lastPlayedAt": 1788256216659, | |
| 2952 | + "playCount": 1 | |
| 2784 | 2953 | }, |
| 2785 | 2954 | { |
| 2786 | 2955 | "id": "e9a6320e18a9", |
| ... | ... | @@ -2810,7 +2979,8 @@ |
| 2810 | 2979 | "likes": 0, |
| 2811 | 2980 | "createdAt": 1787674639055, |
| 2812 | 2981 | "promptEn": "constable checks his reflection in the mirror, sees her behind his shoulder in it, turns around to find the screen empty", |
| 2813 | - "lastPlayedAt": 1788253073377 | |
| 2982 | + "lastPlayedAt": 1788255000140, | |
| 2983 | + "playCount": 1 | |
| 2814 | 2984 | }, |
| 2815 | 2985 | { |
| 2816 | 2986 | "id": "ebaf0dde3d9f", |
| ... | ... | @@ -2825,7 +2995,8 @@ |
| 2825 | 2995 | "likes": 0, |
| 2826 | 2996 | "createdAt": 1787674623678, |
| 2827 | 2997 | "promptEn": "constable bows to the screen, thanking her for sheltering him", |
| 2828 | - "lastPlayedAt": 1788253536965 | |
| 2998 | + "lastPlayedAt": 1788254739995, | |
| 2999 | + "playCount": 1 | |
| 2829 | 3000 | }, |
| 2830 | 3001 | { |
| 2831 | 3002 | "id": "d94991a1e21b", |
| ... | ... | @@ -2840,7 +3011,8 @@ |
| 2840 | 3011 | "likes": 0, |
| 2841 | 3012 | "createdAt": 1787674609636, |
| 2842 | 3013 | "promptEn": "constable silently watches her through the screen gaps, camera slowly zooming in on her face", |
| 2843 | - "lastPlayedAt": 1788253983858 | |
| 3014 | + "lastPlayedAt": 1788256196466, | |
| 3015 | + "playCount": 1 | |
| 2844 | 3016 | }, |
| 2845 | 3017 | { |
| 2846 | 3018 | "id": "5e53f7f5fe9b", |
| ... | ... | @@ -2855,7 +3027,8 @@ |
| 2855 | 3027 | "likes": 0, |
| 2856 | 3028 | "createdAt": 1787674446841, |
| 2857 | 3029 | "promptEn": "player panics into the room, glances back, out of breath, says something's chasing him outside", |
| 2858 | - "lastPlayedAt": 1788254185961 | |
| 3030 | + "lastPlayedAt": 1788256062650, | |
| 3031 | + "playCount": 1 | |
| 2859 | 3032 | }, |
| 2860 | 3033 | { |
| 2861 | 3034 | "id": "c25d53a5e086", |
| ... | ... | @@ -2885,7 +3058,8 @@ |
| 2885 | 3058 | "likes": 0, |
| 2886 | 3059 | "createdAt": 1787674361187, |
| 2887 | 3060 | "promptEn": "constable presses his hand to his chest, vowing his heart to her, she gives a knowing smile", |
| 2888 | - "lastPlayedAt": 1788252451148 | |
| 3061 | + "lastPlayedAt": 1788254774002, | |
| 3062 | + "playCount": 1 | |
| 2889 | 3063 | }, |
| 2890 | 3064 | { |
| 2891 | 3065 | "id": "8aba0a6bf05b", |
| ... | ... | @@ -2900,7 +3074,8 @@ |
| 2900 | 3074 | "likes": 0, |
| 2901 | 3075 | "createdAt": 1787674351536, |
| 2902 | 3076 | "promptEn": "constable searches an old house at night, candle flickering, woman hiding behind the screen", |
| 2903 | - "lastPlayedAt": 1788253615680 | |
| 3077 | + "lastPlayedAt": 1788255680474, | |
| 3078 | + "playCount": 1 | |
| 2904 | 3079 | }, |
| 2905 | 3080 | { |
| 2906 | 3081 | "id": "dc13e4f165dc", |
| ... | ... | @@ -2930,7 +3105,8 @@ |
| 2930 | 3105 | "likes": 0, |
| 2931 | 3106 | "createdAt": 1787665100787, |
| 2932 | 3107 | "promptEn": "constable politely asks the woman behind the screen for tea", |
| 2933 | - "lastPlayedAt": 1788253439598 | |
| 3108 | + "lastPlayedAt": 1788254709984, | |
| 3109 | + "playCount": 1 | |
| 2934 | 3110 | }, |
| 2935 | 3111 | { |
| 2936 | 3112 | "id": "d2c77b87b84b", |
| ... | ... | @@ -2960,7 +3136,8 @@ |
| 2960 | 3136 | "likes": 0, |
| 2961 | 3137 | "createdAt": 1787642579766, |
| 2962 | 3138 | "promptEn": "a summoner chants and calls a giant toad, which swallows the white-robed ghost whole", |
| 2963 | - "lastPlayedAt": 1788253597668 | |
| 3139 | + "lastPlayedAt": 1788256502800, | |
| 3140 | + "playCount": 1 | |
| 2964 | 3141 | }, |
| 2965 | 3142 | { |
| 2966 | 3143 | "id": "22a666455198", |
| ... | ... | @@ -2989,8 +3166,9 @@ |
| 2989 | 3166 | "partition": "ref2va", |
| 2990 | 3167 | "likes": 0, |
| 2991 | 3168 | "createdAt": 1787639957338, |
| 2992 | - "lastPlayedAt": 1788251344514, | |
| 2993 | - "promptEn": "constable talking to the woman through the screen" | |
| 3169 | + "lastPlayedAt": 1788254613432, | |
| 3170 | + "promptEn": "constable talking to the woman through the screen", | |
| 3171 | + "playCount": 1 | |
| 2994 | 3172 | }, |
| 2995 | 3173 | { |
| 2996 | 3174 | "id": "9f9638cb5b62", |
| ... | ... | @@ -3020,7 +3198,8 @@ |
| 3020 | 3198 | "likes": 0, |
| 3021 | 3199 | "createdAt": 1787635935502, |
| 3022 | 3200 | "promptEn": "constable bursts in panicked, spots the woman behind the screen", |
| 3023 | - "lastPlayedAt": 1788250520137 | |
| 3201 | + "lastPlayedAt": 1788255092168, | |
| 3202 | + "playCount": 1 | |
| 3024 | 3203 | }, |
| 3025 | 3204 | { |
| 3026 | 3205 | "id": "b32769bf80db", |
| ... | ... | @@ -3035,7 +3214,8 @@ |
| 3035 | 3214 | "likes": 0, |
| 3036 | 3215 | "createdAt": 1787632587351, |
| 3037 | 3216 | "promptEn": "constable bursts in panicked, spots the woman behind the screen", |
| 3038 | - "lastPlayedAt": 1788250612184 | |
| 3217 | + "lastPlayedAt": 1788255382318, | |
| 3218 | + "playCount": 1 | |
| 3039 | 3219 | }, |
| 3040 | 3220 | { |
| 3041 | 3221 | "id": "282281777d1b", |
| ... | ... | @@ -3050,7 +3230,8 @@ |
| 3050 | 3230 | "likes": 0, |
| 3051 | 3231 | "createdAt": 1787615243753, |
| 3052 | 3232 | "promptEn": "robot arm picks up a red block and puts it down", |
| 3053 | - "lastPlayedAt": 1788251258468 | |
| 3233 | + "lastPlayedAt": 1788254681970, | |
| 3234 | + "playCount": 1 | |
| 3054 | 3235 | }, |
| 3055 | 3236 | { |
| 3056 | 3237 | "id": "d040eec16a88", |
| ... | ... | @@ -3065,7 +3246,8 @@ |
| 3065 | 3246 | "likes": 0, |
| 3066 | 3247 | "createdAt": 1787615242602, |
| 3067 | 3248 | "promptEn": "otome game male lead showcase PV", |
| 3068 | - "lastPlayedAt": 1788251108401 | |
| 3249 | + "lastPlayedAt": 1788256248669, | |
| 3250 | + "playCount": 1 | |
| 3069 | 3251 | }, |
| 3070 | 3252 | { |
| 3071 | 3253 | "id": "423a20afba5a", |
| ... | ... | @@ -3080,7 +3262,8 @@ |
| 3080 | 3262 | "likes": 0, |
| 3081 | 3263 | "createdAt": 1787615241814, |
| 3082 | 3264 | "promptEn": "xianxia character turning, only back and side profile shown", |
| 3083 | - "lastPlayedAt": 1788253329541 | |
| 3265 | + "lastPlayedAt": 1788256310695, | |
| 3266 | + "playCount": 1 | |
| 3084 | 3267 | }, |
| 3085 | 3268 | { |
| 3086 | 3269 | "id": "1a398591663e", |
| ... | ... | @@ -3155,7 +3338,8 @@ |
| 3155 | 3338 | "likes": 0, |
| 3156 | 3339 | "createdAt": 1787588545243, |
| 3157 | 3340 | "promptEn": "ergonomic office chair 360 showcase ad", |
| 3158 | - "lastPlayedAt": 1788253031360 | |
| 3341 | + "lastPlayedAt": 1788256232664, | |
| 3342 | + "playCount": 1 | |
| 3159 | 3343 | }, |
| 3160 | 3344 | { |
| 3161 | 3345 | "id": "b0d258352c3c", |
| ... | ... | @@ -3170,7 +3354,8 @@ |
| 3170 | 3354 | "likes": 0, |
| 3171 | 3355 | "createdAt": 1787588544667, |
| 3172 | 3356 | "promptEn": "white studio shoot, two models wearing futuristic glasses", |
| 3173 | - "lastPlayedAt": 1788248729194 | |
| 3357 | + "lastPlayedAt": 1788255666469, | |
| 3358 | + "playCount": 1 | |
| 3174 | 3359 | }, |
| 3175 | 3360 | { |
| 3176 | 3361 | "id": "71a4d093aebc", |
| ... | ... | @@ -3215,7 +3400,8 @@ |
| 3215 | 3400 | "likes": 0, |
| 3216 | 3401 | "createdAt": 1787588542968, |
| 3217 | 3402 | "promptEn": "mystery crime title sequence, collage split-screen credits", |
| 3218 | - "lastPlayedAt": 1788251444607 | |
| 3403 | + "lastPlayedAt": 1788255236243, | |
| 3404 | + "playCount": 1 | |
| 3219 | 3405 | }, |
| 3220 | 3406 | { |
| 3221 | 3407 | "id": "67ababbea78f", |
| ... | ... | @@ -3230,7 +3416,8 @@ |
| 3230 | 3416 | "likes": 0, |
| 3231 | 3417 | "createdAt": 1787588542426, |
| 3232 | 3418 | "promptEn": "fashion guy in sunglasses and coat by a fire", |
| 3233 | - "lastPlayedAt": 1788250364064 | |
| 3419 | + "lastPlayedAt": 1788255510380, | |
| 3420 | + "playCount": 1 | |
| 3234 | 3421 | }, |
| 3235 | 3422 | { |
| 3236 | 3423 | "id": "c1237b599bf4", |
| ... | ... | @@ -3260,7 +3447,8 @@ |
| 3260 | 3447 | "likes": 0, |
| 3261 | 3448 | "createdAt": 1787588541164, |
| 3262 | 3449 | "promptEn": "tiny silhouette before a huge cosmic gate, title fades in", |
| 3263 | - "lastPlayedAt": 1788252110986 | |
| 3450 | + "lastPlayedAt": 1788255982612, | |
| 3451 | + "playCount": 1 | |
| 3264 | 3452 | }, |
| 3265 | 3453 | { |
| 3266 | 3454 | "id": "5cc09dcdf470", |
| ... | ... | @@ -3275,7 +3463,8 @@ |
| 3275 | 3463 | "likes": 0, |
| 3276 | 3464 | "createdAt": 1787588540642, |
| 3277 | 3465 | "promptEn": "telescope view searching for a MiniMax device, fashionable passerby", |
| 3278 | - "lastPlayedAt": 1788250804249 | |
| 3466 | + "lastPlayedAt": 1788256452766, | |
| 3467 | + "playCount": 1 | |
| 3279 | 3468 | }, |
| 3280 | 3469 | { |
| 3281 | 3470 | "id": "a59cae01ec39", |
| ... | ... | @@ -3290,7 +3479,8 @@ |
| 3290 | 3479 | "likes": 0, |
| 3291 | 3480 | "createdAt": 1787588540567, |
| 3292 | 3481 | "promptEn": "telescope view searching for a MiniMax device", |
| 3293 | - "lastPlayedAt": 1788253197469 | |
| 3482 | + "lastPlayedAt": 1788254623432, | |
| 3483 | + "playCount": 1 | |
| 3294 | 3484 | }, |
| 3295 | 3485 | { |
| 3296 | 3486 | "id": "ba8c0758e5b4", |
| ... | ... | @@ -3320,7 +3510,8 @@ |
| 3320 | 3510 | "likes": 0, |
| 3321 | 3511 | "createdAt": 1787577878370, |
| 3322 | 3512 | "promptEn": "man barges into the old house apologizing, woman in white behind the screen", |
| 3323 | - "lastPlayedAt": 1788253661702 | |
| 3513 | + "lastPlayedAt": 1788255748510, | |
| 3514 | + "playCount": 1 | |
| 3324 | 3515 | }, |
| 3325 | 3516 | { |
| 3326 | 3517 | "id": "0e75ef71c3d0", |
| ... | ... | @@ -3335,7 +3526,8 @@ |
| 3335 | 3526 | "likes": 0, |
| 3336 | 3527 | "createdAt": 1787577088842, |
| 3337 | 3528 | "promptEn": "man thanks the woman for taking him in, behind the screen", |
| 3338 | - "lastPlayedAt": 1788252705203 | |
| 3529 | + "lastPlayedAt": 1788256134682, | |
| 3530 | + "playCount": 1 | |
| 3339 | 3531 | }, |
| 3340 | 3532 | { |
| 3341 | 3533 | "id": "e656777b6eef", |
| ... | ... | @@ -3350,7 +3542,8 @@ |
| 3350 | 3542 | "likes": 0, |
| 3351 | 3543 | "createdAt": 1787577088778, |
| 3352 | 3544 | "promptEn": "man thanks the woman for taking him in", |
| 3353 | - "lastPlayedAt": 1788253473612 | |
| 3545 | + "lastPlayedAt": 1788255122181, | |
| 3546 | + "playCount": 1 | |
| 3354 | 3547 | }, |
| 3355 | 3548 | { |
| 3356 | 3549 | "id": "8d0270466c35", |
| ... | ... | @@ -3365,7 +3558,8 @@ |
| 3365 | 3558 | "likes": 0, |
| 3366 | 3559 | "createdAt": 1787576943673, |
| 3367 | 3560 | "promptEn": "man lowers his voice like she said, checks the door, window and lamp", |
| 3368 | - "lastPlayedAt": 1788253482789 | |
| 3561 | + "lastPlayedAt": 1788255386322, | |
| 3562 | + "playCount": 1 | |
| 3369 | 3563 | }, |
| 3370 | 3564 | { |
| 3371 | 3565 | "id": "396de15c1439", |
| ... | ... | @@ -3410,7 +3604,8 @@ |
| 3410 | 3604 | "likes": 0, |
| 3411 | 3605 | "createdAt": 1787576651668, |
| 3412 | 3606 | "promptEn": "man silently looks at her, doesn't respond", |
| 3413 | - "lastPlayedAt": 1788251536684 | |
| 3607 | + "lastPlayedAt": 1788256326705, | |
| 3608 | + "playCount": 1 | |
| 3414 | 3609 | }, |
| 3415 | 3610 | { |
| 3416 | 3611 | "id": "5958b86ab8f4", |
| ... | ... | @@ -3424,8 +3619,9 @@ |
| 3424 | 3619 | "partition": "text", |
| 3425 | 3620 | "likes": 0, |
| 3426 | 3621 | "createdAt": 1787576506447, |
| 3427 | - "lastPlayedAt": 1788250053889, | |
| 3428 | - "promptEn": "man does as she says but stays on guard" | |
| 3622 | + "lastPlayedAt": 1788256244668, | |
| 3623 | + "promptEn": "man does as she says but stays on guard", | |
| 3624 | + "playCount": 1 | |
| 3429 | 3625 | }, |
| 3430 | 3626 | { |
| 3431 | 3627 | "id": "dd69b54fb2ce", |
| ... | ... | @@ -3500,7 +3696,8 @@ |
| 3500 | 3696 | "likes": 0, |
| 3501 | 3697 | "createdAt": 1787575164766, |
| 3502 | 3698 | "promptEn": "man apologizes, says something outside was chasing him", |
| 3503 | - "lastPlayedAt": 1788251998941 | |
| 3699 | + "lastPlayedAt": 1788255420339, | |
| 3700 | + "playCount": 1 | |
| 3504 | 3701 | }, |
| 3505 | 3702 | { |
| 3506 | 3703 | "id": "fb3000701384", |
| ... | ... | @@ -3515,7 +3712,8 @@ |
| 3515 | 3712 | "likes": 0, |
| 3516 | 3713 | "createdAt": 1787573698485, |
| 3517 | 3714 | "promptEn": "underground rap duo freestyling at the camera", |
| 3518 | - "lastPlayedAt": 1788254075916 | |
| 3715 | + "lastPlayedAt": 1788256114676, | |
| 3716 | + "playCount": 1 | |
| 3519 | 3717 | }, |
| 3520 | 3718 | { |
| 3521 | 3719 | "id": "e5246eae814e", |
| ... | ... | @@ -3530,7 +3728,8 @@ |
| 3530 | 3728 | "likes": 0, |
| 3531 | 3729 | "createdAt": 1787569314178, |
| 3532 | 3730 | "promptEn": "man apologizes, says something outside was chasing him", |
| 3533 | - "lastPlayedAt": 1788252793246 | |
| 3731 | + "lastPlayedAt": 1788255430342, | |
| 3732 | + "playCount": 1 | |
| 3534 | 3733 | }, |
| 3535 | 3734 | { |
| 3536 | 3735 | "id": "a0d7a106b8d6", |
| ... | ... | @@ -3544,8 +3743,9 @@ |
| 3544 | 3743 | "partition": "text", |
| 3545 | 3744 | "likes": 0, |
| 3546 | 3745 | "createdAt": 1787568512602, |
| 3547 | - "lastPlayedAt": 1788254065909, | |
| 3548 | - "promptEn": "man apologizes, says something outside was chasing him" | |
| 3746 | + "lastPlayedAt": 1788255488369, | |
| 3747 | + "promptEn": "man apologizes, says something outside was chasing him", | |
| 3748 | + "playCount": 1 | |
| 3549 | 3749 | }, |
| 3550 | 3750 | { |
| 3551 | 3751 | "id": "d71c09a38248", |
| ... | ... | @@ -3559,8 +3759,9 @@ |
| 3559 | 3759 | "partition": "ref2va", |
| 3560 | 3760 | "likes": 0, |
| 3561 | 3761 | "createdAt": 1787559156410, |
| 3562 | - "lastPlayedAt": 1788251306490, | |
| 3563 | - "promptEn": "two characters sitting, game menu UI swaps in a mechanical arm" | |
| 3762 | + "lastPlayedAt": 1788254804016, | |
| 3763 | + "promptEn": "two characters sitting, game menu UI swaps in a mechanical arm", | |
| 3764 | + "playCount": 1 | |
| 3564 | 3765 | }, |
| 3565 | 3766 | { |
| 3566 | 3767 | "id": "87c065ab0f98", |
| ... | ... | @@ -3575,7 +3776,8 @@ |
| 3575 | 3776 | "likes": 0, |
| 3576 | 3777 | "createdAt": 1787542770522, |
| 3577 | 3778 | "promptEn": "clip cut to match a reference video's editing rhythm", |
| 3578 | - "lastPlayedAt": 1788251906899 | |
| 3779 | + "lastPlayedAt": 1788255166199, | |
| 3780 | + "playCount": 1 | |
| 3579 | 3781 | }, |
| 3580 | 3782 | { |
| 3581 | 3783 | "id": "f9286d694bad", |
| ... | ... | @@ -3590,7 +3792,8 @@ |
| 3590 | 3792 | "likes": 0, |
| 3591 | 3793 | "createdAt": 1787497396594, |
| 3592 | 3794 | "promptEn": "otome game male lead showcase PV", |
| 3593 | - "lastPlayedAt": 1788253932562 | |
| 3795 | + "lastPlayedAt": 1788255340303, | |
| 3796 | + "playCount": 1 | |
| 3594 | 3797 | }, |
| 3595 | 3798 | { |
| 3596 | 3799 | "id": "36ac12f2f29e", |
| ... | ... | @@ -3605,7 +3808,8 @@ |
| 3605 | 3808 | "likes": 0, |
| 3606 | 3809 | "createdAt": 1787493339415, |
| 3607 | 3810 | "promptEn": "game menu UI, character swaps out a mechanical arm", |
| 3608 | - "lastPlayedAt": 1788252205054 | |
| 3811 | + "lastPlayedAt": 1788255294279, | |
| 3812 | + "playCount": 1 | |
| 3609 | 3813 | }, |
| 3610 | 3814 | { |
| 3611 | 3815 | "id": "656c897b04fc", |
| ... | ... | @@ -3620,7 +3824,8 @@ |
| 3620 | 3824 | "likes": 0, |
| 3621 | 3825 | "createdAt": 1787493303602, |
| 3622 | 3826 | "promptEn": "game menu UI, character swaps out a mechanical arm", |
| 3623 | - "lastPlayedAt": 1788253767768 | |
| 3827 | + "lastPlayedAt": 1788256526857, | |
| 3828 | + "playCount": 1 | |
| 3624 | 3829 | }, |
| 3625 | 3830 | { |
| 3626 | 3831 | "id": "e1fd99e4ab97", |
| ... | ... | @@ -3650,7 +3855,8 @@ |
| 3650 | 3855 | "likes": 0, |
| 3651 | 3856 | "createdAt": 1787470101693, |
| 3652 | 3857 | "promptEn": "black-background product-launch style shot of a roast duck", |
| 3653 | - "lastPlayedAt": 1788251246462 | |
| 3858 | + "lastPlayedAt": 1788254601425, | |
| 3859 | + "playCount": 1 | |
| 3654 | 3860 | }, |
| 3655 | 3861 | { |
| 3656 | 3862 | "id": "99e771bbb50d", |
| ... | ... | @@ -3665,7 +3871,8 @@ |
| 3665 | 3871 | "likes": 0, |
| 3666 | 3872 | "createdAt": 1787470101411, |
| 3667 | 3873 | "promptEn": "vertical family-fight drama, arguing with an older woman", |
| 3668 | - "lastPlayedAt": 1788254011880 | |
| 3874 | + "lastPlayedAt": 1788256158453, | |
| 3875 | + "playCount": 1 | |
| 3669 | 3876 | }, |
| 3670 | 3877 | { |
| 3671 | 3878 | "id": "57169e6751d0", |
| ... | ... | @@ -3695,7 +3902,8 @@ |
| 3695 | 3902 | "likes": 0, |
| 3696 | 3903 | "createdAt": 1787470100377, |
| 3697 | 3904 | "promptEn": "all-black background, experimental Chinese kinetic typography", |
| 3698 | - "lastPlayedAt": 1788250298018 | |
| 3905 | + "lastPlayedAt": 1788254898074, | |
| 3906 | + "playCount": 1 | |
| 3699 | 3907 | }, |
| 3700 | 3908 | { |
| 3701 | 3909 | "id": "c24c15736daa", |
| ... | ... | @@ -3770,7 +3978,8 @@ |
| 3770 | 3978 | "likes": 0, |
| 3771 | 3979 | "createdAt": 1787470098914, |
| 3772 | 3980 | "promptEn": "evening kitchen footage mixed with a glowing hand-drawn creature", |
| 3773 | - "lastPlayedAt": 1788252599204 | |
| 3981 | + "lastPlayedAt": 1788254826035, | |
| 3982 | + "playCount": 1 | |
| 3774 | 3983 | }, |
| 3775 | 3984 | { |
| 3776 | 3985 | "id": "6639b07acc7b", |
| ... | ... | @@ -3785,7 +3994,8 @@ |
| 3785 | 3994 | "likes": 0, |
| 3786 | 3995 | "createdAt": 1787470098570, |
| 3787 | 3996 | "promptEn": "fast-cut spaceship trailer title sequence", |
| 3788 | - "lastPlayedAt": 1788252235049 | |
| 3997 | + "lastPlayedAt": 1788255538396, | |
| 3998 | + "playCount": 1 | |
| 3789 | 3999 | }, |
| 3790 | 4000 | { |
| 3791 | 4001 | "id": "1e55e540df11", |
| ... | ... | @@ -3800,7 +4010,8 @@ |
| 3800 | 4010 | "likes": 0, |
| 3801 | 4011 | "createdAt": 1787461994394, |
| 3802 | 4012 | "promptEn": "a quiet mountain village at dawn (second attempt)", |
| 3803 | - "lastPlayedAt": 1788251098955 | |
| 4013 | + "lastPlayedAt": 1788255112176, | |
| 4014 | + "playCount": 1 | |
| 3804 | 4015 | }, |
| 3805 | 4016 | { |
| 3806 | 4017 | "id": "8e16b6faafd9", |
| ... | ... | @@ -3815,7 +4026,8 @@ |
| 3815 | 4026 | "likes": 0, |
| 3816 | 4027 | "createdAt": 1787455895150, |
| 3817 | 4028 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 3818 | - "lastPlayedAt": 1788254418063 | |
| 4029 | + "lastPlayedAt": 1788255794528, | |
| 4030 | + "playCount": 1 | |
| 3819 | 4031 | }, |
| 3820 | 4032 | { |
| 3821 | 4033 | "id": "2a4e45820135", |
| ... | ... | @@ -3830,7 +4042,8 @@ |
| 3830 | 4042 | "likes": 0, |
| 3831 | 4043 | "createdAt": 1787453697093, |
| 3832 | 4044 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 3833 | - "lastPlayedAt": 1788250986335 | |
| 4045 | + "lastPlayedAt": 1788255554397, | |
| 4046 | + "playCount": 1 | |
| 3834 | 4047 | }, |
| 3835 | 4048 | { |
| 3836 | 4049 | "id": "bfe13d1cc4a2", |
| ... | ... | @@ -3890,7 +4103,8 @@ |
| 3890 | 4103 | "likes": 0, |
| 3891 | 4104 | "createdAt": 1787444313690, |
| 3892 | 4105 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 3893 | - "lastPlayedAt": 1788253967852 | |
| 4106 | + "lastPlayedAt": 1788256428755, | |
| 4107 | + "playCount": 1 | |
| 3894 | 4108 | }, |
| 3895 | 4109 | { |
| 3896 | 4110 | "id": "e56962bd770f", |
| ... | ... | @@ -3920,7 +4134,8 @@ |
| 3920 | 4134 | "likes": 0, |
| 3921 | 4135 | "createdAt": 1787437988124, |
| 3922 | 4136 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 3923 | - "lastPlayedAt": 1788252010944 | |
| 4137 | + "lastPlayedAt": 1788256016633, | |
| 4138 | + "playCount": 1 | |
| 3924 | 4139 | }, |
| 3925 | 4140 | { |
| 3926 | 4141 | "id": "e497093c79ce", |
| ... | ... | @@ -3950,7 +4165,8 @@ |
| 3950 | 4165 | "likes": 0, |
| 3951 | 4166 | "createdAt": 1787432295531, |
| 3952 | 4167 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 3953 | - "lastPlayedAt": 1788248396902 | |
| 4168 | + "lastPlayedAt": 1788255262253, | |
| 4169 | + "playCount": 1 | |
| 3954 | 4170 | }, |
| 3955 | 4171 | { |
| 3956 | 4172 | "id": "79368c9cf499", |
| ... | ... | @@ -3980,7 +4196,8 @@ |
| 3980 | 4196 | "likes": 0, |
| 3981 | 4197 | "createdAt": 1787426955312, |
| 3982 | 4198 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 3983 | - "lastPlayedAt": 1788253219489 | |
| 4199 | + "lastPlayedAt": 1788255360311, | |
| 4200 | + "playCount": 1 | |
| 3984 | 4201 | }, |
| 3985 | 4202 | { |
| 3986 | 4203 | "id": "734d28c52670", |
| ... | ... | @@ -4040,7 +4257,8 @@ |
| 4040 | 4257 | "likes": 0, |
| 4041 | 4258 | "createdAt": 1787413999418, |
| 4042 | 4259 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 4043 | - "lastPlayedAt": 1788251954922 | |
| 4260 | + "lastPlayedAt": 1788255444349, | |
| 4261 | + "playCount": 1 | |
| 4044 | 4262 | }, |
| 4045 | 4263 | { |
| 4046 | 4264 | "id": "ade0318a7a4a", |
| ... | ... | @@ -4055,7 +4273,8 @@ |
| 4055 | 4273 | "likes": 0, |
| 4056 | 4274 | "createdAt": 1787413511959, |
| 4057 | 4275 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 4058 | - "lastPlayedAt": 1788254235982 | |
| 4276 | + "lastPlayedAt": 1788256470780, | |
| 4277 | + "playCount": 1 | |
| 4059 | 4278 | }, |
| 4060 | 4279 | { |
| 4061 | 4280 | "id": "5d4f40bf0889", |
| ... | ... | @@ -4115,7 +4334,8 @@ |
| 4115 | 4334 | "likes": 0, |
| 4116 | 4335 | "createdAt": 1787397450973, |
| 4117 | 4336 | "promptEn": "a cat sitting on a windowsill", |
| 4118 | - "lastPlayedAt": 1788251736809 | |
| 4337 | + "lastPlayedAt": 1788255000124, | |
| 4338 | + "playCount": 1 | |
| 4119 | 4339 | }, |
| 4120 | 4340 | { |
| 4121 | 4341 | "id": "580d1d722adc", |
| ... | ... | @@ -4130,7 +4350,8 @@ |
| 4130 | 4350 | "likes": 0, |
| 4131 | 4351 | "createdAt": 1787388090646, |
| 4132 | 4352 | "promptEn": "a cat sitting on a windowsill", |
| 4133 | - "lastPlayedAt": 1788254205967 | |
| 4353 | + "lastPlayedAt": 1788256442760, | |
| 4354 | + "playCount": 1 | |
| 4134 | 4355 | }, |
| 4135 | 4356 | { |
| 4136 | 4357 | "id": "c551457bc55e", |
| ... | ... | @@ -4144,8 +4365,9 @@ |
| 4144 | 4365 | "partition": "text", |
| 4145 | 4366 | "likes": 0, |
| 4146 | 4367 | "createdAt": 1787386316175, |
| 4147 | - "lastPlayedAt": 1788253015347, | |
| 4148 | - "promptEn": "a cat sitting on a windowsill" | |
| 4368 | + "lastPlayedAt": 1788255040143, | |
| 4369 | + "promptEn": "a cat sitting on a windowsill", | |
| 4370 | + "playCount": 1 | |
| 4149 | 4371 | }, |
| 4150 | 4372 | { |
| 4151 | 4373 | "id": "f9b68e5daaed", |
| ... | ... | @@ -4190,7 +4412,8 @@ |
| 4190 | 4412 | "likes": 0, |
| 4191 | 4413 | "createdAt": 1787383911831, |
| 4192 | 4414 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 4193 | - "lastPlayedAt": 1788245394359 | |
| 4415 | + "lastPlayedAt": 1788255700490, | |
| 4416 | + "playCount": 1 | |
| 4194 | 4417 | }, |
| 4195 | 4418 | { |
| 4196 | 4419 | "id": "9cba879e263d", |
| ... | ... | @@ -4205,7 +4428,8 @@ |
| 4205 | 4428 | "likes": 0, |
| 4206 | 4429 | "createdAt": 1787375413935, |
| 4207 | 4430 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 4208 | - "lastPlayedAt": 1788252421136 | |
| 4431 | + "lastPlayedAt": 1788255252253, | |
| 4432 | + "playCount": 1 | |
| 4209 | 4433 | }, |
| 4210 | 4434 | { |
| 4211 | 4435 | "id": "10112fb3c1fd", |
| ... | ... | @@ -4220,7 +4444,8 @@ |
| 4220 | 4444 | "likes": 0, |
| 4221 | 4445 | "createdAt": 1787375413623, |
| 4222 | 4446 | "promptEn": "golden portal opens, man in green jacket throws a glowing spear", |
| 4223 | - "lastPlayedAt": 1788253532966 | |
| 4447 | + "lastPlayedAt": 1788256324704, | |
| 4448 | + "playCount": 1 | |
| 4224 | 4449 | }, |
| 4225 | 4450 | { |
| 4226 | 4451 | "id": "78e698c924b1", |
| ... | ... | @@ -4235,7 +4460,8 @@ |
| 4235 | 4460 | "likes": 0, |
| 4236 | 4461 | "createdAt": 1787375413203, |
| 4237 | 4462 | "promptEn": "golden portal opens, man in green jacket throws a glowing spear", |
| 4238 | - "lastPlayedAt": 1788252725215 | |
| 4463 | + "lastPlayedAt": 1788255090167, | |
| 4464 | + "playCount": 1 | |
| 4239 | 4465 | }, |
| 4240 | 4466 | { |
| 4241 | 4467 | "id": "219ed88c3ea7", |
| ... | ... | @@ -4250,7 +4476,8 @@ |
| 4250 | 4476 | "likes": 0, |
| 4251 | 4477 | "createdAt": 1787375412946, |
| 4252 | 4478 | "promptEn": "golden portal opens, man in green jacket throws a glowing spear", |
| 4253 | - "lastPlayedAt": 1788252407133 | |
| 4479 | + "lastPlayedAt": 1788255736512, | |
| 4480 | + "playCount": 1 | |
| 4254 | 4481 | }, |
| 4255 | 4482 | { |
| 4256 | 4483 | "id": "a72236902363", |
| ... | ... | @@ -4280,7 +4507,8 @@ |
| 4280 | 4507 | "likes": 0, |
| 4281 | 4508 | "createdAt": 1787367454065, |
| 4282 | 4509 | "promptEn": "golden portal opens, man in green jacket throws a glowing spear", |
| 4283 | - "lastPlayedAt": 1788253735749 | |
| 4510 | + "lastPlayedAt": 1788255482366, | |
| 4511 | + "playCount": 1 | |
| 4284 | 4512 | }, |
| 4285 | 4513 | { |
| 4286 | 4514 | "id": "e6c241be377f", |
| ... | ... | @@ -4310,7 +4538,8 @@ |
| 4310 | 4538 | "likes": 0, |
| 4311 | 4539 | "createdAt": 1787363956909, |
| 4312 | 4540 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 4313 | - "lastPlayedAt": 1788254362044 | |
| 4541 | + "lastPlayedAt": 1788256296687, | |
| 4542 | + "playCount": 1 | |
| 4314 | 4543 | }, |
| 4315 | 4544 | { |
| 4316 | 4545 | "id": "5692965402f5", |
| ... | ... | @@ -4325,7 +4554,8 @@ |
| 4325 | 4554 | "likes": 0, |
| 4326 | 4555 | "createdAt": 1787332996051, |
| 4327 | 4556 | "promptEn": "golden portal opens, man in green jacket throws a glowing spear", |
| 4328 | - "lastPlayedAt": 1788253717746 | |
| 4557 | + "lastPlayedAt": 1788255076159, | |
| 4558 | + "playCount": 1 | |
| 4329 | 4559 | }, |
| 4330 | 4560 | { |
| 4331 | 4561 | "id": "bf7d973d02a3", |
| ... | ... | @@ -4340,7 +4570,8 @@ |
| 4340 | 4570 | "likes": 0, |
| 4341 | 4571 | "createdAt": 1787332047061, |
| 4342 | 4572 | "promptEn": "golden portal opens, man in green jacket throws a glowing spear", |
| 4343 | - "lastPlayedAt": 1788253407577 | |
| 4573 | + "lastPlayedAt": 1788255218227, | |
| 4574 | + "playCount": 1 | |
| 4344 | 4575 | }, |
| 4345 | 4576 | { |
| 4346 | 4577 | "id": "a5688d8f5db3", |
| ... | ... | @@ -4355,7 +4586,8 @@ |
| 4355 | 4586 | "likes": 0, |
| 4356 | 4587 | "createdAt": 1787330101793, |
| 4357 | 4588 | "promptEn": "a red apple on a wooden table, cinematic lighting", |
| 4358 | - "lastPlayedAt": 1788253473602 | |
| 4589 | + "lastPlayedAt": 1788256286688, | |
| 4590 | + "playCount": 1 | |
| 4359 | 4591 | }, |
| 4360 | 4592 | { |
| 4361 | 4593 | "id": "0024d3c2d4cb", |
| ... | ... | @@ -4370,7 +4602,8 @@ |
| 4370 | 4602 | "likes": 0, |
| 4371 | 4603 | "createdAt": 1787326019663, |
| 4372 | 4604 | "promptEn": "misty Jiangnan old town at dawn, woman walking with an oil-paper umbrella", |
| 4373 | - "lastPlayedAt": 1788252891295 | |
| 4605 | + "lastPlayedAt": 1788254717984, | |
| 4606 | + "playCount": 1 | |
| 4374 | 4607 | }, |
| 4375 | 4608 | { |
| 4376 | 4609 | "id": "ab42a6fba515", |
| ... | ... | @@ -4400,7 +4633,8 @@ |
| 4400 | 4633 | "likes": 0, |
| 4401 | 4634 | "createdAt": 1787309864037, |
| 4402 | 4635 | "promptEn": "transparent gaming mouse product film, blue and orange lighting", |
| 4403 | - "lastPlayedAt": 1788254219979 | |
| 4636 | + "lastPlayedAt": 1788256342714, | |
| 4637 | + "playCount": 1 | |
| 4404 | 4638 | }, |
| 4405 | 4639 | { |
| 4406 | 4640 | "id": "073f5df6427a", |
| ... | ... | @@ -4415,7 +4649,8 @@ |
| 4415 | 4649 | "likes": 0, |
| 4416 | 4650 | "createdAt": 1787305544815, |
| 4417 | 4651 | "promptEn": "transparent gaming mouse product film, blue and orange lighting", |
| 4418 | - "lastPlayedAt": 1788253209480 | |
| 4652 | + "lastPlayedAt": 1788255494373, | |
| 4653 | + "playCount": 1 | |
| 4419 | 4654 | }, |
| 4420 | 4655 | { |
| 4421 | 4656 | "id": "e23b04ac2c78", |
| ... | ... | @@ -4430,7 +4665,8 @@ |
| 4430 | 4665 | "likes": 0, |
| 4431 | 4666 | "createdAt": 1787304875681, |
| 4432 | 4667 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 4433 | - "lastPlayedAt": 1788253051367 | |
| 4668 | + "lastPlayedAt": 1788254820032, | |
| 4669 | + "playCount": 1 | |
| 4434 | 4670 | }, |
| 4435 | 4671 | { |
| 4436 | 4672 | "id": "c84bc1c7bfa0", |
| ... | ... | @@ -4445,7 +4681,8 @@ |
| 4445 | 4681 | "likes": 0, |
| 4446 | 4682 | "createdAt": 1787304031214, |
| 4447 | 4683 | "promptEn": "constable asks how she's sure it's not human, she says a person would make a sound", |
| 4448 | - "lastPlayedAt": 1788251466626 | |
| 4684 | + "lastPlayedAt": 1788255188208, | |
| 4685 | + "playCount": 1 | |
| 4449 | 4686 | }, |
| 4450 | 4687 | { |
| 4451 | 4688 | "id": "23d2fd81eb4d", |
| ... | ... | @@ -4475,7 +4712,8 @@ |
| 4475 | 4712 | "likes": 0, |
| 4476 | 4713 | "createdAt": 1787290119529, |
| 4477 | 4714 | "promptEn": "misty Jiangnan old town at dawn, woman walking with an oil-paper umbrella", |
| 4478 | - "lastPlayedAt": 1788253747759 | |
| 4715 | + "lastPlayedAt": 1788255414334, | |
| 4716 | + "playCount": 1 | |
| 4479 | 4717 | }, |
| 4480 | 4718 | { |
| 4481 | 4719 | "id": "06bb43196c46", |
| ... | ... | @@ -4490,7 +4728,8 @@ |
| 4490 | 4728 | "likes": 0, |
| 4491 | 4729 | "createdAt": 1787290119114, |
| 4492 | 4730 | "promptEn": "misty Jiangnan old town at dawn, woman walking with an oil-paper umbrella", |
| 4493 | - "lastPlayedAt": 1788253429580 | |
| 4731 | + "lastPlayedAt": 1788254852045, | |
| 4732 | + "playCount": 1 | |
| 4494 | 4733 | }, |
| 4495 | 4734 | { |
| 4496 | 4735 | "id": "0f22388f7847", |
| ... | ... | @@ -4564,8 +4803,9 @@ |
| 4564 | 4803 | "partition": "fl2va", |
| 4565 | 4804 | "likes": 0, |
| 4566 | 4805 | "createdAt": 1787224701504, |
| 4567 | - "lastPlayedAt": 1788252757232, | |
| 4568 | - "promptEn": "constable burns the beauty portrait with the lamp, the door opens on its own" | |
| 4806 | + "lastPlayedAt": 1788254966105, | |
| 4807 | + "promptEn": "constable burns the beauty portrait with the lamp, the door opens on its own", | |
| 4808 | + "playCount": 1 | |
| 4569 | 4809 | }, |
| 4570 | 4810 | { |
| 4571 | 4811 | "id": "f78ebe4c01c8", |
| ... | ... | @@ -4595,6 +4835,7 @@ |
| 4595 | 4835 | "likes": 0, |
| 4596 | 4836 | "createdAt": 1787220579189, |
| 4597 | 4837 | "promptEn": "gothic castle at night, vampire noble carries a princess, rose petals falling", |
| 4598 | - "lastPlayedAt": 1788253381560 | |
| 4838 | + "lastPlayedAt": 1788254675967, | |
| 4839 | + "playCount": 1 | |
| 4599 | 4840 | } |
| 4600 | 4841 | ] |
| 4601 | 4842 | \ No newline at end of file | ... | ... |
server.js
| ... | ... | @@ -129,11 +129,33 @@ function glmChat(messages) { |
| 129 | 129 | }); |
| 130 | 130 | } |
| 131 | 131 | |
| 132 | -const PROMPT_OPTIMIZE_SYSTEM = `You are a prompt engineer for a text-to-video model. Expand the user's short | |
| 133 | -request (which may be in Chinese or English) into a detailed shot-by-shot generation prompt written in | |
| 134 | -English: camera angle/movement, lighting and mood, the subject's specific actions, and the setting. | |
| 135 | -Output only the expanded English prompt itself — no preamble, no quotes, no "Prompt:" prefix — under | |
| 136 | -150 words.`; | |
| 132 | +// Distilled from docs/h3skill.md (MiniMax's own H3 prompt-writing methodology) down to the one | |
| 133 | +// path that applies here: T2VA (no reference images — every chat prompt is plain text) on a clip | |
| 134 | +// fixed at ~5s (H3_GEN_PARAMS.frames / FPS). At that length it's one continuous shot, never a | |
| 135 | +// multi-cut montage — the earlier version asked for "shot-by-shot" and reliably got 4-5 fake cuts | |
| 136 | +// with timestamps running out to 8-10s, which the model can't actually deliver in 5 seconds. | |
| 137 | +const PROMPT_OPTIMIZE_SYSTEM = `You are writing H3 text-to-video generation prompts (T2VA mode — no | |
| 138 | +reference images, pure text-to-video). Expand the user's short request (may be in Chinese or English) | |
| 139 | +into the official H3 three-field format, in this exact order, using these exact field labels: | |
| 140 | + | |
| 141 | +integrated_multimodal_description: [Shot 1] one short style statement, e.g. "Live-action, cinematic." | |
| 142 | +Then describe, in one continuous unbroken shot (the clip is only about 5 seconds long — never split | |
| 143 | +into multiple shots or write more than [Shot 1]): the setting, the subject's specific action, and ONE | |
| 144 | +dominant camera movement using this vocabulary — Zoom In/Out, Push In/Pull Out, Pan Left/Right, Truck | |
| 145 | +Left/Right, Tilt Up/Down, Pedestal Up/Down, Arc Shot, Tracking Shot, Static Shot, Shake Slightly/ | |
| 146 | +Strongly, POV, Roll Clockwise/Counterclockwise — stated as type + amplitude (small/large) + speed | |
| 147 | +(slow/fast). Describe light concretely: where it comes from, what it hits, what effect it creates. | |
| 148 | +Never use hollow quality words alone (8K, HD, masterpiece, stunning, cinematic used alone, beautiful, | |
| 149 | +high quality) — replace them with what is actually visible. 40-70 English words. | |
| 150 | + | |
| 151 | +overall_soundscape: 1-4 English sentences describing the ambient environmental sound the scene would | |
| 152 | +naturally have. | |
| 153 | + | |
| 154 | +non_diegetic_music: 1-3 English sentences describing the score the audience (not the characters) hears, | |
| 155 | +or exactly "N/A" if none fits. | |
| 156 | + | |
| 157 | +Output only these three labeled fields in this exact order and exact labels, nothing else — no | |
| 158 | +preamble, no extra commentary, no markdown formatting.`; | |
| 137 | 159 | |
| 138 | 160 | // Best-effort — a viewer's short chat line ("一只猫跳舞") makes for a weak |
| 139 | 161 | // H3 prompt on its own. Never let a GLM outage or slow response block | ... | ... |