Files
tamabox/.workbuddy/memory/2026-10-22.md
T
tamakyi 5c0de805c6 new-sakura:花枝朝向与分叉修正,素材包一键导出上传到对象存储
- gen_new_sakura.py:花朵加各自旋转角(原来一律朝上,像贴纸);分叉从垂直下垂改成向右上斜;
  新增 --asset-base / --out —— 填前缀就引用对象存储位图,留空仍是内联 SVG。
- export_assets.py(新增):从 gen_new_sakura 的同一份 SVG 出图(直接 import,不另画一套),
  用无头 Chrome 透明底渲染后转 WebP;--upload 一次传 CSS + 5 张 webp + 生成的 INSTALL.txt,
  公开地址按 data/r2.txt 的 image_bucket_cdn_host(与 app.ini 同名)拼。
- serve.upload_files 支持逐文件 cacheControl。原来硬编码 immutable,而 INSTALL.txt 与镜像
  CSS 的键不带版本 —— 重新生成后浏览器/CDN 一年内都还是旧内容。现在位图 1 天、CSS 5 分钟、
  README 60 秒;selftest 补一条覆盖断言。
- 文档更正两处事实:①自定义域 r2.337845818.best 实测可匿名读(S3 endpoint 仍 403);
  ②服务端有 gzip,内联版 51KB 实际传输 3.9KB,比位图版(2.7KB + 5 图 48.9KB)小得多,
  所以「换位图省 CSS 体积」不成立,位图只在素材要复用到非 CSS 场景时才有意义。
  另记:曾以 immutable 传过的键必须去控制台清缓存,重传不会让边缘失效。
2026-10-22 11:06:13 +08:00

3.0 KiB
Raw Blame History

2026-10-22

new-sakura 主题:纯 CSS 樱花

用户要求「用编辑器生成 new-sakura,CSS 做樱花、每页位置不同、上传到已配好的 S3」。

  • 结论:生成器做不了这个 —— 它的装饰层只支持图片素材(导出打 zip / 传对象存储), 没有内联 SVG 图层。所以改成手写主题 CSS(结构完全遵循生成器输出:令牌 + 10 槽 deco + scope 覆盖),生成器只用来做视觉验证。
  • 实现:dev/theme-tools/gen_new_sakura.py 生成 static/css/themes/new-sakura.css。 花/瓣/枝/底纹都是内联 SVG 的 data URI(quote(svq, safe="") 全编码,避免 URI 里的 逗号被 TestDecoSlotCount 当成分层符)。CSS 50KB(gzip ≈12KB)。
  • 六个 scope 各一套 --tb-deco 位置;窄屏(≤640px)装饰全关、底纹缩到 200px; 深色换亮粉 + 关底纹(浅粉压深底=噪点)。
  • 调参踩到的:①花枝 auto 390px 放右上角时可见部分只剩一团花 → 缩到 300px 并内移; ②枝上 5 朵 scale≈1 的花是一串糖葫芦 → 改成 8 朵 0.4~0.62; ③底纹 260px 双花双瓣读成「包装纸」→ 改成 300px 一朵花 + 两片瓣、各自错位。
  • 对比度:primary 候选 #c14a72 只有 4.39:1,压深到 #b8436a(4.87);muted #77626a(5.27); 深色 #ff93b4(8.17)/#ab9099(5.82)。
  • i18n 四份词典加 theme.name.new-sakura(插在 shiroko 之后,gofmt_keep_crlf 后每份只 +1 行); conf/app.sample.ini 的 available 登记。
  • ⚠️ 本机 Chrome/Edge 的 localStorage 里没有生成器的 S3 配置记录,项目也没有 conf/app.ini → 「已预先配置好的 S3」在本机取不到,上传这一步需要用户给凭据。 纯 CSS 主题本身零素材,严格来说 S3 无事可做(已向用户确认)。

R2 自定义域可用 + 素材包一键上传(接上一条)

  • r2.337845818.best 实测公开可读(7 个对象全部 200、Content-Type 正确);桶的 S3 endpoint 仍 403。
  • 樱花位图从 gen_new_sakura.py 的同一份 SVG 导出(export_assets.py 直接 import 它,不另画), --upload 一次传 CSS + 5 张 webp + 生成的 INSTALL.txt(域名/体积写实数)。
  • serve.upload_files 支持逐文件 cacheControl:原来硬编码 immutable,而 INSTALL.txt / 镜像 CSS 的键不带版本 → 改了看不到。现在位图 1 天、CSS 5 分钟、README 60 秒。
  • ⚠️ CF 边缘缓存不会因为重传而失效:第一版以 immutable 传过,cf-cache-status: HIT、Age>800, 重传后拿到的仍是旧副本(带 ?cb= 才是新内容)。清缓存只能去控制台按 URL 清。
  • ⚠️ gzip 纠错:服务端 internal/route/gzip.go 会压 CSS,内联版 51KB 实际传输 3.9KB, 位图版 2.7KB + 5 张图 48.9KB ≈ 51.6KB。所以"换位图省 CSS 体积"是错的 —— 位图唯一的理由是素材要给非 CSS 场景复用。文档与 INSTALL.txt 都已改。
  • image_bucket_cdn_host 沿用 app.ini 同名键(只写主机名),export_assets.py 据此拼公开地址。