# README 图片：设计规范与制作流程

本目录生成仓库首页 `README.md` 用到的 8 张图，输出到 `.github/readme-lofi/`。这里记录风格规范、各张图的版式、动效、文案规矩和改图流程，供以后改图时对照。

这些是开发工具，不进 Skill 发布包；运行时仍然只用 Python 标准库。

## 1. 文件

| 文件 | 作用 |
|---|---|
| `source/bedroom.webp` | 用户提供的像素风黄昏卧室图（2000×778），所有图的素材来源 |
| `readme_overlay.py` | 生成首图 `hero.svg`：原图 + 标题 + 像素标语 + 动效 + 卖点条 + 三栏特性 |
| `overlay_fx.py` | 首图的动效图层（楼灯、霓虹、闹钟、屏幕、浮尘、音符）和标题、标语的时间轴 |
| `pxtext.py` | 像素中文字：用系统字体按 1 位点阵渲染，再合并成 SVG 方块路径 |
| `readme_px_room.py` | 早期手绘卧室首图的脚本。现在只借用其中的卖点条和三栏特性代码（`readme_overlay.py` 截取并执行），单独运行时输出到 `reports/tmp/readme_art/`，不会覆盖正式图 |
| `lofi_set.py` | 生成其余 7 张：5 张分区横幅、软木板世界墙 `worlds.svg`、磁带架 `inventory.svg` |
| `pixkit.py` | 像素画布、抖动、渐变、SVG 外壳等公共工具 |

`lofi_set.py` 里的 `v_proof`、`v_why` 等函数是旧版手绘横幅插画，现在的横幅改用原图局部，这些函数已不调用。

## 2. 重新生成

需要 Python 3.10+ 和 Pillow（只在开发机上用），字体用 Windows 自带的微软雅黑粗体 `msyhbd.ttc`。

```bash
export PYTHONPYCACHEPREFIX=.pycache PYTHONIOENCODING=utf-8
python tools/readme_art/readme_overlay.py
python tools/readme_art/lofi_set.py
```

两个脚本的输出是确定的（随机数都用固定种子）。改脚本之前先跑一遍，用 `git status .github/readme-lofi` 确认没有差异，再动手改。

## 3. 总体原则

- **原图只裁不改**：用户的卧室图原样嵌入（base64 webp）。字、光、动效都是叠在上面的 SVG 图层。横幅和磁带架的窗景是原图裁出来的局部，裁片用无损 webp 编码，并用 `image-rendering:pixelated` 保持像素锐利。
- **一套配色**：所有图共用首图的“紫光 + 灰字”配色，不再出现金、黄、青这类高饱和色。
- **像素一致**：线条、分隔线都用 2px 像素点阵，不用平滑细线。
- **动效克制**：只用 SMIL（`<animate>`、`<animateTransform>`），因为 GitHub 用 `<img>` 显示 SVG 时只有 SMIL 能播。循环要慢、彼此错开，不能大面积闪烁。
- **单张体积**：首图约 300 KB，其余每张 70–130 KB，全套约 1 MB。

## 4. 配色

| 用途 | 颜色 |
|---|---|
| 大标题字芯 | `#ecebef` |
| 大标题描边与光晕 | `#a29dab` |
| 大标题投影（右下偏移约 size/16 像素） | `#4e4a56` |
| 副标题 | `#c4bfcc` |
| 紫光（氛围光、18+ 徽章） | `#a874ff` |
| 点阵线渐变 | `#a874ff` → `#ff6fae` → `#a874ff` |
| 串灯 | `#c9a2ff`、`#ff8fc4`、`#e9dcff` |
| 墙面 | `#2d2131` / `#302434` 竖条纹 |
| 软木板分类条（偏灰紫） | `#8c7a9e`、`#9a7394`、`#6f78a0`、`#8579b0`、`#76708e` |
| 磁带外壳（低饱和） | `#8e5f78`、`#4f6f80`、`#8a7550`、`#6a6290`、`#87574f`、`#5d7258`、`#82607e`、`#55628a`、`#8a6a58`、`#56786f` |
| 磁带标签 | 底 `#221c28`，数字白色，说明 `#c4bfcc` |

首图卖点条：18+ 徽章与边框为紫色，“尺度全开”等字为浅灰 `#ebe8ef`，光晕灰 `#a39dad`，分隔圆点 `#c4bfcc`；三栏图标整体透明度 0.8。

## 5. 字体

- 标题与正文用系统无衬线字体栈：`-apple-system, Segoe UI, PingFang SC, Microsoft YaHei`，字重 800。
- 首图英文名 `ADULT TENSION` 用 Arial Black，54px，黑字 `#0b0710` 配浅粉描边 `#ffe3f0`（5px，描边在下）。
- 首图标语是“漫画像素字”：微软雅黑粗体 14px，1 位点阵渲染后放大 2 倍，白字，只加柔和阴影，不加描边（描边版被否掉了）。

## 6. 各图版式

### 首图 `hero.svg`（1280×710）

- 上部是原图，缩放到 1280 宽。
- 人物右侧的窗上是黑色 `ADULT TENSION`，两行居中，x≈1300×缩放比。
- 人物左侧床头上方是两行像素标语“专为高张力、强连续性 / 成人互动叙事打造”，第二行缩进 1 字。
- 图下是卖点条：顶边是 2px 紫粉点阵线（下面两行逐级变淡的抖动点），右侧有点阵分隔线，每 7 秒一道淡光扫过。
- 卖点条下方是三栏特性：活人感 NPC、数十个深度世界、自运行状态机，分隔线也是点阵。

### 分区横幅 `section-*.svg`（1200×176）

- 左侧 440px 是原图局部，从 72% 处开始向右淡出到墙面。
- 右侧是标题（46px）和副标题（20px），都右对齐，距右边约 48px。
- 背后有一团淡紫光，顶边是点阵线加一道每 6 秒扫过的高光，五张错开起点。所有图都不挂串灯（用户 2026-10-04 要求去掉）。

| 横幅 | 标题 / 副标题 | 原图裁切框 | 画面 |
|---|---|---|---|
| `section-worlds` | 内置世界库 / 跨时代独立世界框架和上千项素材 | (990,0,1390,168) | 窗外城市 |
| `section-proof` | 体验切片 / 真实会话交付实录 | (1180,222,1490,352) | 显示器 |
| `section-why` | 为什么不会崩盘 / 模型写故事，本地引擎守事实 | (70,300,470,468) | 闹钟和书桌 |
| `section-start` | 怎么开始 / 不用记语法，直接说大白话 | (610,190,1050,375) | 抱吉他的人物 |
| `section-install` | 安装 / 只需交给 AI 操作，原生 SKILL | (1440,280,1800,431) | 笔记本 |

### 世界墙 `worlds.svg`（1200×888）

- 标题“数十个世界”居中，副标题“选一个直接开局，或者说‘自定义世界’当场写一个”。
- 软木板分五栏：历史风云、都市暗流、当代市井、近未来、异界幻想。每栏是一张分类条加若干便签。
- 25 个世界全部是正式发布，便签都贴粉色“已开放”角标；图例只有一条“全部已开放，可直接开局”。

### 世界库合图 `world-library.svg`（1200×1576）

README 实际用的是这张：`section-worlds`、`worlds`、`inventory` 三张从上到下拼成一张，共用一面墙、一个圆角外框和一层暗角；横幅左侧的原图裁片在底边 60px 内淡入墙面，所以三段之间没有缝。三张单图仍会生成，只作为拼图的零件。

### 磁带架 `inventory.svg`（1200×512）

- 标题“两千余项素材”左对齐，副标题“地点、人物、钩子和规矩，每次开局都从同一个世界里组合”。
- 两层木架，每层 5 盒磁带，标签上是素材数量和类别。
- 右上角的窗景是原图裁片 (1410,0,1710,95)。

## 7. 动效

首图的标题和标语共用 16 秒一轮：

| 元素 | 动作 |
|---|---|
| ADULT TENSION | 0.3 秒起逐字点亮（每字间隔 0.09 秒），约 9 秒时第 3、10 个字母闪一下，15.6 秒全部暗回 0.15 |
| 像素标语 | 2 秒起逐字打出（每字 0.12 秒），15.6 秒清空 |
| 窗外楼灯 | 约 30 处亮块随机明灭 |
| 霓虹招牌 | 5 处光晕呼吸，偶尔断电闪一下 |
| 闹钟 | 秒位 10 秒一轮、十位 60 秒一轮，冒号闪烁 |
| 显示器 / 笔记本 | 显示器微光起伏加扫描线；笔记本屏幕上 12 根柱子上下跳 |
| 浮尘、音符 | 16 粒细尘漂浮；吉他上飘出 3 个像素音符 |
| 三栏图标 | NPC 4.6 秒眨一次眼，地球 3.2 秒转一圈（4 帧），齿轮 12 秒转一圈 |

其余图：标题每 6 秒偶尔闪一下（降到 0.55 再回来）；点阵线上有高光扫过；世界墙的图钉微光呼吸；磁带轮转动。

已知问题：不播动画的地方（例如部分 Markdown 预览器），首图会停在第一帧，标题只有 0.15 的亮度，标语看不见。修法是把默认状态改成“全亮”，动画从全亮开始暗下再点亮。

## 8. 文案规矩

- 世界数量写“数十个世界”，不写具体数字。
- 不写“破甲”一类说法。
- 素材数量都是下限（写成“160+”这类）。
- 只引用真实试玩记录里的原话。
- 图里出现的菜单项、命令必须是真实存在的命令。

## 9. 改图流程

1. 改脚本，跑生成命令。
2. 把图复制到 `reports/tmp/` 下的临时页面，起本地静态服务器，在浏览器里逐张查看，必要时放大细节。看完删掉临时页面。
3. 整页效果用审阅稿（模拟 GitHub README 的 HTML 页面）给用户看，用户确认后再改 `README.md`。
4. 提交前先扫描密钥；推送前扫描全部历史。每次推送都要用户明确同意。

## 10. 版权提醒

原图显示器和墙上海报里的角色像同人图，首图和“体验切片”横幅都能看到。公开使用前要确认使用权，没有的话就换掉或打码。
