dsh-pighub 0.0.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +76 -0
- package/README.md +71 -35
- package/assets/ATTRIBUTION.md +27 -0
- package/assets/img/pig-1131.gif +0 -0
- package/assets/img/pig-1300.png +0 -0
- package/assets/img/pig-1354.png +0 -0
- package/assets/img/pig-1355.svg +1 -0
- package/assets/img/pig-1357.png +0 -0
- package/assets/img/pig-1358.png +0 -0
- package/assets/img/pig-1360.png +0 -0
- package/assets/img/pig-1361.svg +1 -0
- package/assets/manifest.json +239 -0
- package/lib/assets.js +77 -0
- package/lib/client.js +1052 -0
- package/lib/imaging.js +448 -0
- package/lib/index.js +258 -51
- package/lib/store.js +285 -0
- package/package.json +33 -6
- package/scripts/check-version.mjs +27 -0
- package/test/client.test.mjs +394 -0
- package/test/host.test.mjs +152 -0
- package/test/imaging.test.mjs +102 -0
- package/test/smoke.mjs +113 -56
- package/test/store.test.mjs +152 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
本项目遵循 [Semantic Versioning](https://semver.org/lang/zh-CN/);每条记录只写「对使用者可见的变化」,
|
|
4
|
+
内部重构不单列。README 只描述项目整体,**版本相关内容一律记在这里**。
|
|
5
|
+
|
|
6
|
+
## [0.3.0] — 2026-11-12(未发布)
|
|
7
|
+
|
|
8
|
+
### Changed
|
|
9
|
+
|
|
10
|
+
- **素材改为构建期处理好、随包分发**:去白底、裁到猪身、矢量化都在 `npm run assets:build` 完成,产物是 `assets/img/*.png|svg`;运行时**不再访问素材库、不做任何图像计算**(去掉了图片代理与浏览器内的 canvas 处理)。
|
|
11
|
+
- 新增 `assets/ATTRIBUTION.md`:保留来源与许可说明,但运行时不再链接素材库。
|
|
12
|
+
- 数据目录精简为 `state.json` + `prefs.json`(不再缓存上游目录)。
|
|
13
|
+
- 素材量:6 张(PNG 4 / SVG 2),合计约 860 KB,最长边 ≤ 512。
|
|
14
|
+
|
|
15
|
+
### Removed
|
|
16
|
+
|
|
17
|
+
- 图片代理 `GET /pighub/image` 与浏览器侧的去白/描摹管线(搬进 `lib/imaging.js`,只在构建期使用)。
|
|
18
|
+
|
|
19
|
+
## [0.2.0] — 2026-11-12(未发布)
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
|
|
23
|
+
- **冻结素材库**:`assets/manifest.json` 带 `assetVersion` 与每张源图的 sha256/bytes;抽猪池只认它,实时目录降级为「下一版候选池」。
|
|
24
|
+
- **逐图判定**:`assets/judgements.json` 给每张候选定义 `kind`(`live`/`dead`)、定制裁切框、去白阈值与判定理由;构建脚本强制一一对应,缺一条或多一条都失败。
|
|
25
|
+
- **死猪 / 活猪**:死猪完全静止、只能由用户拖动、不响应点击;活猪游走、发呆、点击有弹性回弹;作为桌宠时同样遵守。
|
|
26
|
+
- **矢量图化**:逐图判定 `vector=true` 的图会被描摹成自包含 SVG(量化 → marching squares → Douglas–Peucker → path),以 `data:image/svg+xml` 交给 `<img>`,任意放大都不模糊;场景/照片类整图保留位图(描摹会更脏)。
|
|
27
|
+
- **去白底透明**:Host 半新增同源图片代理 `GET /pighub/image?src=...`(白名单主机、限 8 MB、不落盘),浏览器用 canvas 漫水填充把与边框连通的白抠成透明;裁切与阈值逐图不同。
|
|
28
|
+
- **设置按钮**(面板整体右上角):星级显示三档(关闭 / 默认 5 秒 / 常驻)、素材库版本与来源、下一版候选池规模、数据目录。
|
|
29
|
+
- 多来源候选池:实时接口 + 开源镜像(GitHub 目录),按文件名合并去重。
|
|
30
|
+
- **抽取动画**:从「今日猪猪」按钮**弹出**(缩放 + 轻微回弹 + 9 颗火花),随后**旋转 720° 收进猪圈**,落点取这只猪真实的 DOM 中心(实测偏差 0 px);飞行期间真正的猪先隐藏,落定后出现。
|
|
31
|
+
|
|
32
|
+
### Changed
|
|
33
|
+
|
|
34
|
+
- **跟随亮/暗色主题**:面板、清单、弹层、桌宠与动效的全部颜色改为 DSH 主题令牌(`--dsw-alias-*`);猪圈草地/围栏用 `color-mix` 与背景令牌混色。不写死颜色、不判断亮暗,主题切换由壳体令牌自动完成。实测对比度:亮色 row 18.9 / meta 5.8 / pop 18.9,暗色 row 15.03 / meta 12.11 / pop 11.57(WCAG AA 正文要求 4.5)。
|
|
35
|
+
- 星级胶囊由「只在清单里」改为「显示在对应猪猪上方」,并按 `prefs.starDisplay` 三档控制。
|
|
36
|
+
- 清单每行标出「活猪 / 死猪」与「桌宠」。
|
|
37
|
+
|
|
38
|
+
### Fixed
|
|
39
|
+
|
|
40
|
+
- 面板与桌宠层在空态时提前返回,会让两次渲染的 hook 数量不同(真实 React 会抛 *Rendered fewer hooks than expected*)——改为所有 hook 之后再返回空态。
|
|
41
|
+
- `prefs` 只改一个字段时会重置另一个偏好——改为只写显式给出的字段。
|
|
42
|
+
|
|
43
|
+
### Tests
|
|
44
|
+
|
|
45
|
+
- 四份离线测试共 **57 项断言**(smoke 14 / store 13 / host 17 / client 13)。
|
|
46
|
+
- 版面验证台新增 alpha 与 motion 两个探针,读数写进 `<title>`;本版本实测 `live=1/1 dead=0/4 pets=1/1`,活猪四角 alpha 全 0。
|
|
47
|
+
## [0.1.0] — 2026-11-12(未发布:等仓库与 Trusted Publishing 配对后再走 CI 发)
|
|
48
|
+
|
|
49
|
+
### Added
|
|
50
|
+
|
|
51
|
+
- 侧边栏入口与 PigHub 面板:带围栏的正方形猪圈、像素风标题、今日猪猪按钮、猪猪清单(按获取时间 / 星级 / 稀有度排序)。
|
|
52
|
+
- 每日一次随机抽取;重复获得同一只猪升 1 星,分别记录首次获得时间与最近升星时间。
|
|
53
|
+
- 猪圈内的弹跳、游走与发呆行为。
|
|
54
|
+
- 把猪猪从猪圈拖出成为置顶桌宠,在整个页面与猪圈范围内游走,可拖回猪圈。
|
|
55
|
+
- 与 DSH 生态其他桌宠共存:独立 z-index 层、容器 `pointer-events: none`、样式标签与类名全部带插件前缀、尊重 `prefers-reduced-motion`。
|
|
56
|
+
- 数据统一落在 `~/.PigHub/`(`state.json` / `catalog.json` / `prefs.json`)。
|
|
57
|
+
|
|
58
|
+
### Changed
|
|
59
|
+
|
|
60
|
+
- 插件不再把 `webServer` 写进 `inject`:实测它在没有 Web 服务的 profile 里会让**整个装配启动失败**(`1 entry did not activate`)。改为按需查找,拿不到就只禁用数据路由,工具照常可用。
|
|
61
|
+
- 版本信息从 README 移到本文件;公开仓库忽略 agent 行为文档(`archive/`、`taste.md`、`OVERVIEW.md`、`AGENTS.md`)。
|
|
62
|
+
- 发布方式从「本地 token」改为「GitHub Actions + npm Trusted Publishing + provenance」。
|
|
63
|
+
|
|
64
|
+
### Tests
|
|
65
|
+
|
|
66
|
+
- `npm test`:契约 13 + 规则 13 + HTTP 面 13 = 39 项断言;`test/client.test.mjs` 另有 10 项结构断言(含真实拖拽 → 桌宠路径)。
|
|
67
|
+
- `test/demo/pighub-demo.html`:版面验证台,可用 headless 浏览器截图复核。
|
|
68
|
+
|
|
69
|
+
## [0.0.1]
|
|
70
|
+
|
|
71
|
+
### Added
|
|
72
|
+
|
|
73
|
+
- npm 占位发布,锁定包名 `dsh-pighub`。
|
|
74
|
+
- 最小 DSH bundle:`dsh.bundle.patch` → `cordis.patch.yml` → `lib/index.js`。
|
|
75
|
+
- 只读工具 `pighub_about`:回传版本、数据目录与目录缓存状态。
|
|
76
|
+
- 离线冒烟测试(`test/smoke.mjs`),挂在 `prepublishOnly`。
|
package/README.md
CHANGED
|
@@ -1,66 +1,102 @@
|
|
|
1
1
|
# dsh-pighub
|
|
2
2
|
|
|
3
|
-
**PigHub
|
|
3
|
+
**PigHub(猪猪库)的 DeepSeek Harness 插件:**在侧边栏养一个猪圈。每天领一只猪猪,重复的升星,攒够了把猪拖到桌面上遛。
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
它**不联网、不下载、不缓存、不内嵌任何猪图或猪名数据**。
|
|
5
|
+
猪猪素材来自 PigHub 社区图库及其开源镜像,**在构建期就处理好并随包分发**:去白底、裁到猪身、判定是死猪还是活猪、要不要描摹成 SVG,全部在 `npm run assets:build` 时完成,产物是包内普通文件。
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
**运行时不访问素材库**:不请求上游、不做图像计算、不占用户算力。署名与出处见 [assets/ATTRIBUTION.md](./assets/ATTRIBUTION.md),内容按版本手动更新。
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
真实功能的门槛不是代码,是**数据来源**:上游 PigHub 的图片与文案没有任何数据许可(GitHub `NOASSERTION`,按「保留全部权利」理解),把数据打进公开 npm 包就是再分发。占位版因此选择「零数据」。
|
|
9
|
+
## 它长什么样
|
|
12
10
|
|
|
13
|
-
|
|
11
|
+
- **侧边栏入口**:一只朝右看的小猪,与已有入口同尺寸、同描边。
|
|
12
|
+
- **猪圈面板**:左边带围栏的正方形猪圈;右上像素风标题(手写 5×7 位图字模),其下「今日猪猪」;再往下是可排序的猪猪清单。
|
|
13
|
+
- **跟随 DSH 亮/暗色主题**:全部颜色走 `--dsw-alias-*` 令牌,猪圈草地与围栏用 `color-mix` 与背景令牌混色,所以换主题不用改一行代码,也不需要维护第二套配色。
|
|
14
|
+
- **设置按钮**在面板整体右上角:星级显示三档(关闭 / 默认 / 常驻)、素材库版本与来源、下一版候选池、数据目录。
|
|
15
|
+
- **每日一只**:一天抽一次,池子是本版本冻结库;重复获得同一只升一星,分别记录「首次获得」与「最近升星」。
|
|
16
|
+
- **抽取动画**:从你按下的按钮弹出(缩放回弹 + 火花),再旋转着飞进猪圈,**落点就是这只猪真实的落点**(不是估算,见「验证」里的 landGap)。
|
|
17
|
+
- **死猪 / 活猪**:判定为死猪的**完全静止**,只能由用户拖动;活猪会自己游走、偶尔发呆,点一下有弹性回弹。
|
|
18
|
+
- **卡通围栏(有高度)**:围栏拆成远/近两层——远侧画在猪后面、近侧画在猪前面,走到底边的猪会被挡住一截,于是「猪在圈里」有了纵深。造型是自己画的 SVG(粗圆头立柱 + 两道横杆 + 描边 + 地面投影),不引第三方素材。
|
|
19
|
+
- **仓库小屋**:猪圈左下角的小房子,把小猪拖进去即收进库存——**隐藏且不再加载贴图**。位置三态:猪圈 / 桌宠 / 库存,互斥。
|
|
20
|
+
- **GIF 素材**:动图原样随包分发(去白/裁切/描摹都会把动画冻成静态图),构建期用 magic 判定,客户端直接交给浏览器播放。
|
|
21
|
+
- **桌宠**:把猪拖出猪圈即成为置顶桌宠,可拖动;活猪会自己溜达(约三成落脚点落回猪圈),双击回圈。哪些猪在猪圈外,记录在 `state.json` 的 `pets` 里,清单上会标「桌宠」。
|
|
14
22
|
|
|
15
|
-
|
|
16
|
-
|
|
23
|
+
## 素材:冻结、逐图判定、定制切分
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
assets/sources.json 候选池(从公开目录里挑出来的候选)
|
|
27
|
+
assets/judgements.json 逐图判定:kind(live/dead) + 裁切框 + 去白阈值 + 判定理由
|
|
28
|
+
assets/manifest.json 冻结产物:上面两张 + 每张源图的 sha256/bytes + assetVersion
|
|
17
29
|
```
|
|
18
30
|
|
|
19
|
-
|
|
31
|
+
构建:`npm run assets:build`。它有两条硬约束:**候选池里每一张都必须有判定**(少一条或多一条都直接失败),**每一张都必须有理由**。所以「逐图判定」是构建的前置条件,不是口号。
|
|
32
|
+
|
|
33
|
+
同一套流程里还有**矢量图化**:判定为平涂卡通的图会被描摹成自包含 SVG(量化 → 等值线 → 简化 → 路径),以 `data:image/svg+xml` 渲染,**放大不模糊**;场景/照片类整图保留位图,因为描出来只会更脏。是否描摹同样逐图记录在判定表里。
|
|
34
|
+
|
|
35
|
+
去白底在浏览器里做:Host 半开一条同源代理 `GET /pighub/image?src=...`(白名单主机、限大小、不落盘),前端拿到字节后用 canvas 漫水填充把「与边框连通的白」抠成透明。走同源代理的原因很具体——**上游图片不带 CORS 头**,直接读像素会把 canvas 标成 tainted。裁切框与阈值逐图不同,所以同一张源图在任何机器上切出同一个结果。
|
|
36
|
+
|
|
37
|
+
## 安装
|
|
20
38
|
|
|
21
39
|
```sh
|
|
22
|
-
dsh plugin --profile
|
|
40
|
+
dsh plugin --profile <你的 profile> add dsh-pighub
|
|
23
41
|
```
|
|
24
42
|
|
|
25
|
-
|
|
43
|
+
装完重启 DSH:Host 半负责数据与抽取,浏览器半在启动时进图。
|
|
44
|
+
|
|
45
|
+
## 数据放在哪
|
|
26
46
|
|
|
27
|
-
|
|
47
|
+
所有本地数据都在用户主目录的 `/.PigHub/:
|
|
48
|
+
|
|
49
|
+
| 文件 | 内容 |
|
|
50
|
+
|---|---|
|
|
51
|
+
| `state.json` | 拥有哪些猪(含活/死判定与切分参数)、星级、首次获得与最近升星、每日抽取记录、**桌宠列表** |
|
|
52
|
+
| `catalog.json` | 下一版候选池的目录缓存(只有 id/标题/文件名/URL) |
|
|
53
|
+
| `prefs.json` | 排序偏好与星级显示档位 |
|
|
54
|
+
|
|
55
|
+
状态文件损坏时不会静默覆盖:原文改名为 `state.json.corrupt-<时间戳>` 留着,插件退回空状态继续可用。
|
|
56
|
+
|
|
57
|
+
## 结构
|
|
28
58
|
|
|
29
59
|
```text
|
|
30
60
|
dsh-pighub/
|
|
31
|
-
├──
|
|
32
|
-
├──
|
|
33
|
-
├── lib/
|
|
34
|
-
├──
|
|
35
|
-
├──
|
|
36
|
-
├──
|
|
37
|
-
|
|
61
|
+
├── lib/index.js Host 半:读盘、POST /pighub、GET /pighub/image、pighub_about
|
|
62
|
+
├── lib/store.js 抽取 / 升星 / 排序 / 原子写盘
|
|
63
|
+
├── lib/assets.js 冻结库读取(抽猪池只认它)
|
|
64
|
+
├── lib/client.js 浏览器半:closure-factory bundle,注册三个槽位
|
|
65
|
+
├── assets/ 冻结素材库:候选 / 判定 / 产物贴图(img/)/ 署名
|
|
66
|
+
├── scripts/build-assets.mjs 冻结库构建(逐图判定校验)
|
|
67
|
+
├── test/ 离线测试(发布闸门)
|
|
68
|
+
└── .github/workflows/ pack → OIDC 发布
|
|
38
69
|
```
|
|
39
70
|
|
|
40
|
-
|
|
71
|
+
浏览器半只用官方增量槽位:`sidebar.panellist`(入口)、`main`(面板,key 与入口 id 相同)、`shell.overlay`(页面级桌宠层)。
|
|
72
|
+
|
|
73
|
+
## 与其他桌宠插件共存
|
|
74
|
+
|
|
75
|
+
插件市场上的桌宠(例如 [dsh-pet](https://www.npmjs.com/package/dsh-pet))都是页面级浮层,所以按同一套既有约定来:容器 `pointer-events: none`、自有 z-index 层、样式标签与类名全带 `dsh-pighub` / `.pighub-` 前缀、尊重 `prefers-reduced-motion`。
|
|
41
76
|
|
|
42
77
|
## 验证
|
|
43
78
|
|
|
44
79
|
```sh
|
|
45
|
-
npm test
|
|
46
|
-
npm
|
|
80
|
+
npm test # 57 项离线断言:契约 / 规则 / HTTP 面 / 成像与描摹 / 浏览器半结构
|
|
81
|
+
npm run assets:build # 重新生成包内贴图(需要源图;会把处理结果写进 assets/img)
|
|
47
82
|
```
|
|
48
83
|
|
|
49
|
-
|
|
84
|
+
界面另有一套**本地**验证台(不随仓库分发、不进 npm 包):它按宿主契约把 `lib/client.js` 挂到普通页面上,并埋四个探针——
|
|
50
85
|
|
|
51
|
-
|
|
86
|
+
- **alpha**:把渲染出来的图重画到 canvas 逐像素读四角 alpha,证明白底真被抠掉;
|
|
87
|
+
- **motion**:4.2 秒前后各采一次落脚点,分别统计活猪/死猪/桌宠移动了多少只;
|
|
88
|
+
- **reveal**:自动点一次「今日猪猪」,采样动画阶段并比较落点与真身中心的像素差;
|
|
89
|
+
- **svg**:统计以 `data:image/svg+xml` 渲染的图数量,确认矢量化的就是那些图。
|
|
52
90
|
|
|
53
|
-
1
|
|
54
|
-
2. 之后才谈工具面:随机猪图、按名检索、今日猪猪。
|
|
55
|
-
3. 若要出图,再谈是否加 `dsh.client` 前端半(设置卡片 / 图片面板)——声明 `dsh.client` 后要单独构建浏览器产物(`lib/client.js`),占位版刻意不带。
|
|
91
|
+
当前基线:`live=1/1 dead=0/4 pets=1/1`、活猪四角 alpha 全 0、`landGapPx=0`、`svg=2`。
|
|
56
92
|
|
|
57
|
-
##
|
|
93
|
+
## 发布
|
|
58
94
|
|
|
59
|
-
|
|
60
|
-
|
|
95
|
+
走 **GitHub Actions + npm Trusted Publishing**,仓库里不放长期 token:`pack` job 无凭据校验 tag 与版本并跑全部测试,`publish` job 消费同一份 tarball,用 OIDC 换短期凭据发布并生成 provenance。npm 后台三项匹配(仓库 / `publish.yml` / `npm-publish`)任一不符都会被拒。
|
|
96
|
+
|
|
97
|
+
## 许可
|
|
61
98
|
|
|
62
|
-
|
|
99
|
+
- **本插件代码**:MIT,见 [LICENSE](./LICENSE)。
|
|
100
|
+
- **上游 PigHub 素材**:未声明数据许可。本包**不含图片字节**,只含判定与参数;图片由用户浏览器按冻结 URL 直取。若上游给出许可条款,以它为准。
|
|
63
101
|
|
|
64
|
-
|
|
65
|
-
- 数据:无。网络:无。
|
|
66
|
-
- 项目主目录:[../README.md](../README.md)(PigHub 调研档案)
|
|
102
|
+
版本变化见 [CHANGELOG.md](./CHANGELOG.md)。
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# 素材署名与许可
|
|
2
|
+
|
|
3
|
+
本目录下的 `img/` 是**构建期处理后的贴图**,随包分发。运行时不会访问任何素材库。
|
|
4
|
+
|
|
5
|
+
## 来源
|
|
6
|
+
|
|
7
|
+
| 素材 | 来源 | 源图 URL | 源图指纹 |
|
|
8
|
+
|---|---|---|---|
|
|
9
|
+
| 挂科猪(pig-1354) | pighub | https://pighub.top/images/%E6%8C%82%E7%A7%91%E7%8C%AA.jpg | `926d216a988acf8b…` |
|
|
10
|
+
| 怪猪(pig-1355) | pighub | https://pighub.top/images/%E6%80%AA%E7%8C%AA.jpg | `0b15fc66ff0fb622…` |
|
|
11
|
+
| 乱停猪(pig-1357) | pighub | https://pighub.top/images/%E4%B9%B1%E5%81%9C%E7%8C%AA.jpg | `c6ea79a460b2f2ee…` |
|
|
12
|
+
| 萝卜猪(pig-1358) | pighub | https://pighub.top/images/%E8%90%9D%E5%8D%9C%E7%8C%AA.jpg | `40f31fac7d709a5e…` |
|
|
13
|
+
| 你已笨哭(pig-1360) | pighub | https://pighub.top/images/%E4%BD%A0%E5%B7%B2%E7%AC%A8%E5%93%AD_1.jpg | `425c8084e4caa13c…` |
|
|
14
|
+
| 你知道吗(pig-1361) | pighub | https://pighub.top/images/%E4%BD%A0%E7%9F%A5%E9%81%93%E5%90%97.jpg | `c61c93ea5608c54f…` |
|
|
15
|
+
|
|
16
|
+
## 许可
|
|
17
|
+
|
|
18
|
+
- **上游图库(PigHub / 其开源镜像)未声明数据许可**。按「保留全部权利」理解:版权归原权利人,
|
|
19
|
+
本仓库对这些图只做了**逐图判定与裁切**(去白底、裁到猪身、部分描摹成 SVG),未主张任何权利。
|
|
20
|
+
- **本仓库代码**:MIT(见 [LICENSE](../LICENSE))。MIT 只覆盖代码,不覆盖任何素材。
|
|
21
|
+
- 若权利人要求下架某张图,删除对应的 `img/<id>.*`、在 `judgements.json` 移除判定、重跑
|
|
22
|
+
`npm run assets:build`,再发一个新版本即可;素材按版本冻结,老版本不会自动更新。
|
|
23
|
+
|
|
24
|
+
## 为什么不链接素材库
|
|
25
|
+
|
|
26
|
+
运行时不请求上游:贴图是包内文件,离线可用、不受上游可用性影响,也不把用户的访问行为交给第三方。
|
|
27
|
+
署名与出处保留在此文件与 `manifest.json` 的 `source` 字段里——引用与依赖是两件事。
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 220 187" shape-rendering="geometricPrecision"><path fill="rgb(244,212,180)" fill-rule="evenodd" d="M6.5 0.0L8.5 0.0L13.0 7.5L17.5 8.0L14.0 11.5L6.5 1.0ZM20.5 0.0L23.0 -0.5L25.0 3.5L21.0 0.5ZM29.5 8.0L31.0 7.5L34.5 11.0L37.5 17.0L32.0 20.5L20.5 9.0L22.0 8.5L30.0 16.5L32.5 15.0L32.5 12.0L29.5 9.0ZM85.5 10.0L118.0 9.5L119.5 11.0L111.5 17.0L112.0 18.5L117.0 16.5L118.5 18.0L113.0 20.5L104.5 31.0L106.0 33.5L110.0 31.5L109.5 35.0L104.0 38.5L101.5 35.0L102.5 31.0L100.5 31.0L100.5 36.0L98.5 38.0L100.0 41.5L108.0 40.5L110.0 38.5L112.0 39.5L118.0 33.5L121.0 35.5L121.5 30.0L125.0 28.5L127.0 35.5L130.0 32.5L138.0 34.5L140.5 38.0L139.5 43.0L142.0 45.5L150.0 44.5L151.5 42.0L147.0 40.5L138.5 31.0L146.0 34.5L151.5 28.0L132.5 15.0L140.0 11.5L146.0 12.5L148.0 14.5L159.0 14.5L163.0 17.5L166.0 17.5L185.5 36.0L193.5 46.0L198.5 68.0L198.5 90.0L194.5 94.0L196.5 98.0L196.5 108.0L191.5 111.0L192.5 115.0L189.5 119.0L186.5 129.0L169.0 146.5L160.0 148.5L153.5 153.0L154.5 164.0L147.0 170.5L141.0 170.5L134.5 165.0L132.5 160.0L134.5 154.0L132.0 152.5L103.0 153.5L97.5 159.0L96.5 176.0L93.0 177.5L89.0 182.5L86.0 182.5L81.5 177.0L81.5 166.0L85.5 162.0L82.5 157.0L85.5 155.0L84.0 152.5L79.0 152.5L76.0 155.5L73.0 152.5L62.0 153.5L60.0 156.5L42.0 153.5L35.5 161.0L35.5 163.0L39.5 166.0L35.0 168.5L30.0 165.5L26.5 162.0L26.5 148.0L28.0 146.5L35.0 146.5L37.0 149.5L35.5 140.0L34.0 138.5L28.0 138.5L26.5 137.0L26.5 131.0L20.0 129.5L18.5 127.0L22.0 124.5L26.0 124.5L29.0 127.5L43.0 129.5L43.5 128.0L40.5 125.0L45.0 124.5L50.0 128.5L55.0 128.5L69.5 115.0L68.5 89.0L62.0 87.5L60.0 94.5L54.0 91.5L52.5 90.0L51.5 72.0L46.0 70.5L43.5 68.0L43.5 64.0L39.0 59.5L36.0 59.5L35.5 62.0L40.5 67.0L39.5 77.0L38.0 78.5L25.0 77.5L25.5 84.0L22.0 84.5L19.0 89.5L16.0 88.5L11.5 93.0L13.5 98.0L9.0 100.5L6.5 105.0L6.5 114.0L10.5 119.0L6.0 117.5L1.5 112.0L-0.5 104.0L1.5 100.0L1.5 72.0L-0.5 67.0L1.5 58.0L5.5 54.0L7.0 48.5L10.5 60.0L12.0 61.5L17.5 60.0L18.5 36.0L14.5 34.0L18.0 32.5L18.5 30.0L24.0 25.5L42.0 23.5L46.0 11.5L85.0 10.5ZM210.5 10.0L213.0 9.5L214.5 14.0L212.0 14.5L210.0 10.5ZM126.5 13.0L128.0 12.5L127.0 13.5ZM99.5 22.0L102.0 21.5L103.0 24.5L108.5 22.0L103.0 27.5L99.5 26.0L99.5 23.0ZM118.5 22.0L120.5 23.0L113.0 28.5L118.0 22.5ZM151.5 23.0L153.0 22.5L154.5 25.0L152.0 26.5L151.0 23.5ZM204.5 27.0L208.5 28.0L208.0 29.5L205.0 29.5L204.5 28.0ZM150.5 37.0L152.5 37.0L150.5 38.0ZM24.5 60.0L26.0 59.5L26.5 62.0L25.0 63.5L24.0 60.5ZM103.5 68.0L110.0 67.5L112.0 70.5L118.5 72.0L118.5 87.0L116.0 87.5L114.5 84.0L115.5 75.0L112.0 74.5L111.0 70.5L104.0 71.5L103.0 68.5ZM21.5 71.0L23.0 70.5L22.0 71.5ZM111.5 87.0L114.5 88.0L111.5 90.0L110.0 96.5L102.0 94.5L97.0 95.5L94.5 90.0L97.0 87.5L102.0 89.5L109.0 89.5L111.0 87.5ZM44.5 88.0L47.0 87.5L46.0 89.5L45.0 88.5ZM21.5 100.0L25.0 99.5L28.5 103.0L29.5 106.0L27.5 109.0L22.0 111.5L16.5 106.0L21.0 100.5ZM42.5 100.0L48.0 99.5L51.5 104.0L50.5 108.0L48.0 110.5L42.0 110.5L39.5 108.0L39.5 102.0L42.0 100.5ZM59.5 101.0L61.5 101.0L61.0 108.5L59.5 102.0ZM15.5 118.0L18.0 117.5L21.5 120.0L21.5 122.0L16.0 125.5L10.5 120.0L15.5 119.0ZM49.5 122.0L52.5 122.0L48.0 124.5L46.5 123.0L49.0 122.5ZM21.5 140.0L24.5 140.0L24.0 142.5L21.5 141.0ZM62.5 147.0L65.5 147.0L65.0 148.5L62.5 148.0Z"/><path fill="rgb(244,212,188)" fill-rule="evenodd" d="M78.5 8.0L139.0 8.5L142.0 10.5L154.0 11.5L158.5 14.0L148.0 14.5L146.0 12.5L138.0 11.5L133.0 13.5L133.5 16.0L132.0 16.5L128.0 12.5L126.0 14.5L115.0 14.5L119.5 11.0L118.0 9.5L46.0 11.5L42.0 23.5L24.0 25.5L18.5 30.0L18.0 32.5L14.5 34.0L18.5 36.0L17.5 60.0L16.0 61.5L10.5 60.0L7.0 48.5L5.5 54.0L1.5 58.0L0.0 66.5L-0.5 58.0L4.5 49.0L5.5 43.0L19.0 24.5L23.0 24.5L35.0 19.5L44.0 10.5L51.0 10.5L55.0 8.5L78.0 8.5ZM209.5 9.0L213.5 9.0L209.5 11.0L211.5 14.0L207.5 12.0L209.0 9.5ZM214.5 12.0L214.5 28.0L209.0 30.5L208.5 28.0L205.0 26.5L204.0 29.5L200.0 29.5L198.0 31.5L196.5 30.0L205.0 14.5L206.5 17.0L204.5 24.0L211.0 25.5L212.5 24.0L212.5 15.0L214.5 13.0ZM159.5 15.0L163.0 15.5L164.0 17.5L160.0 15.5ZM166.5 19.0L169.0 18.5L173.0 21.5L189.5 38.0L190.0 41.5L173.0 23.5L167.0 19.5ZM99.5 22.0L102.0 21.5L103.5 25.0L101.0 27.5L99.5 23.0ZM151.5 23.0L153.0 22.5L154.5 25.0L152.0 26.5L151.0 23.5ZM146.5 25.0L148.0 24.5L151.5 28.0L150.0 30.5L146.5 26.0ZM121.5 27.0L128.0 27.5L135.5 33.0L130.0 32.5L127.0 35.5L126.5 30.0L123.0 28.5L121.0 35.5L118.0 33.5L114.0 38.5L111.0 39.5L111.5 35.0L121.0 27.5ZM99.5 37.0L101.5 38.0L99.0 39.5L99.0 37.5ZM101.5 39.0L104.5 40.0L104.0 41.5L101.5 40.0ZM140.5 39.0L150.0 40.5L151.5 43.0L142.0 45.5L139.5 43.0L140.0 39.5ZM190.5 42.0L192.5 43.0L192.0 44.5L190.5 43.0ZM193.5 50.0L195.5 51.0L195.0 52.5L193.5 51.0ZM195.5 55.0L197.5 56.0L197.0 58.5L195.5 56.0ZM24.5 60.0L26.0 59.5L26.5 62.0L25.0 63.5L24.0 60.5ZM35.5 60.0L39.0 59.5L43.5 64.0L43.5 68.0L51.5 72.0L52.5 79.0L52.0 88.5L21.5 87.0L22.0 84.5L25.5 84.0L25.0 77.5L38.0 78.5L39.5 77.0L40.5 67.0L35.5 61.0ZM103.5 68.0L110.0 67.5L111.5 70.0L104.0 71.5L103.0 68.5ZM-0.5 71.0L1.5 72.0L1.5 100.0L0.0 101.5L-0.5 72.0ZM21.5 71.0L23.0 70.5L22.0 71.5ZM111.5 71.0L117.0 70.5L118.5 72.0L116.0 80.5L115.5 75.0L112.0 74.5L111.5 72.0ZM111.5 87.0L114.5 88.0L111.5 90.0L110.0 96.5L102.0 94.5L97.0 95.5L94.5 90.0L97.0 87.5L102.0 89.5L109.0 89.5L111.0 87.5ZM61.5 88.0L67.0 87.5L68.5 89.0L69.5 115.0L55.0 128.5L52.0 125.5L47.0 126.5L45.0 124.5L40.5 125.0L43.5 128.0L43.0 129.5L37.0 129.5L27.5 126.0L28.0 124.5L32.0 125.5L39.0 123.5L51.0 123.5L60.5 114.0L61.5 101.0L59.5 95.0L61.5 93.0L61.0 88.5ZM197.5 91.0L197.5 106.0L194.5 95.0L197.0 91.5ZM-0.5 105.0L1.5 108.0L1.0 109.5L-0.5 106.0ZM194.5 109.0L196.0 108.5L196.5 111.0L190.5 123.0L189.0 124.5L188.5 122.0L192.5 115.0L191.5 111.0L194.0 109.5ZM2.5 114.0L16.0 125.5L23.0 122.5L24.5 124.0L20.0 125.5L18.5 128.0L26.5 131.0L26.5 137.0L28.0 138.5L34.0 138.5L35.5 140.0L35.0 146.5L28.0 146.5L26.5 148.0L26.0 159.5L24.5 140.0L19.0 139.5L12.5 133.0L2.5 115.0ZM187.5 125.0L188.5 126.0L187.0 127.5L187.0 125.5ZM180.5 134.0L182.5 134.0L180.5 135.0ZM35.5 147.0L37.5 147.0L37.0 149.5L35.5 148.0ZM62.5 147.0L65.5 147.0L65.0 148.5L62.5 148.0ZM159.5 149.0L162.5 149.0L161.0 150.5L159.0 149.5ZM154.5 152.0L156.5 152.0L154.0 154.5L154.0 152.5ZM69.5 153.0L73.0 152.5L75.5 155.0L61.0 156.5L62.0 153.5L69.0 153.5ZM78.5 153.0L84.0 152.5L85.5 154.0L82.5 157.0L85.5 162.0L81.5 166.0L81.5 172.0L79.5 157.0L76.5 155.0L78.0 153.5ZM110.5 153.0L132.0 152.5L134.5 155.0L133.0 156.5L111.0 154.5L102.0 155.5L103.0 153.5L110.0 153.5ZM41.5 154.0L46.5 154.0L41.5 158.0L41.5 165.0L40.0 166.5L35.5 163.0L41.0 154.5ZM98.5 158.0L98.5 176.0L96.5 180.0L94.0 182.5L89.5 182.0L96.5 176.0L98.0 158.5ZM26.5 163.0L35.0 168.5L39.5 167.0L37.0 169.5L31.0 169.5L26.5 164.0ZM81.5 178.0L83.5 179.0L83.0 180.5L81.5 179.0Z"/><path fill="rgb(252,204,188)" fill-rule="evenodd" d="M8.5 0.0L20.0 -0.5L24.0 3.5L28.0 4.5L32.5 12.0L32.5 15.0L30.0 16.5L22.0 8.5L13.0 7.5L8.5 1.0ZM35.5 13.0L37.5 14.0L37.0 16.5L35.5 14.0ZM126.5 14.0L129.0 13.5L132.0 16.5L135.0 16.5L146.5 25.0L149.5 30.0L146.0 34.5L138.5 31.0L146.5 40.0L144.0 40.5L130.0 28.5L125.0 26.5L118.0 28.5L108.0 40.5L103.5 39.0L106.0 38.5L110.5 33.0L110.0 31.5L107.0 33.5L104.5 32.0L106.5 27.0L113.0 20.5L118.5 18.0L118.0 16.5L113.0 18.5L111.5 17.0L115.0 14.5L126.0 14.5ZM106.5 22.0L108.5 22.0L103.0 27.5L102.5 26.0L106.0 22.5ZM118.5 22.0L120.5 23.0L113.0 28.5L118.0 22.5ZM100.5 31.0L102.5 31.0L101.5 35.0L103.5 38.0L100.5 37.0L100.5 32.0ZM150.5 37.0L152.5 37.0L150.5 38.0ZM100.5 39.0L101.5 41.0L100.0 41.5L98.5 40.0L100.0 39.5ZM117.5 77.0L118.5 86.0L115.5 87.0L117.0 77.5ZM20.5 88.0L52.0 88.5L54.0 91.5L59.5 94.0L60.5 114.0L53.0 121.5L38.0 124.5L27.0 125.5L23.0 122.5L20.0 123.5L21.5 120.0L18.0 117.5L11.0 119.5L6.5 114.0L6.5 105.0L7.5 102.0L13.5 98.0L11.5 93.0L16.0 88.5L20.0 88.5ZM21.5 100.0L25.0 99.5L28.5 103.0L29.5 106.0L27.5 109.0L22.0 111.5L16.5 106.0L21.0 100.5ZM42.5 100.0L48.0 99.5L51.5 104.0L50.5 108.0L48.0 110.5L42.0 110.5L39.5 108.0L39.5 102.0L42.0 100.5ZM50.5 126.0L52.5 127.0L50.0 128.5L48.5 127.0L50.0 126.5Z"/><path fill="rgb(244,212,196)" fill-rule="evenodd" d="M5.5 1.0L7.5 2.0L7.0 3.5L5.5 2.0ZM24.5 1.0L26.5 2.0L26.0 3.5L24.5 2.0ZM7.5 4.0L10.5 7.0L9.0 7.5L7.5 5.0ZM60.5 6.0L147.0 6.5L156.0 8.5L173.0 17.5L186.5 30.0L196.5 45.0L201.5 61.0L202.5 96.0L198.5 114.0L193.5 124.0L182.5 138.0L167.0 150.5L160.0 152.5L156.5 156.0L155.0 164.5L154.5 154.0L158.0 150.5L169.0 146.5L182.5 134.0L196.5 111.0L199.5 85.0L198.5 62.0L197.5 56.0L189.5 38.0L169.0 18.5L154.0 11.5L142.0 10.5L139.0 8.5L79.0 7.5L44.0 10.5L38.0 15.5L32.0 7.5L39.0 10.5L49.0 6.5L60.0 6.5ZM208.5 6.0L214.0 5.5L218.5 11.0L217.5 29.0L214.0 32.5L203.0 32.5L196.0 39.5L191.5 34.0L198.5 18.0L208.0 6.5ZM10.5 8.0L12.5 9.0L12.0 10.5L10.5 9.0ZM17.5 9.0L20.0 8.5L21.5 11.0L17.0 9.5ZM209.5 9.0L213.0 8.5L215.5 12.0L214.5 28.0L211.0 30.5L200.0 29.5L198.0 31.5L196.5 30.0L205.0 14.5L206.5 17.0L204.5 24.0L206.0 25.5L212.5 24.0L212.5 15.0L207.5 12.0L209.0 9.5ZM23.5 14.0L30.5 20.0L26.0 23.5L17.5 26.0L9.5 36.0L-0.5 57.0L-0.5 50.0L5.5 36.0L17.0 23.5L24.5 18.0L23.5 15.0ZM117.5 29.0L119.5 29.0L117.5 30.0ZM-0.5 109.0L1.5 110.0L2.5 116.0L10.5 128.0L8.0 129.5L4.5 125.0L-0.5 115.0L-0.5 110.0ZM10.5 130.0L25.5 144.0L26.5 164.0L31.0 169.5L37.0 169.5L41.5 165.0L41.5 158.0L46.0 154.5L54.0 154.5L59.0 156.5L78.0 155.5L79.5 157.0L81.5 179.0L86.0 182.5L94.0 182.5L98.5 176.0L99.5 157.0L104.0 154.5L132.0 155.5L134.5 165.0L141.0 170.5L147.0 170.5L154.5 165.0L150.0 171.5L142.0 172.5L138.0 171.5L132.5 166.0L130.0 159.5L103.0 158.5L100.5 161.0L100.5 178.0L98.5 182.0L96.0 184.5L85.0 185.5L79.5 181.0L78.5 178.0L77.0 158.5L59.0 158.5L50.0 156.5L46.5 159.0L45.5 166.0L41.0 170.5L35.0 172.5L28.0 170.5L23.5 164.0L22.5 145.0L17.5 141.0L10.5 131.0Z"/></svg>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 220 195" shape-rendering="geometricPrecision"><path fill="rgb(252,220,196)" fill-rule="evenodd" d="M191.5 0.0L204.0 -0.5L205.5 1.0L204.0 5.5L195.5 8.0L202.5 16.0L203.5 21.0L199.0 29.5L192.0 30.5L186.5 27.0L194.5 28.0L189.5 23.0L188.5 15.0L194.5 12.0L194.5 7.0L198.0 3.5L202.0 3.5L203.5 2.0L202.0 0.5L194.0 0.5L190.0 5.5L182.0 5.5L174.5 11.0L175.0 16.5L179.0 12.5L182.5 13.0L179.5 17.0L179.5 22.0L189.5 35.0L197.5 56.0L197.5 73.0L189.5 90.0L183.5 110.0L181.5 139.0L179.0 142.5L177.5 142.0L178.5 133.0L174.0 131.5L169.0 126.5L166.0 126.5L163.0 119.5L160.5 121.0L160.5 130.0L156.5 134.0L157.0 136.5L161.0 135.5L163.5 138.0L163.5 141.0L167.0 145.5L177.0 142.5L177.5 144.0L174.0 146.5L163.0 146.5L155.5 141.0L154.5 125.0L151.0 116.5L145.0 114.5L141.0 115.5L140.0 117.5L137.0 114.5L131.5 115.0L138.0 111.5L141.0 113.5L151.0 113.5L155.0 115.5L157.0 110.5L169.0 107.5L173.5 115.0L173.5 121.0L176.0 121.5L176.5 115.0L181.0 113.5L182.5 111.0L183.5 101.0L187.5 92.0L187.5 87.0L184.0 77.5L171.0 78.5L169.0 69.5L139.0 71.5L137.5 73.0L137.0 99.5L125.0 99.5L122.0 97.5L111.0 97.5L108.0 94.5L102.0 94.5L99.5 92.0L100.5 89.0L96.5 87.0L96.0 83.5L85.5 88.0L85.5 90.0L89.5 92.0L88.0 94.5L78.0 94.5L75.0 91.5L68.5 96.0L68.0 99.5L66.0 99.5L62.5 93.0L64.5 87.0L58.0 81.5L54.0 86.5L47.5 83.0L50.5 81.0L49.0 76.5L45.5 78.0L45.0 81.5L37.5 79.0L40.5 75.0L40.5 70.0L38.5 68.0L40.5 65.0L38.0 61.5L37.0 62.5L32.5 59.0L40.0 58.5L41.5 55.0L40.0 53.5L28.0 53.5L31.5 48.0L30.0 44.5L14.0 50.5L12.5 47.0L15.5 43.0L19.0 40.5L21.0 42.5L22.5 41.0L21.5 38.0L25.0 33.5L32.0 35.5L39.0 30.5L38.0 26.5L44.0 30.5L67.0 18.5L98.0 8.5L116.0 5.5L138.0 4.5L160.0 8.5L170.0 12.5L177.0 4.5L188.0 3.5L191.0 0.5ZM182.5 12.0L185.5 13.0L184.5 18.0L186.5 21.0L186.0 26.5L183.5 22.0L183.0 12.5ZM196.5 14.0L201.5 18.0L200.5 24.0L196.5 25.0L197.5 20.0L196.0 14.5ZM85.5 15.0L87.5 16.0L85.0 17.5L85.0 15.5ZM83.5 19.0L85.5 19.0L85.0 21.5L83.5 20.0ZM31.5 28.0L33.5 28.0L32.0 30.5L31.5 29.0ZM181.5 29.0L187.5 36.0L187.5 39.0L185.0 39.5L180.5 34.0L181.0 29.5ZM142.5 33.0L146.5 34.0L146.5 43.0L148.0 44.5L153.0 46.5L159.0 46.5L162.0 44.5L164.5 46.0L164.5 57.0L169.5 61.0L168.0 62.5L148.0 62.5L146.5 66.0L143.0 67.5L141.5 66.0L141.5 60.0L146.5 57.0L146.5 53.0L141.5 50.0L140.0 44.5L135.5 43.0L137.0 39.5L141.5 38.0L142.0 33.5ZM164.5 37.0L166.0 36.5L165.0 37.5ZM101.5 40.0L105.5 41.0L105.5 45.0L103.0 46.5L101.0 41.5L96.5 48.0L96.5 51.0L104.5 63.0L110.0 66.5L114.0 66.5L117.5 63.0L117.5 48.0L120.0 45.5L124.5 48.0L125.5 64.0L128.5 66.0L123.5 69.0L121.5 74.0L123.5 78.0L123.5 84.0L122.0 85.5L119.5 84.0L119.5 79.0L117.5 77.0L119.0 74.5L112.0 75.5L106.0 73.5L104.0 76.5L101.5 74.0L102.5 72.0L98.5 70.0L94.0 62.5L92.0 66.5L89.5 66.0L89.5 61.0L91.5 59.0L88.5 49.0L89.5 45.0L95.0 40.5L101.0 40.5ZM188.5 45.0L191.0 44.5L192.5 47.0L189.0 48.5L188.0 45.5ZM152.5 54.0L156.0 53.5L157.5 57.0L153.0 58.5L152.0 54.5ZM9.5 56.0L17.5 57.0L13.0 57.5L5.5 66.0L1.5 83.0L1.0 94.5L0.5 75.0L3.5 66.0L10.0 56.5ZM12.5 63.0L14.5 64.0L13.0 65.5L12.0 63.5ZM9.5 68.0L12.0 67.5L13.5 70.0L8.0 72.5L6.5 71.0L9.0 68.5ZM80.5 70.0L84.0 69.5L89.0 74.5L91.0 74.5L92.5 80.0L84.0 86.5L78.0 85.5L74.5 77.0L75.5 74.0L80.0 70.5ZM33.5 75.0L35.5 75.0L34.0 76.5L33.0 75.5ZM110.5 77.0L112.5 78.0L112.5 84.0L109.5 84.0L110.0 77.5ZM73.5 88.0L75.5 88.0L75.0 90.5L73.5 89.0ZM129.5 91.0L131.0 90.5L132.5 93.0L130.0 94.5L129.0 91.5ZM1.5 97.0L3.5 98.0L3.0 101.5L1.5 98.0ZM137.5 100.0L141.5 101.0L140.0 103.5L137.5 101.0ZM3.5 102.0L12.5 110.0L11.5 113.0L20.0 120.5L32.5 127.0L32.5 134.0L29.5 136.0L29.5 141.0L36.5 151.0L36.5 155.0L33.5 157.0L33.5 159.0L41.5 163.0L33.0 162.5L30.5 160.0L28.5 154.0L27.5 127.0L18.0 121.5L9.5 113.0L3.5 103.0ZM92.5 109.0L108.0 110.5L109.5 112.0L109.5 122.0L111.0 123.5L114.5 123.0L114.0 124.5L101.5 129.0L99.5 164.0L98.0 164.5L95.0 160.5L89.0 161.5L86.0 158.5L80.0 158.5L76.5 162.0L78.0 163.5L88.0 166.5L97.0 164.5L97.5 166.0L92.0 168.5L83.0 168.5L77.0 166.5L73.5 161.0L74.5 149.0L72.0 137.5L56.0 136.5L54.5 138.0L53.5 158.0L51.5 159.0L53.5 135.0L70.0 135.5L70.5 133.0L80.5 125.0L80.5 119.0L75.0 117.5L73.5 115.0L75.0 113.5L81.0 113.5L84.0 115.5L90.0 115.5L92.0 109.5ZM121.5 117.0L123.5 117.0L122.5 119.0L121.0 117.5ZM178.5 126.0L180.5 126.0L180.0 128.5L178.5 127.0ZM79.5 138.0L82.0 137.5L82.5 140.0L80.0 141.5L79.0 138.5ZM88.5 141.0L91.5 142.0L91.5 148.0L90.0 149.5L87.5 148.0L88.0 141.5ZM95.5 152.0L97.0 151.5L96.0 152.5ZM50.5 160.0L51.5 161.0L46.0 163.5L50.0 160.5Z"/><path fill="rgb(252,220,188)" fill-rule="evenodd" d="M193.5 1.0L202.0 0.5L203.5 2.0L198.0 3.5L194.5 7.0L194.5 12.0L188.5 15.0L189.5 23.0L194.5 28.0L186.5 26.0L186.5 21.0L184.5 18.0L185.5 13.0L184.0 11.5L179.0 12.5L176.0 16.5L174.5 16.0L174.5 11.0L180.0 6.5L190.0 5.5L193.0 1.5ZM196.5 14.0L201.5 18.0L200.5 24.0L196.5 25.0L197.5 20.0L196.0 14.5ZM85.5 15.0L87.5 16.0L85.0 17.5L85.0 15.5ZM83.5 19.0L85.5 19.0L85.0 21.5L83.5 20.0ZM181.5 29.0L187.5 36.0L187.5 39.0L185.0 39.5L180.5 34.0L181.0 29.5ZM28.5 31.0L37.5 31.0L32.0 35.5L26.0 34.5L25.5 33.0L28.0 31.5ZM142.5 33.0L146.5 34.0L146.5 43.0L148.0 44.5L153.0 46.5L159.0 46.5L162.0 44.5L164.5 46.0L164.5 57.0L169.5 61.0L168.0 62.5L148.0 62.5L146.5 66.0L143.0 67.5L141.5 66.0L141.5 60.0L146.5 57.0L146.5 53.0L141.5 50.0L140.0 44.5L135.5 43.0L137.0 39.5L141.5 38.0L142.0 33.5ZM164.5 37.0L166.0 36.5L165.0 37.5ZM20.5 39.0L22.0 38.5L22.5 41.0L21.0 42.5L20.0 39.5ZM101.5 40.0L105.5 41.0L105.5 45.0L103.0 46.5L101.0 40.5ZM188.5 45.0L191.0 44.5L192.5 47.0L189.0 48.5L188.0 45.5ZM27.5 54.0L40.0 53.5L41.5 55.0L41.5 57.0L37.0 59.5L29.0 59.5L27.5 55.0ZM152.5 54.0L156.0 53.5L157.5 57.0L153.0 58.5L152.0 54.5ZM12.5 58.0L18.0 57.5L26.5 60.0L22.5 69.0L28.0 75.5L34.0 76.5L39.0 68.5L40.5 75.0L37.5 79.0L42.5 81.0L33.0 82.5L28.0 81.5L17.5 89.0L16.5 99.0L19.5 102.0L13.5 105.0L13.5 113.0L11.5 113.0L12.5 110.0L5.5 104.0L3.5 98.0L0.5 95.0L3.5 71.0L5.5 66.0L12.0 58.5ZM90.5 60.0L92.0 59.5L93.5 62.0L92.5 66.0L89.5 66.0L90.0 60.5ZM37.5 62.0L40.5 65.0L39.0 66.5L37.5 63.0ZM12.5 63.0L14.5 64.0L13.0 65.5L12.0 63.5ZM126.5 65.0L128.5 66.0L126.0 67.5L126.0 65.5ZM9.5 68.0L12.0 67.5L13.5 70.0L8.0 72.5L6.5 71.0L9.0 68.5ZM152.5 70.0L169.0 69.5L171.0 78.5L184.0 77.5L185.5 79.0L187.5 92.0L183.5 101.0L182.5 111.0L181.0 113.5L176.5 115.0L176.0 121.5L173.5 121.0L173.5 115.0L169.0 107.5L157.0 110.5L155.0 115.5L137.0 111.5L131.0 115.5L122.0 116.5L112.0 123.5L109.5 122.0L109.5 112.0L108.0 110.5L98.0 110.5L93.0 108.5L90.0 115.5L75.0 113.5L73.5 116.0L80.5 119.0L80.5 125.0L73.0 130.5L70.0 135.5L52.5 134.0L51.5 159.0L45.0 163.5L36.0 161.5L33.5 159.0L33.5 157.0L36.5 155.0L36.5 151.0L29.5 141.0L29.5 136.0L31.5 136.0L33.0 141.5L35.5 139.0L36.5 134.0L32.5 128.0L32.5 125.0L27.5 119.0L28.5 116.0L23.5 112.0L21.5 106.0L28.0 112.5L34.0 114.5L52.0 116.5L63.0 113.5L65.5 111.0L63.5 108.0L65.5 100.0L68.5 99.0L70.0 94.5L75.0 91.5L78.0 94.5L88.0 94.5L89.5 92.0L86.0 90.5L85.5 88.0L95.0 83.5L96.5 84.0L96.5 87.0L100.5 89.0L99.5 92.0L102.0 94.5L108.0 94.5L111.0 97.5L137.0 99.5L140.0 103.5L141.5 101.0L137.5 99.0L137.5 73.0L139.0 71.5L152.0 70.5ZM102.5 73.0L105.5 75.0L104.0 76.5L102.0 73.5ZM89.5 75.0L92.5 76.0L92.5 80.0L90.0 80.5L90.0 75.5ZM118.5 76.0L123.5 78.0L123.5 84.0L122.0 85.5L119.5 84.0L118.0 76.5ZM46.5 77.0L49.0 76.5L50.5 81.0L47.0 82.5L45.5 81.0L46.0 77.5ZM110.5 77.0L112.5 78.0L112.5 84.0L109.5 84.0L110.0 77.5ZM10.5 78.0L15.0 77.5L16.5 84.0L8.0 88.5L10.0 78.5ZM56.5 82.0L58.0 81.5L64.5 87.0L62.5 92.0L57.5 89.0L55.5 86.0L56.0 82.5ZM73.5 88.0L75.5 88.0L75.0 90.5L73.5 89.0ZM129.5 91.0L131.0 90.5L132.5 93.0L130.0 94.5L129.0 91.5ZM6.5 95.0L9.5 96.0L9.5 99.0L7.0 100.5L5.5 99.0L6.0 95.5ZM152.5 98.0L163.0 97.5L164.5 104.0L163.0 105.5L148.0 105.5L147.5 101.0L152.0 98.5ZM56.5 118.0L58.0 117.5L59.5 121.0L64.5 124.0L64.5 130.0L54.0 132.5L38.0 130.5L36.5 129.0L38.0 122.5L54.0 122.5L56.0 118.5ZM161.5 120.0L164.5 121.0L166.0 126.5L169.0 126.5L174.0 131.5L178.5 133.0L177.5 142.0L174.0 143.5L171.0 141.5L167.0 145.5L161.0 135.5L156.5 136.0L160.5 130.0L161.0 120.5ZM21.5 121.0L23.0 120.5L24.5 122.0L22.0 121.5ZM178.5 126.0L180.5 126.0L180.0 128.5L178.5 127.0ZM79.5 138.0L82.0 137.5L82.5 140.0L80.0 141.5L79.0 138.5ZM88.5 141.0L91.5 142.0L91.5 148.0L90.0 149.5L87.5 148.0L88.0 141.5ZM37.5 143.0L44.0 142.5L45.5 146.0L44.0 147.5L37.0 147.5L35.5 146.0L37.0 143.5ZM95.5 152.0L97.0 151.5L96.0 152.5ZM79.5 159.0L86.0 158.5L89.0 161.5L95.0 160.5L97.5 164.0L96.0 165.5L85.0 165.5L78.0 163.5L76.5 162.0L79.0 159.5Z"/><path fill="rgb(236,132,132)" fill-rule="evenodd" d="M29.5 24.0L34.0 23.5L36.5 26.0L27.0 30.5L15.5 43.0L12.5 49.0L16.0 50.5L27.0 44.5L30.0 44.5L31.5 46.0L30.5 50.0L26.0 54.5L18.0 57.5L9.0 55.5L5.5 52.0L5.5 46.0L8.5 41.0L23.0 26.5L29.0 24.5ZM94.5 41.0L99.0 40.5L100.5 42.0L96.5 48.0L96.5 51.0L104.5 63.0L110.0 66.5L114.0 66.5L117.5 63.0L117.5 48.0L122.0 45.5L125.5 51.0L126.5 65.0L123.5 70.0L119.0 74.5L109.0 74.5L103.0 72.5L92.5 61.0L89.5 54.0L89.5 45.0L94.0 41.5ZM31.5 59.0L37.5 63.0L38.5 71.0L32.0 76.5L28.0 75.5L23.5 71.0L24.5 62.0L27.0 59.5L31.0 59.5ZM80.5 70.0L86.0 70.5L89.5 75.0L90.5 79.0L88.5 83.0L84.0 86.5L80.0 86.5L76.5 84.0L74.5 77.0L75.5 74.0L80.0 70.5ZM33.5 82.0L43.0 81.5L55.0 86.5L64.5 98.0L63.5 107.0L56.0 113.5L39.0 113.5L25.0 107.5L19.5 101.0L18.5 91.0L23.0 84.5L33.0 82.5Z"/><path fill="rgb(252,212,188)" fill-rule="evenodd" d="M33.5 27.0L37.0 26.5L39.5 29.0L39.0 30.5L33.0 30.5L33.5 28.0ZM29.5 29.0L31.5 29.0L29.5 30.0ZM23.5 55.0L27.0 54.5L28.5 59.0L19.0 58.5L19.0 56.5L23.0 55.5ZM98.5 69.0L101.5 70.0L98.5 70.0ZM121.5 72.0L121.5 76.0L119.5 75.0L121.0 72.5ZM111.5 75.0L113.0 74.5L112.0 75.5ZM10.5 78.0L15.0 77.5L16.5 84.0L8.0 88.5L10.0 78.5ZM27.5 82.0L31.5 82.0L27.0 82.5ZM43.5 82.0L45.0 81.5L44.0 82.5ZM18.5 88.0L20.5 88.0L17.5 94.0L19.5 101.0L16.5 99.0L18.0 88.5ZM61.5 93.0L63.5 94.0L63.0 95.5L61.5 94.0ZM6.5 95.0L9.5 96.0L9.5 99.0L7.0 100.5L5.5 99.0L6.0 95.5ZM152.5 98.0L163.0 97.5L164.5 104.0L163.0 105.5L148.0 105.5L147.5 101.0L152.0 98.5ZM19.5 102.0L22.5 104.0L21.5 107.0L23.5 112.0L28.5 116.0L27.5 119.0L32.5 126.0L30.0 126.5L23.0 120.5L20.0 120.5L13.5 114.0L13.5 105.0L19.0 102.5ZM24.5 108.0L39.0 113.5L50.0 114.5L58.0 112.5L63.0 107.5L65.5 111.0L63.0 113.5L52.0 116.5L30.0 113.5L25.0 108.5ZM135.5 115.0L137.0 114.5L136.0 115.5ZM125.5 116.0L130.5 116.0L124.0 119.5L122.5 118.0L125.0 116.5ZM56.5 118.0L58.0 117.5L59.5 121.0L64.5 124.0L64.5 130.0L54.0 132.5L38.0 130.5L36.5 129.0L38.0 122.5L54.0 122.5L56.0 118.5ZM119.5 119.0L121.5 119.0L115.0 124.5L114.5 122.0L119.0 119.5ZM32.5 129.0L36.5 134.0L35.5 139.0L33.0 141.5L31.5 140.0L32.5 130.0ZM170.5 142.0L173.5 143.0L169.0 145.5L170.0 142.5ZM37.5 143.0L44.0 142.5L45.5 146.0L44.0 147.5L37.0 147.5L35.5 146.0L37.0 143.5ZM87.5 166.0L89.0 165.5L88.0 166.5Z"/><path fill="rgb(244,172,172)" fill-rule="evenodd" d="M46.5 114.0L50.0 113.5L47.0 114.5ZM130.5 116.0L139.0 115.5L140.5 118.0L139.5 137.0L137.5 141.0L133.0 144.5L120.0 144.5L115.5 139.0L114.5 125.0L121.0 119.5L130.0 116.5Z"/></svg>
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
{
|
|
2
|
+
"assetVersion": "2026.11.12",
|
|
3
|
+
"frozenAt": "2026-11-12T09:28:44.030Z",
|
|
4
|
+
"policy": "素材在构建期处理完并随包分发;运行时只读本地文件,不链接、不请求素材库。",
|
|
5
|
+
"attribution": "素材来自 PigHub 社区图库及其开源镜像,版权归原权利人;本项目仅做逐图判定与裁切,署名见 assets/ATTRIBUTION.md。",
|
|
6
|
+
"counts": {
|
|
7
|
+
"total": 8,
|
|
8
|
+
"live": 4,
|
|
9
|
+
"dead": 4,
|
|
10
|
+
"vector": 2
|
|
11
|
+
},
|
|
12
|
+
"pigs": [
|
|
13
|
+
{
|
|
14
|
+
"id": "pig-1131",
|
|
15
|
+
"title": "像素猪",
|
|
16
|
+
"kind": "live",
|
|
17
|
+
"note": "GIF 动图(像素猪):动画本身就是内容,构建期不做去白、不描摹,原样随包分发;判定为活猪,会游走。",
|
|
18
|
+
"vector": false,
|
|
19
|
+
"animated": true,
|
|
20
|
+
"file": "assets/img/pig-1131.gif",
|
|
21
|
+
"bytes": 27078,
|
|
22
|
+
"sha256": "ce45538ac0f089997ba356370db759498fb072637e1c79d5194ed83e06c69dda",
|
|
23
|
+
"size": {
|
|
24
|
+
"width": 0,
|
|
25
|
+
"height": 0
|
|
26
|
+
},
|
|
27
|
+
"source": {
|
|
28
|
+
"url": "https://pighub.top/images/%E5%83%8F%E7%B4%A0%E7%8C%AA.gif",
|
|
29
|
+
"group": "pighub",
|
|
30
|
+
"sha256": "ce45538ac0f089997ba356370db759498fb072637e1c79d5194ed83e06c69dda"
|
|
31
|
+
},
|
|
32
|
+
"cut": {
|
|
33
|
+
"trim": [
|
|
34
|
+
0,
|
|
35
|
+
0,
|
|
36
|
+
1,
|
|
37
|
+
1
|
|
38
|
+
],
|
|
39
|
+
"white": 0
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"id": "pig-1300",
|
|
44
|
+
"title": "被捕捉的小🐖",
|
|
45
|
+
"kind": "live",
|
|
46
|
+
"note": "GIF 动图(被捕捉的小猪):同上,保留原始动画。",
|
|
47
|
+
"vector": false,
|
|
48
|
+
"file": "assets/img/pig-1300.png",
|
|
49
|
+
"bytes": 63748,
|
|
50
|
+
"sha256": "f0c0825d1814c7c54051b13f0d6f5c483ce45e75fd94cdeff01bd7453a8d2e0a",
|
|
51
|
+
"size": {
|
|
52
|
+
"width": 206,
|
|
53
|
+
"height": 200
|
|
54
|
+
},
|
|
55
|
+
"source": {
|
|
56
|
+
"url": "https://pighub.top/images/%E8%A2%AB%E6%8D%95%E6%8D%89%E7%9A%84%E5%B0%8F%F0%9F%90%96.gif",
|
|
57
|
+
"group": "pighub",
|
|
58
|
+
"sha256": "768694a245ea9a225a0de33e43d7bcef5601b81bf4e7a000d0c43299a5fd9e1d"
|
|
59
|
+
},
|
|
60
|
+
"cut": {
|
|
61
|
+
"trim": [
|
|
62
|
+
0,
|
|
63
|
+
0,
|
|
64
|
+
1,
|
|
65
|
+
1
|
|
66
|
+
],
|
|
67
|
+
"white": 236
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"id": "pig-1354",
|
|
72
|
+
"title": "挂科猪",
|
|
73
|
+
"kind": "dead",
|
|
74
|
+
"note": "漫画格:左侧白色对白气泡承载信息(文字),按规则**保留**;卡片其余白底去掉,裁到猪身。 去白口径:白底一律去掉,仅保留「承载信息的白」(内容稀疏的气泡/清单)。",
|
|
75
|
+
"vector": false,
|
|
76
|
+
"file": "assets/img/pig-1354.png",
|
|
77
|
+
"bytes": 220316,
|
|
78
|
+
"sha256": "d74d5c37a429413d606a22146c13557a288ea44da764d975418b9a6ebae01735",
|
|
79
|
+
"size": {
|
|
80
|
+
"width": 996,
|
|
81
|
+
"height": 986
|
|
82
|
+
},
|
|
83
|
+
"source": {
|
|
84
|
+
"url": "https://pighub.top/images/%E6%8C%82%E7%A7%91%E7%8C%AA.jpg",
|
|
85
|
+
"group": "pighub",
|
|
86
|
+
"sha256": "926d216a988acf8b41576f0e12ad9493d6b33d472dc50b56ad177eae752cb0dc"
|
|
87
|
+
},
|
|
88
|
+
"cut": {
|
|
89
|
+
"trim": [
|
|
90
|
+
0,
|
|
91
|
+
0,
|
|
92
|
+
1,
|
|
93
|
+
1
|
|
94
|
+
],
|
|
95
|
+
"white": 236
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"id": "pig-1355",
|
|
100
|
+
"title": "怪猪",
|
|
101
|
+
"kind": "live",
|
|
102
|
+
"note": "单只猪全身、干净白底,去白后踩到猪身;平涂卡通,额外描摹成 SVG。 去白口径:白底一律去掉,仅保留「承载信息的白」(内容稀疏的气泡/清单)。",
|
|
103
|
+
"vector": true,
|
|
104
|
+
"file": "assets/img/pig-1355.svg",
|
|
105
|
+
"bytes": 9582,
|
|
106
|
+
"sha256": "7dd1e83ae9196ac9bc7dc066439e952799f7bdbb8eb7da12e22f3da52aad6093",
|
|
107
|
+
"size": {
|
|
108
|
+
"width": 417,
|
|
109
|
+
"height": 354
|
|
110
|
+
},
|
|
111
|
+
"source": {
|
|
112
|
+
"url": "https://pighub.top/images/%E6%80%AA%E7%8C%AA.jpg",
|
|
113
|
+
"group": "pighub",
|
|
114
|
+
"sha256": "0b15fc66ff0fb622d6d667b87bdb17d6fa0d181c1ebb99737329ee0612e50fef"
|
|
115
|
+
},
|
|
116
|
+
"cut": {
|
|
117
|
+
"trim": [
|
|
118
|
+
0.06,
|
|
119
|
+
0.1,
|
|
120
|
+
0.88,
|
|
121
|
+
0.86
|
|
122
|
+
],
|
|
123
|
+
"white": 236
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"id": "pig-1357",
|
|
128
|
+
"title": "乱停猪",
|
|
129
|
+
"kind": "dead",
|
|
130
|
+
"note": "躺地睡觉 + 罚单的场景图:白底(路面上的白)去掉,裁到猪身那一块。 去白口径:白底一律去掉,仅保留「承载信息的白」(内容稀疏的气泡/清单)。",
|
|
131
|
+
"vector": false,
|
|
132
|
+
"file": "assets/img/pig-1357.png",
|
|
133
|
+
"bytes": 323776,
|
|
134
|
+
"sha256": "6a04e57f59af623d8aa28da66b166418db89016fde88704e864972017707f304",
|
|
135
|
+
"size": {
|
|
136
|
+
"width": 640,
|
|
137
|
+
"height": 573
|
|
138
|
+
},
|
|
139
|
+
"source": {
|
|
140
|
+
"url": "https://pighub.top/images/%E4%B9%B1%E5%81%9C%E7%8C%AA.jpg",
|
|
141
|
+
"group": "pighub",
|
|
142
|
+
"sha256": "c6ea79a460b2f2ee1004e5f3d02ff3a2b1c6ac55efa249e72388c98a1f975b99"
|
|
143
|
+
},
|
|
144
|
+
"cut": {
|
|
145
|
+
"trim": [
|
|
146
|
+
0,
|
|
147
|
+
0,
|
|
148
|
+
1,
|
|
149
|
+
1
|
|
150
|
+
],
|
|
151
|
+
"white": 226
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"id": "pig-1358",
|
|
156
|
+
"title": "萝卜猪",
|
|
157
|
+
"kind": "dead",
|
|
158
|
+
"note": "夜景海报:卡片底下的白去掉,裁到猪身;海报文字随内容一起被裁掉。 去白口径:白底一律去掉,仅保留「承载信息的白」(内容稀疏的气泡/清单)。",
|
|
159
|
+
"vector": false,
|
|
160
|
+
"file": "assets/img/pig-1358.png",
|
|
161
|
+
"bytes": 131827,
|
|
162
|
+
"sha256": "40cbea431c257cbc17000022f1c22067fa23968faf288c2942dc74eb6fb7dc52",
|
|
163
|
+
"size": {
|
|
164
|
+
"width": 719,
|
|
165
|
+
"height": 631
|
|
166
|
+
},
|
|
167
|
+
"source": {
|
|
168
|
+
"url": "https://pighub.top/images/%E8%90%9D%E5%8D%9C%E7%8C%AA.jpg",
|
|
169
|
+
"group": "pighub",
|
|
170
|
+
"sha256": "40f31fac7d709a5e7503dadd64438e6b5e13f81ea1bbae341cb14d4280229010"
|
|
171
|
+
},
|
|
172
|
+
"cut": {
|
|
173
|
+
"trim": [
|
|
174
|
+
0,
|
|
175
|
+
0,
|
|
176
|
+
1,
|
|
177
|
+
1
|
|
178
|
+
],
|
|
179
|
+
"white": 236
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"id": "pig-1360",
|
|
184
|
+
"title": "你已笨哭",
|
|
185
|
+
"kind": "dead",
|
|
186
|
+
"note": "电脑前场景卡:卡片白底去掉(里面塞着图,密度高),屏幕里的白清单是信息白,保留。 去白口径:白底一律去掉,仅保留「承载信息的白」(内容稀疏的气泡/清单)。",
|
|
187
|
+
"vector": false,
|
|
188
|
+
"file": "assets/img/pig-1360.png",
|
|
189
|
+
"bytes": 177781,
|
|
190
|
+
"sha256": "7c0aa52915d1b39ef65239e7b780c50b591e54f871cf4fee4fced855d3577142",
|
|
191
|
+
"size": {
|
|
192
|
+
"width": 1454,
|
|
193
|
+
"height": 1080
|
|
194
|
+
},
|
|
195
|
+
"source": {
|
|
196
|
+
"url": "https://pighub.top/images/%E4%BD%A0%E5%B7%B2%E7%AC%A8%E5%93%AD_1.jpg",
|
|
197
|
+
"group": "pighub",
|
|
198
|
+
"sha256": "425c8084e4caa13c8ee6b2e63a881d4d7d1fd818fec675800ee214f478efdc9b"
|
|
199
|
+
},
|
|
200
|
+
"cut": {
|
|
201
|
+
"trim": [
|
|
202
|
+
0,
|
|
203
|
+
0,
|
|
204
|
+
1,
|
|
205
|
+
1
|
|
206
|
+
],
|
|
207
|
+
"white": 226
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"id": "pig-1361",
|
|
212
|
+
"title": "你知道吗",
|
|
213
|
+
"kind": "live",
|
|
214
|
+
"note": "上半是重复文字、下半是干净一只猪:定制切分只取猪身那一条,再踩到猪身。 去白口径:白底一律去掉,仅保留「承载信息的白」(内容稀疏的气泡/清单)。",
|
|
215
|
+
"vector": true,
|
|
216
|
+
"file": "assets/img/pig-1361.svg",
|
|
217
|
+
"bytes": 10813,
|
|
218
|
+
"sha256": "6f20f1bd66bbf9b81b93bc30c3244e5192f9d54a4ef9de307112b15b98396647",
|
|
219
|
+
"size": {
|
|
220
|
+
"width": 770,
|
|
221
|
+
"height": 681
|
|
222
|
+
},
|
|
223
|
+
"source": {
|
|
224
|
+
"url": "https://pighub.top/images/%E4%BD%A0%E7%9F%A5%E9%81%93%E5%90%97.jpg",
|
|
225
|
+
"group": "pighub",
|
|
226
|
+
"sha256": "c61c93ea5608c54f008a04868f18af4fc9976b3668899a74833e5dcb09f153ad"
|
|
227
|
+
},
|
|
228
|
+
"cut": {
|
|
229
|
+
"trim": [
|
|
230
|
+
0.06,
|
|
231
|
+
0.34,
|
|
232
|
+
0.88,
|
|
233
|
+
0.62
|
|
234
|
+
],
|
|
235
|
+
"white": 236
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
]
|
|
239
|
+
}
|
package/lib/assets.js
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 冻结素材库的读取层(Host 半)。
|
|
3
|
+
*
|
|
4
|
+
* 素材在**构建期**就已经处理好并随包分发(见 scripts/build-assets.mjs):运行时只读
|
|
5
|
+
* `assets/manifest.json` 与 `assets/img/*`,**不访问素材库、不做任何图像计算**。
|
|
6
|
+
* 每一版用哪几只猪、哪只是死猪、贴图是 PNG 还是 SVG,全部由清单决定。
|
|
7
|
+
*/
|
|
8
|
+
import { readFileSync, existsSync, statSync } from 'node:fs';
|
|
9
|
+
|
|
10
|
+
export const MANIFEST_PATH = new URL('../assets/manifest.json', import.meta.url);
|
|
11
|
+
export const IMAGE_DIR = new URL('../assets/img/', import.meta.url);
|
|
12
|
+
export const ASSET_ROUTE = '/pighub/asset';
|
|
13
|
+
|
|
14
|
+
/** 读冻结库。缺失或坏掉都不抛:返回 null,由调用方决定怎么降级。 */
|
|
15
|
+
export function readAssetManifest() {
|
|
16
|
+
try {
|
|
17
|
+
if (!existsSync(MANIFEST_PATH)) return null;
|
|
18
|
+
const manifest = JSON.parse(readFileSync(MANIFEST_PATH, 'utf8'));
|
|
19
|
+
if (!manifest || !Array.isArray(manifest.pigs) || manifest.pigs.length === 0) return null;
|
|
20
|
+
return manifest;
|
|
21
|
+
} catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** 清单里的相对路径 → 本地贴图 URL(由 Host 半的静态路由提供)。 */
|
|
27
|
+
export function assetUrlOf(pig) {
|
|
28
|
+
const file = pig && typeof pig.file === 'string' ? pig.file : '';
|
|
29
|
+
const name = file.split('/').pop();
|
|
30
|
+
return name ? ASSET_ROUTE + '/' + name : '';
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* 冻结库 → 抽取池。字段与 draw() 期望的条目同形。
|
|
35
|
+
* 排序固定(按 id),所以同样的清单每次抽取池顺序一致——配合可注入的 rng 可完全复现。
|
|
36
|
+
*/
|
|
37
|
+
export function assetPool(manifest) {
|
|
38
|
+
const pigs = (manifest && Array.isArray(manifest.pigs) ? manifest.pigs : []).slice()
|
|
39
|
+
.sort((a, b) => String(a.id).localeCompare(String(b.id)));
|
|
40
|
+
return {
|
|
41
|
+
images: pigs.map((pig) => ({
|
|
42
|
+
id: pig.id,
|
|
43
|
+
title: pig.title,
|
|
44
|
+
filename: String(pig.file || '').split('/').pop(),
|
|
45
|
+
imageUrl: assetUrlOf(pig),
|
|
46
|
+
assetUrl: assetUrlOf(pig),
|
|
47
|
+
kind: pig.kind === 'dead' ? 'dead' : 'live',
|
|
48
|
+
vector: pig.vector === true,
|
|
49
|
+
sha256: pig.sha256 || '',
|
|
50
|
+
note: pig.note || '',
|
|
51
|
+
})),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** 面板/工具用的摘要(含包内素材体积,便于核对「随包分发」)。 */
|
|
56
|
+
export function assetSummary(manifest) {
|
|
57
|
+
if (!manifest) return { version: '', total: 0, live: 0, dead: 0, vector: 0, bytes: 0, available: false };
|
|
58
|
+
const pigs = manifest.pigs || [];
|
|
59
|
+
const live = pigs.filter((pig) => pig.kind === 'live').length;
|
|
60
|
+
let bytes = 0;
|
|
61
|
+
for (const pig of pigs) {
|
|
62
|
+
try {
|
|
63
|
+
const file = new URL('.' + '/' + String(pig.file || '').replace('assets/img/', ''), IMAGE_DIR);
|
|
64
|
+
if (existsSync(file)) bytes += statSync(file).size;
|
|
65
|
+
} catch { /* 文件缺失不影响摘要 */ }
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
version: manifest.assetVersion || '',
|
|
69
|
+
frozenAt: manifest.frozenAt || '',
|
|
70
|
+
total: pigs.length,
|
|
71
|
+
live,
|
|
72
|
+
dead: pigs.length - live,
|
|
73
|
+
vector: pigs.filter((pig) => pig.vector).length,
|
|
74
|
+
bytes,
|
|
75
|
+
available: true,
|
|
76
|
+
};
|
|
77
|
+
}
|