diff --git a/BLOG.md b/BLOG.md new file mode 100644 index 0000000..c0f6a80 --- /dev/null +++ b/BLOG.md @@ -0,0 +1,100 @@ +# [萌芽妙妙工具]RandBG API:一个零成本、可自托管的随机背景图片API + +> **开源地址**: [github.com/shumengya/randbg-api](https://github.com/shumengya/randbg-api) +> **开源协议**: [MIT License](https://github.com/shumengya/randbg-api/blob/main/LICENSE) +> **在线体验**: [randbg.smyhub.com](https://randbg.smyhub.com) +> **作者**: *树萌芽* + +--- + +## 前言 + +平时写博客、做落地页,总需要随机背景图。用别人的服务怕挂、怕限速;自己搭又嫌重。我想要一个**够轻、够快、够便宜**的方案——最好不用维护服务器,直接部署就能跑。 + +Cloudflare Workers 的 Free Tier 每月 10 万次请求,对个人项目完全够用。问题是:图片放哪儿? + +直接把图片塞进 Worker 脚本?不行,Worker 有 4 MiB 体积限制,几十张图直接撑爆。 + +所以我把架构拆成两层:Worker 只跑 API 逻辑,图片和前端页面全部走 **Workers Static Assets**。 + +--- + +## 项目架构 + +``` +┌─────────────┐ ┌──────────────────┐ ┌──────────────┐ +│ 用户请求 │────▶│ Cloudflare Worker│────▶│ Static Assets│ +│ │ │ /api/random │ │ WebP 图片 │ +└─────────────┘ └──────────────────┘ └──────────────┘ +``` + +**Worker 端**:不到 200 行 JS,只做三件事——读 `manifest.json`、识别设备、302 或 JSON 响应。 + +**静态端**:`public/` 目录下放 `index.html`、`manifest.json`、编号 WebP 图片。`wrangler deploy` 一次把前后端一起发布。 + +这样做的好处很直接: +- Worker 脚本极小,冷启动几乎无感 +- 图片走 Cloudflare CDN,全球缓存 +- 不涉及数据库,无状态,不存在宕机 + +--- + +## 核心功能 + +### 设备识别 + +根据 `User-Agent` 和 `Sec-CH-UA-Mobile` 自动判断移动端/桌面端,返回对应方向的图片。你也可以手动指定: + +```bash +curl https://randbg.smyhub.com/api/random?mode=mobile +``` + +### 响应格式 + +默认 `302 Redirect` 直接跳转到图片地址,浏览器里一行就能用: + +```html + +``` + +加上 `?format=json` 返回元数据,方便前端自己控制加载逻辑: + +```json +{ + "variant": "desktop", + "folder": "desketop-image", + "filename": "7.webp", + "url": "https://randbg.smyhub.com/desketop-image/7.webp", + "count": 19 +} +``` + +### 构建流程 + +写了个 `build.py`,功能单一但够用: + +1. 扫描 `mobile-image/` 和 `desketop-image/` 目录 +2. 用 Pillow 把原图转为编号 WebP(`1.webp`、`2.webp`...) +3. 输出到 `public/` 并生成 `manifest.json` +4. 如果已有 WebP 且没有原图,自动保留,不会误删 + +```bash +python3 build.py +npm run deploy +``` + +--- + +## 部署 + +整个部署流程是: + +1. 把原图扔进 `mobile-image/` 和 `desketop-image/` +2. `python3 build.py` 转 WebP +3. `npm run deploy` 推到 Cloudflare + +从改图到上线,本地测试用 `npm run dev`,本地 8787 端口就能跑。没有 Docker,没有数据库,没有环境变量要填。 + +--- + +如果你也需要一个零成本、不用维护的随机背景服务,可以直接 Fork 用。代码量很小,改起来不费劲。 diff --git a/Typora_Hook_Log.txt b/Typora_Hook_Log.txt new file mode 100644 index 0000000..b24cecf --- /dev/null +++ b/Typora_Hook_Log.txt @@ -0,0 +1,390 @@ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync 重定向 D:\WindowsApp\Typora\resources\app\atom.compiled.dist.jsc --> D:\WindowsApp\Typora\resources\app.bak\atom.compiled.dist.jsc +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.openSync D:\WindowsApp\Typora\resources\app.bak\atom.compiled.dist.jsc +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\hjson\lib\hjson.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\index.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\util\assign.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\fs\index.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\node_modules\universalify\index.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\graceful-fs\graceful-fs.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\graceful-fs\polyfills.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\graceful-fs\legacy-streams.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\graceful-fs\clone.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\copy\index.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\copy\copy.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\copy\ncp.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\util\utimes.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\mkdirs\index.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\mkdirs\mkdirs.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\mkdirs\win32.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\mkdirs\mkdirs-sync.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\path-exists\index.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\copy-sync\index.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\copy-sync\copy-sync.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\copy-sync\copy-file-sync.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\util\buffer.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\remove\index.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\remove\rimraf.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\json\index.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\json\jsonfile.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\node_modules\jsonfile\index.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\json\output-json-sync.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\json\output-json.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\move\index.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\move-sync\index.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\empty\index.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\ensure\index.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\ensure\file.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\ensure\link.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\ensure\symlink.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\ensure\symlink-paths.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\ensure\symlink-type.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\output\index.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\electron-fetch\lib\index.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\electron-fetch\node_modules\encoding\lib\encoding.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\iconv-lite\lib\index.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\iconv-lite\node_modules\safer-buffer\safer.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\iconv-lite\lib\bom-handling.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\iconv-lite\lib\streams.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync C:\Users\smy\AppData\Roaming\Typora/conf/conf.user.json +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\lib\fs-plus.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\underscore-plus\lib\underscore-plus.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\underscore\underscore-node.cjs +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\underscore\underscore-node-f.cjs +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\async\lib\async.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\mkdirp\index.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\rimraf\rimraf.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\glob\glob.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\fs.realpath\index.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\fs.realpath\old.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\minimatch\minimatch.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\brace-expansion\index.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\concat-map\index.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\balanced-match\index.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\inherits\inherits.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\path-is-absolute\index.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\glob\sync.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\glob\common.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\inflight\inflight.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\wrappy\wrappy.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\once\once.js +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.statSync d:\windowsapp\typora\typora.exe +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.statSync D:\WINDOWSAPP\TYPORA\TYPORA.EXE +------------------ +[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/typora.log +------------------ +[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\lowdb\lib\main.js +------------------ +[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\lowdb\node_modules\lodash\lodash.js +------------------ +[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\lowdb\node_modules\is-promise\index.js +------------------ +[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\lowdb\adapters\FileSync.js +------------------ +[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\lowdb\adapters\Base.js +------------------ +[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\lowdb\adapters\_stringify.js +------------------ +[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync C:\Users\smy\AppData\Roaming\Typora\profile.data +------------------ +[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync C:\Users\smy\AppData\Roaming\Typora\history.data +------------------ +[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\native-reg\lib\index.js +------------------ +[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFile D:\WindowsApp\Typora\resources\locales\zh-Hans.lproj\Panel.json +------------------ +[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFile D:\WindowsApp\Typora\resources\locales\zh-Hans.lproj\Panel.json +------------------ +[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.statSync D:\SmyProjects\CloudFlare\CloudFlare Workers\randbg-api\BLOG.md +------------------ +[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFile D:\WindowsApp\Typora\resources\locales\zh-Hans.lproj\Menu.json +------------------ +[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\electron-progressbar\source\index.js +------------------ +[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\electron-progressbar\node_modules\extend\index.js +------------------ +[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFile D:\WindowsApp\Typora\resources\locales\zh-Hans.lproj\Menu.json +------------------ +[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFile C:\Users\smy\AppData\Roaming\Typora\typora-dictionaries/user-dict.json +------------------ +[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Local\Temp\Typora +------------------ +[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:02:11] [Log] [🛡️ fsHook/Promises] 程序试图 fs.promises.readFile 重定向 D:\WindowsApp\Typora\resources\app/package.json --> D:\WindowsApp\Typora\resources\app.bak\package.json +------------------ +[2026/6/6 21:02:11] [Log] [🛡️ fsHook/Promises] 程序试图 fs.promises.readFile 重定向 D:\WindowsApp\Typora\resources\app/launch.dist.js --> D:\WindowsApp\Typora\resources\app.bak\launch.dist.js +------------------ +[2026/6/6 21:02:11] [Log] [🛡️ fsHook/Promises] 程序试图 fs.promises.readFile 重定向 D:\WindowsApp\Typora\resources\app/../page-dist/license.html --> D:\WindowsApp\Typora\resources\app.bak\../page-dist/license.html +------------------ +[2026/6/6 21:02:11] [Log] [🛡️ fsHook/Promises] 程序试图 fs.promises.readFile 重定向 D:\WindowsApp\Typora\resources\app/../page-dist/static/js/LicenseIndex.180dd4c7.5b58fa97.js --> D:\WindowsApp\Typora\resources\app.bak\../page-dist/static/js/LicenseIndex.180dd4c7.5b58fa97.js +------------------ +[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:02:41] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\draftsRecover +------------------ +[2026/6/6 21:02:58] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:02:58] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:03:02] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:03:02] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:03:05] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:03:05] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:03:07] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:03:07] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:03:08] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:03:08] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:03:09] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:03:09] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:03:11] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:03:11] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:03:12] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:03:12] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:03:45] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:03:45] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:03:46] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:03:46] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:03:47] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:03:47] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:03:49] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:03:49] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:03:51] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:03:51] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:03:52] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:03:52] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:03:54] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:03:54] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:04:01] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:04:01] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:04:09] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:04:09] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:04:21] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:04:21] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:04:26] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:04:26] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:04:29] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:04:29] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:04:31] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:04:31] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:04:34] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:04:34] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:04:35] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:04:35] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:04:36] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:04:36] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:04:43] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:04:43] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:04:45] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:04:45] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:04:50] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:04:50] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:04:53] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:04:53] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:04:54] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:04:54] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:04:55] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:04:55] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:05:09] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:05:09] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:05:12] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:05:12] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:05:14] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:05:14] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:06:50] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:06:50] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:07:28] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:07:28] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:07:30] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:07:30] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:07:37] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:07:37] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:07:39] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:07:39] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:07:42] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:07:42] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:07:52] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:07:52] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:08:01] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:08:01] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:08:07] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:08:07] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:08:09] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:08:09] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:08:11] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:08:11] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:08:12] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:08:12] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:08:14] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:08:14] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:08:23] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:08:23] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum +------------------ +[2026/6/6 21:11:00] [Log] [🛡️ fsHook] 程序试图 fs.statSync C:\Users\smy\AppData\Roaming\Typora\backups +------------------ +[2026/6/6 21:11:00] [Log] [🛡️ fsHook] 程序试图 fs.statSync C:\Users\smy\AppData\Roaming\Typora/typora.log +------------------ diff --git a/optimize_webp.py b/optimize_webp.py new file mode 100644 index 0000000..225a811 --- /dev/null +++ b/optimize_webp.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python3 +"""Re-compress existing .webp images with optimized parameters to reduce file size. + +Usage: + python optimize_webp.py + +Backups originals to a .bak/ folder before overwriting. +""" + +from pathlib import Path +from PIL import Image +import shutil + +BASE_DIR = Path(__file__).resolve().parent +PUBLIC_DIR = BASE_DIR / "public" + +# Directories to optimize +TARGET_DIRS = [ + PUBLIC_DIR / "mobile-image", + PUBLIC_DIR / "desketop-image", +] + +# Compression parameters +QUALITY = 80 +METHOD = 6 + + +def optimize_webp(src_path: Path, backup_dir: Path) -> tuple[int, int]: + """Re-encode a single WebP image with optimized quality settings. + Returns (original_size, new_size) in bytes. + """ + original_size = src_path.stat().st_size + backup_path = backup_dir / src_path.name + + # Backup original + shutil.copy2(src_path, backup_path) + + # Re-encode + img = Image.open(src_path) + # For RGB/RGBA, keep as-is; for other modes, convert to RGBA + if img.mode not in ("RGB", "RGBA"): + img = img.convert("RGBA") + img.save(src_path, format="WEBP", quality=QUALITY, method=METHOD) + + new_size = src_path.stat().st_size + return original_size, new_size + + +def main(): + total_original = 0 + total_new = 0 + total_files = 0 + + for target_dir in TARGET_DIRS: + if not target_dir.exists(): + print(f"Skip: {target_dir} not found") + continue + + backup_dir = target_dir.parent / (target_dir.name + ".bak") + backup_dir.mkdir(exist_ok=True) + + print(f"\n[DIR] Optimizing: {target_dir}") + print("-" * 50) + + for webp_file in sorted(target_dir.glob("*.webp"), key=lambda p: p.name.lower()): + original_size, new_size = optimize_webp(webp_file, backup_dir) + total_original += original_size + total_new += new_size + total_files += 1 + + reduction = original_size - new_size + pct = (reduction / original_size) * 100 if original_size else 0 + status = "OK" if new_size < original_size else "WARN" + print( + f" [{status}] {webp_file.name:20s} " + f"{original_size/1024:8.1f} KB -> {new_size/1024:8.1f} KB " + f"(-{reduction/1024:8.1f} KB, {pct:5.1f}%)" + ) + + print("\n" + "=" * 60) + print(f" Total files: {total_files}") + print(f" Original size: {total_original/1024/1024:.2f} MB") + print(f" New size: {total_new/1024/1024:.2f} MB") + print(f" Saved: {(total_original - total_new)/1024/1024:.2f} MB ({(total_original - total_new)/total_original*100:.1f}%)") + print("=" * 60) + print(f"\nBackups saved to: {PUBLIC_DIR}/mobile-image.bak/ and desketop-image.bak/") + print("If quality is not acceptable, restore from backup folders.") + + +if __name__ == "__main__": + main() diff --git a/public/desketop-image.bak/1.webp b/public/desketop-image.bak/1.webp new file mode 100644 index 0000000..2c22953 Binary files /dev/null and b/public/desketop-image.bak/1.webp differ diff --git a/public/desketop-image.bak/10.webp b/public/desketop-image.bak/10.webp new file mode 100644 index 0000000..6c8eb80 Binary files /dev/null and b/public/desketop-image.bak/10.webp differ diff --git a/public/desketop-image.bak/11.webp b/public/desketop-image.bak/11.webp new file mode 100644 index 0000000..07a4d25 Binary files /dev/null and b/public/desketop-image.bak/11.webp differ diff --git a/public/desketop-image.bak/12.webp b/public/desketop-image.bak/12.webp new file mode 100644 index 0000000..7ed3417 Binary files /dev/null and b/public/desketop-image.bak/12.webp differ diff --git a/public/desketop-image.bak/13.webp b/public/desketop-image.bak/13.webp new file mode 100644 index 0000000..b587ec4 Binary files /dev/null and b/public/desketop-image.bak/13.webp differ diff --git a/public/desketop-image.bak/14.webp b/public/desketop-image.bak/14.webp new file mode 100644 index 0000000..5afd06e Binary files /dev/null and b/public/desketop-image.bak/14.webp differ diff --git a/public/desketop-image.bak/15.webp b/public/desketop-image.bak/15.webp new file mode 100644 index 0000000..7ee04a9 Binary files /dev/null and b/public/desketop-image.bak/15.webp differ diff --git a/public/desketop-image.bak/16.webp b/public/desketop-image.bak/16.webp new file mode 100644 index 0000000..d239c20 Binary files /dev/null and b/public/desketop-image.bak/16.webp differ diff --git a/public/desketop-image.bak/17.webp b/public/desketop-image.bak/17.webp new file mode 100644 index 0000000..0f27713 Binary files /dev/null and b/public/desketop-image.bak/17.webp differ diff --git a/public/desketop-image.bak/18.webp b/public/desketop-image.bak/18.webp new file mode 100644 index 0000000..d281c39 Binary files /dev/null and b/public/desketop-image.bak/18.webp differ diff --git a/public/desketop-image.bak/19.webp b/public/desketop-image.bak/19.webp new file mode 100644 index 0000000..1997f9f Binary files /dev/null and b/public/desketop-image.bak/19.webp differ diff --git a/public/desketop-image.bak/2.webp b/public/desketop-image.bak/2.webp new file mode 100644 index 0000000..6825a63 Binary files /dev/null and b/public/desketop-image.bak/2.webp differ diff --git a/public/desketop-image.bak/3.webp b/public/desketop-image.bak/3.webp new file mode 100644 index 0000000..a699097 Binary files /dev/null and b/public/desketop-image.bak/3.webp differ diff --git a/public/desketop-image.bak/4.webp b/public/desketop-image.bak/4.webp new file mode 100644 index 0000000..21af0f9 Binary files /dev/null and b/public/desketop-image.bak/4.webp differ diff --git a/public/desketop-image.bak/5.webp b/public/desketop-image.bak/5.webp new file mode 100644 index 0000000..d8ecf88 Binary files /dev/null and b/public/desketop-image.bak/5.webp differ diff --git a/public/desketop-image.bak/6.webp b/public/desketop-image.bak/6.webp new file mode 100644 index 0000000..e1ef0d5 Binary files /dev/null and b/public/desketop-image.bak/6.webp differ diff --git a/public/desketop-image.bak/7.webp b/public/desketop-image.bak/7.webp new file mode 100644 index 0000000..5d79439 Binary files /dev/null and b/public/desketop-image.bak/7.webp differ diff --git a/public/desketop-image.bak/8.webp b/public/desketop-image.bak/8.webp new file mode 100644 index 0000000..daef5ea Binary files /dev/null and b/public/desketop-image.bak/8.webp differ diff --git a/public/desketop-image.bak/9.webp b/public/desketop-image.bak/9.webp new file mode 100644 index 0000000..889147d Binary files /dev/null and b/public/desketop-image.bak/9.webp differ diff --git a/public/desketop-image/1.webp b/public/desketop-image/1.webp index 2c22953..4975378 100644 Binary files a/public/desketop-image/1.webp and b/public/desketop-image/1.webp differ diff --git a/public/desketop-image/10.webp b/public/desketop-image/10.webp index 6c8eb80..2302af0 100644 Binary files a/public/desketop-image/10.webp and b/public/desketop-image/10.webp differ diff --git a/public/desketop-image/11.webp b/public/desketop-image/11.webp index 07a4d25..edb01c3 100644 Binary files a/public/desketop-image/11.webp and b/public/desketop-image/11.webp differ diff --git a/public/desketop-image/12.webp b/public/desketop-image/12.webp index 7ed3417..0f1e3af 100644 Binary files a/public/desketop-image/12.webp and b/public/desketop-image/12.webp differ diff --git a/public/desketop-image/13.webp b/public/desketop-image/13.webp index b587ec4..33dd88c 100644 Binary files a/public/desketop-image/13.webp and b/public/desketop-image/13.webp differ diff --git a/public/desketop-image/14.webp b/public/desketop-image/14.webp index 5afd06e..c97c6f4 100644 Binary files a/public/desketop-image/14.webp and b/public/desketop-image/14.webp differ diff --git a/public/desketop-image/15.webp b/public/desketop-image/15.webp index 7ee04a9..07927fc 100644 Binary files a/public/desketop-image/15.webp and b/public/desketop-image/15.webp differ diff --git a/public/desketop-image/16.webp b/public/desketop-image/16.webp index d239c20..f8d8f22 100644 Binary files a/public/desketop-image/16.webp and b/public/desketop-image/16.webp differ diff --git a/public/desketop-image/17.webp b/public/desketop-image/17.webp index 0f27713..9276d82 100644 Binary files a/public/desketop-image/17.webp and b/public/desketop-image/17.webp differ diff --git a/public/desketop-image/18.webp b/public/desketop-image/18.webp index d281c39..db5c4e5 100644 Binary files a/public/desketop-image/18.webp and b/public/desketop-image/18.webp differ diff --git a/public/desketop-image/19.webp b/public/desketop-image/19.webp index 1997f9f..f1ec9d7 100644 Binary files a/public/desketop-image/19.webp and b/public/desketop-image/19.webp differ diff --git a/public/desketop-image/2.webp b/public/desketop-image/2.webp index 6825a63..f8e699d 100644 Binary files a/public/desketop-image/2.webp and b/public/desketop-image/2.webp differ diff --git a/public/desketop-image/3.webp b/public/desketop-image/3.webp index a699097..389ee21 100644 Binary files a/public/desketop-image/3.webp and b/public/desketop-image/3.webp differ diff --git a/public/desketop-image/4.webp b/public/desketop-image/4.webp index 21af0f9..ed4adfe 100644 Binary files a/public/desketop-image/4.webp and b/public/desketop-image/4.webp differ diff --git a/public/desketop-image/5.webp b/public/desketop-image/5.webp index d8ecf88..54faf85 100644 Binary files a/public/desketop-image/5.webp and b/public/desketop-image/5.webp differ diff --git a/public/desketop-image/6.webp b/public/desketop-image/6.webp index e1ef0d5..281f08c 100644 Binary files a/public/desketop-image/6.webp and b/public/desketop-image/6.webp differ diff --git a/public/desketop-image/7.webp b/public/desketop-image/7.webp index 5d79439..4ab703e 100644 Binary files a/public/desketop-image/7.webp and b/public/desketop-image/7.webp differ diff --git a/public/desketop-image/8.webp b/public/desketop-image/8.webp index daef5ea..c3de1cc 100644 Binary files a/public/desketop-image/8.webp and b/public/desketop-image/8.webp differ diff --git a/public/desketop-image/9.webp b/public/desketop-image/9.webp index 889147d..11e0a30 100644 Binary files a/public/desketop-image/9.webp and b/public/desketop-image/9.webp differ diff --git a/public/mobile-image.bak/1.webp b/public/mobile-image.bak/1.webp new file mode 100644 index 0000000..35d69e3 Binary files /dev/null and b/public/mobile-image.bak/1.webp differ diff --git a/public/mobile-image.bak/2.webp b/public/mobile-image.bak/2.webp new file mode 100644 index 0000000..689e07f Binary files /dev/null and b/public/mobile-image.bak/2.webp differ diff --git a/public/mobile-image.bak/3.webp b/public/mobile-image.bak/3.webp new file mode 100644 index 0000000..74f13f7 Binary files /dev/null and b/public/mobile-image.bak/3.webp differ diff --git a/public/mobile-image.bak/4.webp b/public/mobile-image.bak/4.webp new file mode 100644 index 0000000..95dd2e1 Binary files /dev/null and b/public/mobile-image.bak/4.webp differ diff --git a/public/mobile-image.bak/5.webp b/public/mobile-image.bak/5.webp new file mode 100644 index 0000000..f10b9a2 Binary files /dev/null and b/public/mobile-image.bak/5.webp differ diff --git a/public/mobile-image.bak/6.webp b/public/mobile-image.bak/6.webp new file mode 100644 index 0000000..a37bf8a Binary files /dev/null and b/public/mobile-image.bak/6.webp differ diff --git a/public/mobile-image/1.webp b/public/mobile-image/1.webp index 35d69e3..04c7ef8 100644 Binary files a/public/mobile-image/1.webp and b/public/mobile-image/1.webp differ diff --git a/public/mobile-image/2.webp b/public/mobile-image/2.webp index 689e07f..303cfe5 100644 Binary files a/public/mobile-image/2.webp and b/public/mobile-image/2.webp differ diff --git a/public/mobile-image/3.webp b/public/mobile-image/3.webp index 74f13f7..dd3620a 100644 Binary files a/public/mobile-image/3.webp and b/public/mobile-image/3.webp differ diff --git a/public/mobile-image/4.webp b/public/mobile-image/4.webp index 95dd2e1..f4a2113 100644 Binary files a/public/mobile-image/4.webp and b/public/mobile-image/4.webp differ diff --git a/public/mobile-image/5.webp b/public/mobile-image/5.webp index f10b9a2..83b47da 100644 Binary files a/public/mobile-image/5.webp and b/public/mobile-image/5.webp differ diff --git a/public/mobile-image/6.webp b/public/mobile-image/6.webp index a37bf8a..8a9a5e7 100644 Binary files a/public/mobile-image/6.webp and b/public/mobile-image/6.webp differ