<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>RuneByte Blog</title><description>tyreamon的个人博客</description><link>https://i.kyr.us.ci/</link><language>zh_CN</language><item><title>欢迎来到我的博客！</title><link>https://i.kyr.us.ci/posts/top/</link><guid isPermaLink="true">https://i.kyr.us.ci/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=&quot;https://api.i-meto.com/meting/api?server=netease&amp;amp;type=song&amp;amp;id=2666842841&quot;}&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;::v[d/e-m]&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#mycontact&quot;&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=&quot;thanks-wall&quot;&amp;gt;
&amp;lt;div class=&quot;thanks-card&quot;&amp;gt;
&amp;lt;img class=&quot;thanks-avatar&quot; src=&quot;https://github.com/saicaca.png&quot; /&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=&quot;https://github.com/saicaca/fuwari&quot;&amp;gt;GitHub&amp;lt;/a&amp;gt;&amp;lt;br/&amp;gt;
&amp;lt;span class=&quot;thanks-tag&quot;&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=&quot;thanks-card&quot;&amp;gt;
&amp;lt;img class=&quot;thanks-avatar&quot; src=&quot;https://github.com/afoim.png&quot; /&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=&quot;https://github.com/afoim/fuwari&quot;&amp;gt;GitHub&amp;lt;/a&amp;gt;&amp;lt;br/&amp;gt;
&amp;lt;span class=&quot;thanks-tag&quot;&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=&quot;thanks-card&quot;&amp;gt;
&amp;lt;img class=&quot;thanks-avatar&quot; src=&quot;https://github.com/withastro.png&quot; /&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=&quot;https://github.com/withastro/astro&quot;&amp;gt;GitHub&amp;lt;/a&amp;gt;&amp;lt;br/&amp;gt;
&amp;lt;span class=&quot;thanks-tag&quot;&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=&quot;thanks-card&quot;&amp;gt;
&amp;lt;img class=&quot;thanks-avatar&quot; src=&quot;https://github.com/Spr-Aachen.png&quot; /&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=&quot;https://github.com/Spr-Aachen/Twilight&quot;&amp;gt;GitHub&amp;lt;/a&amp;gt;&amp;lt;br/&amp;gt;
&amp;lt;span class=&quot;thanks-tag&quot;&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=&quot;thanks-card&quot;&amp;gt;
&amp;lt;img class=&quot;thanks-avatar&quot; src=&quot;https://github.com/gmrchk.png&quot; /&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=&quot;https://github.com/gmrchk/swup&quot;&amp;gt;GitHub&amp;lt;/a&amp;gt;&amp;lt;br/&amp;gt;
&amp;lt;span class=&quot;thanks-tag&quot;&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=&quot;thanks-card&quot;&amp;gt;
&amp;lt;img class=&quot;thanks-avatar&quot; src=&quot;https://github.com/giscus.png&quot; /&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=&quot;https://github.com/giscus/giscus&quot;&amp;gt;GitHub&amp;lt;/a&amp;gt;&amp;lt;br/&amp;gt;
&amp;lt;span class=&quot;thanks-tag&quot;&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=&quot;thanks-card&quot;&amp;gt;
&amp;lt;img class=&quot;thanks-avatar&quot; src=&quot;https://github.com/umami-software.png&quot; /&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=&quot;https://github.com/umami-software/umami&quot;&amp;gt;GitHub&amp;lt;/a&amp;gt;&amp;lt;br/&amp;gt;
&amp;lt;span class=&quot;thanks-tag&quot;&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=&quot;mycontact&quot;&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=&quot;https://t.me/+EZ-bVy07k2xjMzY1&quot;&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=&quot;https://i.kyr.us.ci/_astro/1769622880981.CVvUDg5D.png&quot; alt=&quot;&quot; /&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>Emby 是什么？一篇给新手看的入门和种草指南</title><link>https://i.kyr.us.ci/posts/emby-intro-tyr-bv/</link><guid isPermaLink="true">https://i.kyr.us.ci/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=&quot;../assets/blogimg/emby%E9%A6%96%E9%A1%B5.webp&quot; alt=&quot;鬼灭详情页&quot; /&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;../assets/blogimg/%E8%A7%86%E9%A2%91%E8%AF%A6%E6%83%85.webp&quot; alt=&quot;狂飙飞车&quot; /&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=&quot;../assets/blogimg/%E9%AC%BC%E7%81%AD%E8%AF%A6%E6%83%85%E9%A1%B5.webp&quot; alt=&quot;鬼灭详情页&quot; /&gt;&lt;/th&gt;
&lt;th&gt;&lt;img src=&quot;../assets/blogimg/%E7%8B%82%E9%A3%99%E9%A3%9E%E8%BD%A6.webp&quot; alt=&quot;狂飙飞车&quot; /&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src=&quot;../assets/blogimg/%E6%BC%94%E5%91%98%E8%A1%A8.webp&quot; alt=&quot;演员表&quot; /&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;../assets/blogimg/%E8%A7%86%E9%A2%91%E8%AF%A6%E6%83%85.webp&quot; alt=&quot;视频详情&quot; /&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=&quot;https://t.me/gyfmsky&quot;&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=&quot;https://i.kyr.us.ci/_astro/msky.OZ1ZchTe.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;推荐 2：&lt;a href=&quot;https://t.me/MiraiEmby&quot;&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=&quot;https://i.kyr.us.ci/_astro/mirai.DRcnMZ7D.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;推荐 3：&lt;a href=&quot;https://t.me/lilililililiiilllll&quot;&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=&quot;../assets/blogimg/%E9%9D%9E%E8%B6%8A.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;推荐 4：&lt;a href=&quot;https://t.me/embyhello&quot;&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=&quot;../assets/blogimg/%E6%B3%A5%E5%9A%8E.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;推荐 5：&lt;a href=&quot;https://t.me/sntp_emby_lite_v2&quot;&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=&quot;https://i.kyr.us.ci/_astro/sntp.DPxxt--u.webp&quot; alt=&quot;&quot; /&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://i.kyr.us.ci/posts/hi168/</link><guid isPermaLink="true">https://i.kyr.us.ci/posts/hi168/</guid><description>看了两篇关于 Hi168 的文章后，简单聊聊我的感觉：能用，能薅，但更适合备份和轻度折腾，不太像成熟主力存储。</description><pubDate>Thu, 12 Mar 2026 18:20:00 GMT</pubDate><content:encoded>&lt;p&gt;根据&lt;a href=&quot;https://blog.csdn.net/weixin_43113691/article/details/146925457&quot;&gt;相关文章&lt;/a&gt;来说，Hi168 是一个来自上海的云服务商。他提供了一个桌面云应用，有个图形化界面长得跟Window一样。
&lt;img src=&quot;../assets/blogimg/Hi168%E4%B8%BB%E9%A1%B5%E9%9D%A2.webp&quot; alt=&quot;图形化页面&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;通过Hi168&lt;a href=&quot;https://www.hi168.com&quot;&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=&quot;../assets/blogimg/%E5%AF%B9%E8%B1%A1%E5%AD%98%E5%82%A8%E9%A1%B5%E9%9D%A2.webp&quot; alt=&quot;对象存储页面&quot; /&gt;
&lt;strong&gt;打开对象存储页面后,点击[4]OSS设置，申请新密钥。&lt;/strong&gt;
&lt;img src=&quot;../assets/blogimg/occ%E8%AE%BE%E7%BD%AE.webp&quot; alt=&quot;occ设置&quot; /&gt;
&lt;strong&gt;再到[3]&lt;code&gt;&quot;＋&quot;&lt;/code&gt;号创建存储桶。&lt;/strong&gt;
&lt;img src=&quot;https://i.kyr.us.ci/_astro/cjcct.B68wy-DV.webp&quot; alt=&quot;创建储存桶&quot; /&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=&quot;https://blog.csdn.net/weixin_43113691/article/details/146925457&quot;&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://i.kyr.us.ci/posts/journal-demo-20260302-2/</link><guid isPermaLink="true">https://i.kyr.us.ci/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://i.kyr.us.ci/posts/journal-demo-20260302-1/</link><guid isPermaLink="true">https://i.kyr.us.ci/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://i.kyr.us.ci/posts/cfplay/</link><guid isPermaLink="true">https://i.kyr.us.ci/posts/cfplay/</guid><description>不用自建流媒体服务器，hls/dash静态分片托管到cloudflare在线播放，享受CDN 分发。</description><pubDate>Fri, 27 Feb 2026 16:30:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;code&gt;项目仓库地址:&lt;/code&gt;
::github{repo=&quot;TyrEamon/video-tsp&quot;}
&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://k.bba.cc.cd/TyrEamon/video-tsp&amp;lt;/p&amp;gt;
&amp;lt;/details&amp;gt;&lt;/p&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=&quot;https://你的域名/_v/001/index.m3u8&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;&lt;img src=&quot;../assets/blogimg/%E6%92%AD%E6%94%BE.webp&quot; alt=&quot;&quot; /&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=&quot;../assets/blogimg/hls%E5%88%86%E7%89%87.webp&quot; alt=&quot;HLS 分片文件&quot; /&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=&quot;../assets/blogimg/dash%E5%88%86%E7%89%87.webp&quot; alt=&quot;DASH 分片文件&quot; /&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 &quot;input.mp4&quot; -c:v libsvtav1 -crf 30 -preset 6 -pix_fmt yuv420p -c:a libopus -b:a 160k &quot;output-av1.mkv&quot;
&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 &quot;input.mp4&quot; -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 &quot;public/_v/001/seg_%05d.ts&quot; &quot;public/_v/001/index.m3u8&quot;
&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 &quot;input.mp4&quot; -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 &quot;public/_v/001/manifest.mpd&quot;
&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=&quot;https://i.kyr.us.ci/_astro/html.CsHyW-_W.webp&quot; alt=&quot;&quot; /&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://i.kyr.us.ci/posts/openlist-theme/</link><guid isPermaLink="true">https://i.kyr.us.ci/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=&quot;https://i.kyr.us.ci/_astro/openlist-theme-1.BzXV6Iuy.webp&quot; alt=&quot;效果图占位-白天模式&quot; /&gt;
&lt;img src=&quot;https://i.kyr.us.ci/_astro/openlist-theme-2.DJ0wjZ-x.webp&quot; alt=&quot;效果图占位-夜间模式&quot; /&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(&quot;...&quot;)&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(&quot;你的图片链接&quot;);
&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=&quot;https://polyfill.alicdn.com/v3/polyfill.min.js?features=String.prototype.replaceAll&quot;&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=&quot;https://polyfill.alicdn.com/v3/polyfill.min.js?features=String.prototype.replaceAll&quot;&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(&quot;https://pan.0106010.xyz/file/openlist-Theme/1771838991109_130584045_p0.webp&quot;) !important;
    @media (max-aspect-ratio:1) {
        background-image:url(&quot;https://pan.0106010.xyz/file/openlist-Theme/1771838999793_file_6179.webp&quot;) !important;
    }
    background-repeat:no-repeat;
    background-size:cover;
    background-attachment:fixed;
    background-position-x:center
}
.hope-ui-dark {
     background-image:url(&quot;https://pan.0106010.xyz/file/openlist-Theme/1771839006594_openlist1.webp&quot;) !important;
    @media (max-aspect-ratio:1) {
        background-image:url(&quot;https://pan.0106010.xyz/file/openlist-Theme/1771838992434_1673371139204.webp&quot;) !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=&quot;footerd&quot;&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 = &quot;&quot;;
            docEl.style.overflowY = &quot;&quot;;
            docEl.style.position = &quot;&quot;;
            docEl.style.width = &quot;&quot;;
        }
        if (body) {
            body.style.overflow = &quot;&quot;;
            body.style.overflowY = &quot;&quot;;
            body.style.position = &quot;&quot;;
            body.style.width = &quot;&quot;;
            body.style.paddingRight = &quot;&quot;;
            body.style.touchAction = &quot;&quot;;
        }
    }

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

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

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

    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(&quot;hope-ui-light&quot;)) {
                toDark = true;
                break;
            }
        }

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

        cleanupThemeSwitchUi();
    }

    if (!document.getElementById(&quot;hope-menu-daynight-switch-trigger&quot;)) {
        document.write(`&amp;lt;button
    class=&quot;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&quot;
    type=&quot;button&quot; role=&quot;button&quot; id=&quot;hope-menu-daynight-switch-trigger&quot; aria-label=&quot;switch layout&quot;&amp;gt;&amp;lt;svg t=&quot;1733225100292&quot;
        class=&quot;icon&quot; viewBox=&quot;0 0 1024 1024&quot; version=&quot;1.1&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; p-id=&quot;4397&quot;
        xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; width=&quot;1em&quot; height=&quot;1em&quot;&amp;gt;
        &amp;lt;path
            d=&quot;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&quot;
            fill=&quot;currentColor&quot; p-id=&quot;4398&quot;&amp;gt;&amp;lt;/path&amp;gt;
    &amp;lt;/svg&amp;gt;&amp;lt;/button&amp;gt;`);
    }

    var dayNightBtn = document.getElementById(&quot;hope-menu-daynight-switch-trigger&quot;);
    if (dayNightBtn &amp;amp;&amp;amp; !dayNightBtn.dataset.bound) {
        dayNightBtn.dataset.bound = &quot;1&quot;;
        dayNightBtn.addEventListener(&quot;click&quot;, 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=&quot;https://i.kyr.us.ci/_astro/openlist-theme-3.Cy4DLlOe.webp&quot; alt=&quot;问题示意占位图（白天黑面板）&quot; /&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=&quot;https://i.kyr.us.ci/_astro/openlist-theme-4.EWnL-2GT.webp&quot; alt=&quot;修复后占位图&quot; /&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://i.kyr.us.ci/posts/xin/</link><guid isPermaLink="true">https://i.kyr.us.ci/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=&apos;table&apos; ORDER BY name;
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src=&quot;../assets/blogimg/D1%20%E8%A1%A8%E6%B8%85%E5%8D%95%E6%88%AA%E5%9B%BE.webp&quot; alt=&quot;D1 表清单截图&quot; /&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=&quot;https://i.kyr.us.ci/_astro/8080.tYApyGsX.webp&quot; alt=&quot;前台页&quot; /&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=&quot;../assets/blogimg/%E5%89%8D%E5%8F%B0%E9%A1%B5.webp&quot; alt=&quot;前台页&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src=&quot;../assets/blogimg/%E5%90%8E%E5%8F%B0%E9%A1%B51.webp&quot; alt=&quot;后台上传页截图1&quot; /&gt;
&lt;img src=&quot;https://i.kyr.us.ci/_astro/hputai2.GFajBADO.webp&quot; alt=&quot;后台上传页截图2&quot; /&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 = &quot;https://你的后端域名&quot;
$auth = &quot;x:你的ADMIN_PASSWORD&quot;
curl.exe -sS -u $auth &quot;$base/admin/api/backup/health?probe=1&quot;
&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=&quot;../assets/blogimg/zeaburrz.webp&quot;&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://i.kyr.us.ci/posts/pixivget/</link><guid isPermaLink="true">https://i.kyr.us.ci/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;&quot;tag&quot;: &quot;留空时&quot;&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=&quot;https://i.kyr.us.ci/_astro/1769671892275.pghPLcWi.webp&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
&lt;li&gt;找到PHPSESSID，里面的值就是我们要的Cookie了
&lt;img src=&quot;https://i.kyr.us.ci/_astro/1769671929543.Dkz64QuV.webp&quot; alt=&quot;&quot; /&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;{
  &quot;php_sessid&quot;: &quot;你的PHPSESSID&quot;,
  &quot;user_id&quot;: &quot;你的Pixiv用户ID&quot;,
  &quot;tag&quot;: &quot;H&quot;,
  &quot;limit&quot;: 40,
  &quot;max_pages&quot;: 0,
  &quot;download_dir&quot;: &quot;E:/pixiv图片/h&quot;
}
&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=&quot;https://i.kyr.us.ci/_astro/1769672990592.bvWtO-u8.webp&quot; alt=&quot;运行状态&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;拿到图片文件，你可以存在本地或上传到图床。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;说到上传你可以原图直传，但你下次获取的时候也是原图，图片体量会非常大（十到几十M）。这里我会用到&lt;a href=&quot;https://www.xnview.com/en/xnconvert/&quot;&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://i.kyr.us.ci/posts/blog/</link><guid isPermaLink="true">https://i.kyr.us.ci/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=&quot;https://github.com/saicaca/fuwari&quot;&gt;&lt;code&gt;Fuwari&lt;/code&gt;&lt;/a&gt;、作者&lt;code&gt;二叉树树[afoim]&lt;/code&gt;二改过&lt;a href=&quot;https://github.com/afoim/fuwari&quot;&gt;&lt;code&gt;Fuwari&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我本人用的是&lt;a href=&quot;https://github.com/Spr-Aachen/Twilight&quot;&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=&quot;https://i.kyr.us.ci/_astro/1769621915743.oao8gkLE.webp&quot; alt=&quot;itdog 结果&quot; /&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://i.kyr.us.ci/posts/sapi/</link><guid isPermaLink="true">https://i.kyr.us.ci/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=&quot;https://pic1.acofork.com&quot;&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=&quot;https://i.kyr.us.ci/_astro/file1.Cr4xpaHn.webp&quot; alt=&quot;一坨初始文件&quot; /&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=&quot;test&quot;&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;{
    &quot;domain&quot;: &quot;https://rapi.0w0.us.ci&quot;,
    &quot;galleryDomain&quot;: &quot;https://gallery.0w0.us.ci&quot;,  //不用反代就 公共域+/index.html
    &quot;indexDomain&quot;: &quot;https://pic.0w0.us.ci&quot;         //不用反代就 公共域+/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=&quot;https://github.com/TyrEamon/Pixiv-mylove&quot;&gt;Pixiv-Tool&lt;/a&gt;
&lt;img src=&quot;https://i.kyr.us.ci/_astro/mmmmm1.BumhdE_y.webp&quot; alt=&quot;&quot; /&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=&quot;https://i.kyr.us.ci/_astro/bulid1.C0XOlU04.webp&quot; alt=&quot;&quot; /&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=&quot;https://i.kyr.us.ci/_astro/1769493099959.CuV1qap-.webp&quot; alt=&quot;&quot; /&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=&quot;https://i.kyr.us.ci/_astro/r2.Biip682i.webp&quot; alt=&quot;在R2页里，创建用户Token&quot; /&gt;
&lt;img src=&quot;https://i.kyr.us.ci/_astro/s3s3.DXA0kiTz.webp&quot; alt=&quot;&quot; /&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 &quot;C:\Users\Tyr.Eamon\Desktop\博客背景文件\随机图\dist&quot; 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=&quot;https://i.kyr.us.ci/_astro/bupl.2LInjD9f.webp&quot; alt=&quot;&quot; /&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=&quot;https://i.kyr.us.ci/_astro/1769493099959.CuV1qap-.webp&quot; alt=&quot;&quot; /&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></channel></rss>