<?xml version='1.0' encoding='utf-8'?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0"><channel><title>拾光小站</title><description>记录灵感、折腾与日常</description><link>https://473424071.cn/</link><language>zh_CN</language><item><title>欢迎来到我的博客！</title><link>https://473424071.cn/posts/top/</link><guid isPermaLink="true">https://473424071.cn/posts/top/</guid><description>致谢板及简介</description><pubDate>Sat, 24 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;---你好陌生人，这里是Tyreamon的博客---&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;---&lt;code&gt;献上一首nbuna的歌给你&lt;/code&gt;---&lt;/em&gt;
::music{meting="https://meting.mtcacg.top/api/meting?server=netease&amp;amp;type=song&amp;amp;id=2666842841"}&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;::v[d/e-m]&lt;/p&gt;
&lt;blockquote&gt;
&lt;h3&gt;你怎么知道我双红的？&lt;/h3&gt;
&lt;p&gt;::v[d/2-red]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;&lt;a href="#mycontact"&gt;如何联系？ &lt;/a&gt;&lt;/h2&gt;
&lt;hr /&gt;
&lt;h1&gt;❤️‍🔥致谢板❤️‍🔥&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;致谢以下博客框架的作者和文章中引用项目的各位前辈，为我的博客搭建提供了极大的帮助。
站在巨人肩膀上，借着光能走的更远。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;lt;div class="thanks-wall"&amp;gt;
&amp;lt;div class="thanks-card"&amp;gt;
&amp;lt;img class="thanks-avatar" src="https://github.com/saicaca.png" /&amp;gt;
&amp;lt;div&amp;gt;
&amp;lt;b&amp;gt;Fuwari&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;
作者：saicaca&amp;lt;br/&amp;gt;
&amp;lt;a href="https://github.com/saicaca/fuwari"&amp;gt;GitHub&amp;lt;/a&amp;gt;&amp;lt;br/&amp;gt;
&amp;lt;span class="thanks-tag"&amp;gt;主题框架&amp;lt;/span&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;div class="thanks-card"&amp;gt;
&amp;lt;img class="thanks-avatar" src="https://github.com/afoim.png" /&amp;gt;
&amp;lt;div&amp;gt;
&amp;lt;b&amp;gt;Fuwari&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;
作者：afoim&amp;lt;br/&amp;gt;
&amp;lt;a href="https://github.com/afoim/fuwari"&amp;gt;GitHub&amp;lt;/a&amp;gt;&amp;lt;br/&amp;gt;
&amp;lt;span class="thanks-tag"&amp;gt;主题框架&amp;lt;/span&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;div class="thanks-card"&amp;gt;
&amp;lt;img class="thanks-avatar" src="https://github.com/withastro.png" /&amp;gt;
&amp;lt;div&amp;gt;
&amp;lt;b&amp;gt;Astro&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;
作者：withastro&amp;lt;br/&amp;gt;
&amp;lt;a href="https://github.com/withastro/astro"&amp;gt;GitHub&amp;lt;/a&amp;gt;&amp;lt;br/&amp;gt;
&amp;lt;span class="thanks-tag"&amp;gt;构建框架&amp;lt;/span&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;div class="thanks-card"&amp;gt;
&amp;lt;img class="thanks-avatar" src="https://github.com/Spr-Aachen.png" /&amp;gt;
&amp;lt;div&amp;gt;
&amp;lt;b&amp;gt;Tailwind CSS&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;
作者：Spr-Aachen&amp;lt;br/&amp;gt;
&amp;lt;a href="https://github.com/Spr-Aachen/Twilight"&amp;gt;GitHub&amp;lt;/a&amp;gt;&amp;lt;br/&amp;gt;
&amp;lt;span class="thanks-tag"&amp;gt;构建框架&amp;lt;/span&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;div class="thanks-card"&amp;gt;
&amp;lt;img class="thanks-avatar" src="https://github.com/gmrchk.png" /&amp;gt;
&amp;lt;div&amp;gt;
&amp;lt;b&amp;gt;Swup&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;
作者：gmrchk&amp;lt;br/&amp;gt;
&amp;lt;a href="https://github.com/gmrchk/swup"&amp;gt;GitHub&amp;lt;/a&amp;gt;&amp;lt;br/&amp;gt;
&amp;lt;span class="thanks-tag"&amp;gt;页面过渡&amp;lt;/span&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;div class="thanks-card"&amp;gt;
&amp;lt;img class="thanks-avatar" src="https://github.com/giscus.png" /&amp;gt;
&amp;lt;div&amp;gt;
&amp;lt;b&amp;gt;Giscus&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;
作者：giscus&amp;lt;br/&amp;gt;
&amp;lt;a href="https://github.com/giscus/giscus"&amp;gt;GitHub&amp;lt;/a&amp;gt;&amp;lt;br/&amp;gt;
&amp;lt;span class="thanks-tag"&amp;gt;评论系统&amp;lt;/span&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;div class="thanks-card"&amp;gt;
&amp;lt;img class="thanks-avatar" src="https://github.com/umami-software.png" /&amp;gt;
&amp;lt;div&amp;gt;
&amp;lt;b&amp;gt;Umami&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;
作者：umami-software&amp;lt;br/&amp;gt;
&amp;lt;a href="https://github.com/umami-software/umami"&amp;gt;GitHub&amp;lt;/a&amp;gt;&amp;lt;br/&amp;gt;
&amp;lt;span class="thanks-tag"&amp;gt;访问统计&amp;lt;/span&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h1&gt;博客简介&lt;/h1&gt;
&lt;h2&gt;由来&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;其实说来早些时候就有建站这个念头，留意过&lt;code&gt;WordPress&lt;/code&gt;、&lt;code&gt;VuePress&lt;/code&gt;框架和
不少个人博客站。但是都不太合心意，所以一直搁置。真正的契机：是某天刷到让我&amp;gt;
一眼就甚是满意的博客主题—— &lt;code&gt;Fuwari&lt;/code&gt;，果然还得是&lt;code&gt;Astro&lt;/code&gt;上限还是太高了（个人观点）。于是拉取修改部署，本站就&lt;code&gt;诞生&lt;/code&gt;了。（顺带一提本站挂载在CloudFlare上，自带全球CDN,Dos防护&lt;code&gt;直接夯爆啦&lt;/code&gt;。只能说cflare&lt;code&gt;善，还是太善了&lt;/code&gt;。），还有&lt;code&gt;Yukina&lt;/code&gt; &amp;amp; &lt;code&gt;Mizuki&lt;/code&gt;以及二者衍生&lt;code&gt;Twilight&lt;/code&gt;都非常优秀，所以相当元素本站都有借鉴学习。总之Fuwari都是非常推荐上手试一试。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;lt;a id="mycontact"&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;h2&gt;联系方式&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;你可以通过以下的方式联系到我。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;So &lt;a href="https://t.me/+EZ-bVy07k2xjMzY1"&gt;Telegram：Join Group [tyr的树洞].&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;TG二维码&lt;/em&gt;
&amp;lt;details&amp;gt;
&amp;lt;summary&amp;gt;点击查看&amp;lt;/summary&amp;gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://473424071.cn/_astro/1769622880981.CVvUDg5D.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/details&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;点击链接加入群聊【暂无打算】： &lt;a&gt;QQ群&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;QQ二维码&lt;/em&gt;
&amp;lt;details&amp;gt;
&amp;lt;summary&amp;gt;点击查看&amp;lt;/summary&amp;gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;![这里什么都没有]&lt;/p&gt;
&lt;h2&gt;&amp;lt;/details&amp;gt;&lt;/h2&gt;
&lt;p&gt;——ZHIDINGLANWANJIE——&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;同样的，欢迎你加入&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>手机连不上 Codex，最后竟然是 v2rayN 的 TUN 网卡坏了</title><link>https://473424071.cn/posts/codex-mobile-remote-connection-troubleshooting/</link><guid isPermaLink="true">https://473424071.cn/posts/codex-mobile-remote-connection-troubleshooting/</guid><description>记录一次 Codex 手机远程连接失败的完整排查过程：从 config.toml、WebSocket 超时和系统代理，一路查到 v2rayN 的旧版 Xray TUN 网卡初始化失败。</description><pubDate>Thu, 04 Jun 2026 18:15:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;记录时间：2026 年 6 月 4 日&lt;br /&gt;
环境：Windows 11、Codex App、v2rayN 7.22.5、Xray&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1&gt;引言&lt;/h1&gt;
&lt;p&gt;最近 Codex App 支持用手机远程连接电脑。&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;官方详情：&lt;a href="https://openai.com/index/work-with-codex-from-anywhere"&gt;Codex Remote Control&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;结果就是很经典的场景：电脑上的 Codex 明明在线，账号也登录了，手机却怎么都连不上。你是不是也会先怀疑二维码、账号权限，或者 &lt;code&gt;config.toml&lt;/code&gt; 少了什么开关？&lt;/p&gt;
&lt;p&gt;我一开始也是这么想的。&lt;/p&gt;
&lt;p&gt;最后一路排查下来，真正的问题和 Codex 配置没有太大关系，而是 v2rayN 的 Xray TUN 网卡虽然显示启动，实际上根本没有正常工作。&lt;/p&gt;
&lt;p&gt;这篇文章就把完整过程记录下来。遇到同类问题时，你可以按顺序排查，不用像我一样绕一圈。&lt;/p&gt;
&lt;h1&gt;先说结论&lt;/h1&gt;
&lt;p&gt;我的问题链路是这样的：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;手机无法连接 Codex
→ Codex Remote Control 的 WebSocket 连接超时
→ 普通系统代理没有接住这条直连
→ 需要使用 v2rayN TUN 模式
→ 旧版 Xray 26.3.27 的 TUN 初始化失败
→ xray_tun 只拿到 169.254.x.x 地址
→ 更新 Xray 26.6.1
→ xray_tun 恢复为 172.18.0.1/30
→ Codex 成功连接
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;所以，如果你只想快速解决，可以直接检查两件事：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Get-NetIPAddress -InterfaceAlias xray_tun -AddressFamily IPv4

&amp;lt;你的 v2rayN 目录&amp;gt;\bin\Xray\xray.exe version
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果 TUN 地址是 &lt;code&gt;169.254.x.x&lt;/code&gt;，或者 Xray 版本比较旧，那么问题大概率就在这里。&lt;/p&gt;
&lt;h1&gt;原理：为什么系统代理还不够&lt;/h1&gt;
&lt;p&gt;v2rayN 的“系统代理”和“TUN 模式”解决的不是同一类流量。&lt;/p&gt;
&lt;p&gt;系统代理只对主动读取 Windows 代理设置的程序有效。TUN 模式则是在网络层接管流量，即使程序自己没有读取代理设置，也可以被送进代理内核。&lt;/p&gt;
&lt;p&gt;Codex 的 Remote Control 需要维持一条 WebSocket 连接。浏览器能访问 ChatGPT，只能证明系统代理可用，不能证明这条 WebSocket 一定会经过代理。&lt;/p&gt;
&lt;p&gt;所以这类问题的关键，不是“代理软件有没有打开”，而是“Codex 的实际连接路径有没有被接管”。&lt;/p&gt;
&lt;h1&gt;排查过程&lt;/h1&gt;
&lt;h2&gt;1. 从 config.toml 开始，方向其实错了&lt;/h2&gt;
&lt;p&gt;网上有一种说法，是在 &lt;code&gt;~/.codex/config.toml&lt;/code&gt; 的 &lt;code&gt;[features]&lt;/code&gt; 中加入：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[features]
goals = true
remote_connections = true
remote_control = true
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;不过我实际修改后发现，每次启动 Codex，&lt;code&gt;remote_control&lt;/code&gt; 都会被自动删除。&lt;/p&gt;
&lt;p&gt;继续检查才知道，在我当时使用的 Codex CLI 版本中，&lt;code&gt;remote_control&lt;/code&gt; 已经被标记为 &lt;code&gt;removed&lt;/code&gt;。官方的 Remote Connections 使用流程也没有要求手动添加这个配置。&lt;/p&gt;
&lt;p&gt;所以这不是解决方案。&lt;/p&gt;
&lt;p&gt;如果你能在 Codex App 中看到手机连接入口，就不要继续和这个配置较劲了。它被删掉并不代表远程连接功能坏了。&lt;/p&gt;
&lt;h2&gt;2. Codex 已经注册成功，但连接就是超时&lt;/h2&gt;
&lt;p&gt;接下来我查看了 Codex 日志。&lt;/p&gt;
&lt;p&gt;日志中已经存在远程控制注册信息，说明账号、设备注册和远程控制资格都没有问题。真正失败的是远程控制 WebSocket：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wss://chatgpt.com/backend-api/wham/remote/control/server
os error 10060
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Windows 的 &lt;code&gt;10060&lt;/code&gt; 很直白，就是连接超时。&lt;/p&gt;
&lt;p&gt;这时问题已经从“Codex 功能有没有打开”，变成了“这条网络连接到底有没有出去”。&lt;/p&gt;
&lt;h2&gt;3. 系统代理能用，不代表 Codex 的连接会走代理&lt;/h2&gt;
&lt;p&gt;我的 v2rayN 系统代理是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;127.0.0.1:10808
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;通过代理访问 &lt;code&gt;chatgpt.com&lt;/code&gt; 没有问题，但直接连接 &lt;code&gt;chatgpt.com:443&lt;/code&gt; 会超时。&lt;/p&gt;
&lt;p&gt;可以这样测试：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Test-NetConnection chatgpt.com -Port 443

curl.exe --proxy http://127.0.0.1:10808 -I https://chatgpt.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;一个直连超时，一个走代理立即返回，差别就出来了。&lt;/p&gt;
&lt;p&gt;从 Codex 当前的开源实现中，可以看到 Remote Control 使用 &lt;code&gt;tokio_tungstenite::connect_async&lt;/code&gt; 建立 WebSocket。结合上面的网络测试，我判断普通“系统代理”没有接住这条连接。&lt;/p&gt;
&lt;p&gt;那么怎么办？&lt;/p&gt;
&lt;p&gt;需要开启 TUN 模式，让没有主动读取代理设置的程序流量也被接管。&lt;/p&gt;
&lt;h2&gt;4. 开了 TUN，还是不行&lt;/h2&gt;
&lt;p&gt;我手动打开 v2rayN 的 TUN 模式后，界面看起来没有报错，系统里也出现了 &lt;code&gt;xray_tun&lt;/code&gt; 网卡。&lt;/p&gt;
&lt;p&gt;不过 Codex 还是连不上。&lt;/p&gt;
&lt;p&gt;继续检查网卡地址：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Get-NetIPAddress -InterfaceAlias xray_tun -AddressFamily IPv4
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;结果是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;169.254.x.x
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个地址很关键。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;169.254.0.0/16&lt;/code&gt; 是 Windows 在网卡无法获得正常地址时使用的链路本地自动地址。简单来说，&lt;code&gt;xray_tun&lt;/code&gt; 虽然创建出来了，但 TUN 初始化失败，没有拿到应该使用的地址，也没有正常生成路由。&lt;/p&gt;
&lt;p&gt;所以界面上的“已开启”，并不等于真的能用。&lt;/p&gt;
&lt;h2&gt;5. v2rayN 是新的，Xray 内核却还是旧的&lt;/h2&gt;
&lt;p&gt;我的 v2rayN 已经是 &lt;code&gt;7.22.5&lt;/code&gt;，但检查实际运行的 Xray 后发现：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;v2rayN 目录&amp;gt;\bin\Xray\xray.exe version
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;输出还是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Xray 26.3.27
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这就对上了。&lt;/p&gt;
&lt;p&gt;v2rayN &lt;code&gt;7.21.3&lt;/code&gt; 的发布说明已经写明，Windows Xray TUN 需要 Xray-core 至少达到 &lt;code&gt;v26.4.17&lt;/code&gt;。v2rayN 的 Issue 中也有人遇到了完全相同的现象：TUN 网卡只有 &lt;code&gt;169.254.x.x&lt;/code&gt;，更新 Xray 后恢复。&lt;/p&gt;
&lt;p&gt;我最后将 Xray 更新到 &lt;code&gt;26.6.1&lt;/code&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;注意：&lt;code&gt;26.6.1&lt;/code&gt; 在我处理问题时是 pre-release。以后阅读本文时，请优先使用 v2rayN 当前要求的兼容版本，不要永远固定在这个版本。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1&gt;实操：正式解决&lt;/h1&gt;
&lt;h2&gt;1. 下载新版 Xray&lt;/h2&gt;
&lt;p&gt;我使用的是：&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/XTLS/Xray-core/releases/tag/v26.6.1"&gt;Xray 26.6.1 发布页&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Windows 64 位下载文件：&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/XTLS/Xray-core/releases/download/v26.6.1/Xray-windows-64.zip"&gt;Xray-windows-64.zip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;当时官方提供的 SHA-256 为：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;0A1EE8C8A45E11E865C725DB195429C79B52EE960407065089C5BE586F343248
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;你可以校验一下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Get-FileHash .\Xray-windows-64.zip -Algorithm SHA256
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2. 完全退出 v2rayN&lt;/h2&gt;
&lt;p&gt;这里不是关闭主窗口，而是在系统托盘中右键 v2rayN，选择“退出”。&lt;/p&gt;
&lt;p&gt;如果 &lt;code&gt;xray.exe&lt;/code&gt; 仍在运行，文件会被占用，替换不会成功。&lt;/p&gt;
&lt;h2&gt;3. 替换 xray.exe&lt;/h2&gt;
&lt;p&gt;压缩包中需要替换的文件是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;xray.exe
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;通用目标路径：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;你的 v2rayN 目录&amp;gt;\bin\Xray\xray.exe
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我的实际路径是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;D:\v2rayN-windows-64-desktop\v2rayN-windows-64\bin\Xray\xray.exe
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;替换前建议先备份旧文件，确认新版正常后再删除备份。&lt;/p&gt;
&lt;h2&gt;4. 以管理员身份启动 v2rayN&lt;/h2&gt;
&lt;p&gt;TUN 模式需要管理员权限。&lt;/p&gt;
&lt;p&gt;如果 v2rayN 标题栏显示“以非管理员身份运行”，即使配置中已经打开 TUN，也可能无法创建正常的网卡和路由。&lt;/p&gt;
&lt;p&gt;启动后重新检查：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Get-NetIPAddress -InterfaceAlias xray_tun -AddressFamily IPv4
Get-NetRoute -InterfaceAlias xray_tun -AddressFamily IPv4
Test-NetConnection chatgpt.com -Port 443
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;修复后，我这里的结果变成了：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;xray_tun: 172.18.0.1/30
chatgpt.com:443: 连接成功
出口网卡: xray_tun
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;随后手机端 Codex 立即显示已连接。&lt;/p&gt;
&lt;h1&gt;踩坑&lt;/h1&gt;
&lt;h2&gt;remote_control 被删除，不是故障&lt;/h2&gt;
&lt;p&gt;在我当时的 Codex 版本中，&lt;code&gt;remote_control&lt;/code&gt; 已被标记为移除。不要因为它被自动删除，就一直重复修改 &lt;code&gt;config.toml&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;先按官方流程确认 Codex App 已更新、账号已登录，并完成多因素认证。&lt;/p&gt;
&lt;h2&gt;系统代理和 TUN 不是一回事&lt;/h2&gt;
&lt;p&gt;系统代理只对主动读取代理设置的程序有效。&lt;/p&gt;
&lt;p&gt;浏览器能访问 ChatGPT，不代表 Codex Remote Control 的 WebSocket 一定能访问。遇到直连超时，就需要检查 TUN、VPN 或透明代理是否真的接管了流量。&lt;/p&gt;
&lt;h2&gt;v2rayN 版本不等于 Xray 版本&lt;/h2&gt;
&lt;p&gt;这是最容易忽略的一点。&lt;/p&gt;
&lt;p&gt;v2rayN 是管理界面，Xray 是实际工作的内核。你更新了 v2rayN，不代表 &lt;code&gt;bin\Xray\xray.exe&lt;/code&gt; 一定同步更新成功。&lt;/p&gt;
&lt;p&gt;排障时不要只看 v2rayN 标题栏，还要执行：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;v2rayN 目录&amp;gt;\bin\Xray\xray.exe version
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;看到 169.254.x.x 就要警惕&lt;/h2&gt;
&lt;p&gt;如果 TUN 网卡拿到的是 &lt;code&gt;169.254.x.x&lt;/code&gt;，基本可以直接判断它没有正常初始化。&lt;/p&gt;
&lt;p&gt;这时继续调路由规则、节点分流或者 Codex 配置，通常都是在错误方向上努力。&lt;/p&gt;
&lt;h1&gt;最终复盘&lt;/h1&gt;
&lt;p&gt;这次最绕的地方，是每一层看起来都“差不多正常”：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Codex 有连接入口&lt;/li&gt;
&lt;li&gt;手机能扫码&lt;/li&gt;
&lt;li&gt;v2rayN 系统代理能访问 ChatGPT&lt;/li&gt;
&lt;li&gt;TUN 开关也显示启用&lt;/li&gt;
&lt;li&gt;系统里甚至存在 &lt;code&gt;xray_tun&lt;/code&gt; 网卡&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但真正决定结果的是，那张网卡有没有拿到正常地址，Codex 的 WebSocket 有没有真的从它出去。&lt;/p&gt;
&lt;p&gt;所以以后再遇到“某个程序不走代理”的问题，我会先查网络路径，再查应用配置。就这么简单。&lt;/p&gt;
&lt;h1&gt;参考资料&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/codex/remote-connections"&gt;Codex Remote Connections 官方文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openai/codex/blob/main/codex-rs/app-server-transport/src/transport/remote_control/websocket.rs"&gt;Codex Remote Control WebSocket 实现&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/2dust/v2rayN/releases/tag/7.21.3"&gt;v2rayN 7.21.3 发布说明&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/2dust/v2rayN/issues/9312"&gt;v2rayN Issue #9312：TUN 网卡出现 169 地址&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/2dust/v2rayN/issues/9354"&gt;v2rayN Issue #9354：新版 TUN 无法工作&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>近期 v2rayN 与 Xray 兼容性问题记录：allowInsecure 与 TUN</title><link>https://473424071.cn/posts/v2rayn-xray-recent-compatibility-problems/</link><guid isPermaLink="true">https://473424071.cn/posts/v2rayn-xray-recent-compatibility-problems/</guid><description>复盘近期两类 v2rayN 与 Xray 兼容性问题：旧订阅中的 allowInsecure 让新版 Xray Core 启动失败，以及旧版 Xray 内核让新版 TUN 无法正常工作。</description><pubDate>Thu, 04 Jun 2026 18:12:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;记录时间：2026 年 6 月 4 日&lt;br /&gt;
后续版本可能已经修复或调整，阅读时请以当前发布说明为准。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1&gt;起因&lt;/h1&gt;
&lt;p&gt;最近使用 v2rayN 时，我连续遇到了两类问题。&lt;/p&gt;
&lt;p&gt;第一次是 &lt;code&gt;allowInsecure&lt;/code&gt; 导致 Core 启动失败，第二次是 Xray TUN 网卡只能取得 &lt;code&gt;169.254.x.x&lt;/code&gt; 地址，进而导致 Codex Remote Control 无法连接。&lt;/p&gt;
&lt;p&gt;表面上看，这些问题都发生在 v2rayN 中，很容易让人认为是 v2rayN 本身不稳定。&lt;/p&gt;
&lt;p&gt;那么，为什么同一个客户端会在短时间内出现两种看似相反的问题？复盘以后可以发现，v2rayN、代理内核和订阅配置实际上是三套独立更新的组件，问题不能简单归因于其中某一个。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;v2rayN：负责界面和配置生成
Xray / sing-box：负责真正建立代理连接
订阅配置：负责提供节点和证书参数
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;只要其中一个没有跟上，最后都可能变成一句很笼统的：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;运行 Core 失败，请查看提示信息
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;问题一：allowInsecure 导致 Core 启动失败&lt;/h1&gt;
&lt;p&gt;有些旧节点配置中会出现：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  "allowInsecure": true
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;它的作用是跳过 TLS 证书验证，虽然可以绕过部分证书问题，但安全风险也很明确。&lt;/p&gt;
&lt;p&gt;Xray 在 &lt;code&gt;v26.2.6&lt;/code&gt; 中移除了这个配置，并将硬性禁用时间延后到 &lt;strong&gt;2026 年 6 月 1 日&lt;/strong&gt;。时间一到，旧订阅仍然生成 &lt;code&gt;allowInsecure&lt;/code&gt; 时，Core 就可能直接启动失败：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;The feature "allowInsecure" has been removed
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;v2rayN &lt;code&gt;7.22.5&lt;/code&gt; 临时恢复了过渡支持，但只持续到 &lt;strong&gt;2026 年 8 月 1 日&lt;/strong&gt;，而且发布说明特别强调需要全新下载并覆盖更新。&lt;/p&gt;
&lt;p&gt;因此，这只能作为临时过渡方案。长期仍应由服务商修复证书，或提供正确的证书指纹配置。&lt;/p&gt;
&lt;h1&gt;问题二：新版 v2rayN，旧版 Xray TUN&lt;/h1&gt;
&lt;p&gt;另一件事发生在我排查 Codex 手机远程连接时。&lt;/p&gt;
&lt;p&gt;我开启了 v2rayN TUN 模式，系统里也出现了 &lt;code&gt;xray_tun&lt;/code&gt; 网卡，但它的地址却是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;169.254.x.x
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这代表网卡虽然创建了，但没有正常初始化。&lt;/p&gt;
&lt;p&gt;检查后发现，我的 v2rayN 已经是 &lt;code&gt;7.22.5&lt;/code&gt;，实际运行的 Xray 仍然是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Xray 26.3.27
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;而 v2rayN &lt;code&gt;7.21.3&lt;/code&gt; 的发布说明已经注明，Windows Xray TUN 需要 Xray-core 至少为 &lt;code&gt;v26.4.17&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;最后我将下面这个文件更新为 Xray &lt;code&gt;26.6.1&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;D:\v2rayN-windows-64-desktop\v2rayN-windows-64\bin\Xray\xray.exe
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;更新后，TUN 网卡恢复为：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;xray_tun: 172.18.0.1/30
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Codex 的远程连接也随即成功。&lt;/p&gt;
&lt;h1&gt;两类问题的共同原因&lt;/h1&gt;
&lt;p&gt;这两次问题分别来自两个相反方向的兼容性变化：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;第一次：Xray 内核太新，旧订阅配置不兼容
第二次：Xray 内核太旧，新版 TUN 配置不兼容
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;你可能只更新了 v2rayN 界面，没有更新 &lt;code&gt;bin&lt;/code&gt; 目录里的内核；也可能更新了内核，却还在使用服务商生成的旧订阅配置。&lt;/p&gt;
&lt;p&gt;因此，每个组件单独看都可能没有明显异常，但组合后仍然会出现无法使用的情况。&lt;/p&gt;
&lt;h1&gt;实操：如何排查&lt;/h1&gt;
&lt;p&gt;遇到 Core 启动失败或 TUN 异常时，可以先检查以下信息：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;你的 v2rayN 目录&amp;gt;\bin\Xray\xray.exe version

Get-NetIPAddress -InterfaceAlias xray_tun -AddressFamily IPv4
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后再确认：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;v2rayN 发布说明是否要求全新下载覆盖更新&lt;/li&gt;
&lt;li&gt;订阅是否仍然生成 &lt;code&gt;allowInsecure&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;TUN 网卡是否出现 &lt;code&gt;169.254.x.x&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;电脑里是否存在多个 v2rayN 目录，实际运行的并不是刚更新的那个&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;注意事项&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;allowInsecure&lt;/code&gt; 的临时兼容不是长期方案，Xray &lt;code&gt;26.6.1&lt;/code&gt; 也不是永远的标准答案。后续更新时，还是应该先看 v2rayN 和 Xray 当前的发布说明。&lt;/p&gt;
&lt;h1&gt;总结&lt;/h1&gt;
&lt;p&gt;v2rayN 仍然是一个实用的客户端，但近期 Xray 的安全策略和 TUN 功能变化较快，已经不能只根据 v2rayN 界面中的版本号判断整个运行环境是否正常。&lt;/p&gt;
&lt;p&gt;排查时，应分别确认以下三项：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;v2rayN 版本
Xray 内核版本
订阅配置版本
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;参考资料&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/XTLS/Xray-core/releases/tag/v26.2.6"&gt;Xray v26.2.6：移除 allowInsecure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/2dust/v2rayN/discussions/9460"&gt;v2rayN Discussion #9460：关于 allowInsecure 的迁移说明&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/2dust/v2rayN/releases/tag/7.22.5"&gt;v2rayN 7.22.5 发布说明&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/2dust/v2rayN/releases/tag/7.21.3"&gt;v2rayN 7.21.3 发布说明：Windows Xray TUN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/2dust/v2rayN/issues/9312"&gt;v2rayN Issue #9312：TUN 网卡出现 169 地址&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>General Compute 免费提供200美元API额度，MiniMax M2.7 速度实测400tokens/s</title><link>https://473424071.cn/posts/generalcompute-free-api/</link><guid isPermaLink="true">https://473424071.cn/posts/generalcompute-free-api/</guid><description>General Compute 平台目前为新用户提供6个月200美元的免费API额度，其中 MiniMax M2.7 模型的推理速度可达每秒400 tokens，适合翻译、批量处理等高吞吐场景。</description><pubDate>Sat, 30 May 2026 19:00:00 GMT</pubDate><content:encoded>&lt;hr /&gt;
&lt;h2&gt;&lt;code&gt;#&lt;/code&gt;一、平台介绍&lt;/h2&gt;
&lt;p&gt;最近注意到一个 API 平台：&lt;a href="https://www.generalcompute.com/"&gt;General Compute&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;目前该平台为新注册用户提供 &lt;strong&gt;6个月、200美元&lt;/strong&gt; 的免费 API 调用额度，无需绑定信用卡，注册后即可使用。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;code&gt;#&lt;/code&gt;二、200 美元额度可用 Token 估算&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;说明：以下价格按每 1M tokens 计费，实际消耗 = 输入费用 + 输出费用。&lt;br /&gt;
这里的估算只用于粗略判断额度能用多久，真实消耗会受上下文长度、回答长度、工具调用、代码读取量等影响。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;（1）按单项计算：200 美元全部用于输入或输出&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;模型&lt;/th&gt;
&lt;th&gt;上下文&lt;/th&gt;
&lt;th&gt;输入价格 / 1M tokens&lt;/th&gt;
&lt;th&gt;输出价格 / 1M tokens&lt;/th&gt;
&lt;th&gt;200 美元全用于输入&lt;/th&gt;
&lt;th&gt;200 美元全用于输出&lt;/th&gt;
&lt;th&gt;1:1 估算总 Token&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek V3.2&lt;/td&gt;
&lt;td&gt;32k&lt;/td&gt;
&lt;td&gt;$0.25&lt;/td&gt;
&lt;td&gt;$0.38&lt;/td&gt;
&lt;td&gt;800M tokens&lt;/td&gt;
&lt;td&gt;约 526M tokens&lt;/td&gt;
&lt;td&gt;约 635M tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek V3.1&lt;/td&gt;
&lt;td&gt;128k&lt;/td&gt;
&lt;td&gt;$0.21&lt;/td&gt;
&lt;td&gt;$0.79&lt;/td&gt;
&lt;td&gt;约 952M tokens&lt;/td&gt;
&lt;td&gt;约 253M tokens&lt;/td&gt;
&lt;td&gt;约 400M tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MiniMax M2.7&lt;/td&gt;
&lt;td&gt;192k&lt;/td&gt;
&lt;td&gt;$0.28&lt;/td&gt;
&lt;td&gt;$1.20&lt;/td&gt;
&lt;td&gt;约 714M tokens&lt;/td&gt;
&lt;td&gt;约 166M tokens&lt;/td&gt;
&lt;td&gt;约 270M tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img src="https://473424071.cn/_astro/generalcompute.kYBol0Vi.png" alt="General Compute 平台首页截图" /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;code&gt;#&lt;/code&gt;三、MiniMax M2.7 的推理速度&lt;/h2&gt;
&lt;p&gt;平台支持多个模型，其中比较值得关注的是 &lt;strong&gt;MiniMax M2.7&lt;/strong&gt;，实测推理速度可以达到约 &lt;strong&gt;400 tokens/s&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;这个速度在目前的 API 服务中算是相当快的。作为对比，大多数主流模型 API 的输出速度通常在 50-150 tokens/s 左右，M2.7 的吞吐量优势非常明显。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://473424071.cn/_astro/400ks.BIQkLJKc.png" alt="M2.7 推理速度测试截图" /&gt;&lt;/p&gt;
&lt;p&gt;需要说明的是，速度快和模型能力强是两回事。M2.7 在复杂推理、长文理解等方面和 Claude、GPT-4o 这类模型还是有差距的，但在不需要太强推理能力的任务上，这个速度优势就很实用了。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;code&gt;#&lt;/code&gt;四、适用场景&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://473424071.cn/_astro/gen-detail.BCt5RoWp.png" alt="detail" /&gt;&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;200&lt;/code&gt; 美元的额度配合 400 tokens/s 的速度，有几个比较合适的用途：&lt;/h3&gt;
&lt;h4&gt;&lt;code&gt;（2）批量翻译&lt;/code&gt;&lt;/h4&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;高吞吐速度天然适合翻译任务。无论是文档翻译、字幕翻译还是其他文本处理，M2.7 的响应速度可以大幅缩短批量任务的总耗时。200 美元的额度用于翻译场景，可处理的文本量相当可观。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h4&gt;&lt;code&gt;（3）作为 OpenClaw 等项目的上游 API 备用&lt;/code&gt;&lt;/h4&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;之前在 &lt;a href="/posts/replit-opus4-risk/"&gt;这篇文章&lt;/a&gt; 中介绍过 Replit 上的 OpenClaw 项目，这类需要后端 API 转发调用的场景，General Compute 的接口可以作为上游使用。速度快、额度充足、成本为零，适合提前注册储备 API key。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h4&gt;&lt;code&gt;（4）其他批量处理任务&lt;/code&gt;&lt;/h4&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;批量摘要生成、文本分类、信息提取等任务，对模型推理能力的要求相对较低，但对速度和调用量有较高需求，这类场景下 M2.7 的性价比很高。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;code&gt;#&lt;/code&gt;五、注意事项&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;免费额度的有效期为 &lt;strong&gt;6个月&lt;/strong&gt;，过期未使用的额度不会保留&lt;/li&gt;
&lt;li&gt;平台支持的模型不止 MiniMax M2.7，具体可用模型列表建议查看官网&lt;/li&gt;
&lt;li&gt;免费额度活动的持续时间不确定，有需要的话建议尽早注册&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://473424071.cn/_astro/credits.DvRjnXNw.png" alt="200赠金截图" /&gt;&lt;/p&gt;
&lt;h2&gt;&lt;code&gt;#&lt;/code&gt;六、小结&lt;/h2&gt;
&lt;p&gt;General Compute 目前提供的免费额度对于有批量文本处理需求的用户来说是一个不错的选择。MiniMax M2.7 的推理速度在翻译和批量任务场景下表现突出，配合 OpenClaw 等项目使用也很方便。感兴趣的话可以先注册把额度领了，后续根据实际需求再决定怎么用。&lt;/p&gt;
&lt;hr /&gt;
</content:encoded></item><item><title>如何使用CAPMS完全免费调用GPT、Gemini、Claude模型的API，实现Token自由</title><link>https://473424071.cn/posts/cpams/</link><guid isPermaLink="true">https://473424071.cn/posts/cpams/</guid><description>一种低成本接入多模型 API 的思路：用 CPAMS / CLIProxyAPI 将 OAuth 模型通道封装成 OpenAI 兼容接口，让本地 AI 工具更自由地调用 Gemini、Claude、GPT/Codex 等模型能力。</description><pubDate>Mon, 27 Apr 2026 00:33:32 GMT</pubDate><content:encoded>&lt;hr /&gt;
&lt;p&gt;::github{repo="router-for-me/CLIProxyAPI"}
&amp;lt;details&amp;gt;
&amp;lt;summary&amp;gt;点击展开&amp;lt;/summary&amp;gt;
&amp;lt;p&amp;gt;源站：https://github.com/router-for-me/CLIProxyAPI&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;镜像站：https://gh.kaza.de5.net/router-for-me/CLIProxyAPI&amp;lt;/p&amp;gt;
&amp;lt;/details&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h1&gt;&lt;code&gt;#&lt;/code&gt; 引言&lt;/h1&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;如何使用CPAMS去中转你的codex、Gpt、Gemini、Claude等代理转成个人api，解放token，实现token自由。&lt;/li&gt;
&lt;li&gt;想必大家都听说CAPMS这个项目，这里给到一个capms项目的部署教程。&lt;/li&gt;
&lt;li&gt;对了，这里我使用的是本地部署。你也可以使用别的大佬打包好的镜像包去部署。
&amp;lt;p&amp;gt;如：&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;docker pull routerforme/cliproxyapi:latest
docker pull eceasy/cli-proxy-api:latest
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;docker run -d \
  --name cli-proxy-api \
  -p 8317:8317 \
  -p 8085:8085 \
  -p 1455:1455 \
  -p 54545:54545 \
  -p 51121:51121 \
  -p 11451:11451 \
  -v cli-proxy-api-data:/data \
  -e DEPLOY=cloud \
  -e PORT=8317 \
  eceasy/cli-proxy-api:latest

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;API 地址：&lt;code&gt;http://服务器IP:8317/v1&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;管理页面：&lt;code&gt;http://服务器IP:8317/management.html&lt;/code&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h1&gt;&lt;code&gt;#&lt;/code&gt; 正式开始&lt;/h1&gt;
&lt;h3&gt;(1)、后端二进制程序下载&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;首先我们去GitHu下载官方release文件
&lt;code&gt;https://github.com/router-for-me/CLIProxyAPI&lt;/code&gt;
&lt;img src="../assets/blogimg/capms%E9%A1%B9%E7%9B%AE.webp" alt="capms项目" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选取适合版本的二进制程序包下到本地解压,解压后得到以下文件
&lt;img src="../assets/blogimg/capms%E8%A7%A3%E5%8E%8B.webp" alt="capms解压" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;(2)、修改配置文件yaml&lt;/h3&gt;
&lt;p&gt;注意其中的config.example.yaml，这是他的配置文件，建议修改其中的个人密钥。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
host: ""
# Server port
port: 8317 #如果你8317端口被占用，可以修改为其他端口
  secret-key: "输入你自己的密钥" #用于capms页面（这个页面得自己导入，后面会提到。）得登录，该密钥后续会被进行加密，也没什么。

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;做好上述准备，先不急运行exe程序。&lt;/code&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;(3)、安装前端资源文件&lt;/h3&gt;
&lt;p&gt;由于此仅仅为CLIProxyAPI 的后端二进制我们要去单独下载他的前端控制台资源：一个html文件。
这里我推荐的是router-for-me大佬的前端资源。
前端资源：https://github.com/router-for-me/Cli-Proxy-API-Management-Center
&lt;img src="../assets/blogimg/capms%E5%89%8D%E7%AB%AF%E8%B5%84%E6%BA%90.webp" alt="capms前端资源" /&gt;
下载那个management.html放到解压出来的后端二进制文件目录下。和那个exe同级就行。&lt;/p&gt;
&lt;hr /&gt;
&lt;h1&gt;&lt;code&gt;#&lt;/code&gt; 运行程序更改配置&lt;/h1&gt;
&lt;h3&gt;4、运行程序&lt;/h3&gt;
&lt;p&gt;现在我们可以运行程序了，双击或在终端中运行。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;./cli-proxy-api.exe
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;会跳出终端界面，如下：
&lt;img src="https://473424071.cn/_astro/capms-cmd.CzmdxDnE.webp" alt="capms-cmd" /&gt;&lt;/p&gt;
&lt;p&gt;无视即可。访问管理页面：http://服务器IP:8317&lt;/p&gt;
&lt;p&gt;&lt;img src="../assets/blogimg/capms%E9%A1%B5%E9%9D%A2.webp" alt="capms页面" /&gt;&lt;/p&gt;
&lt;h3&gt;5、更改配置&lt;/h3&gt;
&lt;p&gt;现在我们可以去配置面板页去更改配置了。&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;(1)&lt;code&gt;网络配置&lt;/code&gt;
&lt;img src="https://473424071.cn/_astro/capms-net.BGhTPE2B.webp" alt="capms配置1" /&gt;&lt;/li&gt;
&lt;li&gt;(2)&lt;code&gt;设置自己的apikey&lt;/code&gt;
&lt;img src="../assets/blogimg/capms-%E8%AE%A4%E8%AF%81.webp" alt="capms配置2" /&gt;&lt;/li&gt;
&lt;li&gt;(3)&lt;code&gt;记得保存&lt;/code&gt;
&lt;img src="../assets/blogimg/capms-%E4%BF%9D%E5%AD%98.webp" alt="capms配置3" /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;后面有需求就继续配置内网穿透&lt;code&gt;ngrok&lt;/code&gt;、&lt;code&gt;cloudflare-tunnel&lt;/code&gt;等。实现外部访问。不过一般我都在本机进行使用，所以没有这个需求。&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;接入你的codex、Gemini CLI、Antigravity等的OAuth&lt;/h3&gt;
&lt;p&gt;Antigravity-model
&lt;img src="https://473424071.cn/_astro/Antigravity-model.CDww2OKr.webp" alt="Antigravity-model" /&gt;
codex-model
&lt;img src="https://473424071.cn/_astro/codex-model.CGdcz9po.webp" alt="codex-model" /&gt;
gemini-cli-model
&lt;img src="https://473424071.cn/_astro/gemini-cli-model.DoNgTOEZ.webp" alt="gemini-cli-model" /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h1&gt;&lt;code&gt;#&lt;/code&gt; 注意事项&lt;/h1&gt;
&lt;h2&gt;&lt;code&gt;**1. 注意**&lt;/code&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;[!WARNING]
注意Gemini CLI及Antigravity记得确认你的project 开启了Gemini for Google Cloud的权限。
访问：https://console.cloud.google.com/
确认你的project 开启了Gemini for Google Cloud的权限。
&lt;img src="https://473424071.cn/_astro/gemin-projest.BK6UguOX.webp" alt="gemini projest" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1. 点击你的My Frist Project &amp;gt; 确认有项目 &amp;gt; 记下project_id：如（gen-lang-client-0412195766）&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;2. 点击 APIS AND SERVICES&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;3. 选择库 &amp;gt; 搜索Gemini for Google Cloud&lt;/code&gt;
&lt;img src="../assets/blogimg/%E5%BA%93.webp" alt="capms-库" /&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;4. 点击ENABLE&lt;/code&gt;
到此权限问题解决了。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;code&gt;**2. 注意**&lt;/code&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;[!WARNING]
OAuth接入之后，Gemini CLI、Antigravity要特殊处理一下。因为它没有提供project_id的参数。会导致连接调用失败，尽管你过了认证。
找到到这个文件，将project_id添加到文件中。
&lt;strong&gt;&lt;code&gt;"C:\Users\Tyr.Eamon\.cli-proxy-api\antigravity-账号.json"&lt;/code&gt;&lt;/strong&gt;
原文件。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;{"access_token":"****","disabled":false,"email":"你的账号@gmail.com","expired":"2026-04-27T00:33:32+08:00","expires_in":3599,"refresh_token":"*******","timestamp":1777217***,"type":"antigravity"}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;修改后的文件。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{"access_token":"****","disabled":false,"email":"你的账号@gmail.com","expired":"2026-04-27T00:33:32+08:00","expires_in":3599,"project_id":"你的project_id","refresh_token":"*******","timestamp":1777217***,"type":"antigravity"}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;code&gt;**3. 注意**&lt;/code&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;[!WARNING]
还有就是Antigravity可能要你认证。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;{
  "error": {
    "code": 403,
    "message": "Verify your account to continue.",
    "status": "PERMISSION_DENIED",
    "details": [
      {
        "reason": "VALIDATION_REQUIRED",
        "domain": "cloudcode-pa.googleapis.com",
        "metadata": {
          "validation_url": "https://accounts.google.com/signin/continue?[REDACTED]" # 点击这个链接进行认证
        }
      }
    ]
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h1&gt;&lt;code&gt;#&lt;/code&gt; 后记&lt;/h1&gt;
&lt;p&gt;——理论上——
只要你的号够多，&lt;code&gt;号池够深够硬&lt;/code&gt;理论上无限token、解放你的token限制。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;后续我们可以用CCSwith去&lt;code&gt;统一入口&lt;/code&gt;＋&lt;code&gt;融断&lt;/code&gt;及&lt;code&gt;故障转移&lt;/code&gt; 等管理。&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>奇技淫巧LINUX·之·完全免费获取Claude-Opus4模型的API</title><link>https://473424071.cn/posts/replit-opus4-risk/</link><guid isPermaLink="true">https://473424071.cn/posts/replit-opus4-risk/</guid><description>逛 linux.do 看到一篇关于 Replit / OpenClaw 的讨论帖。与其说它是在讲“免费 Claude API”，不如说它是在讲怎么把平台现成能力重新包装成一个通用接口。</description><pubDate>Fri, 24 Apr 2026 12:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;引言&lt;/h1&gt;
&lt;blockquote&gt;
&lt;h2&gt;什么？免费获取 Claude-Opus4 模型的 API？&lt;/h2&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="https://473424071.cn/_astro/claude.DJ1yo8r_.png" alt="claude" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;h2&gt;Cherry Studio导入情况&lt;/h2&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="https://473424071.cn/_astro/cherry1.BRmD_a3W.png" alt="cherry" /&gt;&lt;/p&gt;
&lt;h1&gt;讨论帖子&lt;/h1&gt;
&lt;p&gt;今天逛 &lt;code&gt;linux.do&lt;/code&gt;，看到一篇讨论 &lt;code&gt;Replit / OpenClaw&lt;/code&gt; 的帖子。&lt;/p&gt;
&lt;h2&gt;&lt;code&gt;标题看起来是在讲“完全免费获取 Claude-Opus4 模型的 API”，但本质上，它更像是把平台本来就有的一层 AI 能力，重新包装成了一个更像标准 API 的入口。&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://473424071.cn/_astro/linux1.CblaTzY_.png" alt="linuxdo" /&gt;&lt;/p&gt;
&lt;p&gt;该说不说真的逆天，这也行？&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;版主通过用一段写得非常细的提示词，让 Replit Agent 自己完成构建，按规格一步步搭出了一个给 OpenAI / Anthropic 做协议转换的代理 API。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;再往下看，版主调用openclaw去实现一步步拧出来的思路。&lt;/p&gt;
&lt;blockquote&gt;
&lt;h2&gt;本篇不聊具体操作，只简单讲一下它的大概实现逻辑。&lt;code&gt;详情请见Linux.do帖子。&lt;/code&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;h2&gt;原帖链接: &lt;a href="https://linux.do/t/topic/2049325"&gt;https://linux.do/t/topic/2049325&lt;/a&gt;&lt;/h2&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h1&gt;原理&lt;/h1&gt;
&lt;p&gt;这件事本质上不是“多了一个官方接口”，而是多了一层代理。&lt;/p&gt;
&lt;p&gt;平台原本就有自己的模型接入方式、自己的 Agent 和自己的工作流。帖子里的做法，说白了就是先让 Agent 搭出一个项目壳子，再在中间加一层转换逻辑，最后对外暴露成统一接口。&lt;/p&gt;
&lt;p&gt;说实话，能想到这条路，而且还能把它讲明白，我是有点佩服的。&lt;/p&gt;
&lt;p&gt;如果缩成一行，大概就是这样:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;平台现成能力 -&amp;gt; Agent 生成项目 -&amp;gt; 中间层做协议转换 -&amp;gt; 对外表现成通用 API
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Web端有详细的描述，这里就不重复了。
&lt;img src="https://473424071.cn/_astro/claudweb.CWKhPIqH.png" alt="web" /&gt;&lt;/p&gt;
&lt;h2&gt;1. 先生成一个能跑的服务&lt;/h2&gt;
&lt;p&gt;让 Agent 直接把后端、路由、依赖和简单页面先搭出来，省掉手工从零开始的过程。&lt;/p&gt;
&lt;h2&gt;2. 让中间层负责“翻译”&lt;/h2&gt;
&lt;p&gt;不同模型接口格式不一样，所以中间层要做几件事:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;按模型名决定请求转给谁&lt;/li&gt;
&lt;li&gt;把请求格式改成目标模型能接收的样子&lt;/li&gt;
&lt;li&gt;把返回结果再转回统一格式&lt;/li&gt;
&lt;li&gt;流式输出时重新整理事件流&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以它本质上更像一个协议转换器。&lt;/p&gt;
&lt;p&gt;我自己看这类东西的时候，最佩服的其实也是这里。因为最后那个“能用的接口”大家都能看见，但中间这层怎么转、怎么接、怎么统一，才是真正有技术味道的地方。&lt;/p&gt;
&lt;h2&gt;3. 最后统一对外入口&lt;/h2&gt;
&lt;p&gt;客户端只看到一个 Base URL、一套鉴权方式和一套熟悉的请求格式。至于后面实际接的是谁、怎么转换，客户端并不关心。&lt;/p&gt;
&lt;h1&gt;看起来像“免费 API”但有点区别&lt;/h1&gt;
&lt;p&gt;因为最终效果确实很像。&lt;/p&gt;
&lt;p&gt;你看到的是统一地址、统一 Key、统一接口格式，所以用起来会很接近平时理解的 API 服务。&lt;/p&gt;
&lt;p&gt;但从实现上看，它更像“平台能力再封装后的代理层”，而不是一个独立存在的官方直连接口。&lt;/p&gt;
&lt;hr /&gt;
&lt;h1&gt;注意事项:&lt;/h1&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;!!!&lt;code&gt;"注意的是构建有时候会出现流式传输的问题，这需要在中间层做特殊处理。"&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;原帖里没有提到，好像是因为 Replit 的构建机制导致的。但我个人经验是，流式传输在大多数情况下都是可以正常工作的。只是在某些特殊情况下，比如构建过程中，可能会遇到。
你可以关闭流式传输，或者在中间层做一些特殊处理，来解决这个问题。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;由于是属于replit漏洞，是不是蜉蝣大家都不知道。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;当然额度还是你自己的免费额度，只不过调用的方式变了。一般来说额度用完了就抛，再上新号就是。&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h1&gt;总结&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;所以这件事如果用最简单的话说，就是:&lt;/li&gt;
&lt;li&gt;把平台原本已经有的 AI 能力，借助 Agent 生成项目，再包一层协议转换，最后整理成一个通用 API 入口。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;h1&gt;‘本章仅供讨论和学习、技术思路和个人观察，涉及的平台能力、接口行为和可用性请以官方规则为准，也请勿将相关思路用于滥用或绕过限制。‘&lt;/h1&gt;
&lt;/blockquote&gt;
</content:encoded></item><item><title>Emby 是什么？一篇给新手看的入门和种草指南</title><link>https://473424071.cn/posts/emby-intro-tyr-bv/</link><guid isPermaLink="true">https://473424071.cn/posts/emby-intro-tyr-bv/</guid><description>如果你经常看到别人聊 Emby，却一直没搞明白它和 Netflix、爱优腾到底有什么关系，这篇文章会用最短的篇幅带你快速入门。</description><pubDate>Sun, 15 Mar 2026 20:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;&lt;code&gt;#&lt;/code&gt;引言&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;你是不是经常在群里、论坛里，甚至某些 Telegram 频道里看到别人提到 Emby？&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;一会儿说“我这个服有 4K”，一会儿又说“这个服直连快”，看起来好像很厉害，但你如果之前没接触过，第一反应多半是：这东西到底是什么？&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;如果你平时用过 Netflix，或者更熟一点的是 B 站、爱奇艺、腾讯视频这些会员制流媒体平台，那你其实已经理解一半了。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;因为 Emby 用起来的感觉，确实跟它们有点像。你一样会看到封面墙、分类、搜索、继续观看、跨设备续播这些东西，所以很多人第一次打开 Emby，都会觉得它有点像“私人版的 Netflix”，或者“自己搭的爱优腾”。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;不过这里也有个关键区别。&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Netflix、B 站、爱奇艺、腾讯视频这些平台，内容和平台本身通常是一体的，你开会员，本质上是在用它们官方提供的内容服务；而 Emby 更像一个媒体库外壳，或者说一个私人流媒体框架，重点不是“平台自己有什么”，而是“这个服后面挂了什么资源、什么线路、谁在维护”。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;而且说白了，很多人真正被 Emby 种草，也不是因为这个概念有多高级，而是它看起来确实很值。&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;你在 Netflix、B 站、爱奇艺、腾讯视频这些平台上，很多时候得分开买会员、分开看片库；但在一些价格比较低，或者保号条件比较宽松的 Emby 服里，你可能只需要隔段时间看一下，甚至有些公益服一个月看一次、留个观看记录就够了，就能进到一个动不动几千电影、几千剧、十几万到几十万集的媒体库里。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;更关键的是，这些库很多还不只是“量大”而已，补新往往也不慢，画质从 1080P、2K 到 4K 的版本也不算少。你这么一想，是不是一下子就能理解，为什么群里总有人聊 Emby 了？&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;其实没那么复杂。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这篇文章我就不跟你扯太多大而空的概念了，我们就用最短的篇幅，快速把 Emby 这东西讲明白：它是什么、能干什么、为什么有人用，以及你第一次接触它时应该怎么看。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="../assets/blogimg/emby%E9%A6%96%E9%A1%B5.webp" alt="鬼灭详情页" /&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="../assets/blogimg/%E8%A7%86%E9%A2%91%E8%AF%A6%E6%83%85.webp" alt="狂飙飞车" /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1&gt;&lt;code&gt;#&lt;/code&gt;原理&lt;/h1&gt;
&lt;p&gt;众所周知，电影、电视剧、动漫、音乐这些东西，本质上都只是媒体文件。&lt;/p&gt;
&lt;p&gt;而 Emby 干的事情，简单来说，就是把这些原本乱糟糟堆在硬盘里的媒体文件，整理成一个能刮削信息、分类展示、跨设备播放、记录观看进度的媒体库系统。&lt;/p&gt;
&lt;p&gt;你可以把它理解成一个更像“私人流媒体站”的东西。&lt;/p&gt;
&lt;p&gt;也就是说，Emby 本身通常不是资源内容本体，它更像是一个负责整理、展示和播放的“大管家”。真正的重点，其实是它后面挂着什么资源、什么线路、什么机器，以及谁在维护。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img src="../assets/blogimg/%E9%AC%BC%E7%81%AD%E8%AF%A6%E6%83%85%E9%A1%B5.webp" alt="鬼灭详情页" /&gt;&lt;/th&gt;
&lt;th&gt;&lt;img src="../assets/blogimg/%E7%8B%82%E9%A3%99%E9%A3%9E%E8%BD%A6.webp" alt="狂飙飞车" /&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="../assets/blogimg/%E6%BC%94%E5%91%98%E8%A1%A8.webp" alt="演员表" /&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="../assets/blogimg/%E8%A7%86%E9%A2%91%E8%AF%A6%E6%83%85.webp" alt="视频详情" /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1&gt;&lt;code&gt;#&lt;/code&gt;为什么很多人会用 Emby？&lt;/h1&gt;
&lt;p&gt;原因其实很简单：体验确实比“文件夹里找视频”优雅太多了。&lt;/p&gt;
&lt;p&gt;比如你以前看剧，可能是电脑上一个文件夹，手机上另一个播放器，看到哪一集全靠自己记；而用了 Emby 之后，封面、简介、分集、播放记录、继续观看这些东西，基本都能自动给你整理好。&lt;/p&gt;
&lt;p&gt;这是不是一下子就有点像 Netflix 了？对吧。&lt;/p&gt;
&lt;p&gt;另外，Emby 的客户端覆盖也挺广，手机、平板、电脑、电视，基本都能找到对应的使用方式。所以你在家里看一半，出门继续看，体验会顺很多。&lt;/p&gt;
&lt;p&gt;不过体验还只是第一层。&lt;/p&gt;
&lt;p&gt;很多人真正留下来，用得越来越上头，其实还是因为它的性价比确实高。你想想看，如果一个服本身资源就大，新东西补得也不慢，画质还不错，而你付出的成本只是一个相对便宜的价格，或者只是满足一下比较宽松的保号条件，那这个吸引力其实是很强的。&lt;/p&gt;
&lt;p&gt;不过也正因为它很像流媒体，所以很多人第一次接触 Emby 时，会误以为它是一个“资源网站”。&lt;/p&gt;
&lt;p&gt;并不是。&lt;/p&gt;
&lt;p&gt;更准确一点说，Emby 是平台，是壳子，是播放器和媒体库管理系统；至于你能在里面看到什么内容，那取决于具体是谁在搭、怎么搭、资源从哪里来。&lt;/p&gt;
&lt;h1&gt;&lt;code&gt;#&lt;/code&gt;正式开始&lt;/h1&gt;
&lt;p&gt;那么如果你是第一次接触 Emby，最值得先知道的，其实就三件事。&lt;/p&gt;
&lt;h2&gt;1. 你看到的 Emby，不一定是“官方服务”&lt;/h2&gt;
&lt;p&gt;这一点非常重要。&lt;/p&gt;
&lt;p&gt;很多人口中的“Emby 服”，其实是别人自己搭的私人或半公开服务。也就是说，你用到的往往不是 Emby 官方直接提供的内容平台，而是某个人或者某个小团队搭好的实例。&lt;/p&gt;
&lt;p&gt;所以同样叫 Emby，不同服之间的差距可能非常大：资源差很多，速度差很多，稳定性差很多，管理方式也差很多。&lt;/p&gt;
&lt;h2&gt;2. 好不好用，很多时候看线路和维护&lt;/h2&gt;
&lt;p&gt;有些 Emby 服看起来资源很多，但你一播放就转圈；有些资源不一定最全，但线路很稳、码率也合适，日常用起来反而更舒服。&lt;/p&gt;
&lt;p&gt;所以 Emby 这东西，看的不只是“有没有片”，还得看“能不能顺畅地看”。&lt;/p&gt;
&lt;p&gt;接下来如果你以后真要选服，优先看的通常就是这几项：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;你所在地区的直连速度怎么样&lt;/li&gt;
&lt;li&gt;晚高峰会不会卡&lt;/li&gt;
&lt;li&gt;客户端兼容性好不好&lt;/li&gt;
&lt;li&gt;管理员会不会维护、会不会清垃圾、会不会修刮削&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;3. Emby 很适合“看起来舒服”的那批人&lt;/h2&gt;
&lt;p&gt;如果你只是想临时找个视频点开就走，那 Emby 未必是最直接的方案。&lt;/p&gt;
&lt;p&gt;但如果你很在意封面墙、分类、观看记录、跨设备续播、家庭共享这些体验，那么 Emby 往往会让你一用就回不去。&lt;/p&gt;
&lt;p&gt;说白了，它卖的不是“能不能播”，而是“播得是不是舒服”。&lt;/p&gt;
&lt;h1&gt;&lt;code&gt;#&lt;/code&gt;电报服推荐&lt;/h1&gt;
&lt;p&gt;那么问题来了。&lt;/p&gt;
&lt;p&gt;如果你已经知道 Emby 是什么了，接下来最容易纠结的，往往不是“要不要用”，而是“第一家该先蹲哪个”。&lt;/p&gt;
&lt;p&gt;其实这事也不用想得太复杂。你不用把所有 Emby 服都看成同一种东西，有的适合当主力，有的适合当备用，有的胜在线路，有的赢在库量。&lt;/p&gt;
&lt;p&gt;下面这几家，是我觉得信息相对明确、而且各自定位也比较典型的几种。&lt;/p&gt;
&lt;h2&gt;推荐 1：&lt;a href="https://t.me/gyfmsky"&gt;MSKY 公益服&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;一句话：剧集向挺强，整体也比较稳，拿来当主力候选是没问题的。&lt;/li&gt;
&lt;li&gt;资源量：电影 7646 / 剧集 7244 / 总集数 228181&lt;/li&gt;
&lt;li&gt;更适合：平时看剧多，想找一台能长期放着用的公益服用户。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="https://473424071.cn/_astro/msky.OZ1ZchTe.webp" alt="" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;推荐 2：&lt;a href="https://t.me/MiraiEmby"&gt;Mirai Emby&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;一句话：库量大、运营也比较成体系，是那种一看就知道有人认真在管的服。&lt;/li&gt;
&lt;li&gt;资源量：电影 9051 / 剧集 6441 / 总集数 205459&lt;/li&gt;
&lt;li&gt;更适合：想找大库主力服，愿意按常规服规使用的用户。&lt;/li&gt;
&lt;li&gt;Telegram：频道 &lt;code&gt;@Miraipre&lt;/code&gt;，群组 &lt;code&gt;@MiraiEmby&lt;/code&gt;，Bot &lt;code&gt;@miraiemby_bot&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="https://473424071.cn/_astro/mirai.DRcnMZ7D.webp" alt="" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;推荐 3：&lt;a href="https://t.me/lilililililiiilllll"&gt;非越影视服&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;一句话：资源量挺能打，尤其剧集不少，但更吃你自己的网络环境。&lt;/li&gt;
&lt;li&gt;资源量：电影 8119 / 剧集 8348 / 总集数 257417&lt;/li&gt;
&lt;li&gt;更适合：本身网络条件不错，或者平时就走海外线路的用户。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="../assets/blogimg/%E9%9D%9E%E8%B6%8A.webp" alt="" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;推荐 4：&lt;a href="https://t.me/embyhello"&gt;泥嚎（115 网盘公益服)&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;一句话：这家更像实实在在的备用库，量够看，风格也比较朴素。&lt;/li&gt;
&lt;li&gt;资源量：电影 6181 / 剧集 3052 / 总集数 173398&lt;/li&gt;
&lt;li&gt;更适合：已经有主力服，还想再备一个免费公益服的人。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="../assets/blogimg/%E6%B3%A5%E5%9A%8E.webp" alt="" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;推荐 5：&lt;a href="https://t.me/sntp_emby_lite_v2"&gt;守候网络 lite 影院&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;一句话：如果你只看资源池和整体规模，这家基本就是大体量路线。&lt;/li&gt;
&lt;li&gt;资源量：电影 24229 / 剧集 25818 / 总集数 391306&lt;/li&gt;
&lt;li&gt;更适合：更看重库量、线路和整体体验，或者本来就在用它家相关服务的用户。&lt;/li&gt;
&lt;li&gt;Telegram：Bot &lt;code&gt;@sntp_emby_bot&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="https://473424071.cn/_astro/sntp.DPxxt--u.webp" alt="" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;所以如果你问我一个很偷懒的选法，我会这么建议：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;想拿来当主力，优先看 &lt;code&gt;MSKY&lt;/code&gt; 和 &lt;code&gt;Mirai&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;想要剧多、但又不太在意国内线路优化，&lt;code&gt;非越&lt;/code&gt; 也值得看看&lt;/li&gt;
&lt;li&gt;想找个备用库，&lt;code&gt;115 网盘公益服&lt;/code&gt; 反而挺合适&lt;/li&gt;
&lt;li&gt;想冲更大的资源池，&lt;code&gt;守候网络 lite 影院&lt;/code&gt; 值得关注&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;至于保号、播放器限制这些细节，每家都会调整，进群前扫一眼公告就够了，这里我就不展开吓人了。&lt;/p&gt;
&lt;p&gt;是不是一下子就清楚多了？这时候你再回头看群里那些“这个服强不强”的讨论，基本就能自己判断个八九不离十了。&lt;/p&gt;
&lt;h2&gt;4. 既然都推荐到这里了，那怎么用呢？&lt;/h2&gt;
&lt;p&gt;其实真上手没那么复杂。&lt;/p&gt;
&lt;p&gt;你拿到一个 Emby 服之后，通常只需要准备这几样东西：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;服务器地址
用户名
密码
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;接下来在播放器里添加服务器，连接协议一般选 &lt;code&gt;Emby&lt;/code&gt; 或者 &lt;code&gt;其他 Emby&lt;/code&gt;，然后把上面这几项填进去就行。&lt;/p&gt;
&lt;p&gt;那么播放器该怎么选？&lt;/p&gt;
&lt;p&gt;按 2025 年 8 月 11 日这份整理来看，我更建议你优先从下面这些“用的人多、也相对省心”的开始试：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Android：&lt;code&gt;Vidhub&lt;/code&gt;、&lt;code&gt;Hills&lt;/code&gt;、&lt;code&gt;Yamby&lt;/code&gt;、&lt;code&gt;Emby 小秘版&lt;/code&gt;、&lt;code&gt;capyplayer&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;iPhone / iPad：&lt;code&gt;SenPlayer&lt;/code&gt;、&lt;code&gt;Vidhub&lt;/code&gt;、&lt;code&gt;capyplayer&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Apple TV：&lt;code&gt;SenPlayer&lt;/code&gt;、&lt;code&gt;Vidhub&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Windows：&lt;code&gt;Hills Lite&lt;/code&gt;、&lt;code&gt;Yamby&lt;/code&gt;、&lt;code&gt;小幻影视&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;华为鸿蒙：&lt;code&gt;HosPlayer&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不过这里有个很重要的小提醒。&lt;/p&gt;
&lt;p&gt;Emby 相关客户端和各种改版非常多，不同设备上的兼容性真的不完全一样。所以最稳的做法不是“别人说哪个好我就只装那一个”，而是先从上面这些主流选择里试，再留下你自己设备上最顺手的那个。&lt;/p&gt;
&lt;p&gt;另外，苹果系很多人第一反应会去装 &lt;code&gt;Infuse&lt;/code&gt;，不过现在不少服已经直接禁掉了，或者禁它的“媒体库模式”。所以你如果是 iPhone、iPad 或 Apple TV 用户，先从 &lt;code&gt;SenPlayer&lt;/code&gt;、&lt;code&gt;Vidhub&lt;/code&gt; 这类更稳一点的开始，通常更省事。&lt;/p&gt;
&lt;p&gt;再补一句，有些服还会限制网页播放、官方客户端，或者某些功能。所以你登录成功之后，还是先看一眼群公告最稳。&lt;/p&gt;
&lt;h1&gt;&lt;code&gt;#&lt;/code&gt;常见问题&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Q：Emby 和网盘在线看有什么区别？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A：最大的区别在体验。网盘更像“临时打开一个文件”，而 Emby 更像“在一个整理好的媒体库里消费内容”。前者能看，后者更适合长期看。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q：Emby 和 Plex、Jellyfin 是一类东西吗？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A：对，本质上是同一赛道的媒体库方案。只不过它们各自的生态、客户端体验、授权方式和社区氛围不太一样。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q：第一次接触 Emby，最容易踩什么坑？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A：最容易踩的坑就是把所有 Emby 服都当成同一个质量水平。其实不是。不同实例之间的差异，可能比你想象中大得多。&lt;/p&gt;
&lt;h1&gt;&lt;code&gt;#&lt;/code&gt;总结&lt;/h1&gt;
&lt;p&gt;所以说，Emby 这东西本身并不神秘。&lt;/p&gt;
&lt;p&gt;它本质上就是一个把媒体内容整理得更像现代流媒体的系统，而大家真正讨论得热火朝天的，往往是它背后的资源、线路和维护水平。&lt;/p&gt;
&lt;p&gt;如果你只是想先搞明白 Emby 是什么，那么看到这里其实就已经够了。&lt;/p&gt;
&lt;p&gt;至此，我们已经把 Emby 这个概念快速捋顺了。就这么简单！&lt;/p&gt;
</content:encoded></item><item><title>免费白嫖Hi168云平台提供的1TB，S3对象存储。</title><link>https://473424071.cn/posts/hi168/</link><guid isPermaLink="true">https://473424071.cn/posts/hi168/</guid><description>看了两篇关于 Hi168 的文章后，简单聊聊我的感觉：能用，能薅，但更适合备份和轻度折腾，不太像成熟主力存储。</description><pubDate>Thu, 12 Mar 2026 18:20:00 GMT</pubDate><content:encoded>&lt;p&gt;根据&lt;a href="https://blog.csdn.net/weixin_43113691/article/details/146925457"&gt;相关文章&lt;/a&gt;来说，Hi168 是一个来自上海的云服务商。他提供了一个桌面云应用，有个图形化界面长得跟Window一样。
&lt;img src="../assets/blogimg/Hi168%E4%B8%BB%E9%A1%B5%E9%9D%A2.webp" alt="图形化页面" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;通过Hi168&lt;a href="https://www.hi168.com"&gt;官方入口&lt;/a&gt;注册。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;&lt;code&gt;#&lt;/code&gt;1) 额度情况：基础500G，实名上1T。创建储存桶&lt;/h2&gt;
&lt;p&gt;Hi168 的储存额度：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;注册新用户有 500GB储存。&lt;/li&gt;
&lt;li&gt;实名后能到 &lt;strong&gt;1TB&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;提供 &lt;strong&gt;S3 兼容对象存储&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;同时支持很多 S3 的工具去用。对喜欢折腾的人来说，这点比单纯容量大更有意思。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;进入Hi168页面打开中的 [1]存储管理 ，在[2]可以看到你当前的储存空间。&lt;/strong&gt;
&lt;img src="../assets/blogimg/%E5%AF%B9%E8%B1%A1%E5%AD%98%E5%82%A8%E9%A1%B5%E9%9D%A2.webp" alt="对象存储页面" /&gt;
&lt;strong&gt;打开对象存储页面后,点击[4]OSS设置，申请新密钥。&lt;/strong&gt;
&lt;img src="../assets/blogimg/occ%E8%AE%BE%E7%BD%AE.webp" alt="occ设置" /&gt;
&lt;strong&gt;再到[3]&lt;code&gt;"＋"&lt;/code&gt;号创建存储桶。&lt;/strong&gt;
&lt;img src="https://473424071.cn/_astro/cjcct.B68wy-DV.webp" alt="创建储存桶" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;code&gt;#&lt;/code&gt;2）用Cyberduck等S3工具连接储存空间&lt;/h2&gt;
&lt;p&gt;这块其实不复杂。因为 Hi168 给的是 S3 兼容存储，所以像 Cyberduck 这种支持 Amazon S3 / 第三方 S3 的客户端，理论上都能直接拿来连。Cyberduck 官方也写了，它支持 Amazon S3 以及很多第三方 S3 兼容服务。&lt;/p&gt;
&lt;h3&gt;如果是Cyberduck，相关配置如下：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;协议：&lt;strong&gt;Amazon S3&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;服务器 / Endpoint：填 Hi168 给你的 &lt;strong&gt;S3 endpoint&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;端口：&lt;strong&gt;443&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Access Key ID：填你创建的密钥&lt;/li&gt;
&lt;li&gt;Secret Access Key：填对应的密钥&lt;/li&gt;
&lt;li&gt;连接方式：默认走 &lt;strong&gt;HTTPS&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果连不上，还有个小细节要注意。&lt;br /&gt;
Cyberduck 官方提到，有些第三方 S3 兼容服务只支持 &lt;strong&gt;path-style&lt;/strong&gt; 请求，这种情况下如果你用普通 S3 配置连不上，可以改用它提供的 “Deprecated path style requests” 配置，或者关闭 virtual host style。&lt;/p&gt;
&lt;p&gt;连上之后，一般就能看到你的 bucket，然后直接拖文件上传就行了。很多同类对象存储在 Cyberduck 里的连接方式也差不多：填 endpoint、Access Key、Secret Key，然后进去管理 bucket 和对象。&lt;/p&gt;
&lt;h3&gt;除了 Cyberduck，也可以用这些：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;rclone&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;S3 Browser&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Mountain Duck&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;其他支持 S3 的文件管理工具等&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;反正思路都一样：&lt;br /&gt;
&lt;strong&gt;只要它支持 S3 兼容协议，基本就有机会接 Hi168。&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;&lt;code&gt;#&lt;/code&gt;3) Hi168平台的其它服务&lt;/h2&gt;
&lt;p&gt;Hi168 其实不只是对象存储，同时带有云桌面、镜像、模板、应用部署能力的轻量云平台。
注册后平台还会送5算力，后续可以通过充值续算力。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;其他详细的使用教程可以参考&lt;a href="https://blog.csdn.net/weixin_43113691/article/details/146925457"&gt;此篇文章&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;code&gt;#&lt;/code&gt;4) 应用场景&lt;/h2&gt;
&lt;p&gt;适合的使用场景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;备份文件&lt;/li&gt;
&lt;li&gt;轻度挂载 S3 工具&lt;/li&gt;
&lt;li&gt;存项目资料或冷数据&lt;/li&gt;
&lt;li&gt;自己拿来折腾玩&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果只是想搞一个免费、容量大的 S3 仓库，那它确实挺香。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;code&gt;#&lt;/code&gt;5) 但也别期待太高，速度情况。&lt;/h2&gt;
&lt;p&gt;免费的东西，体验一般都会打点折。&lt;/p&gt;
&lt;p&gt;按小众软件文中的实测，白天上传大约 &lt;code&gt;2~4MB/s&lt;/code&gt;，下载大约 &lt;code&gt;1MB/s&lt;/code&gt;，晚高峰可能掉到几百 &lt;code&gt;KB/s&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;Hi168的S3速度大概就是“够用，但不惊艳”的水平。&lt;br /&gt;
拿来备份、同步、轻度分发还行，但你要把它当高性能图床、正式资源站或者主力对象存储，免费的东西不要求太多。&lt;/p&gt;
&lt;p&gt;所以我更愿意把它看成：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一个能白嫖的备用仓库，而不是可以直接全押的主力方案。&lt;/strong&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;code&gt;#&lt;/code&gt;6) 篇末&lt;/h2&gt;
&lt;p&gt;Hi168 这个平台，我的看法很简单：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;值得注册试试，也值得拿来薅空间和折腾工具，但更适合当实验仓库、备份仓库，不太像成熟稳定的长期主力存储。&lt;/strong&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h1&gt;&lt;code&gt; ——自此本章完结——&lt;/code&gt;&lt;/h1&gt;
</content:encoded></item><item><title>日志测试二：日期与评论位验证</title><link>https://473424071.cn/posts/journal-demo-20260302-2/</link><guid isPermaLink="true">https://473424071.cn/posts/journal-demo-20260302-2/</guid><description>验证日志详情页中的发布时间、更新时间和评论区加载位置。</description><pubDate>Mon, 02 Mar 2026 20:25:00 GMT</pubDate><content:encoded>&lt;p&gt;这篇用于检查三个点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;列表是否显示发布时间。&lt;/li&gt;
&lt;li&gt;详情页是否显示发布时间与更新时间。&lt;/li&gt;
&lt;li&gt;页面底部是否正常出现 Giscus 评论区。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果都正常，就可以按这个模板继续写正式日志。&lt;/p&gt;
</content:encoded></item><item><title>日志测试一：展览馆日志联通</title><link>https://473424071.cn/posts/journal-demo-20260302-1/</link><guid isPermaLink="true">https://473424071.cn/posts/journal-demo-20260302-1/</guid><description>测试 journal 页面是否会读取 category=日志 的帖子并跳转到详情页。</description><pubDate>Mon, 02 Mar 2026 20:10:00 GMT</pubDate><content:encoded>&lt;p&gt;今天先做联通测试：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在 &lt;code&gt;src/content/posts/&lt;/code&gt; 新建日志 md。&lt;/li&gt;
&lt;li&gt;设置 frontmatter 的 &lt;code&gt;category: 日志&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;访问 &lt;code&gt;/journal/&lt;/code&gt; 检查是否出现列表项并可点击进入详情。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果这篇能在日志页显示并能点开，就说明“日志按帖子模型走”已经打通。&lt;/p&gt;
</content:encoded></item><item><title>用 video-ts 在 Cloudflare Pages / Worker 零成本托管你的视频文件</title><link>https://473424071.cn/posts/cfplay/</link><guid isPermaLink="true">https://473424071.cn/posts/cfplay/</guid><description>不用自建流媒体服务器，hls/dash静态分片托管到cloudflare在线播放，享受CDN 分发。</description><pubDate>Fri, 27 Feb 2026 16:30:00 GMT</pubDate><content:encoded>&lt;h2&gt;&lt;code&gt;项目仓库地址:&lt;/code&gt;
::github{repo="TyrEamon/video-tsp"}
&amp;lt;details&amp;gt;
&amp;lt;summary&amp;gt;点击展开&amp;lt;/summary&amp;gt;
&amp;lt;p&amp;gt;源站：https://github.com/TyrEamon/video-ts
&amp;lt;p&amp;gt;镜像站：https://gh.kaza.de5.net/TyrEamon/video-tsp&amp;lt;/p&amp;gt;
&amp;lt;/details&amp;gt;&lt;/h2&gt;
&lt;h1&gt;&lt;code&gt;#&lt;/code&gt;前言&lt;/h1&gt;
&lt;p&gt;如果你想把视频放进博客，但又不想自建流媒体服务器，那么你可以考虑用强大的FFmpeg工具和video-ts项目。这种“静态分片 + CDN 分发”的方案会非常实用。
核心思路是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;本地用 FFmpeg 处理视频，转码和生成 HLS/DASH 分片文件。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;video-ts&lt;/code&gt; 负责整理路由和播放页。&lt;/li&gt;
&lt;li&gt;白嫖Cloudflare服务，让大善人负责全球分发和缓存。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;后续可以&lt;code&gt;嵌入&lt;/code&gt; 、&lt;code&gt;读取&lt;/code&gt;到博客中，直接播放
比如：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::video-ts{url="https://你的域名/_v/001/index.m3u8"}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;&lt;img src="../assets/blogimg/%E6%92%AD%E6%94%BE.webp" alt="" /&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;code&gt;#&lt;/code&gt;1、为什么用 Cloudflare Pages 或 Worker 托管视频&lt;/h2&gt;
&lt;p&gt;用cloudflare托管我们可以享受它的服务：&lt;code&gt;我们不用自己搭流媒体服务器&lt;/code&gt;、&lt;code&gt;自带有 CDN&lt;/code&gt;，跨地区访问更稳。&lt;code&gt;自带 HTTPS 和自定义域名&lt;/code&gt;，不用自己配置。&lt;code&gt;可用缓存规则把热分片打到边缘缓存（HIT）&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;同时每次提交新文件到 GitHub，Pages 会自动部署新的视频文件。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;Pages 和 Worker 的选择：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;想省事：先用 Pages（静态托管很直接）&lt;/li&gt;
&lt;li&gt;如果你后面想做更复杂逻辑（鉴权、签名、反代）：再加 Worker&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;code&gt;#&lt;/code&gt;2、想托管到cf，首先得进行HLS 和 DASH 分片&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Cloudflare Pages 托管静态文件的约束：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;单个静态文件最大 25 MiB&lt;/li&gt;
&lt;li&gt;Free 计划每个站点最多 20,000 个文件&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;HLS 和 DASH本质就是“把一个大视频切成很多小段 + 一份清单文件”。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HLS文件：入口文件 &lt;code&gt;.m3u8&lt;/code&gt;＋多个 &lt;code&gt;.ts&lt;/code&gt; 或 &lt;code&gt;.m4s&lt;/code&gt; 分片文件
&lt;img src="../assets/blogimg/hls%E5%88%86%E7%89%87.webp" alt="HLS 分片文件" /&gt;&lt;/li&gt;
&lt;li&gt;DASH文件：入口文件 &lt;code&gt;.mpd&lt;/code&gt;＋多个 &lt;code&gt;.m4s&lt;/code&gt; 或 &lt;code&gt;.webm&lt;/code&gt; 分片文件
&lt;img src="../assets/blogimg/dash%E5%88%86%E7%89%87.webp" alt="DASH 分片文件" /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;进行播放时，播放器会先读清单，再按顺序拉分片。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;code&gt;#&lt;/code&gt;3、分片前要先考虑视频的编码格式。选H.264(AVC) 还是 AV1？兼容性和压缩率怎么选?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;目前主流上最稳定的视频编码格式是 &lt;code&gt;H.264&lt;/code&gt;（AVC）。它是最老的视频编码格式，兼容性最强。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AV1&lt;/code&gt;：同画质通常更省码率兼并高压缩率、文件更小更省流量，但前提是得设备支持 AV1 解码。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我的建议：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;博客主力先上 H.264（稳）&lt;/li&gt;
&lt;li&gt;你有精力再补 AV1 版本（省流量）&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;code&gt;#&lt;/code&gt;4、工具推荐 FFmpeg（含命令 + 关键参数）&lt;/h2&gt;
&lt;p&gt;FFmpeg处理视频、音频界的&lt;code&gt;瑞士军刀&lt;/code&gt;，功能强大，支持几乎所有视频格式。我们的转码和分片都在FFmpeg里进行。&lt;/p&gt;
&lt;h3&gt;4.1 转 AV1（示例）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;ffmpeg -i "input.mp4" -c:v libsvtav1 -crf 30 -preset 6 -pix_fmt yuv420p -c:a libopus -b:a 160k "output-av1.mkv"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;参数调整：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-c:v libsvtav1&lt;/code&gt;：视频编码器用 AV1&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-crf 30&lt;/code&gt;：质量与体积平衡（越小越清晰，也更大）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-preset 6&lt;/code&gt;：编码速度档位（越慢通常压得更好）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-pix_fmt yuv420p&lt;/code&gt;：兼容性更稳&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-c:a libopus -b:a 160k&lt;/code&gt;：音频 Opus 160k&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3&gt;4.2 切 HLS（&lt;code&gt;.m3u8 + .ts&lt;/code&gt;）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;ffmpeg -i "input.mp4" -c:v libx264 -preset medium -crf 23 -c:a aac -b:a 128k -f hls -hls_time 6 -hls_playlist_type vod -hls_flags independent_segments -hls_segment_filename "public/_v/001/seg_%05d.ts" "public/_v/001/index.m3u8"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;关键调整：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-f hls&lt;/code&gt;：输出 HLS&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-hls_time 6&lt;/code&gt;：每段大约 6 秒&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-hls_playlist_type vod&lt;/code&gt;：点播场景&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-hls_segment_filename&lt;/code&gt;：分片命名模板&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3&gt;4.3 切 DASH（&lt;code&gt;.mpd + 分片&lt;/code&gt;）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;ffmpeg -i "input.mp4" -map 0:v:0 -map 0:a:0 -c:v libx264 -preset medium -crf 23 -c:a aac -b:a 128k -f dash -seg_duration 4 -use_template 1 -use_timeline 1 "public/_v/001/manifest.mpd"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;关键调整：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-f dash&lt;/code&gt;：输出 DASH&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-seg_duration 4&lt;/code&gt;：每段约 4 秒&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-use_template 1 -use_timeline 1&lt;/code&gt;：模板 + 时间线&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;code&gt;#&lt;/code&gt;5、分片后的&lt;code&gt;.m3u8&lt;/code&gt;和&lt;code&gt;.ts&lt;/code&gt;、&lt;code&gt;.mpd&lt;/code&gt;和&lt;code&gt;.m4s/webm&lt;/code&gt;文件放,统一放在 &lt;code&gt;_v&lt;/code&gt; 下&lt;/h2&gt;
&lt;p&gt;在 &lt;code&gt;video-ts&lt;/code&gt; 里统一放：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public/_v/&amp;lt;slug&amp;gt;/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;比如：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public/_v/001/index.m3u8
public/_v/001/seg_00000.ts
public/_v/001/manifest.mpd
public/_v/001/chunk-stream0-00001.m4s
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;code&gt;#&lt;/code&gt;6、video-ts的首次部署&amp;amp;日常使用流程（最实用）&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;（1）首次部署：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;worker 端：
&lt;ul&gt;
&lt;li&gt;到 cf 控制台，创建一个新的 Worker。&lt;/li&gt;
&lt;li&gt;把 &lt;code&gt;worker.js&lt;/code&gt; 内容复制到 Worker 编辑器。&lt;/li&gt;
&lt;li&gt;绑定自定义域名到 Worker。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;pages 端：
&lt;ul&gt;
&lt;li&gt;到 cf 控制台，创建一个新的 Pages 项目。&lt;/li&gt;
&lt;li&gt;链接到你的 GitHub 仓库项目&lt;/li&gt;
&lt;li&gt;构建命令：&lt;code&gt;npm run build&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;构建输出：public&lt;/li&gt;
&lt;li&gt;绑定自定义域名到 Pages。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;（2）日常使用（每次加新视频我就是这四步）：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;把分片放进 &lt;code&gt;public/_v/&amp;lt;slug&amp;gt;/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;跑：&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;提交并 push&lt;/li&gt;
&lt;li&gt;push到远端github仓库，cf pages等会自动部署&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h1&gt;&lt;code&gt;#&lt;/code&gt;后记&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;_headers&lt;/code&gt; 和 &lt;code&gt;player.html&lt;/code&gt; 是干嘛的&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;_headers&lt;/code&gt;： Cloudflare 静态响应头配置。&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;CORS（跨域播放）&lt;/li&gt;
&lt;li&gt;缓存策略（清单短缓存、分片长缓存）：&lt;code&gt;m3u8/mpd&lt;/code&gt;：短缓存、&lt;code&gt;ts/m4s/webm/mp4&lt;/code&gt;：长缓存 + immutable&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;player.html&lt;/code&gt;：通用播放器页面，能直接打开 URL 播放。&lt;/h3&gt;
&lt;p&gt;引用的js库：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;video-dev/hls.js&lt;/code&gt;（HLS）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Dash-Industry-Forum/dash.js&lt;/code&gt;（DASH）
&lt;img src="https://473424071.cn/_astro/html.CsHyW-_W.webp" alt="" /&gt;
然后博客端直接用：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;details&amp;gt;
&amp;lt;summary&amp;gt;点我展开&amp;lt;/summary&amp;gt;
&amp;lt;p&amp;gt;/d、/h 指定解码方式&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HLS解码：&lt;code&gt;https://你的域名/h/&amp;lt;slug&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;DASH解码：&lt;code&gt;https://你的域名/d/&amp;lt;slug&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;默认入口：&lt;code&gt;https://你的域名/&amp;lt;slug&amp;gt;&lt;/code&gt;（优先 HLS）&amp;lt;/p&amp;gt;
&amp;lt;/details&amp;gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你博客自己已经内置播放器，也可以不走 &lt;code&gt;player.html&lt;/code&gt;，直接用路由：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HLS：&lt;code&gt;/h/&amp;lt;slug&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;DASH：&lt;code&gt;/d/&amp;lt;slug&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3&gt;Cloudflare 缓存规则建议(看情况加)&lt;/h3&gt;
&lt;p&gt;如果浏览器缓存命中了，但 &lt;code&gt;CF-Cache-Status&lt;/code&gt; 还是 &lt;code&gt;DYNAMIC&lt;/code&gt;。可以到cf的缓存规则里加 Cache Rules。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;分片规则（长缓存）&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;匹配：&lt;code&gt;/_v/*&lt;/code&gt; 下的 &lt;code&gt;m4s/ts/webm/mp4&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;动作：&lt;code&gt;Eligible for cache&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Edge TTL：1 个月或 1 年&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;清单规则（短缓存）&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;匹配：&lt;code&gt;/_v/*&lt;/code&gt; 下的 &lt;code&gt;m3u8/mpd&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;动作：&lt;code&gt;Eligible for cache&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Edge TTL：5 分钟&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这样基本就能从 &lt;code&gt;DYNAMIC&lt;/code&gt; 变成 &lt;code&gt;MISS/HIT&lt;/code&gt; 了。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;code&gt;video-ts&lt;/code&gt; 这套就是“轻后端视频托管”：&lt;br /&gt;
&lt;strong&gt;FFmpeg 负责处理，Cloudflare 负责分发，博客负责展示&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;&lt;code&gt;--到此本文结束--&lt;/code&gt;&lt;/h2&gt;
</content:encoded></item><item><title>Alist/OpenList 美化教程：自定义头部快速上手（背景/毛玻璃/切换按钮）</title><link>https://473424071.cn/posts/openlist-theme/</link><guid isPermaLink="true">https://473424071.cn/posts/openlist-theme/</guid><description>一篇实用向 OpenList 美化教程：通过自定义头部注入 CSS/JS，实现背景图、毛玻璃面板和日夜切换按钮，重点讲怎么用。</description><pubDate>Mon, 23 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Alist/OpenList 美化教程：自定义头部快速上手（背景/毛玻璃/切换按钮）&lt;/h1&gt;
&lt;p&gt;这篇就写一个简单实用版：用 Alist/OpenList 后台的 &lt;strong&gt;“自定义头部（Customize head）”&lt;/strong&gt;，做背景图、毛玻璃和切换按钮。&lt;/p&gt;
&lt;p&gt;重点放在怎么使用，优化过程只简单带过。&lt;/p&gt;
&lt;h2&gt;最终效果（这篇能做什么）&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;白天/夜间模式不同背景图&lt;/li&gt;
&lt;li&gt;列表/卡片毛玻璃效果&lt;/li&gt;
&lt;li&gt;左下角手动切换按钮&lt;/li&gt;
&lt;li&gt;一些细节样式（导航、代码块、底部渐变）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="https://473424071.cn/_astro/openlist-theme-1.BzXV6Iuy.webp" alt="效果图占位-白天模式" /&gt;
&lt;img src="https://473424071.cn/_astro/openlist-theme-2.DJ0wjZ-x.webp" alt="效果图占位-夜间模式" /&gt;&lt;/p&gt;
&lt;h2&gt;使用前准备&lt;/h2&gt;
&lt;p&gt;你需要准备：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;一份主题片段文件（&lt;code&gt;openlist-Theme.html&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;背景图链接（推荐 4 张）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;推荐准备 4 张图，分别对应：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;白天横屏&lt;/li&gt;
&lt;li&gt;白天竖屏&lt;/li&gt;
&lt;li&gt;夜间横屏&lt;/li&gt;
&lt;li&gt;夜间竖屏&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;没有 4 张也没关系，先用 2 张（白天/夜间各一张）也能用。&lt;/p&gt;
&lt;h2&gt;使用方法（重点）&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;打开 OpenList 后台&lt;/li&gt;
&lt;li&gt;进入 &lt;code&gt;设置 -&amp;gt; 全局 -&amp;gt; 自定义头部（Customize head）&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;打开 &lt;code&gt;openlist-Theme.html&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;把里面的背景图 &lt;code&gt;url("...")&lt;/code&gt; 换成你自己的图片直链&lt;/li&gt;
&lt;li&gt;将整份内容复制到 &lt;code&gt;自定义头部&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;保存并刷新页面&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;需要替换的地方（背景图）&lt;/h2&gt;
&lt;p&gt;在 &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; 里主要改这 4 处：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;.hope-ui-light&lt;/code&gt; 的横屏背景&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.hope-ui-light&lt;/code&gt; 里的竖屏背景（&lt;code&gt;@media (max-aspect-ratio:1)&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.hope-ui-dark&lt;/code&gt; 的横屏背景&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.hope-ui-dark&lt;/code&gt; 里的竖屏背景（&lt;code&gt;@media (max-aspect-ratio:1)&lt;/code&gt;）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;简单说就是把原来的：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;background-image: url("你的图片链接");
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;替换成自己的图床/网盘直链。&lt;/p&gt;
&lt;h2&gt;只想换背景，不想要按钮？&lt;/h2&gt;
&lt;p&gt;可以。&lt;/p&gt;
&lt;p&gt;你只保留 &lt;code&gt;&amp;lt;style&amp;gt;...&amp;lt;/style&amp;gt;&lt;/code&gt; 部分，把按钮相关的 &lt;code&gt;&amp;lt;script&amp;gt;...&amp;lt;/script&amp;gt;&lt;/code&gt; 去掉就行。这样更稳，也更适合只做静态美化。&lt;/p&gt;
&lt;h2&gt;完整代码（可直接复制）&lt;/h2&gt;
&lt;p&gt;下面这份就是可以直接粘贴到 自定义头部 的版本（记得先把 4 个背景图链接替换成你自己的）。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;GitHub 仓库&lt;/code&gt;（可直接取最新版本）：&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/TyrEamon/openlist-Theme&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;背景url修改示例（确认格式没问题）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;script src="https://polyfill.alicdn.com/v3/polyfill.min.js?features=String.prototype.replaceAll"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;style&amp;gt;
.hope-ui-light { /* 白天背景(电脑端&amp;amp;手机端) */ }     /* 日：url.1=横屏 url.2=竖屏 */
.hope-ui-dark  { /* 夜间背景(电脑端&amp;amp;手机端) */ }     /* 夜：url.1=横屏 url.2=竖屏 */
&amp;lt;/style&amp;gt;
&amp;lt;script&amp;gt;
// 日夜切换按钮逻辑（已做移动端误触修复）
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;details&amp;gt;
&amp;lt;summary&amp;gt;点击展开完整代码（可直接复制）&amp;lt;/summary&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;script src="https://polyfill.alicdn.com/v3/polyfill.min.js?features=String.prototype.replaceAll"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;style&amp;gt; .notify-render .hope-close-button {
    display:none
}
.hope-ui-light {
    background-image:url("https://pan.0106010.xyz/file/openlist-Theme/1771838991109_130584045_p0.webp") !important;
    @media (max-aspect-ratio:1) {
        background-image:url("https://pan.0106010.xyz/file/openlist-Theme/1771838999793_file_6179.webp") !important;
    }
    background-repeat:no-repeat;
    background-size:cover;
    background-attachment:fixed;
    background-position-x:center
}
.hope-ui-dark {
     background-image:url("https://pan.0106010.xyz/file/openlist-Theme/1771839006594_openlist1.webp") !important;
    @media (max-aspect-ratio:1) {
        background-image:url("https://pan.0106010.xyz/file/openlist-Theme/1771838992434_1673371139204.webp") !important;
    }
    background-repeat:no-repeat;
    background-size:cover;
    background-attachment:fixed;
    background-position-x:center
}
.hope-ui-light .obj-box.hope-stack.hope-c-dhzjXW.hope-c-PJLV.hope-c-PJLV-igScBhH-css {
    backdrop-filter: blur(1px);
    background-color:rgba(255,255,255,0.7) !important
}
.hope-ui-dark .obj-box.hope-stack.hope-c-dhzjXW.hope-c-PJLV.hope-c-PJLV-iigjoxS-css {
    backdrop-filter: blur(1px);
    background-color:rgb(0 0 0 / 50%) !important
}
.hope-ui-light .hope-c-PJLV.hope-c-PJLV-ikSuVsl-css {
    backdrop-filter: blur(1px);
    background-color:rgba(255,255,255,0.5) !important
}
.hope-ui-dark .hope-c-PJLV.hope-c-PJLV-iiuDLME-css {
    backdrop-filter: blur(1px);
    background-color:rgb(0 0 0 / 50%) !important
}
.hope-ui-light .hope-c-ivMHWx-hZistB-cv.hope-icon-button {
    backdrop-filter: blur(1px);
    background-color:rgba(255,255,255,0.5) !important
}
.hope-ui-dark .hope-c-ivMHWx-hZistB-cv.hope-icon-button {
    backdrop-filter: blur(1px);
    background-color:rgb(0 0 0 / 50%) !important
}
.hope-ui-light .hope-c-PJLV-ijgzmFG-css {
    backdrop-filter: blur(1px);
    background-color:rgba(255,255,255,0.5) !important
}
.hope-ui-dark .hope-c-PJLV-ijgzmFG-css {
    backdrop-filter: blur(1px);
    background-color:rgb(0 0 0 / 50%) !important
}
.hope-ui-light pre {
    background-color:rgba(255,255,255,0.1) !important
}
.hope-ui-dark pre {
    background-color:rgba(255,255,255,0) !important
}
.hope-ui-light .hope-c-PJLV-ieGWMbI-css {
    backdrop-filter: blur(1px);
    background:rgba(255,255,255,0.5) !important
}
.hope-ui-dark .hope-c-PJLV-ieGWMbI-css {
    backdrop-filter: blur(1px);
    background-color:rgb(0 0 0 / 50%) !important
}
.hope-ui-light .hope-c-PJLV-ihVEsOa-css {
    backdrop-filter: blur(1px);
    background:rgba(255,255,255,0.5) !important
}
.hope-ui-dark .hope-c-PJLV-ihVEsOa-css {
    backdrop-filter: blur(1px);
    background-color:rgb(0 0 0 / 50%) !important
}
#root &amp;gt; .header {
    background:linear-gradient(180deg,rgba(255,255,255,0.3),rgba(255,255,255,0))
}
.footerd {
    width: 100vw;
    height: 5vh;
    position: fixed;
    bottom: 0;
    left: 0;
    background:linear-gradient(0deg,rgba(255,255,255,0.3),rgba(255,255,255,0))
}
.hope-ui-light .body &amp;gt; .nav {
    background-color:rgba(255,255,255,0.7);
    border-radius:var(--hope-radii-xl)
}
.hope-ui-dark .body &amp;gt; .nav {
    background-color:rgb(0 0 0 / 50%);
    border-radius:var(--hope-radii-xl)
}
.body &amp;gt; .nav::after {
    display:none
}
dibu {
    border-top:0px;
    position:absolute;
    bottom:0;
    width:100%;
    margin:0px;
    padding:0px
}
.App {
    min-height:85vh
}
.table {
    margin:auto
}
#canvas-basic {
    position:fixed;
    display:block;
    width:100%;
    height:100%;
    top:0;
    right:0;
    bottom:0;
    left:0;
    z-index:-999
}
.hope-image {
    filter:drop-shadow(2px 4px 8px rgb(255,255,255))
}
button#hope-menu-daynight-switch-trigger {
    position: fixed;
    bottom: 7.5vh;
    left: 2.5vw;
    z-index: 114;
    size: var(--hope-sizes-8);
}

/* fallback panel colors when OpenList hash classes change */
.hope-ui-light .obj-box {
    background-color: rgba(255,255,255,0.65) !important;
}
.hope-ui-dark .obj-box {
    background-color: rgb(0 0 0 / 50%) !important;
}
&amp;lt;/style&amp;gt;
&amp;lt;script&amp;gt;
    document.write(`&amp;lt;div class="footerd"&amp;gt;&amp;lt;/div&amp;gt;`);
&amp;lt;/script&amp;gt;
&amp;lt;!-- 日夜主题切换按钮 | Day/Night Switch Button --&amp;gt;
&amp;lt;script&amp;gt;
    function unlockScroll() {
        var docEl = document.documentElement;
        var body = document.body;
        if (docEl) {
            docEl.style.overflow = "";
            docEl.style.overflowY = "";
            docEl.style.position = "";
            docEl.style.width = "";
        }
        if (body) {
            body.style.overflow = "";
            body.style.overflowY = "";
            body.style.position = "";
            body.style.width = "";
            body.style.paddingRight = "";
            body.style.touchAction = "";
        }
    }

    function cleanupThemeSwitchUi() {
        if (document.querySelectorAll) {
            var leftovers = document.querySelectorAll(".hope-drawer__overlay, .hope-drawer__content-container, .hope-modal__overlay");
            for (var i = 0; i &amp;lt; leftovers.length; i++) {
                leftovers[i].style.display = "none";
                leftovers[i].style.pointerEvents = "none";
            }
        }

        unlockScroll();
        setTimeout(unlockScroll, 120);
        setTimeout(unlockScroll, 320);
    }

    function getThemeTargets() {
        if (!document.querySelectorAll) return [];
        return document.querySelectorAll(".hope-ui-light, .hope-ui-dark");
    }

    function daynightswitch(e) {
        if (e) {
            if (e.preventDefault) e.preventDefault();
            if (e.stopPropagation) e.stopPropagation();
            if (e.stopImmediatePropagation) e.stopImmediatePropagation();
        }

        var targets = getThemeTargets();
        if (!targets.length) return;

        var toDark = false;
        for (var i = 0; i &amp;lt; targets.length; i++) {
            if (targets[i].classList.contains("hope-ui-light")) {
                toDark = true;
                break;
            }
        }

        for (var j = 0; j &amp;lt; targets.length; j++) {
            targets[j].classList.remove("hope-ui-light", "hope-ui-dark");
            targets[j].classList.add(toDark ? "hope-ui-dark" : "hope-ui-light");
        }

        cleanupThemeSwitchUi();
    }

    if (!document.getElementById("hope-menu-daynight-switch-trigger")) {
        document.write(`&amp;lt;button
    class="hope-c-bvjbhC hope-c-PJLV hope-c-PJLV-ieTGfmR-css hope-icon-button hope-button hope-c-ivMHWx hope-c-ivMHWx-kcPQpq-variant-subtle hope-c-ivMHWx-cEknLI-size-lg hope-c-ivMHWx-dvmlqS-cv hope-c-ivMHWx-hZistB-cv hope-c-PJLV hope-c-PJLV-iikaotv-css"
    type="button" role="button" id="hope-menu-daynight-switch-trigger" aria-label="switch layout"&amp;gt;&amp;lt;svg t="1733225100292"
        class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4397"
        xmlns:xlink="http://www.w3.org/1999/xlink" width="1em" height="1em"&amp;gt;
        &amp;lt;path
            d="M512 0c282.7776 0 512 229.2224 512 512s-229.2224 512-512 512S0 794.7776 0 512 229.2224 0 512 0z m0 51.2a460.8 460.8 0 0 0-13.568 921.3952L512 972.8v-256a204.8 204.8 0 1 0 0-409.6V51.2z m0 256v409.6a204.8 204.8 0 1 1 0-409.6z"
            fill="currentColor" p-id="4398"&amp;gt;&amp;lt;/path&amp;gt;
    &amp;lt;/svg&amp;gt;&amp;lt;/button&amp;gt;`);
    }

    var dayNightBtn = document.getElementById("hope-menu-daynight-switch-trigger");
    if (dayNightBtn &amp;amp;&amp;amp; !dayNightBtn.dataset.bound) {
        dayNightBtn.dataset.bound = "1";
        dayNightBtn.addEventListener("click", daynightswitch, true);
    }

&amp;lt;/script&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;/details&amp;gt;&lt;/p&gt;
&lt;h2&gt;我这次做的优化（简单带过）&lt;/h2&gt;
&lt;p&gt;我这边在原主题基础上做了几个小优化，主要是为了更好用：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;修复切换过程中会给页面加滚动锁导致“不刷新切换后页面不能滚动”&lt;/li&gt;
&lt;li&gt;修复daynightswitch() 在手机端会按索引错误触发“新建文件夹/上传” 按钮&lt;/li&gt;
&lt;li&gt;修复白天模式下面板发黑（补 &lt;code&gt;light/dark&lt;/code&gt; 前缀和兜底样式）&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;问题示意图&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="https://473424071.cn/_astro/openlist-theme-3.Cy4DLlOe.webp" alt="问题示意占位图（白天黑面板）" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;修复后示意图&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="https://473424071.cn/_astro/openlist-theme-4.EWnL-2GT.webp" alt="修复后占位图" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;如果你只是拿来用，不需要关心太多实现细节，直接用调好的版本即可。&lt;/p&gt;
&lt;h2&gt;使用建议（推荐）&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;背景图尽量用 &lt;code&gt;webp&lt;/code&gt;，加载更快&lt;/li&gt;
&lt;li&gt;图片链接尽量走 CDN/图床，避免加载慢&lt;/li&gt;
&lt;li&gt;先能用，再慢慢调透明度和模糊值&lt;/li&gt;
&lt;li&gt;手机端一定要测按钮点击和滚动&lt;/li&gt;
&lt;li&gt;OpenList 更新后若样式异常，优先检查 &lt;code&gt;hope-xxx&lt;/code&gt; 类名是否变化&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;这套 OpenList 美化的使用流程其实很简单：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;准备主题片段&lt;/li&gt;
&lt;li&gt;替换背景图链接&lt;/li&gt;
&lt;li&gt;粘贴到 &lt;code&gt;自定义头部&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;保存刷新&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;先用起来，再慢慢优化细节就行。&lt;/p&gt;
</content:encoded></item><item><title>xin 项目一个“自用”的图片采集/发布/展示系统，从 0 到部署</title><link>https://473424071.cn/posts/xin/</link><guid isPermaLink="true">https://473424071.cn/posts/xin/</guid><description>个人插画收藏的全链路系统：后端使用Go，自动同步，图&amp;链监听，元数据写入 Cloudflare D1，支持 OpenList(WebDAV/OneDrive) 异步备份。前端提供图库展示、随机图 API、收藏与筛选，后台支持上传、隐藏黑名单、喜欢列表和运行状态查看。</description><pubDate>Sat, 21 Feb 2026 23:30:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;该项目是为了更好的收集和展示个人收藏的图片而设计的，自用。
本项目可以部署在本地或云端，推荐在云端部署。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;0. 先说结论：xin 到底在干嘛&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;xin&lt;/code&gt; 本质是一个 &lt;strong&gt;Go 后端 + 静态前端&lt;/strong&gt; 的图站方案：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;图来源：轮询爬取pixiv及twitter的收藏、TG 上传、TG 链接监听（Pixiv / Yande / FANBOX / Twitter / 或其他图站[得自己加逻辑]）&lt;/li&gt;
&lt;li&gt;图存储：
&lt;ul&gt;
&lt;li&gt;发布频道 A：放预览图（给前台看）&lt;/li&gt;
&lt;li&gt;存储频道 B：放原图（留档 + 按钮获取）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;建议给 A 频道绑定讨论组，用于评论区挂原图/详情按钮&lt;/li&gt;
&lt;li&gt;元数据：Cloudflare D1&lt;/li&gt;
&lt;li&gt;可选备份：WebDAV / OpenList&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;关键设计&lt;/strong&gt;：前台只吃预览图，原图走 B 频道，前端更稳，带宽压力也更小。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;系统架构一览：Pixiv/TG -&amp;gt; Go 后端 -&amp;gt; A/B 频道 + D1 + WebDAV&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;1. 前置条件（不满足就别往下）&lt;/h2&gt;
&lt;p&gt;先确认你有这些东西：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一个 Telegram Bot（拿到 &lt;code&gt;BOT_TOKEN&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;两个 Telegram 频道：A（发布）+ B（存储）&lt;/li&gt;
&lt;li&gt;（可选）A 绑定的讨论组（用于评论区挂原图/详情按钮）&lt;/li&gt;
&lt;li&gt;Cloudflare D1（已有数据库 ID）&lt;/li&gt;
&lt;li&gt;我这里使用的是Zeabur（部署后端容器），建议使用线路好的个人主机或者容器&lt;/li&gt;
&lt;li&gt;Cloudflare Pages / EdgeOne（部署静态前端）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;1.1 TG 权限&lt;/h3&gt;
&lt;p&gt;机器人必须是 A、B 两个频道管理员；要用讨论区就让机器人在讨论组也能发消息。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;2. 建立D1数据库表&lt;/h2&gt;
&lt;p&gt;你有两种方式：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;你可以直接跑项目里的 &lt;code&gt;schema.sql&lt;/code&gt;（推荐）&lt;/li&gt;
&lt;li&gt;让后端首次启动自动补齐（更省事，但建议后面手动核对）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果你是旧库升级，至少确认这些表存在：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;images&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;favorites&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ingest_blocklist&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;crawler_state&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;（开备份）&lt;code&gt;image_backups&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;快速检查表：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="../assets/blogimg/D1%20%E8%A1%A8%E6%B8%85%E5%8D%95%E6%88%AA%E5%9B%BE.webp" alt="D1 表清单截图" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;3. Zeabur 部署后端（最小可用）&lt;/h2&gt;
&lt;h3&gt;3.1 必填环境变量&lt;/h3&gt;
&lt;p&gt;最小集合（先跑起来）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;BOT_TOKEN=
PUBLISH_CHANNEL_ID=
STORAGE_CHANNEL_ID=
# 可选：DISCUSSION_GROUP_ID=

CLOUDFLARE_ACCOUNT_ID=
CLOUDFLARE_API_TOKEN=
D1_DATABASE_ID=

ADMIN_PASSWORD=
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.2 Pixiv 相关配置（看个人需求，要自动爬就配）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;PIXIV_PHPSESSID=
PIXIV_USER_ID=
PIXIV_TAG=
PIXIV_REST=show
PIXIV_CRAWL_ORDER=desc
PIXIV_LIMIT=40
PIXIV_MAX_PAGES=0
PIXIV_BOOTSTRAP_MAX_PAGES=-1
PIXIV_INCREMENTAL_MAX_PAGES=2
PIXIV_INTERVAL_MINUTES=120
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;经验值：全量完成后，把状态切到增量，不然每轮从头扫会很慢。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;3.3 一眼看启动是否正常&lt;/h3&gt;
&lt;p&gt;看日志是否有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;HTTP server listening on :8080&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Pixiv crawl started ...&lt;/code&gt;（你配了 Pixiv 时）&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="https://473424071.cn/_astro/8080.tYApyGsX.webp" alt="前台页" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;4. 前端部署（Pages/EdgeOne）&lt;/h2&gt;
&lt;p&gt;前端是静态页，和后端分开部署。也可以不去部署web，因为后端部署上去就包括前端。访问后端域名，通常都能重定向到/gallery.html。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;后端域名示例：&lt;code&gt;https://a.example.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;前端域名示例：&lt;code&gt;https://b.example.com/gallery.html&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;前端请求后端 API，只要 API 域名填对即可。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="../assets/blogimg/%E5%89%8D%E5%8F%B0%E9%A1%B5.webp" alt="前台页" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="../assets/blogimg/%E5%90%8E%E5%8F%B0%E9%A1%B51.webp" alt="后台上传页截图1" /&gt;
&lt;img src="https://473424071.cn/_astro/hputai2.GFajBADO.webp" alt="后台上传页截图2" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;5. 先做 5 分钟验收（别一上来就全链路压测）&lt;/h2&gt;
&lt;p&gt;按顺序测：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;给 Bot 发一张图
&lt;ul&gt;
&lt;li&gt;A 有预览&lt;/li&gt;
&lt;li&gt;B 有原图&lt;/li&gt;
&lt;li&gt;D1 有新记录&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;给 Bot 发一条 Pixiv 链接
&lt;ul&gt;
&lt;li&gt;正常入库 + 前台可见&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;打开后台上传页上传一张图
&lt;ul&gt;
&lt;li&gt;成功后前台能看到&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;（开了备份）看备份健康状态&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;备份检查（可选，你可以在管理面板查看备份情况）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$base = "https://你的后端域名"
$auth = "x:你的ADMIN_PASSWORD"
curl.exe -sS -u $auth "$base/admin/api/backup/health?probe=1"
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;6. 常见坑（按报错关键字定位）&lt;/h2&gt;
&lt;h3&gt;6.1 &lt;code&gt;getUpdates ... 409 Conflict&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;含义&lt;/strong&gt;：同一个 Bot 有多个实例在轮询。&lt;br /&gt;
&lt;strong&gt;处理&lt;/strong&gt;：保证只有一个服务在跑（关掉旧实例、重复服务）。&lt;/p&gt;
&lt;h3&gt;6.2 &lt;code&gt;ghcr.io ... 401 Unauthorized&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;含义&lt;/strong&gt;：拉镜像没权限。&lt;br /&gt;
&lt;strong&gt;处理&lt;/strong&gt;：检查包是否 public，或给 Zeabur 配 GHCR 拉取凭证。&lt;/p&gt;
&lt;h3&gt;6.3 &lt;code&gt;chat not found&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;含义&lt;/strong&gt;：机器人不在目标频道，或频道 ID 配错。&lt;br /&gt;
&lt;strong&gt;处理&lt;/strong&gt;：确认 Bot 在 A/B 频道里、ID 前缀 &lt;code&gt;-100&lt;/code&gt; 没写错。&lt;/p&gt;
&lt;h3&gt;6.4 &lt;code&gt;context deadline exceeded&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;含义&lt;/strong&gt;：网络链路超时（TG / 目标站 / 容器出口波动）。&lt;br /&gt;
&lt;strong&gt;处理顺序&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;容器里 &lt;code&gt;wget&lt;/code&gt; 测目标 URL 连通性&lt;/li&gt;
&lt;li&gt;降低并发/缩小单次抓取量&lt;/li&gt;
&lt;li&gt;把 TG 直传改成 &lt;code&gt;file_id&lt;/code&gt; 直发&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;6.5 &lt;code&gt;pixiv bookmarks error: cannot unmarshal ... id&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;含义&lt;/strong&gt;：上游返回结构变了。&lt;br /&gt;
&lt;strong&gt;处理&lt;/strong&gt;：更新解析逻辑，别硬写死字段类型。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;7. 我建议的“稳定参数”起步值&lt;/h2&gt;
&lt;p&gt;用的是go语言轻量、高并发，对配置要求不高。反倒看重&lt;code&gt;线路的质量&lt;/code&gt;。：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pixiv：&lt;code&gt;PIXIV_INTERVAL_MINUTES=120&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Pixiv 增量：&lt;code&gt;PIXIV_INCREMENTAL_MAX_PAGES=2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Twitter 作者轮询：&lt;code&gt;TWITTER_AUTHOR_INTERVAL_MINUTES=120&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;作者抓取数：&lt;code&gt;TWITTER_AUTHOR_FETCH_LIMIT=3~5&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;备份：&lt;code&gt;BACKUP_WORKERS=1&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;先稳住，再提速。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;8. 你要能复述的原理（核心三句话）&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;前台看的是预览图，不是原图，原图放 B 频道。&lt;/li&gt;
&lt;li&gt;D1 只管索引和状态，图文件本体不进 D1。&lt;/li&gt;
&lt;li&gt;超时大头通常在“下载再上传”，&lt;code&gt;file_id&lt;/code&gt; 直发能明显减压。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="../assets/blogimg/zeaburrz.webp"&gt;日志对照图&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;p&gt;如果你照着做卡住了，优先把这 3 个信息贴出来再排：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;报错原文（完整一段）&lt;/li&gt;
&lt;li&gt;相关环境变量名（值可打码）&lt;/li&gt;
&lt;li&gt;你当前访问链路（前端域名、后端域名、有没有 Worker/CDN）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这样定位会很快，不用盲猜。&lt;/p&gt;
&lt;hr /&gt;
</content:encoded></item><item><title>Pixiv 收藏本地下载器（Python）随手记</title><link>https://473424071.cn/posts/pixivget/</link><guid isPermaLink="true">https://473424071.cn/posts/pixivget/</guid><description>记录我用 Python 把 Pixiv 收藏下载到本地的过程，附上配置说明和一些个人踩坑感受。</description><pubDate>Tue, 27 Jan 2026 21:10:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;说明：本文仅供个人学习 + 进行本地备份记录，还请遵守 Pixiv 的相关使用条款，不要二次分发。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Github项目地址:&lt;/strong&gt;
&amp;lt;details&amp;gt;
&amp;lt;summary&amp;gt;点击展开&amp;lt;/summary&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;https://github.com/TyrEamon/Pixiv-mylove&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/details&amp;gt;&lt;/p&gt;
&lt;h1&gt;至于这个该工具能做什么？&lt;/h1&gt;
&lt;p&gt;这是一个 &lt;strong&gt;Pixiv 个人收藏本地下载器（用的Python语言，单线程就不上go了）&lt;/strong&gt;，我拿来做本地备份。功能单一，但也挺实用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;它能自动下载你的pixiv收藏插画（支持标签筛选）。&lt;/li&gt;
&lt;li&gt;自动分页抓取&lt;code&gt;page1&lt;/code&gt;、&lt;code&gt;page2&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;3次的失败重试 + 页间间隔10s，图间1.5s外加随机间隔（避免过快，触发pixiv的风控。至于有没有，我觉得应该是有的）。&lt;/li&gt;
&lt;li&gt;流程自生成&lt;code&gt;history_* .json&lt;/code&gt;历史文件，下载中同步写入记录进行去重，避免重复爬取。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;history_* .json&lt;/code&gt;是按标签生成独立历史文件，个人收藏根目录下用的是全局去重，它会合并所有的&lt;code&gt;history_* .json&lt;/code&gt;子历史文件构建全局去重池，所以你&lt;code&gt;"tag": "留空时"&lt;/code&gt;爬到的插画不会和子标签里的图片重复。&lt;/li&gt;
&lt;li&gt;命名格式统一：&lt;code&gt;pixiv_{id}_p{n}.ext&lt;/code&gt;，&lt;code&gt;p0、p1....&lt;/code&gt;对应的就是父子图。&lt;/li&gt;
&lt;li&gt;爬过的图，再次获取将直接跳过，当连续跳过 200 张就停止。(你也可以关闭该设置，或增加阈值)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h1&gt;项目结构一览：&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;pixiv_mylove/&lt;/code&gt; 里主要是这几样：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pixiv_mylove/
├── main.py                 # 主程序
├── config.json             # 配置文件
├── history_*.json          # 历史记录（去重）
└── run.bat                 # 一键运行脚本（这个我不想调终端，就整了懒人bat）
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;code&gt;前置准备：&lt;/code&gt;&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;注意需要自己配置好网络环境，确保与Pixiv的连通性！！！&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;我个人用的是V2ranyN，直接开启Tun模式。 &lt;/code&gt;你也可以自己手动进行相应的配置&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;获取你自己的&lt;code&gt;Pixiv Cookie/PHPSESSID&lt;/code&gt;、个人&lt;code&gt;uid&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;登录你的Pixiv账号，&lt;code&gt;F12&lt;/code&gt; 开发者面板
&lt;img src="https://473424071.cn/_astro/1769671892275.pghPLcWi.webp" alt="" /&gt;&lt;/li&gt;
&lt;li&gt;找到PHPSESSID，里面的值就是我们要的Cookie了
&lt;img src="https://473424071.cn/_astro/1769671929543.Dkz64QuV.webp" alt="" /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;接下来进入实操&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1&gt;使用步骤&lt;/h1&gt;
&lt;h3&gt;① Clone仓库文件到本地&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/TyrEamon/Pixiv-mylove.git
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;② 根据你自己的信息修改配置文件 &lt;code&gt;config.json&lt;/code&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;{
  "php_sessid": "你的PHPSESSID",
  "user_id": "你的Pixiv用户ID",
  "tag": "H",
  "limit": 40,
  "max_pages": 0,
  "download_dir": "E:/pixiv图片/h"
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;③ 直接运行&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;python main.py
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;或者直接双击 &lt;code&gt;run.bat&lt;/code&gt;。&lt;/p&gt;
&lt;h3&gt;-正常运行-&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://473424071.cn/_astro/1769672990592.bvWtO-u8.webp" alt="运行状态" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;拿到图片文件，你可以存在本地或上传到图床。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;说到上传你可以原图直传，但你下次获取的时候也是原图，图片体量会非常大（十到几十M）。这里我会用到&lt;a href="https://www.xnview.com/en/xnconvert/"&gt;Xnconvert&lt;/a&gt;，它能批量在保证图片质量下给你转成webp。更多详见&lt;a&gt;文章&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h1&gt;配置项说明&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;php_sessid&lt;/strong&gt;：Pixiv 登录后 cookie 里的 &lt;code&gt;PHPSESSID&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;user_id&lt;/strong&gt;：你的 Pixiv 用户 ID&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;tag&lt;/strong&gt;：收藏标签，留空=全部收藏&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;limit&lt;/strong&gt;：每页抓取数量（默认 40）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;max_pages&lt;/strong&gt;：你要抓取页数（值=0将爬完延续下页轮询爬取）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;download_dir&lt;/strong&gt;：你要保存到本地的目录位置&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;爬图频率与稳定性相关（有需要就自己设置，没有直接默认就行）&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sleep_between_images_sec&lt;/code&gt;：每张图间隔&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sleep_between_pages_sec&lt;/code&gt;：每页间隔&lt;/li&gt;
&lt;li&gt;&lt;code&gt;retry_times&lt;/code&gt;：失败重试次数&lt;/li&gt;
&lt;li&gt;&lt;code&gt;retry_delay_sec&lt;/code&gt;：重试等待&lt;/li&gt;
&lt;li&gt;&lt;code&gt;max_consecutive_skips&lt;/code&gt;：连续跳过多少张后自动停止&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;如果你也只是想把收藏图放到本地，
这套目前已经够用了。&lt;/p&gt;
&lt;h1&gt;—— 记录完毕 ——&lt;/h1&gt;
</content:encoded></item><item><title>踩着前人的脚印，RuneByte Blog 终于建站成功了</title><link>https://473424071.cn/posts/blog/</link><guid isPermaLink="true">https://473424071.cn/posts/blog/</guid><description>记录我从 fork 到上线的个人博客搭建过程，展示成果、简单部署流程和致谢清单。</description><pubDate>Tue, 27 Jan 2026 20:30:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;说明：本博客基于开源项目进行二次改造与使用，感谢原作者和相关项目的贡献。本文是我的建站记录与成果分享。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;1) 终于有自己的博客了&lt;/h2&gt;
&lt;p&gt;踩着前人的脚印折腾了一阵子，&lt;strong&gt;RuneByte Blog&lt;/strong&gt; 总算上线了。&lt;br /&gt;
站点入口在这里：&lt;br /&gt;
👉 &lt;strong&gt;https://i.kyr.us.ci&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;作为编程小白，这次建站从“能跑起来”到“像自己的网站”，看到它跑起来挺有成就感。&lt;/p&gt;
&lt;h1&gt;我就微微带过一下我的搭建过程（博客主框架Fuwari）&lt;/h1&gt;
&lt;p&gt;也没什么特别值得详谈的东西。&lt;/p&gt;
&lt;h2&gt;首先&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;fork 原作者项目&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;这里&lt;code&gt;原作者[saicaca]&lt;/code&gt;的&lt;a href="https://github.com/saicaca/fuwari"&gt;&lt;code&gt;Fuwari&lt;/code&gt;&lt;/a&gt;、作者&lt;code&gt;二叉树树[afoim]&lt;/code&gt;二改过&lt;a href="https://github.com/afoim/fuwari"&gt;&lt;code&gt;Fuwari&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我本人用的是&lt;a href="https://github.com/Spr-Aachen/Twilight"&gt;以fuwari为底的新一代博客&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;先在自己本地跑起来，方便调试改动。&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;pnpm install #如果没有项目依赖包的话
pnpm dev

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;开放4321端口，本地预览 http://localhost:4321&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;修改配置（把个人信息换过来）&amp;gt;删除旧文章&amp;gt;去广告把分类页标签加回来&amp;gt;改脚注&amp;gt;加功能，花了一点时间。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;然后正常流程：部署上线给它扔到edgeone上 + 绑定自定义域名。&lt;/li&gt;
&lt;li&gt;浏览器访问，成功返回博客页面ok了，博客到这里旧通了。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;EdgeOne的线路说是国内挺快的(但是要得是备案域名，可惜我的域名还没备案)，看看后面吧！要不要给它整一个备案。目前就这样吧，先建着站玩玩先。
&lt;img src="https://473424071.cn/_astro/1769621915743.oao8gkLE.webp" alt="itdog 结果" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;还过得去，后面再研究研究优化一下。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h1&gt;—— 这是我的第一篇，继续更新中 ——&lt;/h1&gt;
</content:encoded></item><item><title>Static.Random.PicAPI的随机图 Gallery的样式性能优化</title><link>https://473424071.cn/posts/sapi/</link><guid isPermaLink="true">https://473424071.cn/posts/sapi/</guid><description>Fork 随机图库项目后，仓库项目似乎还没更新。于是照葫芦画瓢搓了 gallery的（sticky 顶栏、日夜模式、占位防跳动、触底分批加载逻辑），并把部署步骤交给到给你。</description><pubDate>Tue, 27 Jan 2026 14:43:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;说明：本文基于原作者项目进行二次优化与记录，感谢原作者的思路与代码。本文仅用于学习与个人使用，转载请注明来源。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Github项目地址:&lt;/strong&gt;
&amp;lt;details&amp;gt;
&amp;lt;summary&amp;gt;点击展开&amp;lt;/summary&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;https://github.com/TyrEamon/Static_RandomPicAPI&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/details&amp;gt;&lt;/p&gt;
&lt;h2&gt;1) 背景：SRPAPI这个项目原本能做什么？？&lt;/h2&gt;
&lt;p&gt;这是一个「静态随机图库」项目，构建后输出 &lt;code&gt;dist/&lt;/code&gt;,静态托管即可：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;首页展示随机图片&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gallery.html&lt;/code&gt; 展示图库&lt;/li&gt;
&lt;li&gt;横图/竖图分类（H/V）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但原版的 &lt;code&gt;gallery.html&lt;/code&gt; 有两个明显问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;一次性加载太多图片，浏览器会卡&lt;/li&gt;
&lt;li&gt;页面样式不够顺眼（布局、交互、日夜模式等）&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;2) 其实作者的api是完善过了，但仓库项目似乎还没有更新。&lt;/h2&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;原作者的&lt;a href="https://pic1.acofork.com"&gt;API&lt;/a&gt;: https://pic1.acofork.com&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;干脆直接自己找ai搓来玩，因此把给它“&lt;em&gt;Transform&lt;/em&gt;”了吧，其实也是造&lt;strong&gt;葫芦画瓢&lt;/strong&gt;，也没啥说法就是了。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;至于画瓢画了哪些东西呢？如下：&lt;/h2&gt;
&lt;h3&gt;1. Gallery 样式升级&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;顶栏改为 &lt;strong&gt;sticky + 玻璃拟态&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;横/竖切换更明显&lt;/li&gt;
&lt;li&gt;标题更大、更醒目&lt;/li&gt;
&lt;li&gt;Hover 放大动效&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. 性能优化&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;触底自动加载&lt;/strong&gt;，每批 20 张&lt;/li&gt;
&lt;li&gt;图片加载时使用 &lt;strong&gt;占位容器&lt;/strong&gt;，防止跳动&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3. 体验细节&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;日/夜模式切换&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;点击图片可进入预览（lightbox）。直接套用Fancybox组件了，简单直接又省心。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;操作过程&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://473424071.cn/_astro/file1.Cr4xpaHn.webp" alt="一坨初始文件" /&gt;&lt;/p&gt;
&lt;h3&gt;1.好了也是问ai将项目搓好了，虽然没做什么但是辛苦我了...玩个梗哈哈。弄好之后我们，得到了这一坨文件。&lt;/h3&gt;
&lt;p&gt;拿到文件，我们先把config.json里的域名，给他改改。改成你R2的存储公共开放域名。
图1&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;因为我弄了反代用pic和gallery去隐藏了/index.html和/gallery.html的后缀，所以我要多填两个域名,详见博客文章&lt;a href="test"&gt;Link&lt;/a&gt;。如果你们无所谓那就无所谓吧!你直接填 &lt;strong&gt;你的公共域/index(gallery).html就行了&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;{
    "domain": "https://rapi.0w0.us.ci",
    "galleryDomain": "https://gallery.0w0.us.ci",  //不用反代就 公共域+/index.html
    "indexDomain": "https://pic.0w0.us.ci"         //不用反代就 公共域+/gallery.html
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;注意啊，如果你按教程来，那么那个图库基本上是fork仓库原作者的图（应该有4000多张），我自己是在本地新建的ri文件存的是自己的图。是否要换用自己的图库，看你·_·自己。&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;我自己就差不多700来张图，自己存的和一些从pixiv上爬我自己的个人收藏图。你问，这个脚本有吗？&lt;strong&gt;&lt;code&gt;有的！兄弟有的 &lt;/code&gt;&lt;/strong&gt;。你可以自己github搜索、搓一个或者我在用的这个&lt;a href="https://github.com/TyrEamon/Pixiv-mylove"&gt;Pixiv-Tool&lt;/a&gt;
&lt;img src="https://473424071.cn/_astro/mmmmm1.BumhdE_y.webp" alt="" /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;填完，接下来我们就能本地 build 构建 dist 瞧瞧。&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;直接命令行 &lt;code&gt;node build.js&lt;/code&gt; 得到构建产物/dist。（如果你没有装过依赖，你要执行一次 &lt;code&gt;npm install&lt;/code&gt;）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;npm install
node build.js
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;耐心等待
&lt;img src="https://473424071.cn/_astro/bulid1.C0XOlU04.webp" alt="" /&gt;
如图，拿到产物。我们lib就是gallery页面相关逻辑js了，图片就存在ri里。
&lt;strong&gt;给他本地预览一下&lt;/strong&gt;继续命令行&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;npx serve dist
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;你会在终端得到 http://localhost:3000 本地预览地址,进行网页访问。得到如下
&lt;img src="https://473424071.cn/_astro/1769493099959.CuV1qap-.webp" alt="" /&gt;
接下来，就是把它丢到R2上去部署。&lt;/p&gt;
&lt;h3&gt;上传部署（以 Cloudflare R2 为例）&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;个人用的是rclone，不过推荐用Cyberduck，有GUI界面更直观友好。&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;首先登录cloudflare获取你的：
&lt;img src="https://473424071.cn/_astro/r2.Biip682i.webp" alt="在R2页里，创建用户Token" /&gt;
&lt;img src="https://473424071.cn/_astro/s3s3.DXA0kiTz.webp" alt="" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;R2 的 Access Key ID&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;R2 的 Secret Access Key&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;R2 的 Endpoint（S3 兼容地址）&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;rclone&lt;/code&gt; 同步到 R2：&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;rclone sync "C:\Users\Tyr.Eamon\Desktop\博客背景文件\随机图\dist" r2:YOUR_BUCKET --checksum --transfers 16 --checkers 16 --progress
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Cyberduck&lt;/code&gt; 同步R2：
打开 &lt;em&gt;Cyberduck&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;选择Amazon S3协议。&lt;/li&gt;
&lt;li&gt;Server（服务器）：填你的 R2 endpoint 的主机名。&lt;em&gt;形如：&amp;lt;accountid&amp;gt;.r2.cloudflarestorage.com&lt;/em&gt;（不要带 https://，不要带路径）&lt;/li&gt;
&lt;li&gt;Port：443&lt;/li&gt;
&lt;li&gt;Access Key ID：填你的 R2 Access Key ID&lt;/li&gt;
&lt;li&gt;Secret Access Key：填你的 R2 Secret Access Key
&lt;img src="https://473424071.cn/_astro/bupl.2LInjD9f.webp" alt="" /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上传文件完全后，直接访问你的R2公开域就能看到SPA的界面了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;R2公共域&lt;/strong&gt;
&amp;lt;details&amp;gt;
&amp;lt;summary&amp;gt;点击展开&amp;lt;/summary&amp;gt;&lt;/p&gt;
&lt;p&gt;这里默认你部署前绑好了。
&lt;img src="https://473424071.cn/_astro/1769493099959.CuV1qap-.webp" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/details&amp;gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;OK啊，到这里算部署出成功了，接下来就是愉快的玩耍了&lt;/strong&gt;&lt;/h2&gt;
&lt;h2&gt;最后的最后：尊重原创&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;这是 fork 项目的优化记录，不是从零开发。感谢原作者AcoFork提供的基础结构。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h1&gt;——自此本章完结——&lt;/h1&gt;
</content:encoded></item><item><title>后记！！</title><link>https://473424071.cn/posts/bookmark/</link><guid isPermaLink="true">https://473424071.cn/posts/bookmark/</guid><description>记录各种资源。</description><pubDate>Thu, 21 Jul 1949 18:20:00 GMT</pubDate><content:encoded>&lt;h1&gt;Github 反代&lt;/h1&gt;
&lt;p&gt;1、&lt;s&gt;&lt;a href="https://k.bba.cc.cd"&gt;https://k.bba.cc.cd&lt;/a&gt;&lt;/s&gt;
2、&lt;a href="https://gh.kaza.de5.net"&gt;https://gh.kaza.de5.net&lt;/a&gt;
3、&lt;a href="https://gh.2x.nz"&gt;https://gh.2x.nz&lt;/a&gt; &lt;code&gt;他人维护&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;屏蔽海外请求。你都海外了还上不了github不是吧。
该类下载域没有写进白名单，所以下载文件时会走原链。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;codeload.github.com
objects.githubusercontent.com
github-releases.githubusercontent.com

&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h1&gt;Meting-music音乐api接口（个人维护）&lt;/h1&gt;
&lt;blockquote&gt;
&lt;h3&gt;支持的平台&lt;/h3&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;平台&lt;/th&gt;
&lt;th&gt;代码&lt;/th&gt;
&lt;th&gt;搜索&lt;/th&gt;
&lt;th&gt;歌曲&lt;/th&gt;
&lt;th&gt;专辑&lt;/th&gt;
&lt;th&gt;歌手&lt;/th&gt;
&lt;th&gt;歌单&lt;/th&gt;
&lt;th&gt;链接&lt;/th&gt;
&lt;th&gt;歌词&lt;/th&gt;
&lt;th&gt;图片&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;网易云音乐&lt;/td&gt;
&lt;td&gt;&lt;code&gt;netease&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;腾讯音乐&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tencent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;酷狗音乐&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kugou&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;百度音乐&lt;/td&gt;
&lt;td&gt;&lt;code&gt;baidu&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;酷我音乐&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kuwo&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h1&gt;&lt;code&gt;#&lt;/code&gt;EMBY反代合集（他人维护）&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;使用方法：反代头/emby域名&lt;/code&gt;+通常端口为443&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;- https://ada.6yhy.top/
- https://fd.dirige.de5.net/
- https://auto.embys.dpdns.org/
- https://auto.liuer.indevs.in/
- https://auto.dolby.dpdns.org/
- https://assrt.net/
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h1&gt;&lt;code&gt;#&lt;/code&gt;优选域名&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h2&gt;CM大佬维护：&lt;/h2&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="https://473424071.cn/_astro/CMdalao.BZ9Y_V8H.png" alt="CM" /&gt;
https://cf.090227.xyz/&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h2&gt;秋名山大佬维护：&lt;/h2&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="https://473424071.cn/_astro/qmsdalao.CzjCiQyU.png" alt="秋名山" /&gt;
https://cf.877774.xyz/&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h2&gt;自用hw云单ipvv4优选（ipv6屏蔽不通）&lt;/h2&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="../assets/blogimg/%E8%87%AA%E7%94%A8hw%E4%BA%91ip4%E4%BC%98%E9%80%89.png" alt="hw云单ipvv4优选" /&gt;
https://cf.hw.0721521.xyz&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h2&gt;MIYU维护:&lt;/h2&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="https://473424071.cn/_astro/saas-sin.CqvsOYpH.png" alt="MIYU" /&gt;
https://saas.sin.fan&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h1&gt;&lt;code&gt; ——自此本章完结——&lt;/code&gt;&lt;/h1&gt;
</content:encoded></item></channel></rss>