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 | "id": "4af4c61b64a6", | 55 | "id": "4af4c61b64a6", |
| 4 | "source": "h3console", | 56 | "source": "h3console", |
| 5 | "prompt": "一只白猫坐着,镜头缓慢推进,最终定格", | 57 | "prompt": "一只白猫坐着,镜头缓慢推进,最终定格", |
| @@ -10,8 +62,7 @@ | @@ -10,8 +62,7 @@ | ||
| 10 | "duration": 1, | 62 | "duration": 1, |
| 11 | "partition": "fl2va", | 63 | "partition": "fl2va", |
| 12 | "likes": 0, | 64 | "likes": 0, |
| 13 | - "createdAt": 1788251288958, | ||
| 14 | - "lastPlayedAt": 1788254550116 | 65 | + "createdAt": 1788251288958 |
| 15 | }, | 66 | }, |
| 16 | { | 67 | { |
| 17 | "id": "8024972d6019", | 68 | "id": "8024972d6019", |
| @@ -65,7 +116,8 @@ | @@ -65,7 +116,8 @@ | ||
| 65 | "likes": 0, | 116 | "likes": 0, |
| 66 | "createdAt": 1788192916199, | 117 | "createdAt": 1788192916199, |
| 67 | "promptEn": "taoist eyes the old house suspiciously", | 118 | "promptEn": "taoist eyes the old house suspiciously", |
| 68 | - "lastPlayedAt": 1788253021349 | 119 | + "lastPlayedAt": 1788254770005, |
| 120 | + "playCount": 1 | ||
| 69 | }, | 121 | }, |
| 70 | { | 122 | { |
| 71 | "id": "cb5baad5d724", | 123 | "id": "cb5baad5d724", |
| @@ -80,7 +132,8 @@ | @@ -80,7 +132,8 @@ | ||
| 80 | "likes": 0, | 132 | "likes": 0, |
| 81 | "createdAt": 1788192915845, | 133 | "createdAt": 1788192915845, |
| 82 | "promptEn": "scholar watches the room warily", | 134 | "promptEn": "scholar watches the room warily", |
| 83 | - "lastPlayedAt": 1788253865811 | 135 | + "lastPlayedAt": 1788256422749, |
| 136 | + "playCount": 1 | ||
| 84 | }, | 137 | }, |
| 85 | { | 138 | { |
| 86 | "id": "e8cbb73560ef", | 139 | "id": "e8cbb73560ef", |
| @@ -125,7 +178,8 @@ | @@ -125,7 +178,8 @@ | ||
| 125 | "likes": 0, | 178 | "likes": 0, |
| 126 | "createdAt": 1788192914949, | 179 | "createdAt": 1788192914949, |
| 127 | "promptEn": "taoist acts tough but is nervous", | 180 | "promptEn": "taoist acts tough but is nervous", |
| 128 | - "lastPlayedAt": 1788252613211 | 181 | + "lastPlayedAt": 1788255954592, |
| 182 | + "playCount": 1 | ||
| 129 | }, | 183 | }, |
| 130 | { | 184 | { |
| 131 | "id": "167ce1bfa285", | 185 | "id": "167ce1bfa285", |
| @@ -140,7 +194,8 @@ | @@ -140,7 +194,8 @@ | ||
| 140 | "likes": 0, | 194 | "likes": 0, |
| 141 | "createdAt": 1788192914047, | 195 | "createdAt": 1788192914047, |
| 142 | "promptEn": "scholar looks scared, wants to flee", | 196 | "promptEn": "scholar looks scared, wants to flee", |
| 143 | - "lastPlayedAt": 1788252155012 | 197 | + "lastPlayedAt": 1788254591422, |
| 198 | + "playCount": 1 | ||
| 144 | }, | 199 | }, |
| 145 | { | 200 | { |
| 146 | "id": "053bc957b4f8", | 201 | "id": "053bc957b4f8", |
| @@ -155,7 +210,8 @@ | @@ -155,7 +210,8 @@ | ||
| 155 | "likes": 0, | 210 | "likes": 0, |
| 156 | "createdAt": 1788192913886, | 211 | "createdAt": 1788192913886, |
| 157 | "promptEn": "taoist panics, freaked out", | 212 | "promptEn": "taoist panics, freaked out", |
| 158 | - "lastPlayedAt": 1788253751763 | 213 | + "lastPlayedAt": 1788256170460, |
| 214 | + "playCount": 1 | ||
| 159 | }, | 215 | }, |
| 160 | { | 216 | { |
| 161 | "id": "45c1136d1e05", | 217 | "id": "45c1136d1e05", |
| @@ -170,7 +226,8 @@ | @@ -170,7 +226,8 @@ | ||
| 170 | "likes": 0, | 226 | "likes": 0, |
| 171 | "createdAt": 1788192913551, | 227 | "createdAt": 1788192913551, |
| 172 | "promptEn": "taoist looking panicked and scared", | 228 | "promptEn": "taoist looking panicked and scared", |
| 173 | - "lastPlayedAt": 1788252637227 | 229 | + "lastPlayedAt": 1788254914080, |
| 230 | + "playCount": 1 | ||
| 174 | }, | 231 | }, |
| 175 | { | 232 | { |
| 176 | "id": "d169d42a67de", | 233 | "id": "d169d42a67de", |
| @@ -185,7 +242,8 @@ | @@ -185,7 +242,8 @@ | ||
| 185 | "likes": 0, | 242 | "likes": 0, |
| 186 | "createdAt": 1788192913492, | 243 | "createdAt": 1788192913492, |
| 187 | "promptEn": "scholar defiant out of desperation", | 244 | "promptEn": "scholar defiant out of desperation", |
| 188 | - "lastPlayedAt": 1788252431138 | 245 | + "lastPlayedAt": 1788255404326, |
| 246 | + "playCount": 1 | ||
| 189 | }, | 247 | }, |
| 190 | { | 248 | { |
| 191 | "id": "2abd2793fae9", | 249 | "id": "2abd2793fae9", |
| @@ -200,7 +258,8 @@ | @@ -200,7 +258,8 @@ | ||
| 200 | "likes": 0, | 258 | "likes": 0, |
| 201 | "createdAt": 1788192913244, | 259 | "createdAt": 1788192913244, |
| 202 | "promptEn": "scholar cornered but still defiant", | 260 | "promptEn": "scholar cornered but still defiant", |
| 203 | - "lastPlayedAt": 1788253347544 | 261 | + "lastPlayedAt": 1788255156196, |
| 262 | + "playCount": 1 | ||
| 204 | }, | 263 | }, |
| 205 | { | 264 | { |
| 206 | "id": "bbf7efb467e0", | 265 | "id": "bbf7efb467e0", |
| @@ -215,7 +274,8 @@ | @@ -215,7 +274,8 @@ | ||
| 215 | "likes": 0, | 274 | "likes": 0, |
| 216 | "createdAt": 1788192912912, | 275 | "createdAt": 1788192912912, |
| 217 | "promptEn": "taoist charmed, hesitating", | 276 | "promptEn": "taoist charmed, hesitating", |
| 218 | - "lastPlayedAt": 1788253947848 | 277 | + "lastPlayedAt": 1788256108674, |
| 278 | + "playCount": 1 | ||
| 219 | }, | 279 | }, |
| 220 | { | 280 | { |
| 221 | "id": "f8da9934c823", | 281 | "id": "f8da9934c823", |
| @@ -230,7 +290,8 @@ | @@ -230,7 +290,8 @@ | ||
| 230 | "likes": 0, | 290 | "likes": 0, |
| 231 | "createdAt": 1788192912819, | 291 | "createdAt": 1788192912819, |
| 232 | "promptEn": "scholar dazed, charmed", | 292 | "promptEn": "scholar dazed, charmed", |
| 233 | - "lastPlayedAt": 1788252975330 | 293 | + "lastPlayedAt": 1788254860902, |
| 294 | + "playCount": 1 | ||
| 234 | }, | 295 | }, |
| 235 | { | 296 | { |
| 236 | "id": "feb96d5be50f", | 297 | "id": "feb96d5be50f", |
| @@ -245,7 +306,8 @@ | @@ -245,7 +306,8 @@ | ||
| 245 | "likes": 0, | 306 | "likes": 0, |
| 246 | "createdAt": 1788191432903, | 307 | "createdAt": 1788191432903, |
| 247 | "promptEn": "woman in white startled, a bit shy", | 308 | "promptEn": "woman in white startled, a bit shy", |
| 248 | - "lastPlayedAt": 1788252189029 | 309 | + "lastPlayedAt": 1788256332708, |
| 310 | + "playCount": 1 | ||
| 249 | }, | 311 | }, |
| 250 | { | 312 | { |
| 251 | "id": "14f482bdae7f", | 313 | "id": "14f482bdae7f", |
| @@ -260,7 +322,8 @@ | @@ -260,7 +322,8 @@ | ||
| 260 | "likes": 0, | 322 | "likes": 0, |
| 261 | "createdAt": 1788191432362, | 323 | "createdAt": 1788191432362, |
| 262 | "promptEn": "woman in white being intimate and alluring", | 324 | "promptEn": "woman in white being intimate and alluring", |
| 263 | - "lastPlayedAt": 1788251702786 | 325 | + "lastPlayedAt": 1788255084160, |
| 326 | + "playCount": 1 | ||
| 264 | }, | 327 | }, |
| 265 | { | 328 | { |
| 266 | "id": "362b15ab1811", | 329 | "id": "362b15ab1811", |
| @@ -290,7 +353,8 @@ | @@ -290,7 +353,8 @@ | ||
| 290 | "likes": 0, | 353 | "likes": 0, |
| 291 | "createdAt": 1788191431505, | 354 | "createdAt": 1788191431505, |
| 292 | "promptEn": "woman in white scared, dodging the question", | 355 | "promptEn": "woman in white scared, dodging the question", |
| 293 | - "lastPlayedAt": 1788252941314 | 356 | + "lastPlayedAt": 1788256176464, |
| 357 | + "playCount": 1 | ||
| 294 | }, | 358 | }, |
| 295 | { | 359 | { |
| 296 | "id": "667978d52305", | 360 | "id": "667978d52305", |
| @@ -305,7 +369,8 @@ | @@ -305,7 +369,8 @@ | ||
| 305 | "likes": 0, | 369 | "likes": 0, |
| 306 | "createdAt": 1788191431016, | 370 | "createdAt": 1788191431016, |
| 307 | "promptEn": "woman in white coldly threatening", | 371 | "promptEn": "woman in white coldly threatening", |
| 308 | - "lastPlayedAt": 1788251764831 | 372 | + "lastPlayedAt": 1788255162198, |
| 373 | + "playCount": 1 | ||
| 309 | }, | 374 | }, |
| 310 | { | 375 | { |
| 311 | "id": "7f5213748d87", | 376 | "id": "7f5213748d87", |
| @@ -334,8 +399,9 @@ | @@ -334,8 +399,9 @@ | ||
| 334 | "partition": "ref2va", | 399 | "partition": "ref2va", |
| 335 | "likes": 0, | 400 | "likes": 0, |
| 336 | "createdAt": 1788187365789, | 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 | "id": "88d71d85058f", | 407 | "id": "88d71d85058f", |
| @@ -365,7 +431,8 @@ | @@ -365,7 +431,8 @@ | ||
| 365 | "likes": 0, | 431 | "likes": 0, |
| 366 | "createdAt": 1788185090875, | 432 | "createdAt": 1788185090875, |
| 367 | "promptEn": "woman in white cold and threatening", | 433 | "promptEn": "woman in white cold and threatening", |
| 368 | - "lastPlayedAt": 1788253487611 | 434 | + "lastPlayedAt": 1788255142186, |
| 435 | + "playCount": 1 | ||
| 369 | }, | 436 | }, |
| 370 | { | 437 | { |
| 371 | "id": "a46f1daa9ee0", | 438 | "id": "a46f1daa9ee0", |
| @@ -395,7 +462,8 @@ | @@ -395,7 +462,8 @@ | ||
| 395 | "likes": 0, | 462 | "likes": 0, |
| 396 | "createdAt": 1788162094002, | 463 | "createdAt": 1788162094002, |
| 397 | "promptEn": "woman in old chinese robe talking, gentle but wary, in an old room", | 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 | "id": "e17cfe57f56a", | 469 | "id": "e17cfe57f56a", |
| @@ -455,7 +523,8 @@ | @@ -455,7 +523,8 @@ | ||
| 455 | "likes": 0, | 523 | "likes": 0, |
| 456 | "createdAt": 1788157177505, | 524 | "createdAt": 1788157177505, |
| 457 | "promptEn": "constable bursts in and blocks the door, talks to a pale woman behind the screen", | 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 | "id": "a9c4ba5e453b", | 530 | "id": "a9c4ba5e453b", |
| @@ -470,7 +539,8 @@ | @@ -470,7 +539,8 @@ | ||
| 470 | "likes": 0, | 539 | "likes": 0, |
| 471 | "createdAt": 1788156878022, | 540 | "createdAt": 1788156878022, |
| 472 | "promptEn": "constable bursts in and blocks the door, talks to a pale woman behind the screen", | 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 | "id": "a0b752e7ac0d", | 546 | "id": "a0b752e7ac0d", |
| @@ -485,7 +555,8 @@ | @@ -485,7 +555,8 @@ | ||
| 485 | "likes": 0, | 555 | "likes": 0, |
| 486 | "createdAt": 1788154942596, | 556 | "createdAt": 1788154942596, |
| 487 | "promptEn": "constable talking, looking scared", | 557 | "promptEn": "constable talking, looking scared", |
| 488 | - "lastPlayedAt": 1788252145004 | 558 | + "lastPlayedAt": 1788254919873, |
| 559 | + "playCount": 1 | ||
| 489 | }, | 560 | }, |
| 490 | { | 561 | { |
| 491 | "id": "b6608e2eac60", | 562 | "id": "b6608e2eac60", |
| @@ -500,7 +571,8 @@ | @@ -500,7 +571,8 @@ | ||
| 500 | "likes": 0, | 571 | "likes": 0, |
| 501 | "createdAt": 1788153988474, | 572 | "createdAt": 1788153988474, |
| 502 | "promptEn": "astronaut at a martian canyon, visor reflecting alien ruins, then aerial view of the city", | 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 | "id": "194fc2b56cb5", | 578 | "id": "194fc2b56cb5", |
| @@ -515,7 +587,8 @@ | @@ -515,7 +587,8 @@ | ||
| 515 | "likes": 0, | 587 | "likes": 0, |
| 516 | "createdAt": 1788138492364, | 588 | "createdAt": 1788138492364, |
| 517 | "promptEn": "astronaut on a Martian canyon, helmet reflecting an alien ruined city", | 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 | "id": "f84b8f044ec5", | 594 | "id": "f84b8f044ec5", |
| @@ -530,7 +603,8 @@ | @@ -530,7 +603,8 @@ | ||
| 530 | "likes": 0, | 603 | "likes": 0, |
| 531 | "createdAt": 1788120171725, | 604 | "createdAt": 1788120171725, |
| 532 | "promptEn": "constable bursts in and blocks the door, talks to a pale woman behind the screen", | 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 | "id": "5c364152e54c", | 610 | "id": "5c364152e54c", |
| @@ -560,7 +634,8 @@ | @@ -560,7 +634,8 @@ | ||
| 560 | "likes": 0, | 634 | "likes": 0, |
| 561 | "createdAt": 1788106707982, | 635 | "createdAt": 1788106707982, |
| 562 | "promptEn": "constable bursts in and blocks the door, talks to a pale woman behind the screen", | 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 | "id": "1fa40bca47f5", | 641 | "id": "1fa40bca47f5", |
| @@ -575,7 +650,8 @@ | @@ -575,7 +650,8 @@ | ||
| 575 | "likes": 0, | 650 | "likes": 0, |
| 576 | "createdAt": 1788085282201, | 651 | "createdAt": 1788085282201, |
| 577 | "promptEn": "constable stands still, quietly says he won't make a sound, woman stays silent behind the screen", | 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 | "id": "683ab2fd4681", | 657 | "id": "683ab2fd4681", |
| @@ -590,7 +666,8 @@ | @@ -590,7 +666,8 @@ | ||
| 590 | "likes": 0, | 666 | "likes": 0, |
| 591 | "createdAt": 1788071067702, | 667 | "createdAt": 1788071067702, |
| 592 | "promptEn": "constable stands still, quietly says he won't make a sound, woman stays silent behind the screen", | 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 | "id": "2e09fcd3d42c", | 673 | "id": "2e09fcd3d42c", |
| @@ -605,7 +682,8 @@ | @@ -605,7 +682,8 @@ | ||
| 605 | "likes": 0, | 682 | "likes": 0, |
| 606 | "createdAt": 1788062322252, | 683 | "createdAt": 1788062322252, |
| 607 | "promptEn": "constable stands still, quietly says he won't make a sound, woman stays silent behind the screen", | 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 | "id": "12ea9ce00f36", | 689 | "id": "12ea9ce00f36", |
| @@ -680,7 +758,8 @@ | @@ -680,7 +758,8 @@ | ||
| 680 | "likes": 0, | 758 | "likes": 0, |
| 681 | "createdAt": 1788026876886, | 759 | "createdAt": 1788026876886, |
| 682 | "promptEn": "apartment manager in an eerie corridor, red elevator light flickering, holding out a key", | 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 | "id": "cdd03cca8461", | 765 | "id": "cdd03cca8461", |
| @@ -695,7 +774,8 @@ | @@ -695,7 +774,8 @@ | ||
| 695 | "likes": 0, | 774 | "likes": 0, |
| 696 | "createdAt": 1788026569422, | 775 | "createdAt": 1788026569422, |
| 697 | "promptEn": "stitched-face long-haired curse on a subway platform, flickering lights, cruel smile", | 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 | "id": "b8dd0f62f648", | 781 | "id": "b8dd0f62f648", |
| @@ -755,7 +835,8 @@ | @@ -755,7 +835,8 @@ | ||
| 755 | "likes": 0, | 835 | "likes": 0, |
| 756 | "createdAt": 1788026568242, | 836 | "createdAt": 1788026568242, |
| 757 | "promptEn": "magma commander in a white coat, raising a lava fist on the battlefield", | 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 | "id": "1442013e94f0", | 842 | "id": "1442013e94f0", |
| @@ -770,7 +851,8 @@ | @@ -770,7 +851,8 @@ | ||
| 770 | "likes": 0, | 851 | "likes": 0, |
| 771 | "createdAt": 1788026068497, | 852 | "createdAt": 1788026068497, |
| 772 | "promptEn": "black-haired prince in a red cloak, pressing down an execution order in the trial hall", | 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 | "id": "0a5e37bb328c", | 858 | "id": "0a5e37bb328c", |
| @@ -800,7 +882,8 @@ | @@ -800,7 +882,8 @@ | ||
| 800 | "likes": 0, | 882 | "likes": 0, |
| 801 | "createdAt": 1788025640972, | 883 | "createdAt": 1788025640972, |
| 802 | "promptEn": "Voldemort in a graveyard, wand raised, stepping closer", | 884 | "promptEn": "Voldemort in a graveyard, wand raised, stepping closer", |
| 803 | - "lastPlayedAt": 1788253469603 | 885 | + "lastPlayedAt": 1788254858047, |
| 886 | + "playCount": 1 | ||
| 804 | }, | 887 | }, |
| 805 | { | 888 | { |
| 806 | "id": "c3875fbd6cc4", | 889 | "id": "c3875fbd6cc4", |
| @@ -815,7 +898,8 @@ | @@ -815,7 +898,8 @@ | ||
| 815 | "likes": 0, | 898 | "likes": 0, |
| 816 | "createdAt": 1788025632028, | 899 | "createdAt": 1788025632028, |
| 817 | "promptEn": "a giant mouth embedded in the wall at the end of an endless hotel corridor, slowly opening", | 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 | "id": "1c6e2df243f4", | 905 | "id": "1c6e2df243f4", |
| @@ -830,7 +914,8 @@ | @@ -830,7 +914,8 @@ | ||
| 830 | "likes": 0, | 914 | "likes": 0, |
| 831 | "createdAt": 1788025630249, | 915 | "createdAt": 1788025630249, |
| 832 | "promptEn": "white-haired villain in a ruined street at night, cracked smile, reaching out a hand", | 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 | "id": "d735f1fc010f", | 921 | "id": "d735f1fc010f", |
| @@ -845,7 +930,8 @@ | @@ -845,7 +930,8 @@ | ||
| 845 | "likes": 0, | 930 | "likes": 0, |
| 846 | "createdAt": 1788025624377, | 931 | "createdAt": 1788025624377, |
| 847 | "promptEn": "cat-eared white-haired guard crouching in a ruined palace, purple aura around them", | 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 | "id": "b16b64e52f83", | 937 | "id": "b16b64e52f83", |
| @@ -860,7 +946,8 @@ | @@ -860,7 +946,8 @@ | ||
| 860 | "likes": 0, | 946 | "likes": 0, |
| 861 | "createdAt": 1788025623833, | 947 | "createdAt": 1788025623833, |
| 862 | "promptEn": "cat-eared white-haired guard crouching in a ruined palace, purple aura around them", | 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 | "id": "0d721acbc298", | 953 | "id": "0d721acbc298", |
| @@ -875,7 +962,8 @@ | @@ -875,7 +962,8 @@ | ||
| 875 | "likes": 0, | 962 | "likes": 0, |
| 876 | "createdAt": 1788025622363, | 963 | "createdAt": 1788025622363, |
| 877 | "promptEn": "detective in a surveillance room squinting at the monitors", | 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 | "id": "639069dea7c5", | 969 | "id": "639069dea7c5", |
| @@ -890,7 +978,8 @@ | @@ -890,7 +978,8 @@ | ||
| 890 | "likes": 0, | 978 | "likes": 0, |
| 891 | "createdAt": 1788025620717, | 979 | "createdAt": 1788025620717, |
| 892 | "promptEn": "alien tyrant holding a glowing energy sphere, sneering on a rocky green battlefield", | 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 | "id": "9db41d807330", | 985 | "id": "9db41d807330", |
| @@ -935,7 +1024,8 @@ | @@ -935,7 +1024,8 @@ | ||
| 935 | "likes": 0, | 1024 | "likes": 0, |
| 936 | "createdAt": 1788024900966, | 1025 | "createdAt": 1788024900966, |
| 937 | "promptEn": "player 101 blocking the path on a high glass bridge, threatening you", | 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 | "id": "d6aab3fce63d", | 1031 | "id": "d6aab3fce63d", |
| @@ -950,7 +1040,8 @@ | @@ -950,7 +1040,8 @@ | ||
| 950 | "likes": 0, | 1040 | "likes": 0, |
| 951 | "createdAt": 1788024747209, | 1041 | "createdAt": 1788024747209, |
| 952 | "promptEn": "wounded hunter leaning on a subway turnstile, ordering you into the tunnel", | 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 | "id": "fdefca4e4980", | 1047 | "id": "fdefca4e4980", |
| @@ -965,7 +1056,8 @@ | @@ -965,7 +1056,8 @@ | ||
| 965 | "likes": 0, | 1056 | "likes": 0, |
| 966 | "createdAt": 1788024491625, | 1057 | "createdAt": 1788024491625, |
| 967 | "promptEn": "prince signs an execution order in the trial hall, points at the guillotine", | 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 | "id": "8a933feb52c4", | 1063 | "id": "8a933feb52c4", |
| @@ -1010,7 +1102,8 @@ | @@ -1010,7 +1102,8 @@ | ||
| 1010 | "likes": 0, | 1102 | "likes": 0, |
| 1011 | "createdAt": 1788016434846, | 1103 | "createdAt": 1788016434846, |
| 1012 | "promptEn": "pirate negotiation, catching Barbossa's flaw and turning the tables", | 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 | "id": "03e32ff5f0ef", | 1109 | "id": "03e32ff5f0ef", |
| @@ -1040,7 +1133,8 @@ | @@ -1040,7 +1133,8 @@ | ||
| 1040 | "likes": 0, | 1133 | "likes": 0, |
| 1041 | "createdAt": 1788015968838, | 1134 | "createdAt": 1788015968838, |
| 1042 | "promptEn": "pirate negotiation, held the goal but paid a price", | 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 | "id": "b328649000d1", | 1140 | "id": "b328649000d1", |
| @@ -1070,7 +1164,8 @@ | @@ -1070,7 +1164,8 @@ | ||
| 1070 | "likes": 0, | 1164 | "likes": 0, |
| 1071 | "createdAt": 1788015493445, | 1165 | "createdAt": 1788015493445, |
| 1072 | "promptEn": "pirate negotiation, went in head-on and Barbossa saw it coming", | 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 | "id": "3f30f5097438", | 1171 | "id": "3f30f5097438", |
| @@ -1085,7 +1180,8 @@ | @@ -1085,7 +1180,8 @@ | ||
| 1085 | "likes": 0, | 1180 | "likes": 0, |
| 1086 | "createdAt": 1788015035234, | 1181 | "createdAt": 1788015035234, |
| 1087 | "promptEn": "pirate negotiation, stayed passive and got cornered", | 1182 | "promptEn": "pirate negotiation, stayed passive and got cornered", |
| 1088 | - "lastPlayedAt": 1788251632751 | 1183 | + "lastPlayedAt": 1788255772518, |
| 1184 | + "playCount": 1 | ||
| 1089 | }, | 1185 | }, |
| 1090 | { | 1186 | { |
| 1091 | "id": "6a0d14cabe17", | 1187 | "id": "6a0d14cabe17", |
| @@ -1100,7 +1196,8 @@ | @@ -1100,7 +1196,8 @@ | ||
| 1100 | "likes": 0, | 1196 | "likes": 0, |
| 1101 | "createdAt": 1788014791733, | 1197 | "createdAt": 1788014791733, |
| 1102 | "promptEn": "pirate negotiation, stayed passive and got cornered", | 1198 | "promptEn": "pirate negotiation, stayed passive and got cornered", |
| 1103 | - "lastPlayedAt": 1788252169019 | 1199 | + "lastPlayedAt": 1788254585426, |
| 1200 | + "playCount": 1 | ||
| 1104 | }, | 1201 | }, |
| 1105 | { | 1202 | { |
| 1106 | "id": "08120928cc77", | 1203 | "id": "08120928cc77", |
| @@ -1115,7 +1212,8 @@ | @@ -1115,7 +1212,8 @@ | ||
| 1115 | "likes": 0, | 1212 | "likes": 0, |
| 1116 | "createdAt": 1788014790969, | 1213 | "createdAt": 1788014790969, |
| 1117 | "promptEn": "pirate negotiation, stayed passive and got cornered", | 1214 | "promptEn": "pirate negotiation, stayed passive and got cornered", |
| 1118 | - "lastPlayedAt": 1788253191467 | 1215 | + "lastPlayedAt": 1788256262677, |
| 1216 | + "playCount": 1 | ||
| 1119 | }, | 1217 | }, |
| 1120 | { | 1218 | { |
| 1121 | "id": "e14fe7c3220e", | 1219 | "id": "e14fe7c3220e", |
| @@ -1130,7 +1228,8 @@ | @@ -1130,7 +1228,8 @@ | ||
| 1130 | "likes": 0, | 1228 | "likes": 0, |
| 1131 | "createdAt": 1788014563344, | 1229 | "createdAt": 1788014563344, |
| 1132 | "promptEn": "captain's cabin on the Black Pearl, surrounded by pirates, negotiation could turn into an execution", | 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 | "id": "c6e8560f62a2", | 1235 | "id": "c6e8560f62a2", |
| @@ -1160,7 +1259,8 @@ | @@ -1160,7 +1259,8 @@ | ||
| 1160 | "likes": 0, | 1259 | "likes": 0, |
| 1161 | "createdAt": 1788014099497, | 1260 | "createdAt": 1788014099497, |
| 1162 | "promptEn": "glass bridge game, exploiting a flaw to push back player 101", | 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 | "id": "24576c264a25", | 1266 | "id": "24576c264a25", |
| @@ -1190,7 +1290,8 @@ | @@ -1190,7 +1290,8 @@ | ||
| 1190 | "likes": 0, | 1290 | "likes": 0, |
| 1191 | "createdAt": 1788013634333, | 1291 | "createdAt": 1788013634333, |
| 1192 | "promptEn": "glass bridge game, held the goal but paid a price", | 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 | "id": "5b8ef21616d4", | 1297 | "id": "5b8ef21616d4", |
| @@ -1205,7 +1306,8 @@ | @@ -1205,7 +1306,8 @@ | ||
| 1205 | "likes": 0, | 1306 | "likes": 0, |
| 1206 | "createdAt": 1788013632065, | 1307 | "createdAt": 1788013632065, |
| 1207 | "promptEn": "glass bridge game, held the goal but paid a price", | 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 | "id": "892b923eed29", | 1313 | "id": "892b923eed29", |
| @@ -1220,7 +1322,8 @@ | @@ -1220,7 +1322,8 @@ | ||
| 1220 | "likes": 0, | 1322 | "likes": 0, |
| 1221 | "createdAt": 1788013393463, | 1323 | "createdAt": 1788013393463, |
| 1222 | "promptEn": "guessed wrong in a survival game, got countered", | 1324 | "promptEn": "guessed wrong in a survival game, got countered", |
| 1223 | - "lastPlayedAt": 1788250071902 | 1325 | + "lastPlayedAt": 1788256516804, |
| 1326 | + "playCount": 1 | ||
| 1224 | }, | 1327 | }, |
| 1225 | { | 1328 | { |
| 1226 | "id": "7880a91928c6", | 1329 | "id": "7880a91928c6", |
| @@ -1250,7 +1353,8 @@ | @@ -1250,7 +1353,8 @@ | ||
| 1250 | "likes": 0, | 1353 | "likes": 0, |
| 1251 | "createdAt": 1788012917294, | 1354 | "createdAt": 1788012917294, |
| 1252 | "promptEn": "standing on the glass bridge, facing off with player 101", | 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 | "id": "8f23de61904f", | 1360 | "id": "8f23de61904f", |
| @@ -1265,7 +1369,8 @@ | @@ -1265,7 +1369,8 @@ | ||
| 1265 | "likes": 0, | 1369 | "likes": 0, |
| 1266 | "createdAt": 1788012917185, | 1370 | "createdAt": 1788012917185, |
| 1267 | "promptEn": "standing on the glass bridge, facing off with player 101", | 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 | "id": "bb4a8351d822", | 1376 | "id": "bb4a8351d822", |
| @@ -1280,7 +1385,8 @@ | @@ -1280,7 +1385,8 @@ | ||
| 1280 | "likes": 0, | 1385 | "likes": 0, |
| 1281 | "createdAt": 1788012679740, | 1386 | "createdAt": 1788012679740, |
| 1282 | "promptEn": "in the mental lair, exploiting a flaw to counter Vecna", | 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 | "id": "3913752bbe3a", | 1392 | "id": "3913752bbe3a", |
| @@ -1340,7 +1446,8 @@ | @@ -1340,7 +1446,8 @@ | ||
| 1340 | "likes": 0, | 1446 | "likes": 0, |
| 1341 | "createdAt": 1788011964828, | 1447 | "createdAt": 1788011964828, |
| 1342 | "promptEn": "facing Vecna, stayed passive and got cornered", | 1448 | "promptEn": "facing Vecna, stayed passive and got cornered", |
| 1343 | - "lastPlayedAt": 1788247774359 | 1449 | + "lastPlayedAt": 1788254655959, |
| 1450 | + "playCount": 1 | ||
| 1344 | }, | 1451 | }, |
| 1345 | { | 1452 | { |
| 1346 | "id": "7161aecafa32", | 1453 | "id": "7161aecafa32", |
| @@ -1355,7 +1462,8 @@ | @@ -1355,7 +1462,8 @@ | ||
| 1355 | "likes": 0, | 1462 | "likes": 0, |
| 1356 | "createdAt": 1788011727444, | 1463 | "createdAt": 1788011727444, |
| 1357 | "promptEn": "entering Vecna's mental lair, red lightning, twisted space", | 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 | "id": "6a9af7e7368d", | 1469 | "id": "6a9af7e7368d", |
| @@ -1370,7 +1478,8 @@ | @@ -1370,7 +1478,8 @@ | ||
| 1370 | "likes": 0, | 1478 | "likes": 0, |
| 1371 | "createdAt": 1788011488775, | 1479 | "createdAt": 1788011488775, |
| 1372 | "promptEn": "graveyard standoff, exploiting a flaw to counter Voldemort", | 1480 | "promptEn": "graveyard standoff, exploiting a flaw to counter Voldemort", |
| 1373 | - "lastPlayedAt": 1788253875818 | 1481 | + "lastPlayedAt": 1788255500375, |
| 1482 | + "playCount": 1 | ||
| 1374 | }, | 1483 | }, |
| 1375 | { | 1484 | { |
| 1376 | "id": "24845be71ea0", | 1485 | "id": "24845be71ea0", |
| @@ -1385,7 +1494,8 @@ | @@ -1385,7 +1494,8 @@ | ||
| 1385 | "likes": 0, | 1494 | "likes": 0, |
| 1386 | "createdAt": 1788011488667, | 1495 | "createdAt": 1788011488667, |
| 1387 | "promptEn": "graveyard standoff, exploiting a flaw to counter Voldemort", | 1496 | "promptEn": "graveyard standoff, exploiting a flaw to counter Voldemort", |
| 1388 | - "lastPlayedAt": 1788252803254 | 1497 | + "lastPlayedAt": 1788254960102, |
| 1498 | + "playCount": 1 | ||
| 1389 | }, | 1499 | }, |
| 1390 | { | 1500 | { |
| 1391 | "id": "f1012a3d7aa7", | 1501 | "id": "f1012a3d7aa7", |
| @@ -1415,7 +1525,8 @@ | @@ -1415,7 +1525,8 @@ | ||
| 1415 | "likes": 0, | 1525 | "likes": 0, |
| 1416 | "createdAt": 1788011013309, | 1526 | "createdAt": 1788011013309, |
| 1417 | "promptEn": "facing Voldemort, went in head-on and got seen through", | 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 | "id": "682cbc166479", | 1532 | "id": "682cbc166479", |
| @@ -1490,7 +1601,8 @@ | @@ -1490,7 +1601,8 @@ | ||
| 1490 | "likes": 0, | 1601 | "likes": 0, |
| 1491 | "createdAt": 1788009825082, | 1602 | "createdAt": 1788009825082, |
| 1492 | "promptEn": "facing Thanos, went in head-on and got seen through", | 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 | "id": "a6ead2cbe03f", | 1608 | "id": "a6ead2cbe03f", |
| @@ -1505,7 +1617,8 @@ | @@ -1505,7 +1617,8 @@ | ||
| 1505 | "likes": 0, | 1617 | "likes": 0, |
| 1506 | "createdAt": 1788009586293, | 1618 | "createdAt": 1788009586293, |
| 1507 | "promptEn": "facing Thanos, stayed passive and got cornered", | 1619 | "promptEn": "facing Thanos, stayed passive and got cornered", |
| 1508 | - "lastPlayedAt": 1788253869815 | 1620 | + "lastPlayedAt": 1788256306693, |
| 1621 | + "playCount": 1 | ||
| 1509 | }, | 1622 | }, |
| 1510 | { | 1623 | { |
| 1511 | "id": "438c98cf4973", | 1624 | "id": "438c98cf4973", |
| @@ -1535,7 +1648,8 @@ | @@ -1535,7 +1648,8 @@ | ||
| 1535 | "likes": 0, | 1648 | "likes": 0, |
| 1536 | "createdAt": 1788009108302, | 1649 | "createdAt": 1788009108302, |
| 1537 | "promptEn": "in the endless hotel, exploiting a flaw to counter the Eternity Devil", | 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 | "id": "71c590b0ea8f", | 1655 | "id": "71c590b0ea8f", |
| @@ -1580,7 +1694,8 @@ | @@ -1580,7 +1694,8 @@ | ||
| 1580 | "likes": 0, | 1694 | "likes": 0, |
| 1581 | "createdAt": 1788008394344, | 1695 | "createdAt": 1788008394344, |
| 1582 | "promptEn": "facing the Eternity Devil, stayed passive and got cornered", | 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 | "id": "1a57de01bad0", | 1701 | "id": "1a57de01bad0", |
| @@ -1640,7 +1755,8 @@ | @@ -1640,7 +1755,8 @@ | ||
| 1640 | "likes": 0, | 1755 | "likes": 0, |
| 1641 | "createdAt": 1788007441156, | 1756 | "createdAt": 1788007441156, |
| 1642 | "promptEn": "battlefield in Jaku city, the city in ruins, heroes in crisis", | 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 | "id": "68219d6b68c8", | 1762 | "id": "68219d6b68c8", |
| @@ -1670,7 +1786,8 @@ | @@ -1670,7 +1786,8 @@ | ||
| 1670 | "likes": 0, | 1786 | "likes": 0, |
| 1671 | "createdAt": 1788006964122, | 1787 | "createdAt": 1788006964122, |
| 1672 | "promptEn": "grabbing an evidence flaw to counter L", | 1788 | "promptEn": "grabbing an evidence flaw to counter L", |
| 1673 | - "lastPlayedAt": 1788253259502 | 1789 | + "lastPlayedAt": 1788255550395, |
| 1790 | + "playCount": 1 | ||
| 1674 | }, | 1791 | }, |
| 1675 | { | 1792 | { |
| 1676 | "id": "0c6306b07f79", | 1793 | "id": "0c6306b07f79", |
| @@ -1685,7 +1802,8 @@ | @@ -1685,7 +1802,8 @@ | ||
| 1685 | "likes": 0, | 1802 | "likes": 0, |
| 1686 | "createdAt": 1788006725887, | 1803 | "createdAt": 1788006725887, |
| 1687 | "promptEn": "facing off with L, went in head-on and got seen through", | 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 | "id": "ee82188227fa", | 1809 | "id": "ee82188227fa", |
| @@ -1730,7 +1848,8 @@ | @@ -1730,7 +1848,8 @@ | ||
| 1730 | "likes": 0, | 1848 | "likes": 0, |
| 1731 | "createdAt": 1788006015175, | 1849 | "createdAt": 1788006015175, |
| 1732 | "promptEn": "on the ruined planet, exploiting a flaw to counter Frieza", | 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 | "id": "e6fda5c2237d", | 1855 | "id": "e6fda5c2237d", |
| @@ -1745,7 +1864,8 @@ | @@ -1745,7 +1864,8 @@ | ||
| 1745 | "likes": 0, | 1864 | "likes": 0, |
| 1746 | "createdAt": 1788005778588, | 1865 | "createdAt": 1788005778588, |
| 1747 | "promptEn": "facing Frieza, held the goal but paid a price", | 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 | "id": "b96cc9762cf6", | 1871 | "id": "b96cc9762cf6", |
| @@ -1775,7 +1895,8 @@ | @@ -1775,7 +1895,8 @@ | ||
| 1775 | "likes": 0, | 1895 | "likes": 0, |
| 1776 | "createdAt": 1788005305091, | 1896 | "createdAt": 1788005305091, |
| 1777 | "promptEn": "facing Frieza, stayed passive and got cornered", | 1897 | "promptEn": "facing Frieza, stayed passive and got cornered", |
| 1778 | - "lastPlayedAt": 1788252623220 | 1898 | + "lastPlayedAt": 1788254619433, |
| 1899 | + "playCount": 1 | ||
| 1779 | }, | 1900 | }, |
| 1780 | { | 1901 | { |
| 1781 | "id": "d680e111ade5", | 1902 | "id": "d680e111ade5", |
| @@ -1790,7 +1911,8 @@ | @@ -1790,7 +1911,8 @@ | ||
| 1790 | "likes": 0, | 1911 | "likes": 0, |
| 1791 | "createdAt": 1788005066484, | 1912 | "createdAt": 1788005066484, |
| 1792 | "promptEn": "Namek is about to be destroyed, the dragon ball wish still up for grabs", | 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 | "id": "565059763888", | 1918 | "id": "565059763888", |
| @@ -1820,7 +1942,8 @@ | @@ -1820,7 +1942,8 @@ | ||
| 1820 | "likes": 0, | 1942 | "likes": 0, |
| 1821 | "createdAt": 1788004590937, | 1943 | "createdAt": 1788004590937, |
| 1822 | "promptEn": "facing Mahito, held the goal but paid a price", | 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 | "id": "9996a8ac8326", | 1949 | "id": "9996a8ac8326", |
| @@ -1835,7 +1958,8 @@ | @@ -1835,7 +1958,8 @@ | ||
| 1835 | "likes": 0, | 1958 | "likes": 0, |
| 1836 | "createdAt": 1788004353928, | 1959 | "createdAt": 1788004353928, |
| 1837 | "promptEn": "facing Mahito, went in head-on and got seen through", | 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 | "id": "971d80ec087c", | 1965 | "id": "971d80ec087c", |
| @@ -1850,7 +1974,8 @@ | @@ -1850,7 +1974,8 @@ | ||
| 1850 | "likes": 0, | 1974 | "likes": 0, |
| 1851 | "createdAt": 1788004115725, | 1975 | "createdAt": 1788004115725, |
| 1852 | "promptEn": "facing Mahito, stayed passive and got cornered", | 1976 | "promptEn": "facing Mahito, stayed passive and got cornered", |
| 1853 | - "lastPlayedAt": 1788252799252 | 1977 | + "lastPlayedAt": 1788256356716, |
| 1978 | + "playCount": 1 | ||
| 1854 | }, | 1979 | }, |
| 1855 | { | 1980 | { |
| 1856 | "id": "5dd52c568f66", | 1981 | "id": "5dd52c568f66", |
| @@ -1865,7 +1990,8 @@ | @@ -1865,7 +1990,8 @@ | ||
| 1865 | "likes": 0, | 1990 | "likes": 0, |
| 1866 | "createdAt": 1788004115612, | 1991 | "createdAt": 1788004115612, |
| 1867 | "promptEn": "facing Mahito, stayed passive and got cornered", | 1992 | "promptEn": "facing Mahito, stayed passive and got cornered", |
| 1868 | - "lastPlayedAt": 1788253899831 | 1993 | + "lastPlayedAt": 1788256128678, |
| 1994 | + "playCount": 1 | ||
| 1869 | }, | 1995 | }, |
| 1870 | { | 1996 | { |
| 1871 | "id": "f4a2870386c6", | 1997 | "id": "f4a2870386c6", |
| @@ -1925,7 +2051,8 @@ | @@ -1925,7 +2051,8 @@ | ||
| 1925 | "likes": 0, | 2051 | "likes": 0, |
| 1926 | "createdAt": 1788003166117, | 2052 | "createdAt": 1788003166117, |
| 1927 | "promptEn": "facing Enmu, stayed passive and got cornered", | 2053 | "promptEn": "facing Enmu, stayed passive and got cornered", |
| 1928 | - "lastPlayedAt": 1788252727219 | 2054 | + "lastPlayedAt": 1788254595913, |
| 2055 | + "playCount": 1 | ||
| 1929 | }, | 2056 | }, |
| 1930 | { | 2057 | { |
| 1931 | "id": "a3f39da74c1f", | 2058 | "id": "a3f39da74c1f", |
| @@ -1940,7 +2067,8 @@ | @@ -1940,7 +2067,8 @@ | ||
| 1940 | "likes": 0, | 2067 | "likes": 0, |
| 1941 | "createdAt": 1788002929455, | 2068 | "createdAt": 1788002929455, |
| 1942 | "promptEn": "facing Reiner, exploiting a flaw to counter him", | 2069 | "promptEn": "facing Reiner, exploiting a flaw to counter him", |
| 1943 | - "lastPlayedAt": 1788254288010 | 2070 | + "lastPlayedAt": 1788255768521, |
| 2071 | + "playCount": 1 | ||
| 1944 | }, | 2072 | }, |
| 1945 | { | 2073 | { |
| 1946 | "id": "ea8b38014674", | 2074 | "id": "ea8b38014674", |
| @@ -2000,7 +2128,8 @@ | @@ -2000,7 +2128,8 @@ | ||
| 2000 | "likes": 0, | 2128 | "likes": 0, |
| 2001 | "createdAt": 1788001981272, | 2129 | "createdAt": 1788001981272, |
| 2002 | "promptEn": "basement in Shiganshina, the titan secret weighing down on you", | 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 | "id": "7c2351a27a96", | 2135 | "id": "7c2351a27a96", |
| @@ -2015,7 +2144,8 @@ | @@ -2015,7 +2144,8 @@ | ||
| 2015 | "likes": 0, | 2144 | "likes": 0, |
| 2016 | "createdAt": 1788001508988, | 2145 | "createdAt": 1788001508988, |
| 2017 | "promptEn": "in the ruins of Konoha, exploiting a flaw to counter Pain", | 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 | "id": "79304c061606", | 2151 | "id": "79304c061606", |
| @@ -2045,7 +2175,8 @@ | @@ -2045,7 +2175,8 @@ | ||
| 2045 | "likes": 0, | 2175 | "likes": 0, |
| 2046 | "createdAt": 1788001285796, | 2176 | "createdAt": 1788001285796, |
| 2047 | "promptEn": "in the ruins of Konoha, exploiting a flaw to counter Pain", | 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 | "id": "808e89ca06a4", | 2182 | "id": "808e89ca06a4", |
| @@ -2060,7 +2191,8 @@ | @@ -2060,7 +2191,8 @@ | ||
| 2060 | "likes": 0, | 2191 | "likes": 0, |
| 2061 | "createdAt": 1788001049233, | 2192 | "createdAt": 1788001049233, |
| 2062 | "promptEn": "facing Pain, held the goal but paid a price", | 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 | "id": "7ecd480a3c31", | 2198 | "id": "7ecd480a3c31", |
| @@ -2090,7 +2222,8 @@ | @@ -2090,7 +2222,8 @@ | ||
| 2090 | "likes": 0, | 2222 | "likes": 0, |
| 2091 | "createdAt": 1788000577474, | 2223 | "createdAt": 1788000577474, |
| 2092 | "promptEn": "facing Pain, stayed passive and got cornered", | 2224 | "promptEn": "facing Pain, stayed passive and got cornered", |
| 2093 | - "lastPlayedAt": 1788253009344 | 2225 | + "lastPlayedAt": 1788255208219, |
| 2226 | + "playCount": 1 | ||
| 2094 | }, | 2227 | }, |
| 2095 | { | 2228 | { |
| 2096 | "id": "5ef9489bdc5b", | 2229 | "id": "5ef9489bdc5b", |
| @@ -2105,7 +2238,8 @@ | @@ -2105,7 +2238,8 @@ | ||
| 2105 | "likes": 0, | 2238 | "likes": 0, |
| 2106 | "createdAt": 1788000341927, | 2239 | "createdAt": 1788000341927, |
| 2107 | "promptEn": "Konoha destroyed by Shinra Tensei, Pain declaring order in the ruins", | 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 | "id": "e245dbcc6d36", | 2245 | "id": "e245dbcc6d36", |
| @@ -2120,7 +2254,8 @@ | @@ -2120,7 +2254,8 @@ | ||
| 2120 | "likes": 0, | 2254 | "likes": 0, |
| 2121 | "createdAt": 1788000105889, | 2255 | "createdAt": 1788000105889, |
| 2122 | "promptEn": "facing Sakazuki, exploiting a flaw to counter him", | 2256 | "promptEn": "facing Sakazuki, exploiting a flaw to counter him", |
| 2123 | - "lastPlayedAt": 1788253821783 | 2257 | + "lastPlayedAt": 1788255314291, |
| 2258 | + "playCount": 1 | ||
| 2124 | }, | 2259 | }, |
| 2125 | { | 2260 | { |
| 2126 | "id": "c9be7c07b793", | 2261 | "id": "c9be7c07b793", |
| @@ -2135,7 +2270,8 @@ | @@ -2135,7 +2270,8 @@ | ||
| 2135 | "likes": 0, | 2270 | "likes": 0, |
| 2136 | "createdAt": 1787999869694, | 2271 | "createdAt": 1787999869694, |
| 2137 | "promptEn": "facing Sakazuki, held the goal but paid a price", | 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 | "id": "677941e683c4", | 2277 | "id": "677941e683c4", |
| @@ -2150,7 +2286,8 @@ | @@ -2150,7 +2286,8 @@ | ||
| 2150 | "likes": 0, | 2286 | "likes": 0, |
| 2151 | "createdAt": 1787999633745, | 2287 | "createdAt": 1787999633745, |
| 2152 | "promptEn": "facing Sakazuki, went in head-on and got seen through", | 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 | "id": "932d15f7f8bd", | 2293 | "id": "932d15f7f8bd", |
| @@ -2165,7 +2302,8 @@ | @@ -2165,7 +2302,8 @@ | ||
| 2165 | "likes": 0, | 2302 | "likes": 0, |
| 2166 | "createdAt": 1787999633670, | 2303 | "createdAt": 1787999633670, |
| 2167 | "promptEn": "facing Sakazuki, went in head-on and got seen through", | 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 | "id": "a8b8b4430ee3", | 2309 | "id": "a8b8b4430ee3", |
| @@ -2195,7 +2333,8 @@ | @@ -2195,7 +2333,8 @@ | ||
| 2195 | "likes": 0, | 2333 | "likes": 0, |
| 2196 | "createdAt": 1787999161013, | 2334 | "createdAt": 1787999161013, |
| 2197 | "promptEn": "execution platform at Marineford, Ace about to be executed, navy vs pirates", | 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 | "id": "00476b62bf75", | 2340 | "id": "00476b62bf75", |
| @@ -2210,7 +2349,8 @@ | @@ -2210,7 +2349,8 @@ | ||
| 2210 | "likes": 0, | 2349 | "likes": 0, |
| 2211 | "createdAt": 1787903583872, | 2350 | "createdAt": 1787903583872, |
| 2212 | "promptEn": "constable asks if she's always been alone here, she doesn't answer", | 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 | "id": "2ab2094e5679", | 2356 | "id": "2ab2094e5679", |
| @@ -2240,7 +2380,8 @@ | @@ -2240,7 +2380,8 @@ | ||
| 2240 | "likes": 0, | 2380 | "likes": 0, |
| 2241 | "createdAt": 1787850191899, | 2381 | "createdAt": 1787850191899, |
| 2242 | "promptEn": "constable reaches out to touch her hand through the screen gap, no response", | 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 | "id": "9bd8c9fbf1f6", | 2387 | "id": "9bd8c9fbf1f6", |
| @@ -2255,7 +2396,8 @@ | @@ -2255,7 +2396,8 @@ | ||
| 2255 | "likes": 0, | 2396 | "likes": 0, |
| 2256 | "createdAt": 1787847447661, | 2397 | "createdAt": 1787847447661, |
| 2257 | "promptEn": "constable tells the woman behind the screen he'll trust her tonight", | 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 | "id": "8cb493338cb3", | 2403 | "id": "8cb493338cb3", |
| @@ -2285,7 +2427,8 @@ | @@ -2285,7 +2427,8 @@ | ||
| 2285 | "likes": 0, | 2427 | "likes": 0, |
| 2286 | "createdAt": 1787762342686, | 2428 | "createdAt": 1787762342686, |
| 2287 | "promptEn": "woman tells him from behind the screen to go check outside, he steps out warily", | 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 | "id": "47a6de809c61", | 2434 | "id": "47a6de809c61", |
| @@ -2300,7 +2443,8 @@ | @@ -2300,7 +2443,8 @@ | ||
| 2300 | "likes": 0, | 2443 | "likes": 0, |
| 2301 | "createdAt": 1787762332289, | 2444 | "createdAt": 1787762332289, |
| 2302 | "promptEn": "woman behind the screen stirs and softly reassures him", | 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 | "id": "0abf6e529c92", | 2450 | "id": "0abf6e529c92", |
| @@ -2330,7 +2474,8 @@ | @@ -2330,7 +2474,8 @@ | ||
| 2330 | "likes": 0, | 2474 | "likes": 0, |
| 2331 | "createdAt": 1787762286261, | 2475 | "createdAt": 1787762286261, |
| 2332 | "promptEn": "constable stares at her through the screen, silent, saying nothing", | 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 | "id": "59711a102e84", | 2481 | "id": "59711a102e84", |
| @@ -2345,7 +2490,8 @@ | @@ -2345,7 +2490,8 @@ | ||
| 2345 | "likes": 0, | 2490 | "likes": 0, |
| 2346 | "createdAt": 1787762224218, | 2491 | "createdAt": 1787762224218, |
| 2347 | "promptEn": "constable stands under the lamp, holding her gaze through the screen, not backing away", | 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 | "id": "f2e70205766b", | 2497 | "id": "f2e70205766b", |
| @@ -2375,7 +2521,8 @@ | @@ -2375,7 +2521,8 @@ | ||
| 2375 | "likes": 0, | 2521 | "likes": 0, |
| 2376 | "createdAt": 1787730413689, | 2522 | "createdAt": 1787730413689, |
| 2377 | "promptEn": "constable grabs the oil lamp and hurls it at the portrait, the scroll catches fire", | 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 | "id": "e6c23c6adc42", | 2528 | "id": "e6c23c6adc42", |
| @@ -2405,7 +2552,8 @@ | @@ -2405,7 +2552,8 @@ | ||
| 2405 | "likes": 0, | 2552 | "likes": 0, |
| 2406 | "createdAt": 1787730331663, | 2553 | "createdAt": 1787730331663, |
| 2407 | "promptEn": "constable steps in from the rainy night, spots her, introduces himself with a cover story", | 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 | "id": "84e8337de242", | 2559 | "id": "84e8337de242", |
| @@ -2420,7 +2568,8 @@ | @@ -2420,7 +2568,8 @@ | ||
| 2420 | "likes": 0, | 2568 | "likes": 0, |
| 2421 | "createdAt": 1787724313620, | 2569 | "createdAt": 1787724313620, |
| 2422 | "promptEn": "first-person view bursting into the room, glancing back in fear, the woman startled", | 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 | "id": "81b6c3789111", | 2575 | "id": "81b6c3789111", |
| @@ -2435,7 +2584,8 @@ | @@ -2435,7 +2584,8 @@ | ||
| 2435 | "likes": 0, | 2584 | "likes": 0, |
| 2436 | "createdAt": 1787708713767, | 2585 | "createdAt": 1787708713767, |
| 2437 | "promptEn": "constable stops looking around, turns to face the screen, speaks to her silhouette", | 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 | "id": "5dc95a15cd5d", | 2591 | "id": "5dc95a15cd5d", |
| @@ -2450,7 +2600,8 @@ | @@ -2450,7 +2600,8 @@ | ||
| 2450 | "likes": 0, | 2600 | "likes": 0, |
| 2451 | "createdAt": 1787708701547, | 2601 | "createdAt": 1787708701547, |
| 2452 | "promptEn": "constable gently tells her he'll stay and keep her company", | 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 | "id": "8d9c1dad041f", | 2607 | "id": "8d9c1dad041f", |
| @@ -2480,7 +2631,8 @@ | @@ -2480,7 +2631,8 @@ | ||
| 2480 | "likes": 0, | 2631 | "likes": 0, |
| 2481 | "createdAt": 1787708684658, | 2632 | "createdAt": 1787708684658, |
| 2482 | "promptEn": "constable sees her silent gesture, lets go of his sword hilt, steps closer and agrees", | 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 | "id": "abdbe25f3121", | 2638 | "id": "abdbe25f3121", |
| @@ -2495,7 +2647,8 @@ | @@ -2495,7 +2647,8 @@ | ||
| 2495 | "likes": 0, | 2647 | "likes": 0, |
| 2496 | "createdAt": 1787708674508, | 2648 | "createdAt": 1787708674508, |
| 2497 | "promptEn": "constable sees through her painted disguise and rips her face off, revealing a demonic visage underneath", | 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 | "id": "6d433dcc104c", | 2654 | "id": "6d433dcc104c", |
| @@ -2510,7 +2663,8 @@ | @@ -2510,7 +2663,8 @@ | ||
| 2510 | "likes": 0, | 2663 | "likes": 0, |
| 2511 | "createdAt": 1787708663418, | 2664 | "createdAt": 1787708663418, |
| 2512 | "promptEn": "constable catches his breath, thanks her, and rests on the couch while she watches", | 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 | "id": "cd22c2b491fc", | 2670 | "id": "cd22c2b491fc", |
| @@ -2540,7 +2694,8 @@ | @@ -2540,7 +2694,8 @@ | ||
| 2540 | "likes": 0, | 2694 | "likes": 0, |
| 2541 | "createdAt": 1787708648409, | 2695 | "createdAt": 1787708648409, |
| 2542 | "promptEn": "she reaches a hand through the screen gap beckoning him, he steps back and firmly refuses", | 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 | "id": "3f0c28f5373a", | 2701 | "id": "3f0c28f5373a", |
| @@ -2555,7 +2710,8 @@ | @@ -2555,7 +2710,8 @@ | ||
| 2555 | "likes": 0, | 2710 | "likes": 0, |
| 2556 | "createdAt": 1787708646888, | 2711 | "createdAt": 1787708646888, |
| 2557 | "promptEn": "constable studies her through the screen growing suspicious, hand drifting to his sword", | 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 | "id": "1c0c203cfb3b", | 2717 | "id": "1c0c203cfb3b", |
| @@ -2570,7 +2726,8 @@ | @@ -2570,7 +2726,8 @@ | ||
| 2570 | "likes": 0, | 2726 | "likes": 0, |
| 2571 | "createdAt": 1787708641782, | 2727 | "createdAt": 1787708641782, |
| 2572 | "promptEn": "constable sits down at the table, studying her expression through the screen", | 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 | "id": "89975be9def4", | 2733 | "id": "89975be9def4", |
| @@ -2585,7 +2742,8 @@ | @@ -2585,7 +2742,8 @@ | ||
| 2585 | "likes": 0, | 2742 | "likes": 0, |
| 2586 | "createdAt": 1787708626228, | 2743 | "createdAt": 1787708626228, |
| 2587 | "promptEn": "constable drinks some water first, thanks her, watching the screen warily as he drinks", | 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 | "id": "e08f7f7e54dd", | 2749 | "id": "e08f7f7e54dd", |
| @@ -2600,7 +2758,8 @@ | @@ -2600,7 +2758,8 @@ | ||
| 2600 | "likes": 0, | 2758 | "likes": 0, |
| 2601 | "createdAt": 1787708622306, | 2759 | "createdAt": 1787708622306, |
| 2602 | "promptEn": "constable gives a clasped-hand salute and thanks her, she gives a subtle nod", | 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 | "id": "538dc7e5746f", | 2765 | "id": "538dc7e5746f", |
| @@ -2615,7 +2774,8 @@ | @@ -2615,7 +2774,8 @@ | ||
| 2615 | "likes": 0, | 2774 | "likes": 0, |
| 2616 | "createdAt": 1787708622178, | 2775 | "createdAt": 1787708622178, |
| 2617 | "promptEn": "constable gives a clasped-hand salute and thanks her, she gives a subtle nod", | 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 | "id": "1721c75dbc3b", | 2781 | "id": "1721c75dbc3b", |
| @@ -2630,7 +2790,8 @@ | @@ -2630,7 +2790,8 @@ | ||
| 2630 | "likes": 0, | 2790 | "likes": 0, |
| 2631 | "createdAt": 1787708615415, | 2791 | "createdAt": 1787708615415, |
| 2632 | "promptEn": "she slides her hand through the screen gap asking him to warm it, he hesitates without touching", | 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 | "id": "c2b145b111e2", | 2797 | "id": "c2b145b111e2", |
| @@ -2645,7 +2806,8 @@ | @@ -2645,7 +2806,8 @@ | ||
| 2645 | "likes": 0, | 2806 | "likes": 0, |
| 2646 | "createdAt": 1787708613364, | 2807 | "createdAt": 1787708613364, |
| 2647 | "promptEn": "constable steps in, notices her behind the screen, greets her, she just watches silently", | 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 | "id": "a5d5d353bbf8", | 2813 | "id": "a5d5d353bbf8", |
| @@ -2660,7 +2822,8 @@ | @@ -2660,7 +2822,8 @@ | ||
| 2660 | "likes": 0, | 2822 | "likes": 0, |
| 2661 | "createdAt": 1787674768144, | 2823 | "createdAt": 1787674768144, |
| 2662 | "promptEn": "constable lifts a bronze mirror, reflecting candlelight onto the portrait on the wall", | 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 | "id": "3be1f275fde2", | 2829 | "id": "3be1f275fde2", |
| @@ -2675,7 +2838,8 @@ | @@ -2675,7 +2838,8 @@ | ||
| 2675 | "likes": 0, | 2838 | "likes": 0, |
| 2676 | "createdAt": 1787674743188, | 2839 | "createdAt": 1787674743188, |
| 2677 | "promptEn": "constable draws his sword and breaks the sealed talisman on the screen, revealing her behind it", | 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 | "id": "693e0b9ca66a", | 2845 | "id": "693e0b9ca66a", |
| @@ -2705,7 +2869,8 @@ | @@ -2705,7 +2869,8 @@ | ||
| 2705 | "likes": 0, | 2869 | "likes": 0, |
| 2706 | "createdAt": 1787674716075, | 2870 | "createdAt": 1787674716075, |
| 2707 | "promptEn": "constable watches the oil lamp flame flicker, her silhouette motionless behind the screen", | 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 | "id": "23d1ae1982e6", | 2876 | "id": "23d1ae1982e6", |
| @@ -2720,7 +2885,8 @@ | @@ -2720,7 +2885,8 @@ | ||
| 2720 | "likes": 0, | 2885 | "likes": 0, |
| 2721 | "createdAt": 1787674713724, | 2886 | "createdAt": 1787674713724, |
| 2722 | "promptEn": "constable enters and cautiously looks around, his gaze settling on her silhouette behind the screen", | 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 | "id": "b69389094416", | 2892 | "id": "b69389094416", |
| @@ -2735,7 +2901,8 @@ | @@ -2735,7 +2901,8 @@ | ||
| 2735 | "likes": 0, | 2901 | "likes": 0, |
| 2736 | "createdAt": 1787674695703, | 2902 | "createdAt": 1787674695703, |
| 2737 | "promptEn": "constable stops, faces the screen, quietly promises to keep his voice down", | 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 | "id": "94dc455e26bf", | 2908 | "id": "94dc455e26bf", |
| @@ -2750,7 +2917,8 @@ | @@ -2750,7 +2917,8 @@ | ||
| 2750 | "likes": 0, | 2917 | "likes": 0, |
| 2751 | "createdAt": 1787674688717, | 2918 | "createdAt": 1787674688717, |
| 2752 | "promptEn": "constable agrees to stay, lets his guard down, she gives a barely-there nod", | 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 | "id": "4874fe3fdbc9", | 2924 | "id": "4874fe3fdbc9", |
| @@ -2780,7 +2948,8 @@ | @@ -2780,7 +2948,8 @@ | ||
| 2780 | "likes": 0, | 2948 | "likes": 0, |
| 2781 | "createdAt": 1787674642139, | 2949 | "createdAt": 1787674642139, |
| 2782 | "promptEn": "constable forms hand seals and summons a giant toad out of smoke", | 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 | "id": "e9a6320e18a9", | 2955 | "id": "e9a6320e18a9", |
| @@ -2810,7 +2979,8 @@ | @@ -2810,7 +2979,8 @@ | ||
| 2810 | "likes": 0, | 2979 | "likes": 0, |
| 2811 | "createdAt": 1787674639055, | 2980 | "createdAt": 1787674639055, |
| 2812 | "promptEn": "constable checks his reflection in the mirror, sees her behind his shoulder in it, turns around to find the screen empty", | 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 | "id": "ebaf0dde3d9f", | 2986 | "id": "ebaf0dde3d9f", |
| @@ -2825,7 +2995,8 @@ | @@ -2825,7 +2995,8 @@ | ||
| 2825 | "likes": 0, | 2995 | "likes": 0, |
| 2826 | "createdAt": 1787674623678, | 2996 | "createdAt": 1787674623678, |
| 2827 | "promptEn": "constable bows to the screen, thanking her for sheltering him", | 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 | "id": "d94991a1e21b", | 3002 | "id": "d94991a1e21b", |
| @@ -2840,7 +3011,8 @@ | @@ -2840,7 +3011,8 @@ | ||
| 2840 | "likes": 0, | 3011 | "likes": 0, |
| 2841 | "createdAt": 1787674609636, | 3012 | "createdAt": 1787674609636, |
| 2842 | "promptEn": "constable silently watches her through the screen gaps, camera slowly zooming in on her face", | 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 | "id": "5e53f7f5fe9b", | 3018 | "id": "5e53f7f5fe9b", |
| @@ -2855,7 +3027,8 @@ | @@ -2855,7 +3027,8 @@ | ||
| 2855 | "likes": 0, | 3027 | "likes": 0, |
| 2856 | "createdAt": 1787674446841, | 3028 | "createdAt": 1787674446841, |
| 2857 | "promptEn": "player panics into the room, glances back, out of breath, says something's chasing him outside", | 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 | "id": "c25d53a5e086", | 3034 | "id": "c25d53a5e086", |
| @@ -2885,7 +3058,8 @@ | @@ -2885,7 +3058,8 @@ | ||
| 2885 | "likes": 0, | 3058 | "likes": 0, |
| 2886 | "createdAt": 1787674361187, | 3059 | "createdAt": 1787674361187, |
| 2887 | "promptEn": "constable presses his hand to his chest, vowing his heart to her, she gives a knowing smile", | 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 | "id": "8aba0a6bf05b", | 3065 | "id": "8aba0a6bf05b", |
| @@ -2900,7 +3074,8 @@ | @@ -2900,7 +3074,8 @@ | ||
| 2900 | "likes": 0, | 3074 | "likes": 0, |
| 2901 | "createdAt": 1787674351536, | 3075 | "createdAt": 1787674351536, |
| 2902 | "promptEn": "constable searches an old house at night, candle flickering, woman hiding behind the screen", | 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 | "id": "dc13e4f165dc", | 3081 | "id": "dc13e4f165dc", |
| @@ -2930,7 +3105,8 @@ | @@ -2930,7 +3105,8 @@ | ||
| 2930 | "likes": 0, | 3105 | "likes": 0, |
| 2931 | "createdAt": 1787665100787, | 3106 | "createdAt": 1787665100787, |
| 2932 | "promptEn": "constable politely asks the woman behind the screen for tea", | 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 | "id": "d2c77b87b84b", | 3112 | "id": "d2c77b87b84b", |
| @@ -2960,7 +3136,8 @@ | @@ -2960,7 +3136,8 @@ | ||
| 2960 | "likes": 0, | 3136 | "likes": 0, |
| 2961 | "createdAt": 1787642579766, | 3137 | "createdAt": 1787642579766, |
| 2962 | "promptEn": "a summoner chants and calls a giant toad, which swallows the white-robed ghost whole", | 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 | "id": "22a666455198", | 3143 | "id": "22a666455198", |
| @@ -2989,8 +3166,9 @@ | @@ -2989,8 +3166,9 @@ | ||
| 2989 | "partition": "ref2va", | 3166 | "partition": "ref2va", |
| 2990 | "likes": 0, | 3167 | "likes": 0, |
| 2991 | "createdAt": 1787639957338, | 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 | "id": "9f9638cb5b62", | 3174 | "id": "9f9638cb5b62", |
| @@ -3020,7 +3198,8 @@ | @@ -3020,7 +3198,8 @@ | ||
| 3020 | "likes": 0, | 3198 | "likes": 0, |
| 3021 | "createdAt": 1787635935502, | 3199 | "createdAt": 1787635935502, |
| 3022 | "promptEn": "constable bursts in panicked, spots the woman behind the screen", | 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 | "id": "b32769bf80db", | 3205 | "id": "b32769bf80db", |
| @@ -3035,7 +3214,8 @@ | @@ -3035,7 +3214,8 @@ | ||
| 3035 | "likes": 0, | 3214 | "likes": 0, |
| 3036 | "createdAt": 1787632587351, | 3215 | "createdAt": 1787632587351, |
| 3037 | "promptEn": "constable bursts in panicked, spots the woman behind the screen", | 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 | "id": "282281777d1b", | 3221 | "id": "282281777d1b", |
| @@ -3050,7 +3230,8 @@ | @@ -3050,7 +3230,8 @@ | ||
| 3050 | "likes": 0, | 3230 | "likes": 0, |
| 3051 | "createdAt": 1787615243753, | 3231 | "createdAt": 1787615243753, |
| 3052 | "promptEn": "robot arm picks up a red block and puts it down", | 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 | "id": "d040eec16a88", | 3237 | "id": "d040eec16a88", |
| @@ -3065,7 +3246,8 @@ | @@ -3065,7 +3246,8 @@ | ||
| 3065 | "likes": 0, | 3246 | "likes": 0, |
| 3066 | "createdAt": 1787615242602, | 3247 | "createdAt": 1787615242602, |
| 3067 | "promptEn": "otome game male lead showcase PV", | 3248 | "promptEn": "otome game male lead showcase PV", |
| 3068 | - "lastPlayedAt": 1788251108401 | 3249 | + "lastPlayedAt": 1788256248669, |
| 3250 | + "playCount": 1 | ||
| 3069 | }, | 3251 | }, |
| 3070 | { | 3252 | { |
| 3071 | "id": "423a20afba5a", | 3253 | "id": "423a20afba5a", |
| @@ -3080,7 +3262,8 @@ | @@ -3080,7 +3262,8 @@ | ||
| 3080 | "likes": 0, | 3262 | "likes": 0, |
| 3081 | "createdAt": 1787615241814, | 3263 | "createdAt": 1787615241814, |
| 3082 | "promptEn": "xianxia character turning, only back and side profile shown", | 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 | "id": "1a398591663e", | 3269 | "id": "1a398591663e", |
| @@ -3155,7 +3338,8 @@ | @@ -3155,7 +3338,8 @@ | ||
| 3155 | "likes": 0, | 3338 | "likes": 0, |
| 3156 | "createdAt": 1787588545243, | 3339 | "createdAt": 1787588545243, |
| 3157 | "promptEn": "ergonomic office chair 360 showcase ad", | 3340 | "promptEn": "ergonomic office chair 360 showcase ad", |
| 3158 | - "lastPlayedAt": 1788253031360 | 3341 | + "lastPlayedAt": 1788256232664, |
| 3342 | + "playCount": 1 | ||
| 3159 | }, | 3343 | }, |
| 3160 | { | 3344 | { |
| 3161 | "id": "b0d258352c3c", | 3345 | "id": "b0d258352c3c", |
| @@ -3170,7 +3354,8 @@ | @@ -3170,7 +3354,8 @@ | ||
| 3170 | "likes": 0, | 3354 | "likes": 0, |
| 3171 | "createdAt": 1787588544667, | 3355 | "createdAt": 1787588544667, |
| 3172 | "promptEn": "white studio shoot, two models wearing futuristic glasses", | 3356 | "promptEn": "white studio shoot, two models wearing futuristic glasses", |
| 3173 | - "lastPlayedAt": 1788248729194 | 3357 | + "lastPlayedAt": 1788255666469, |
| 3358 | + "playCount": 1 | ||
| 3174 | }, | 3359 | }, |
| 3175 | { | 3360 | { |
| 3176 | "id": "71a4d093aebc", | 3361 | "id": "71a4d093aebc", |
| @@ -3215,7 +3400,8 @@ | @@ -3215,7 +3400,8 @@ | ||
| 3215 | "likes": 0, | 3400 | "likes": 0, |
| 3216 | "createdAt": 1787588542968, | 3401 | "createdAt": 1787588542968, |
| 3217 | "promptEn": "mystery crime title sequence, collage split-screen credits", | 3402 | "promptEn": "mystery crime title sequence, collage split-screen credits", |
| 3218 | - "lastPlayedAt": 1788251444607 | 3403 | + "lastPlayedAt": 1788255236243, |
| 3404 | + "playCount": 1 | ||
| 3219 | }, | 3405 | }, |
| 3220 | { | 3406 | { |
| 3221 | "id": "67ababbea78f", | 3407 | "id": "67ababbea78f", |
| @@ -3230,7 +3416,8 @@ | @@ -3230,7 +3416,8 @@ | ||
| 3230 | "likes": 0, | 3416 | "likes": 0, |
| 3231 | "createdAt": 1787588542426, | 3417 | "createdAt": 1787588542426, |
| 3232 | "promptEn": "fashion guy in sunglasses and coat by a fire", | 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 | "id": "c1237b599bf4", | 3423 | "id": "c1237b599bf4", |
| @@ -3260,7 +3447,8 @@ | @@ -3260,7 +3447,8 @@ | ||
| 3260 | "likes": 0, | 3447 | "likes": 0, |
| 3261 | "createdAt": 1787588541164, | 3448 | "createdAt": 1787588541164, |
| 3262 | "promptEn": "tiny silhouette before a huge cosmic gate, title fades in", | 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 | "id": "5cc09dcdf470", | 3454 | "id": "5cc09dcdf470", |
| @@ -3275,7 +3463,8 @@ | @@ -3275,7 +3463,8 @@ | ||
| 3275 | "likes": 0, | 3463 | "likes": 0, |
| 3276 | "createdAt": 1787588540642, | 3464 | "createdAt": 1787588540642, |
| 3277 | "promptEn": "telescope view searching for a MiniMax device, fashionable passerby", | 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 | "id": "a59cae01ec39", | 3470 | "id": "a59cae01ec39", |
| @@ -3290,7 +3479,8 @@ | @@ -3290,7 +3479,8 @@ | ||
| 3290 | "likes": 0, | 3479 | "likes": 0, |
| 3291 | "createdAt": 1787588540567, | 3480 | "createdAt": 1787588540567, |
| 3292 | "promptEn": "telescope view searching for a MiniMax device", | 3481 | "promptEn": "telescope view searching for a MiniMax device", |
| 3293 | - "lastPlayedAt": 1788253197469 | 3482 | + "lastPlayedAt": 1788254623432, |
| 3483 | + "playCount": 1 | ||
| 3294 | }, | 3484 | }, |
| 3295 | { | 3485 | { |
| 3296 | "id": "ba8c0758e5b4", | 3486 | "id": "ba8c0758e5b4", |
| @@ -3320,7 +3510,8 @@ | @@ -3320,7 +3510,8 @@ | ||
| 3320 | "likes": 0, | 3510 | "likes": 0, |
| 3321 | "createdAt": 1787577878370, | 3511 | "createdAt": 1787577878370, |
| 3322 | "promptEn": "man barges into the old house apologizing, woman in white behind the screen", | 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 | "id": "0e75ef71c3d0", | 3517 | "id": "0e75ef71c3d0", |
| @@ -3335,7 +3526,8 @@ | @@ -3335,7 +3526,8 @@ | ||
| 3335 | "likes": 0, | 3526 | "likes": 0, |
| 3336 | "createdAt": 1787577088842, | 3527 | "createdAt": 1787577088842, |
| 3337 | "promptEn": "man thanks the woman for taking him in, behind the screen", | 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 | "id": "e656777b6eef", | 3533 | "id": "e656777b6eef", |
| @@ -3350,7 +3542,8 @@ | @@ -3350,7 +3542,8 @@ | ||
| 3350 | "likes": 0, | 3542 | "likes": 0, |
| 3351 | "createdAt": 1787577088778, | 3543 | "createdAt": 1787577088778, |
| 3352 | "promptEn": "man thanks the woman for taking him in", | 3544 | "promptEn": "man thanks the woman for taking him in", |
| 3353 | - "lastPlayedAt": 1788253473612 | 3545 | + "lastPlayedAt": 1788255122181, |
| 3546 | + "playCount": 1 | ||
| 3354 | }, | 3547 | }, |
| 3355 | { | 3548 | { |
| 3356 | "id": "8d0270466c35", | 3549 | "id": "8d0270466c35", |
| @@ -3365,7 +3558,8 @@ | @@ -3365,7 +3558,8 @@ | ||
| 3365 | "likes": 0, | 3558 | "likes": 0, |
| 3366 | "createdAt": 1787576943673, | 3559 | "createdAt": 1787576943673, |
| 3367 | "promptEn": "man lowers his voice like she said, checks the door, window and lamp", | 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 | "id": "396de15c1439", | 3565 | "id": "396de15c1439", |
| @@ -3410,7 +3604,8 @@ | @@ -3410,7 +3604,8 @@ | ||
| 3410 | "likes": 0, | 3604 | "likes": 0, |
| 3411 | "createdAt": 1787576651668, | 3605 | "createdAt": 1787576651668, |
| 3412 | "promptEn": "man silently looks at her, doesn't respond", | 3606 | "promptEn": "man silently looks at her, doesn't respond", |
| 3413 | - "lastPlayedAt": 1788251536684 | 3607 | + "lastPlayedAt": 1788256326705, |
| 3608 | + "playCount": 1 | ||
| 3414 | }, | 3609 | }, |
| 3415 | { | 3610 | { |
| 3416 | "id": "5958b86ab8f4", | 3611 | "id": "5958b86ab8f4", |
| @@ -3424,8 +3619,9 @@ | @@ -3424,8 +3619,9 @@ | ||
| 3424 | "partition": "text", | 3619 | "partition": "text", |
| 3425 | "likes": 0, | 3620 | "likes": 0, |
| 3426 | "createdAt": 1787576506447, | 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 | "id": "dd69b54fb2ce", | 3627 | "id": "dd69b54fb2ce", |
| @@ -3500,7 +3696,8 @@ | @@ -3500,7 +3696,8 @@ | ||
| 3500 | "likes": 0, | 3696 | "likes": 0, |
| 3501 | "createdAt": 1787575164766, | 3697 | "createdAt": 1787575164766, |
| 3502 | "promptEn": "man apologizes, says something outside was chasing him", | 3698 | "promptEn": "man apologizes, says something outside was chasing him", |
| 3503 | - "lastPlayedAt": 1788251998941 | 3699 | + "lastPlayedAt": 1788255420339, |
| 3700 | + "playCount": 1 | ||
| 3504 | }, | 3701 | }, |
| 3505 | { | 3702 | { |
| 3506 | "id": "fb3000701384", | 3703 | "id": "fb3000701384", |
| @@ -3515,7 +3712,8 @@ | @@ -3515,7 +3712,8 @@ | ||
| 3515 | "likes": 0, | 3712 | "likes": 0, |
| 3516 | "createdAt": 1787573698485, | 3713 | "createdAt": 1787573698485, |
| 3517 | "promptEn": "underground rap duo freestyling at the camera", | 3714 | "promptEn": "underground rap duo freestyling at the camera", |
| 3518 | - "lastPlayedAt": 1788254075916 | 3715 | + "lastPlayedAt": 1788256114676, |
| 3716 | + "playCount": 1 | ||
| 3519 | }, | 3717 | }, |
| 3520 | { | 3718 | { |
| 3521 | "id": "e5246eae814e", | 3719 | "id": "e5246eae814e", |
| @@ -3530,7 +3728,8 @@ | @@ -3530,7 +3728,8 @@ | ||
| 3530 | "likes": 0, | 3728 | "likes": 0, |
| 3531 | "createdAt": 1787569314178, | 3729 | "createdAt": 1787569314178, |
| 3532 | "promptEn": "man apologizes, says something outside was chasing him", | 3730 | "promptEn": "man apologizes, says something outside was chasing him", |
| 3533 | - "lastPlayedAt": 1788252793246 | 3731 | + "lastPlayedAt": 1788255430342, |
| 3732 | + "playCount": 1 | ||
| 3534 | }, | 3733 | }, |
| 3535 | { | 3734 | { |
| 3536 | "id": "a0d7a106b8d6", | 3735 | "id": "a0d7a106b8d6", |
| @@ -3544,8 +3743,9 @@ | @@ -3544,8 +3743,9 @@ | ||
| 3544 | "partition": "text", | 3743 | "partition": "text", |
| 3545 | "likes": 0, | 3744 | "likes": 0, |
| 3546 | "createdAt": 1787568512602, | 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 | "id": "d71c09a38248", | 3751 | "id": "d71c09a38248", |
| @@ -3559,8 +3759,9 @@ | @@ -3559,8 +3759,9 @@ | ||
| 3559 | "partition": "ref2va", | 3759 | "partition": "ref2va", |
| 3560 | "likes": 0, | 3760 | "likes": 0, |
| 3561 | "createdAt": 1787559156410, | 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 | "id": "87c065ab0f98", | 3767 | "id": "87c065ab0f98", |
| @@ -3575,7 +3776,8 @@ | @@ -3575,7 +3776,8 @@ | ||
| 3575 | "likes": 0, | 3776 | "likes": 0, |
| 3576 | "createdAt": 1787542770522, | 3777 | "createdAt": 1787542770522, |
| 3577 | "promptEn": "clip cut to match a reference video's editing rhythm", | 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 | "id": "f9286d694bad", | 3783 | "id": "f9286d694bad", |
| @@ -3590,7 +3792,8 @@ | @@ -3590,7 +3792,8 @@ | ||
| 3590 | "likes": 0, | 3792 | "likes": 0, |
| 3591 | "createdAt": 1787497396594, | 3793 | "createdAt": 1787497396594, |
| 3592 | "promptEn": "otome game male lead showcase PV", | 3794 | "promptEn": "otome game male lead showcase PV", |
| 3593 | - "lastPlayedAt": 1788253932562 | 3795 | + "lastPlayedAt": 1788255340303, |
| 3796 | + "playCount": 1 | ||
| 3594 | }, | 3797 | }, |
| 3595 | { | 3798 | { |
| 3596 | "id": "36ac12f2f29e", | 3799 | "id": "36ac12f2f29e", |
| @@ -3605,7 +3808,8 @@ | @@ -3605,7 +3808,8 @@ | ||
| 3605 | "likes": 0, | 3808 | "likes": 0, |
| 3606 | "createdAt": 1787493339415, | 3809 | "createdAt": 1787493339415, |
| 3607 | "promptEn": "game menu UI, character swaps out a mechanical arm", | 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 | "id": "656c897b04fc", | 3815 | "id": "656c897b04fc", |
| @@ -3620,7 +3824,8 @@ | @@ -3620,7 +3824,8 @@ | ||
| 3620 | "likes": 0, | 3824 | "likes": 0, |
| 3621 | "createdAt": 1787493303602, | 3825 | "createdAt": 1787493303602, |
| 3622 | "promptEn": "game menu UI, character swaps out a mechanical arm", | 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 | "id": "e1fd99e4ab97", | 3831 | "id": "e1fd99e4ab97", |
| @@ -3650,7 +3855,8 @@ | @@ -3650,7 +3855,8 @@ | ||
| 3650 | "likes": 0, | 3855 | "likes": 0, |
| 3651 | "createdAt": 1787470101693, | 3856 | "createdAt": 1787470101693, |
| 3652 | "promptEn": "black-background product-launch style shot of a roast duck", | 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 | "id": "99e771bbb50d", | 3862 | "id": "99e771bbb50d", |
| @@ -3665,7 +3871,8 @@ | @@ -3665,7 +3871,8 @@ | ||
| 3665 | "likes": 0, | 3871 | "likes": 0, |
| 3666 | "createdAt": 1787470101411, | 3872 | "createdAt": 1787470101411, |
| 3667 | "promptEn": "vertical family-fight drama, arguing with an older woman", | 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 | "id": "57169e6751d0", | 3878 | "id": "57169e6751d0", |
| @@ -3695,7 +3902,8 @@ | @@ -3695,7 +3902,8 @@ | ||
| 3695 | "likes": 0, | 3902 | "likes": 0, |
| 3696 | "createdAt": 1787470100377, | 3903 | "createdAt": 1787470100377, |
| 3697 | "promptEn": "all-black background, experimental Chinese kinetic typography", | 3904 | "promptEn": "all-black background, experimental Chinese kinetic typography", |
| 3698 | - "lastPlayedAt": 1788250298018 | 3905 | + "lastPlayedAt": 1788254898074, |
| 3906 | + "playCount": 1 | ||
| 3699 | }, | 3907 | }, |
| 3700 | { | 3908 | { |
| 3701 | "id": "c24c15736daa", | 3909 | "id": "c24c15736daa", |
| @@ -3770,7 +3978,8 @@ | @@ -3770,7 +3978,8 @@ | ||
| 3770 | "likes": 0, | 3978 | "likes": 0, |
| 3771 | "createdAt": 1787470098914, | 3979 | "createdAt": 1787470098914, |
| 3772 | "promptEn": "evening kitchen footage mixed with a glowing hand-drawn creature", | 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 | "id": "6639b07acc7b", | 3985 | "id": "6639b07acc7b", |
| @@ -3785,7 +3994,8 @@ | @@ -3785,7 +3994,8 @@ | ||
| 3785 | "likes": 0, | 3994 | "likes": 0, |
| 3786 | "createdAt": 1787470098570, | 3995 | "createdAt": 1787470098570, |
| 3787 | "promptEn": "fast-cut spaceship trailer title sequence", | 3996 | "promptEn": "fast-cut spaceship trailer title sequence", |
| 3788 | - "lastPlayedAt": 1788252235049 | 3997 | + "lastPlayedAt": 1788255538396, |
| 3998 | + "playCount": 1 | ||
| 3789 | }, | 3999 | }, |
| 3790 | { | 4000 | { |
| 3791 | "id": "1e55e540df11", | 4001 | "id": "1e55e540df11", |
| @@ -3800,7 +4010,8 @@ | @@ -3800,7 +4010,8 @@ | ||
| 3800 | "likes": 0, | 4010 | "likes": 0, |
| 3801 | "createdAt": 1787461994394, | 4011 | "createdAt": 1787461994394, |
| 3802 | "promptEn": "a quiet mountain village at dawn (second attempt)", | 4012 | "promptEn": "a quiet mountain village at dawn (second attempt)", |
| 3803 | - "lastPlayedAt": 1788251098955 | 4013 | + "lastPlayedAt": 1788255112176, |
| 4014 | + "playCount": 1 | ||
| 3804 | }, | 4015 | }, |
| 3805 | { | 4016 | { |
| 3806 | "id": "8e16b6faafd9", | 4017 | "id": "8e16b6faafd9", |
| @@ -3815,7 +4026,8 @@ | @@ -3815,7 +4026,8 @@ | ||
| 3815 | "likes": 0, | 4026 | "likes": 0, |
| 3816 | "createdAt": 1787455895150, | 4027 | "createdAt": 1787455895150, |
| 3817 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", | 4028 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 3818 | - "lastPlayedAt": 1788254418063 | 4029 | + "lastPlayedAt": 1788255794528, |
| 4030 | + "playCount": 1 | ||
| 3819 | }, | 4031 | }, |
| 3820 | { | 4032 | { |
| 3821 | "id": "2a4e45820135", | 4033 | "id": "2a4e45820135", |
| @@ -3830,7 +4042,8 @@ | @@ -3830,7 +4042,8 @@ | ||
| 3830 | "likes": 0, | 4042 | "likes": 0, |
| 3831 | "createdAt": 1787453697093, | 4043 | "createdAt": 1787453697093, |
| 3832 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", | 4044 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 3833 | - "lastPlayedAt": 1788250986335 | 4045 | + "lastPlayedAt": 1788255554397, |
| 4046 | + "playCount": 1 | ||
| 3834 | }, | 4047 | }, |
| 3835 | { | 4048 | { |
| 3836 | "id": "bfe13d1cc4a2", | 4049 | "id": "bfe13d1cc4a2", |
| @@ -3890,7 +4103,8 @@ | @@ -3890,7 +4103,8 @@ | ||
| 3890 | "likes": 0, | 4103 | "likes": 0, |
| 3891 | "createdAt": 1787444313690, | 4104 | "createdAt": 1787444313690, |
| 3892 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", | 4105 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 3893 | - "lastPlayedAt": 1788253967852 | 4106 | + "lastPlayedAt": 1788256428755, |
| 4107 | + "playCount": 1 | ||
| 3894 | }, | 4108 | }, |
| 3895 | { | 4109 | { |
| 3896 | "id": "e56962bd770f", | 4110 | "id": "e56962bd770f", |
| @@ -3920,7 +4134,8 @@ | @@ -3920,7 +4134,8 @@ | ||
| 3920 | "likes": 0, | 4134 | "likes": 0, |
| 3921 | "createdAt": 1787437988124, | 4135 | "createdAt": 1787437988124, |
| 3922 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", | 4136 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 3923 | - "lastPlayedAt": 1788252010944 | 4137 | + "lastPlayedAt": 1788256016633, |
| 4138 | + "playCount": 1 | ||
| 3924 | }, | 4139 | }, |
| 3925 | { | 4140 | { |
| 3926 | "id": "e497093c79ce", | 4141 | "id": "e497093c79ce", |
| @@ -3950,7 +4165,8 @@ | @@ -3950,7 +4165,8 @@ | ||
| 3950 | "likes": 0, | 4165 | "likes": 0, |
| 3951 | "createdAt": 1787432295531, | 4166 | "createdAt": 1787432295531, |
| 3952 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", | 4167 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 3953 | - "lastPlayedAt": 1788248396902 | 4168 | + "lastPlayedAt": 1788255262253, |
| 4169 | + "playCount": 1 | ||
| 3954 | }, | 4170 | }, |
| 3955 | { | 4171 | { |
| 3956 | "id": "79368c9cf499", | 4172 | "id": "79368c9cf499", |
| @@ -3980,7 +4196,8 @@ | @@ -3980,7 +4196,8 @@ | ||
| 3980 | "likes": 0, | 4196 | "likes": 0, |
| 3981 | "createdAt": 1787426955312, | 4197 | "createdAt": 1787426955312, |
| 3982 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", | 4198 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 3983 | - "lastPlayedAt": 1788253219489 | 4199 | + "lastPlayedAt": 1788255360311, |
| 4200 | + "playCount": 1 | ||
| 3984 | }, | 4201 | }, |
| 3985 | { | 4202 | { |
| 3986 | "id": "734d28c52670", | 4203 | "id": "734d28c52670", |
| @@ -4040,7 +4257,8 @@ | @@ -4040,7 +4257,8 @@ | ||
| 4040 | "likes": 0, | 4257 | "likes": 0, |
| 4041 | "createdAt": 1787413999418, | 4258 | "createdAt": 1787413999418, |
| 4042 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", | 4259 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 4043 | - "lastPlayedAt": 1788251954922 | 4260 | + "lastPlayedAt": 1788255444349, |
| 4261 | + "playCount": 1 | ||
| 4044 | }, | 4262 | }, |
| 4045 | { | 4263 | { |
| 4046 | "id": "ade0318a7a4a", | 4264 | "id": "ade0318a7a4a", |
| @@ -4055,7 +4273,8 @@ | @@ -4055,7 +4273,8 @@ | ||
| 4055 | "likes": 0, | 4273 | "likes": 0, |
| 4056 | "createdAt": 1787413511959, | 4274 | "createdAt": 1787413511959, |
| 4057 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", | 4275 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 4058 | - "lastPlayedAt": 1788254235982 | 4276 | + "lastPlayedAt": 1788256470780, |
| 4277 | + "playCount": 1 | ||
| 4059 | }, | 4278 | }, |
| 4060 | { | 4279 | { |
| 4061 | "id": "5d4f40bf0889", | 4280 | "id": "5d4f40bf0889", |
| @@ -4115,7 +4334,8 @@ | @@ -4115,7 +4334,8 @@ | ||
| 4115 | "likes": 0, | 4334 | "likes": 0, |
| 4116 | "createdAt": 1787397450973, | 4335 | "createdAt": 1787397450973, |
| 4117 | "promptEn": "a cat sitting on a windowsill", | 4336 | "promptEn": "a cat sitting on a windowsill", |
| 4118 | - "lastPlayedAt": 1788251736809 | 4337 | + "lastPlayedAt": 1788255000124, |
| 4338 | + "playCount": 1 | ||
| 4119 | }, | 4339 | }, |
| 4120 | { | 4340 | { |
| 4121 | "id": "580d1d722adc", | 4341 | "id": "580d1d722adc", |
| @@ -4130,7 +4350,8 @@ | @@ -4130,7 +4350,8 @@ | ||
| 4130 | "likes": 0, | 4350 | "likes": 0, |
| 4131 | "createdAt": 1787388090646, | 4351 | "createdAt": 1787388090646, |
| 4132 | "promptEn": "a cat sitting on a windowsill", | 4352 | "promptEn": "a cat sitting on a windowsill", |
| 4133 | - "lastPlayedAt": 1788254205967 | 4353 | + "lastPlayedAt": 1788256442760, |
| 4354 | + "playCount": 1 | ||
| 4134 | }, | 4355 | }, |
| 4135 | { | 4356 | { |
| 4136 | "id": "c551457bc55e", | 4357 | "id": "c551457bc55e", |
| @@ -4144,8 +4365,9 @@ | @@ -4144,8 +4365,9 @@ | ||
| 4144 | "partition": "text", | 4365 | "partition": "text", |
| 4145 | "likes": 0, | 4366 | "likes": 0, |
| 4146 | "createdAt": 1787386316175, | 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 | "id": "f9b68e5daaed", | 4373 | "id": "f9b68e5daaed", |
| @@ -4190,7 +4412,8 @@ | @@ -4190,7 +4412,8 @@ | ||
| 4190 | "likes": 0, | 4412 | "likes": 0, |
| 4191 | "createdAt": 1787383911831, | 4413 | "createdAt": 1787383911831, |
| 4192 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", | 4414 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 4193 | - "lastPlayedAt": 1788245394359 | 4415 | + "lastPlayedAt": 1788255700490, |
| 4416 | + "playCount": 1 | ||
| 4194 | }, | 4417 | }, |
| 4195 | { | 4418 | { |
| 4196 | "id": "9cba879e263d", | 4419 | "id": "9cba879e263d", |
| @@ -4205,7 +4428,8 @@ | @@ -4205,7 +4428,8 @@ | ||
| 4205 | "likes": 0, | 4428 | "likes": 0, |
| 4206 | "createdAt": 1787375413935, | 4429 | "createdAt": 1787375413935, |
| 4207 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", | 4430 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 4208 | - "lastPlayedAt": 1788252421136 | 4431 | + "lastPlayedAt": 1788255252253, |
| 4432 | + "playCount": 1 | ||
| 4209 | }, | 4433 | }, |
| 4210 | { | 4434 | { |
| 4211 | "id": "10112fb3c1fd", | 4435 | "id": "10112fb3c1fd", |
| @@ -4220,7 +4444,8 @@ | @@ -4220,7 +4444,8 @@ | ||
| 4220 | "likes": 0, | 4444 | "likes": 0, |
| 4221 | "createdAt": 1787375413623, | 4445 | "createdAt": 1787375413623, |
| 4222 | "promptEn": "golden portal opens, man in green jacket throws a glowing spear", | 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 | "id": "78e698c924b1", | 4451 | "id": "78e698c924b1", |
| @@ -4235,7 +4460,8 @@ | @@ -4235,7 +4460,8 @@ | ||
| 4235 | "likes": 0, | 4460 | "likes": 0, |
| 4236 | "createdAt": 1787375413203, | 4461 | "createdAt": 1787375413203, |
| 4237 | "promptEn": "golden portal opens, man in green jacket throws a glowing spear", | 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 | "id": "219ed88c3ea7", | 4467 | "id": "219ed88c3ea7", |
| @@ -4250,7 +4476,8 @@ | @@ -4250,7 +4476,8 @@ | ||
| 4250 | "likes": 0, | 4476 | "likes": 0, |
| 4251 | "createdAt": 1787375412946, | 4477 | "createdAt": 1787375412946, |
| 4252 | "promptEn": "golden portal opens, man in green jacket throws a glowing spear", | 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 | "id": "a72236902363", | 4483 | "id": "a72236902363", |
| @@ -4280,7 +4507,8 @@ | @@ -4280,7 +4507,8 @@ | ||
| 4280 | "likes": 0, | 4507 | "likes": 0, |
| 4281 | "createdAt": 1787367454065, | 4508 | "createdAt": 1787367454065, |
| 4282 | "promptEn": "golden portal opens, man in green jacket throws a glowing spear", | 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 | "id": "e6c241be377f", | 4514 | "id": "e6c241be377f", |
| @@ -4310,7 +4538,8 @@ | @@ -4310,7 +4538,8 @@ | ||
| 4310 | "likes": 0, | 4538 | "likes": 0, |
| 4311 | "createdAt": 1787363956909, | 4539 | "createdAt": 1787363956909, |
| 4312 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", | 4540 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 4313 | - "lastPlayedAt": 1788254362044 | 4541 | + "lastPlayedAt": 1788256296687, |
| 4542 | + "playCount": 1 | ||
| 4314 | }, | 4543 | }, |
| 4315 | { | 4544 | { |
| 4316 | "id": "5692965402f5", | 4545 | "id": "5692965402f5", |
| @@ -4325,7 +4554,8 @@ | @@ -4325,7 +4554,8 @@ | ||
| 4325 | "likes": 0, | 4554 | "likes": 0, |
| 4326 | "createdAt": 1787332996051, | 4555 | "createdAt": 1787332996051, |
| 4327 | "promptEn": "golden portal opens, man in green jacket throws a glowing spear", | 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 | "id": "bf7d973d02a3", | 4561 | "id": "bf7d973d02a3", |
| @@ -4340,7 +4570,8 @@ | @@ -4340,7 +4570,8 @@ | ||
| 4340 | "likes": 0, | 4570 | "likes": 0, |
| 4341 | "createdAt": 1787332047061, | 4571 | "createdAt": 1787332047061, |
| 4342 | "promptEn": "golden portal opens, man in green jacket throws a glowing spear", | 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 | "id": "a5688d8f5db3", | 4577 | "id": "a5688d8f5db3", |
| @@ -4355,7 +4586,8 @@ | @@ -4355,7 +4586,8 @@ | ||
| 4355 | "likes": 0, | 4586 | "likes": 0, |
| 4356 | "createdAt": 1787330101793, | 4587 | "createdAt": 1787330101793, |
| 4357 | "promptEn": "a red apple on a wooden table, cinematic lighting", | 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 | "id": "0024d3c2d4cb", | 4593 | "id": "0024d3c2d4cb", |
| @@ -4370,7 +4602,8 @@ | @@ -4370,7 +4602,8 @@ | ||
| 4370 | "likes": 0, | 4602 | "likes": 0, |
| 4371 | "createdAt": 1787326019663, | 4603 | "createdAt": 1787326019663, |
| 4372 | "promptEn": "misty Jiangnan old town at dawn, woman walking with an oil-paper umbrella", | 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 | "id": "ab42a6fba515", | 4609 | "id": "ab42a6fba515", |
| @@ -4400,7 +4633,8 @@ | @@ -4400,7 +4633,8 @@ | ||
| 4400 | "likes": 0, | 4633 | "likes": 0, |
| 4401 | "createdAt": 1787309864037, | 4634 | "createdAt": 1787309864037, |
| 4402 | "promptEn": "transparent gaming mouse product film, blue and orange lighting", | 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 | "id": "073f5df6427a", | 4640 | "id": "073f5df6427a", |
| @@ -4415,7 +4649,8 @@ | @@ -4415,7 +4649,8 @@ | ||
| 4415 | "likes": 0, | 4649 | "likes": 0, |
| 4416 | "createdAt": 1787305544815, | 4650 | "createdAt": 1787305544815, |
| 4417 | "promptEn": "transparent gaming mouse product film, blue and orange lighting", | 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 | "id": "e23b04ac2c78", | 4656 | "id": "e23b04ac2c78", |
| @@ -4430,7 +4665,8 @@ | @@ -4430,7 +4665,8 @@ | ||
| 4430 | "likes": 0, | 4665 | "likes": 0, |
| 4431 | "createdAt": 1787304875681, | 4666 | "createdAt": 1787304875681, |
| 4432 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", | 4667 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 4433 | - "lastPlayedAt": 1788253051367 | 4668 | + "lastPlayedAt": 1788254820032, |
| 4669 | + "playCount": 1 | ||
| 4434 | }, | 4670 | }, |
| 4435 | { | 4671 | { |
| 4436 | "id": "c84bc1c7bfa0", | 4672 | "id": "c84bc1c7bfa0", |
| @@ -4445,7 +4681,8 @@ | @@ -4445,7 +4681,8 @@ | ||
| 4445 | "likes": 0, | 4681 | "likes": 0, |
| 4446 | "createdAt": 1787304031214, | 4682 | "createdAt": 1787304031214, |
| 4447 | "promptEn": "constable asks how she's sure it's not human, she says a person would make a sound", | 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 | "id": "23d2fd81eb4d", | 4688 | "id": "23d2fd81eb4d", |
| @@ -4475,7 +4712,8 @@ | @@ -4475,7 +4712,8 @@ | ||
| 4475 | "likes": 0, | 4712 | "likes": 0, |
| 4476 | "createdAt": 1787290119529, | 4713 | "createdAt": 1787290119529, |
| 4477 | "promptEn": "misty Jiangnan old town at dawn, woman walking with an oil-paper umbrella", | 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 | "id": "06bb43196c46", | 4719 | "id": "06bb43196c46", |
| @@ -4490,7 +4728,8 @@ | @@ -4490,7 +4728,8 @@ | ||
| 4490 | "likes": 0, | 4728 | "likes": 0, |
| 4491 | "createdAt": 1787290119114, | 4729 | "createdAt": 1787290119114, |
| 4492 | "promptEn": "misty Jiangnan old town at dawn, woman walking with an oil-paper umbrella", | 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 | "id": "0f22388f7847", | 4735 | "id": "0f22388f7847", |
| @@ -4564,8 +4803,9 @@ | @@ -4564,8 +4803,9 @@ | ||
| 4564 | "partition": "fl2va", | 4803 | "partition": "fl2va", |
| 4565 | "likes": 0, | 4804 | "likes": 0, |
| 4566 | "createdAt": 1787224701504, | 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 | "id": "f78ebe4c01c8", | 4811 | "id": "f78ebe4c01c8", |
| @@ -4595,6 +4835,7 @@ | @@ -4595,6 +4835,7 @@ | ||
| 4595 | "likes": 0, | 4835 | "likes": 0, |
| 4596 | "createdAt": 1787220579189, | 4836 | "createdAt": 1787220579189, |
| 4597 | "promptEn": "gothic castle at night, vampire noble carries a princess, rose petals falling", | 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 | \ No newline at end of file | 4842 | \ No newline at end of file |
server.js
| @@ -129,11 +129,33 @@ function glmChat(messages) { | @@ -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 | // Best-effort — a viewer's short chat line ("一只猫跳舞") makes for a weak | 160 | // Best-effort — a viewer's short chat line ("一只猫跳舞") makes for a weak |
| 139 | // H3 prompt on its own. Never let a GLM outage or slow response block | 161 | // H3 prompt on its own. Never let a GLM outage or slow response block |