diff --git a/library.json b/library.json index aa7e699..f1af671 100644 --- a/library.json +++ b/library.json @@ -385,7 +385,8 @@ "likes": 0, "createdAt": 1788188423583, "promptEn": "woman in white scared, dodging", - "lastPlayedAt": 1788253953855 + "lastPlayedAt": 1788256884709, + "playCount": 1 }, { "id": "1597db4be561", @@ -415,8 +416,9 @@ "partition": "ref2va", "likes": 0, "createdAt": 1788186218619, - "lastPlayedAt": 1788253885823, - "promptEn": "woman in white evading, scared" + "lastPlayedAt": 1788256608572, + "promptEn": "woman in white evading, scared", + "playCount": 1 }, { "id": "6cb4eb75ee09", @@ -447,7 +449,8 @@ "likes": 0, "createdAt": 1788181569491, "promptEn": "a massive warship glides through the stars, the bridge suddenly shakes hard", - "lastPlayedAt": 1788254390052 + "lastPlayedAt": 1788256956743, + "playCount": 1 }, { "id": "44bf5b969e94", @@ -698,7 +701,8 @@ "likes": 0, "createdAt": 1788039783070, "promptEn": "silver-haired idol backstage, red light pulsing, offering a blood-red contract", - "lastPlayedAt": 1788251726803 + "lastPlayedAt": 1788256740633, + "playCount": 1 }, { "id": "75bdbacd3012", @@ -713,7 +717,8 @@ "likes": 0, "createdAt": 1788039782992, "promptEn": "silver-haired idol backstage, red light pulsing, offering a blood-red contract", - "lastPlayedAt": 1788250966325 + "lastPlayedAt": 1788256952747, + "playCount": 1 }, { "id": "69e75a6b3997", @@ -728,7 +733,8 @@ "likes": 0, "createdAt": 1788027833836, "promptEn": "wounded hunter at a ruined subway dungeon entrance, lightning flickers, pointing into the tunnel", - "lastPlayedAt": 1788254268003 + "lastPlayedAt": 1788256770648, + "playCount": 1 }, { "id": "cde399c27dc4", @@ -867,7 +873,8 @@ "likes": 0, "createdAt": 1788025642732, "promptEn": "Vecna reaching out a claw in his lair in the Upside Down, red lightning", - "lastPlayedAt": 1788254043902 + "lastPlayedAt": 1788256948747, + "playCount": 1 }, { "id": "00862f966c3f", @@ -1072,7 +1079,8 @@ "likes": 0, "createdAt": 1788019483999, "promptEn": "constable rushes in, glances back at the door, then talks to the woman behind the screen", - "lastPlayedAt": 1788252139001 + "lastPlayedAt": 1788256844693, + "playCount": 1 }, { "id": "998e3e6f9a2f", @@ -1541,7 +1549,8 @@ "likes": 0, "createdAt": 1788010775613, "promptEn": "facing Voldemort, stayed passive and got cornered", - "lastPlayedAt": 1788254061908 + "lastPlayedAt": 1788256874709, + "playCount": 1 }, { "id": "795842efa4a1", @@ -1571,7 +1580,8 @@ "likes": 0, "createdAt": 1788010299688, "promptEn": "facing Thanos, exploiting a flaw to counter him", - "lastPlayedAt": 1788251102950 + "lastPlayedAt": 1788256914727, + "playCount": 1 }, { "id": "469294a4ed09", @@ -1586,7 +1596,8 @@ "likes": 0, "createdAt": 1788010062535, "promptEn": "facing Thanos, held the goal but paid a price", - "lastPlayedAt": 1788254091920 + "lastPlayedAt": 1788256578563, + "playCount": 1 }, { "id": "324b84ebc607", @@ -1633,7 +1644,8 @@ "likes": 0, "createdAt": 1788009346020, "promptEn": "battlefield on Titan, the last chance to stop Thanos", - "lastPlayedAt": 1788252467159 + "lastPlayedAt": 1788256852697, + "playCount": 1 }, { "id": "66a96c6bc7cb", @@ -1725,7 +1737,8 @@ "likes": 0, "createdAt": 1788007915610, "promptEn": "in the ruined city, exploiting a flaw to counter Tomura", - "lastPlayedAt": 1788252961326 + "lastPlayedAt": 1788256800671, + "playCount": 1 }, { "id": "f67685cd6862", @@ -1771,7 +1784,8 @@ "likes": 0, "createdAt": 1788007201908, "promptEn": "breaking into the palace, Neferpitou stalling to protect the king", - "lastPlayedAt": 1788254139946 + "lastPlayedAt": 1788256816681, + "playCount": 1 }, { "id": "628026375795", @@ -1880,7 +1894,8 @@ "likes": 0, "createdAt": 1788005541640, "promptEn": "facing Frieza, went in head-on and got seen through", - "lastPlayedAt": 1788253741753 + "lastPlayedAt": 1788256826688, + "playCount": 1 }, { "id": "574b47b00316", @@ -2160,7 +2175,8 @@ "likes": 0, "createdAt": 1788001428705, "promptEn": "in the ruins of Konoha, exploiting a flaw to counter Pain", - "lastPlayedAt": 1788253511622 + "lastPlayedAt": 1788256774651, + "playCount": 1 }, { "id": "e486fab4c24d", @@ -2207,7 +2223,8 @@ "likes": 0, "createdAt": 1788000812932, "promptEn": "facing Pain, went in head-on and got seen through", - "lastPlayedAt": 1788253905836 + "lastPlayedAt": 1788256552547, + "playCount": 1 }, { "id": "f691ac021df0", @@ -2318,7 +2335,8 @@ "likes": 0, "createdAt": 1787999397097, "promptEn": "facing Sakazuki, stayed passive and got cornered", - "lastPlayedAt": 1788253761764 + "lastPlayedAt": 1788256856695, + "playCount": 1 }, { "id": "88923aaf57f3", @@ -2412,7 +2430,8 @@ "likes": 0, "createdAt": 1787831362083, "promptEn": "constable promises to get her out safely if she trusts him", - "lastPlayedAt": 1788253719743 + "lastPlayedAt": 1788256588563, + "playCount": 1 }, { "id": "5ede61c01b22", @@ -2506,7 +2525,8 @@ "likes": 0, "createdAt": 1787738044140, "promptEn": "constable carefully checks the door and window latches, she watches from behind the screen", - "lastPlayedAt": 1788252857278 + "lastPlayedAt": 1788256778656, + "playCount": 1 }, { "id": "cfbef6e37ae4", @@ -2616,7 +2636,8 @@ "likes": 0, "createdAt": 1787708686397, "promptEn": "constable accepts the invitation, moves to sit on a stool closer to the screen", - "lastPlayedAt": 1788254145947 + "lastPlayedAt": 1788256558556, + "playCount": 1 }, { "id": "ad611bcbd06b", @@ -2854,7 +2875,8 @@ "likes": 0, "createdAt": 1787674737743, "promptEn": "constable slowly looks around the room, discovers her watching him motionlessly through the screen", - "lastPlayedAt": 1788253445593 + "lastPlayedAt": 1788256932741, + "playCount": 1 }, { "id": "c74118d0413f", @@ -2933,7 +2955,8 @@ "likes": 0, "createdAt": 1787674660698, "promptEn": "constable smashes the bronze mirror on the table, it shatters, she watches from behind the screen", - "lastPlayedAt": 1788248649121 + "lastPlayedAt": 1788256696614, + "playCount": 1 }, { "id": "ed77b83851a2", @@ -2964,7 +2987,8 @@ "likes": 0, "createdAt": 1787674642026, "promptEn": "constable enters from the side and sits down on a stool by the lamp to rest", - "lastPlayedAt": 1788251330505 + "lastPlayedAt": 1788256726628, + "playCount": 1 }, { "id": "fe7ffbe65653", @@ -3120,8 +3144,9 @@ "partition": "ref2va", "likes": 0, "createdAt": 1787652321725, - "lastPlayedAt": 1788250646200, - "promptEn": "constable talking to the woman through the screen" + "lastPlayedAt": 1788256572557, + "promptEn": "constable talking to the woman through the screen", + "playCount": 1 }, { "id": "31ade4712105", @@ -3278,7 +3303,8 @@ "likes": 0, "createdAt": 1787615240988, "promptEn": "clay fox sprints off a cliff, slow-mo leap over the canyon", - "lastPlayedAt": 1788251894893 + "lastPlayedAt": 1788256758642, + "playCount": 1 }, { "id": "db125dc6a831", @@ -3308,7 +3334,8 @@ "likes": 0, "createdAt": 1787588547172, "promptEn": "product website scrolling down with flashy effects", - "lastPlayedAt": 1788251228453 + "lastPlayedAt": 1788256804674, + "playCount": 1 }, { "id": "2e18bf09b46a", @@ -3432,7 +3459,8 @@ "likes": 0, "createdAt": 1787588541726, "promptEn": "woman opens the trunk on a desert road, takes out a bag", - "lastPlayedAt": 1788254335882 + "lastPlayedAt": 1788256832684, + "playCount": 1 }, { "id": "97846542ab09", @@ -3495,7 +3523,8 @@ "likes": 0, "createdAt": 1787588114381, "promptEn": "underground rap duo freestyling at the camera", - "lastPlayedAt": 1788253391568 + "lastPlayedAt": 1788256628586, + "playCount": 1 }, { "id": "58a439a93c02", @@ -3589,7 +3618,8 @@ "likes": 0, "createdAt": 1787576798050, "promptEn": "man says he's willing to give her his heart", - "lastPlayedAt": 1788252199033 + "lastPlayedAt": 1788256716625, + "playCount": 1 }, { "id": "57f2c6fa351d", @@ -3635,8 +3665,9 @@ "partition": "text", "likes": 0, "createdAt": 1787576358982, - "lastPlayedAt": 1788253923842, - "promptEn": "man apologizes, says something outside was chasing him" + "lastPlayedAt": 1788256794665, + "promptEn": "man apologizes, says something outside was chasing him", + "playCount": 1 }, { "id": "9fca8054035f", @@ -3681,7 +3712,8 @@ "likes": 0, "createdAt": 1787575164928, "promptEn": "man apologizes, says something outside was chasing him", - "lastPlayedAt": 1788249631916 + "lastPlayedAt": 1788256880712, + "playCount": 1 }, { "id": "250fad90393c", @@ -3918,7 +3950,8 @@ "likes": 0, "createdAt": 1787470100107, "promptEn": "MiniMax H3 brand motion graphics, a dot growing into a network", - "lastPlayedAt": 1788248973345 + "lastPlayedAt": 1788256862702, + "playCount": 1 }, { "id": "194e9bd77da6", @@ -3963,7 +3996,8 @@ "likes": 0, "createdAt": 1787470099306, "promptEn": "late-night laundromat footage mixed with glowing hand-drawn animation", - "lastPlayedAt": 1788254294016 + "lastPlayedAt": 1788256744635, + "playCount": 1 }, { "id": "c0e23beb4132", @@ -4073,7 +4107,8 @@ "likes": 0, "createdAt": 1787450754171, "promptEn": "protagonist leaps across rooftops fleeing pursuers", - "lastPlayedAt": 1788253279519 + "lastPlayedAt": 1788256646594, + "playCount": 1 }, { "id": "fd0183c54763", @@ -4289,7 +4324,8 @@ "likes": 0, "createdAt": 1787412952086, "promptEn": "protagonist leaps across rooftops fleeing pursuers", - "lastPlayedAt": 1788253367553 + "lastPlayedAt": 1788256920735, + "playCount": 1 }, { "id": "59fd7a087f5b", @@ -4492,7 +4528,8 @@ "likes": 0, "createdAt": 1787367454249, "promptEn": "golden portal opens, man in green jacket throws a glowing spear", - "lastPlayedAt": 1788252831263 + "lastPlayedAt": 1788256850694, + "playCount": 1 }, { "id": "c48af2f34e62", @@ -4523,7 +4560,8 @@ "likes": 0, "createdAt": 1787367453839, "promptEn": "golden portal opens, man in green jacket throws a glowing spear", - "lastPlayedAt": 1788254041895 + "lastPlayedAt": 1788256642593, + "playCount": 1 }, { "id": "8402adae59dc", @@ -4697,7 +4735,8 @@ "likes": 0, "createdAt": 1787304031103, "promptEn": "constable asks how she's sure it's not human, she says a person would make a sound", - "lastPlayedAt": 1788252124992 + "lastPlayedAt": 1788256900724, + "playCount": 1 }, { "id": "807e042dce0d", @@ -4759,7 +4798,8 @@ "likes": 0, "createdAt": 1787231456079, "promptEn": "constable burns the beauty portrait with the lamp, the door opens on its own", - "lastPlayedAt": 1788251682774 + "lastPlayedAt": 1788256546550, + "playCount": 1 }, { "id": "66158f543a20", @@ -4789,7 +4829,8 @@ "likes": 0, "createdAt": 1787225897650, "promptEn": "constable burns the beauty portrait with the lamp, the door opens on its own", - "lastPlayedAt": 1788254544113 + "lastPlayedAt": 1788256970757, + "playCount": 1 }, { "id": "ed3663dcda7f", @@ -4820,7 +4861,8 @@ "likes": 0, "createdAt": 1787224519456, "promptEn": "constable burns the beauty portrait with the lamp, the door opens on its own", - "lastPlayedAt": 1788252627218 + "lastPlayedAt": 1788256710623, + "playCount": 1 }, { "id": "a1cc621cc6b2", diff --git a/server.js b/server.js index 9e05a6b..f5f71ca 100644 --- a/server.js +++ b/server.js @@ -131,22 +131,22 @@ function glmChat(messages) { // Distilled from docs/h3skill.md (MiniMax's own H3 prompt-writing methodology) down to the one // path that applies here: T2VA (no reference images — every chat prompt is plain text) on a clip -// fixed at ~5s (H3_GEN_PARAMS.frames / FPS). At that length it's one continuous shot, never a -// multi-cut montage — the earlier version asked for "shot-by-shot" and reliably got 4-5 fake cuts -// with timestamps running out to 8-10s, which the model can't actually deliver in 5 seconds. +// fixed at ~10s (H3_GEN_PARAMS.frames / FPS). At that length it's one continuous shot, never a +// multi-cut montage — an earlier version asked for "shot-by-shot" and reliably got 4-5 fake cuts +// with timestamps running past the clip's own length, which the model can't actually deliver. const PROMPT_OPTIMIZE_SYSTEM = `You are writing H3 text-to-video generation prompts (T2VA mode — no reference images, pure text-to-video). Expand the user's short request (may be in Chinese or English) into the official H3 three-field format, in this exact order, using these exact field labels: integrated_multimodal_description: [Shot 1] one short style statement, e.g. "Live-action, cinematic." -Then describe, in one continuous unbroken shot (the clip is only about 5 seconds long — never split +Then describe, in one continuous unbroken shot (the clip is only about 10 seconds long — never split into multiple shots or write more than [Shot 1]): the setting, the subject's specific action, and ONE dominant camera movement using this vocabulary — Zoom In/Out, Push In/Pull Out, Pan Left/Right, Truck Left/Right, Tilt Up/Down, Pedestal Up/Down, Arc Shot, Tracking Shot, Static Shot, Shake Slightly/ Strongly, POV, Roll Clockwise/Counterclockwise — stated as type + amplitude (small/large) + speed (slow/fast). Describe light concretely: where it comes from, what it hits, what effect it creates. Never use hollow quality words alone (8K, HD, masterpiece, stunning, cinematic used alone, beautiful, -high quality) — replace them with what is actually visible. 40-70 English words. +high quality) — replace them with what is actually visible. 60-100 English words. overall_soundscape: 1-4 English sentences describing the ambient environmental sound the scene would naturally have. @@ -180,7 +180,7 @@ async function optimizePrompt(userPrompt) { // own past-entry trimming naturally handles a state file that's gone stale // (server was down long enough that every persisted entry is in the past). const FILLER_DURATION_MS = 30000; // keep the schedule filled at least this far ahead -const H3_GEN_PARAMS = { width: 480, height: 832, frames: 120, steps: 20, turbo: false, seed: 0 }; +const H3_GEN_PARAMS = { width: 480, height: 832, frames: 240, steps: 20, turbo: false, seed: 0 }; const FPS = 24; const initialLiveState = loadLiveState();