feat(web): 红果-style homepage + instant-play prebaked first acts
Rewrites all 64 homepage cards (32 男性向 + 32 女性向) as short-drama hook stories (战神归来 / 重生分手前夜 / 系统选妃 / 穿成乙游男配 / 末世异能 / 民国 谍战 / 修真渡劫 …) and regenerates each cover via FLUX in its assigned art style (12 styles spread across 64 cards) at 832×1024 ≈4:5. Click-to-play path: cards now jump straight to /play?card=<name> and hydrate Session from /home/firstact/<name>.json — the engine pipeline (Architect + Writer + CharacterDesigner + Painter) has been pre-run for 44/64 cards. The remaining 20 (m14/m29/f14..f31) are pending an LLM credit top-up; their clicks fall through to live /api/start for now. Runware-hosted first-scene images are downloaded into /home/firstscene/ and the JSONs are rewritten to point at the local webp, so click → first image is bounded by local-disk decode (~100ms) instead of CDN round-trip. Scripts: - scripts/generate-home-images.mjs — rewrites all 64 cover prompts, per-card styles baked into prompts, 832×1024 dims to match StoryCard aspect - scripts/prebake-firstacts.mjs — POST /api/start × 64 with concurrency 4, saves StartResponse to public/home/firstact/<name>.json - scripts/localize-firstact-images.mjs — downloads each prebaked imageUrl to public/home/firstscene/<name>.webp (q80, ≤1600px) and rewrites JSON README: adds Screenshots section (3×3 gallery) to README.md / README.zh-CN.md, 9 in-game shots compressed to docs/screenshots/*.webp (7.5MB → 680KB). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 159 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 87 KiB |
|
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 105 KiB |
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 118 KiB After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 110 KiB After Width: | Height: | Size: 85 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 109 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 102 KiB |
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 117 KiB |
|
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 67 KiB |
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 149 KiB |
|
Before Width: | Height: | Size: 118 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 133 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 102 KiB After Width: | Height: | Size: 174 KiB |
|
After Width: | Height: | Size: 109 KiB |
|
After Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 91 KiB After Width: | Height: | Size: 119 KiB |
|
Before Width: | Height: | Size: 89 KiB After Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 122 KiB |
|
Before Width: | Height: | Size: 110 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 54 KiB |
@@ -0,0 +1 @@
|
||||
{"sessionId":"s_1780390588623_46anec","scene":{"id":"scene_1780390628580_h42b","scenePrompt":"Wide establishing shot of a surreal digital landscape resembling a vast sheet of gridded draft paper. A colossal white eraser descends from the sky like a catastrophic meteor, casting a long, ominous shadow across the terrain. Pixelated mathematical formulas and geometric shapes are violently fracturing and collapsing into blocky debris. The atmosphere is tense and apocalyptic, rendered in a retro 16-bit pixel art style with a limited color palette. Vibrant cyan grid lines contrast against the stark white of the falling eraser. High-contrast lighting, dramatic shadows, geometric destruction, 16-bit aesthetic, vintage game graphics, no characters present.","beats":[{"id":"b1","narration":"耳边传来震耳欲聋的摩擦声,整片白色大地在剧烈颤抖。你抬头望去,一块遮天蔽日的白色矩形——橡皮擦,正带着毁灭的气息碾压而来。","next":{"type":"continue","nextBeatId":"b2"}},{"id":"b2","narration":"你身边的‘E=mc²’像素块瞬间粉碎成渣,逻辑正在被物理抹除。再慢一秒,你就会变成一堆毫无意义的石墨粉末。","speaker":"你","line":"开什么玩笑……我可是顶级黑客,怎么能死在这这种鬼地方!","next":{"type":"continue","nextBeatId":"b3"}},{"id":"b3","narration":"生死关头,你注意到左前方有一滩尚未干透的蓝黑色墨水渍,那里是规则混乱的盲区;而正上方,那双名为‘造物主’的巨大眼睛正透过镜片冷漠地注视着纸面。","speaker":"你","line":"拼了!到底是躲进阴影,还是赌她会停手?","next":{"type":"choice","choices":[{"id":"c1","label":"跳入深色墨水渍","effect":{"kind":"change-scene","nextSceneSeed":"墨水渍内部是混乱的16-bit废墟,你在这里遇到了那个自称‘黑影’的家伙"}},{"id":"c2","label":"拼成SOS求救","effect":{"kind":"change-scene","nextSceneSeed":"巨大的笔尖停在你面前,苏清月疑惑地靠近纸面,你第一次近距离看清这位造物主的脸"}}]}}],"entryBeatId":"b1","sceneKey":"draft-paper-grid-white","imageUuid":"95a0f0bb-961b-4e0c-9728-68f809c68619","imageUrl":"https://im.runware.ai/image/os/a05d22/ws/3/ii/95a0f0bb-961b-4e0c-9728-68f809c68619.png"},"imageUrl":"/home/firstscene/m27.webp","characters":[],"storyState":{"logline":"命悬一线的草稿纸火柴人,如何操纵现实世界的“造物主”,在被彻底抹除前逆天改命?","genreTags":"脑洞快穿 / 爽剧 / 元叙事 / 像素风生存","protagonist":"你曾是现实中被陷害的顶级黑客,意识意外坠入死对头女儿的草稿纸上。此刻你不仅失去了实体,还面临物理意义上的“抹除”。你必须利用16-bit世界的底层逻辑生存下去,并试图向纸外的现实世界复仇,你的软肋是只要纸张湿透,你的记忆就会永久溶解。","castNotes":"苏清月:手持画笔的“造物主”,看似清纯内向的艺术生,实则在草稿纸上发泄着极其阴暗的杀戮欲望;她是唯一能改写你命运的人。\n黑影:纸张折痕处生存的“涂鸦前辈”,性格乖张狡诈,曾多次从橡皮擦下逃生,他知道跳出这张纸的方法,但需要拿你的意识做交易。","synopsis":"你在死对头女儿的草稿纸上以火柴人身份苏醒,在橡皮擦的灭顶之灾中极限逃生。你意识到自己必须在被彻底抹除前,利用纸上的规则向外界传递信号。","openThreads":["导致你意识坠入草稿纸的幕后黑手身份","苏清月在草稿纸边缘画下的那些诡异血腥图案的含义"],"relationships":["苏清月:视你为随手涂鸦的造物主,目前尚未意识到你的自我意识"],"nextHook":"无论你选择躲藏还是求救,你都即将接触到这个纸面世界背后的第一个禁忌——苏清月的阴暗面。"},"cardName":"m27","cardTitle":"草稿纸里的我","cardGender":"男性向","worldSetting":"这是一款面向【男性向】观众的 AI 交互剧情游戏,整体走红果短视频式的强戏剧冲突与快速反转。\n剧情风格:多线转折。内容节奏:紧凑爽快。\n精选剧情《草稿纸里的我》的开场设定:睁眼发现自己是一张草稿纸上的火柴小人,住在 16-bit 的网格世界里。橡皮擦从天而降,正在抹掉这一行字——也包括我。\n请直接以此开场切入,给玩家强烈的代入感与爽点;后续分支保持短剧式的反转密度,让玩家每一次选择都能立刻看到回响。","styleGuide":"像素风格,复古游戏 16-bit 调色,方块化几何造型。","imageUrlRemote":"https://im.runware.ai/image/os/a05d22/ws/3/ii/95a0f0bb-961b-4e0c-9728-68f809c68619.png"}
|
||||
|
After Width: | Height: | Size: 272 KiB |
|
After Width: | Height: | Size: 93 KiB |
|
After Width: | Height: | Size: 164 KiB |
|
After Width: | Height: | Size: 93 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 83 KiB |
|
After Width: | Height: | Size: 136 KiB |
|
After Width: | Height: | Size: 253 KiB |
|
After Width: | Height: | Size: 121 KiB |
|
After Width: | Height: | Size: 103 KiB |
|
After Width: | Height: | Size: 230 KiB |
|
After Width: | Height: | Size: 175 KiB |
|
After Width: | Height: | Size: 127 KiB |
|
After Width: | Height: | Size: 138 KiB |
|
After Width: | Height: | Size: 163 KiB |
|
After Width: | Height: | Size: 270 KiB |
|
After Width: | Height: | Size: 296 KiB |
|
After Width: | Height: | Size: 121 KiB |
|
After Width: | Height: | Size: 126 KiB |
|
After Width: | Height: | Size: 198 KiB |
|
After Width: | Height: | Size: 148 KiB |
|
After Width: | Height: | Size: 243 KiB |
|
After Width: | Height: | Size: 199 KiB |
|
After Width: | Height: | Size: 210 KiB |