<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>七号研习社</title><description>记录技术、生活与思考</description><link>https://llxx.cc/</link><templateTheme>Firefly</templateTheme><templateThemeVersion>6.16.9</templateThemeVersion><templateThemeUrl>https://github.com/CuteLeaf/Firefly</templateThemeUrl><lastBuildDate>2026年11月11日 12:45:13</lastBuildDate><item><title>VPS 命令脚本备份</title><link>https://llxx.cc/posts/2026/11/vps-commands-backup/</link><guid isPermaLink="true">https://llxx.cc/posts/2026/11/vps-commands-backup/</guid><description>常用的 VPS 命令和脚本备份，包括系统配置、防火墙、BBR、面板安装等。</description><pubDate>Wed, 04 Nov 2026 10:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;常用命令&lt;a href=&quot;#常用命令&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;切换到 root 用户&lt;a href=&quot;#切换到-root-用户&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-i&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;更新系统和依赖&lt;a href=&quot;#更新系统和依赖&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Debian / Ubuntu：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;apt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-y&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;apt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-y&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;socat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wget&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;apt-get&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;CentOS：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;yum&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-y&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;yum&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-y&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;socat&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;防火墙相关&lt;a href=&quot;#防火墙相关&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;firewall-cmd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--state&lt;/span&gt;&lt;span&gt;                   &lt;/span&gt;&lt;span&gt;# 查看防火墙状态&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;systemctl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stop&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;firewalld.service&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;# 停止防火墙&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;systemctl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;disable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;firewalld.service&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 禁止防火墙开机自启&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Debian 开启原生 BBR&lt;a href=&quot;#debian-开启原生-bbr&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;net.core.default_qdisc=fq&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;gt; &lt;/span&gt;&lt;span&gt;/etc/sysctl.conf&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;net.ipv4.tcp_congestion_control=bbr&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;gt; &lt;/span&gt;&lt;span&gt;/etc/sysctl.conf&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sysctl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-p&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sysctl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;net.ipv4.tcp_available_congestion_control&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;lsmod&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;grep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bbr&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;查看系统信息&lt;a href=&quot;#查看系统信息&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;wget&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-qO-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bench.sh&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;修改密码&lt;a href=&quot;#修改密码&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;passwd&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;常用脚本&lt;a href=&quot;#常用脚本&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;VPS 测速&lt;a href=&quot;#vps-测速&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;wget&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-qO-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--no-check-certificate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://raw.githubusercontent.com/oooldking/script/master/superbench.sh&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;回程测试&lt;a href=&quot;#回程测试&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://raw.githubusercontent.com/zhucaidan/mtr_trace/main/mtr_trace.sh&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ServerStatus&lt;a href=&quot;#serverstatus&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 国外机&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;wget&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://raw.githubusercontent.com/cokemine/ServerStatus-Hotaru/master/status.sh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 国内机&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;wget&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://cokemine.coding.net/p/hotarunet/d/ServerStatus-Hotaru/git/raw/master/status.sh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;面板安装&lt;a href=&quot;#面板安装&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;1Panel&lt;a href=&quot;#1panel&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-sSL&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://resource.fit2cloud.com/1panel/package/quick_start.sh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-o&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;quick_start.sh&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp; &lt;/span&gt;&lt;span&gt;bash&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;quick_start.sh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;宝塔面板（Debian）&lt;a href=&quot;#宝塔面板debian&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;wget&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-O&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install.sh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;http://download.moetas.com/install/install-ubuntu_6.0.sh&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp; &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bash&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install.sh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;X-UI&lt;a href=&quot;#x-ui&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;bash&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;(&lt;/span&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-Ls&lt;/span&gt;&lt;span&gt; https://raw.githubusercontent.com/vaxilu/x-ui/master/install.sh)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;DD 系统重装&lt;a href=&quot;#dd-系统重装&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;甲骨文 ARM DD&lt;a href=&quot;#甲骨文-arm-dd&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-fLO&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://raw.githubusercontent.com/bohanyang/debi/master/debi.sh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;chmod&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;a+rx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;debi.sh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;./debi.sh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--architecture&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;arm64&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--user&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;root&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--password&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;password&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;shutdown&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-r&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;now&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 默认密码：password&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;DD Debian 10（64 位）&lt;a href=&quot;#dd-debian-1064-位&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;bash&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;(&lt;/span&gt;&lt;span&gt;wget&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--no-check-certificate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-qO-&lt;/span&gt;&lt;span&gt; &apos;https://moeclub.org/attachment/LinuxShell/InstallNET.sh&apos;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-v&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;64&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-a&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 默认密码：MoeClub.org&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;国内 VPS DD Debian 11&lt;a href=&quot;#国内-vps-dd-debian-11&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;bash&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;(&lt;/span&gt;&lt;span&gt;wget&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--no-check-certificate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-qO-&lt;/span&gt;&lt;span&gt; &apos;https://moeclub.org/attachment/LinuxShell/InstallNET.sh&apos;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;11&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-v&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;64&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--mirror&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;https://mirrors.huaweicloud.com/debian/&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-p&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;password&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Docker 应用&lt;a href=&quot;#docker-应用&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;青龙面板&lt;a href=&quot;#青龙面板&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;docker&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-dit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;QL&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--hostname&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;QL&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--restart&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;always&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-p&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;5777:5777&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-v&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$PWD&lt;/span&gt;&lt;span&gt;/QL/config:/ql/config&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-v&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$PWD&lt;/span&gt;&lt;span&gt;/QL/log:/ql/log&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-v&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$PWD&lt;/span&gt;&lt;span&gt;/QL/db:/ql/db&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-v&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$PWD&lt;/span&gt;&lt;span&gt;/QL/scripts:/ql/scripts&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-v&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$PWD&lt;/span&gt;&lt;span&gt;/QL/jbot:/ql/jbot&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;whyour/qinglong:latest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;其他&lt;a href=&quot;#其他&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;腾讯云去监控&lt;a href=&quot;#腾讯云去监控&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展开&lt;/span&gt;&lt;span&gt;收起&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-i&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;systemctl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stop&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tat_agent&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;systemctl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;disable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tat_agent&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/usr/local/qcloud/stargate/admin/uninstall.sh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/usr/local/qcloud/YunJing/uninst.sh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/usr/local/qcloud/monitor/barad/admin/uninstall.sh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;rm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/etc/systemd/system/tat_agent.service&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;rm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-rf&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/usr/local/qcloud&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;rm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-rf&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/usr/local/sa&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;rm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-rf&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/usr/local/agenttools&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;process&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;sap100&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;secu-tcs-agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sgagent64&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;barad_agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agentPlugInD&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pvdriver&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;process&lt;/span&gt;&lt;/span&gt;&lt;span&gt;[@]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;A&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; $(&lt;/span&gt;&lt;span&gt;ps&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;aux&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;grep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$i&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;grep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-v&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;grep&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;awk&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;{print $2}&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;kill&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-9&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$A&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;done&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;done&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展开&lt;/span&gt;&lt;span&gt;收起&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;</content:encoded></item><item><title>rea-video：让 AI 逆向拆解一条视频，判断它是实拍、AI 还是代码做的</title><link>https://llxx.cc/posts/2026/11/rea-video-reverse-engineer/</link><guid isPermaLink="true">https://llxx.cc/posts/2026/11/rea-video-reverse-engineer/</guid><description>开源工具 rea-video 把一条视频拆成一个个镜头，逐镜判断是实拍、AI 生成还是代码渲染，再给出一份怎么重做出来的方案。这篇讲它拆什么、靠什么判断、准不准，以及怎么上手。</description><pubDate>Sat, 07 Nov 2026 10:00:00 GMT</pubDate><content:encoded>&lt;p&gt;刷到一条短视频，觉得拍得不错，想模仿一下，但说不清它到底是怎么做出来的：是真人拿手机拍的，还是 AI 生成的，还是用代码做的动效？&lt;a href=&quot;https://github.com/JuneYaooo/rea-video&quot; target=&quot;_blank&quot;&gt;rea-video&lt;/a&gt; 就是来回答这个问题的。&lt;/p&gt;
&lt;p&gt;它把一条视频拆成一个一个镜头，逐个判断每个镜头是实拍、AI 生成、还是代码渲染，然后给出一份「怎么把它重做出来」的方案。&lt;/p&gt;
&lt;a href=&quot;https://github.com/JuneYaooo/rea-video&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;JuneYaooo&lt;/div&gt;&lt;/div&gt;&lt;div&gt;/&lt;/div&gt;&lt;div&gt;rea-video&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Reverse-engineer any video, shot by shot: filmed, AI-generated or coded, and how to remake it. 逆向一切视频，逐个镜头看是拍的、AI 生成的还是代码做的，再告诉你怎么复刻。&lt;/div&gt;&lt;div&gt;&lt;div&gt;—&lt;/div&gt;&lt;div&gt;—&lt;/div&gt;&lt;div&gt;Apache-2.0&lt;/div&gt;&lt;span&gt;Python&lt;/span&gt;&lt;/div&gt;&lt;/a&gt;
&lt;p&gt;这是 README 里的一张演示：左边是手机实拍的带货视频，右边是 AI 复刻版，产品被换成了别的。&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;左边手机实拍，右边 AI 复刻，产品被换掉&quot; loading=&quot;lazy&quot; width=&quot;440&quot; height=&quot;392&quot; src=&quot;/_astro/demo.Bg9tx4jy_Z1JHG51.webp&quot; /&gt;&lt;figcaption&gt;左边手机实拍，右边 AI 复刻，产品被换掉&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;它到底做了什么&lt;a href=&quot;#它到底做了什么&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;流程分四步：先把视频切成镜头，音轨拆成人声、配乐、音效三条；再收集证据；然后下结论；最后给复刻方案。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;rea-video 的拆解流程：拿一条带货视频举例，切成镜头和声音，每个镜头走「切开 → 取证据 → 判断 → 复刻方案」四步&quot; loading=&quot;lazy&quot; width=&quot;1000&quot; height=&quot;738&quot; src=&quot;/_astro/rea-flow.Xw6VsBMo_2tYRT0.svg&quot; /&gt;&lt;figcaption&gt;rea-video 的拆解流程：拿一条带货视频举例，切成镜头和声音，每个镜头走「切开 → 取证据 → 判断 → 复刻方案」四步&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;我觉得最有意思的是「收集证据」这一步。它不是凭「看着像不像」来判断，而是先测硬指标：帧率、传感器噪点、整幅画面是不是像一张平面在平移、文件元数据里的 AIGC 标签。这些测不出来，才轮到看画面（手、文字、物理规律）和听声音（BPM、调性、在唱还是在说）。判定的时候，硬证据排在「看着像」前面，两种结论打架就标出来交给助手看图复核。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;能拆出什么&lt;a href=&quot;#能拆出什么&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;同一个镜头会被归到下面某一类，每一类的拆法不一样：&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;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;口播、vlog、带货、探店&lt;/td&gt;&lt;td&gt;机位、景别、构图、灯光（12 种布光方案加器材清单）、调色&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;AI 视频&lt;/td&gt;&lt;td&gt;文生/图生视频、AI 短剧&lt;/td&gt;&lt;td&gt;证据、逐镜反推的 prompt、怎么分批生成、用哪个模型&lt;/td&gt;&lt;/tr&gt;&lt;tr&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;3D / 动画&lt;/td&gt;&lt;td&gt;Blender/C4D 科普、产品动画&lt;/td&gt;&lt;td&gt;该用视频模型生成，还是从 3D 代码渲染&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;代码 / 模板&lt;/td&gt;&lt;td&gt;文字动效、UI 演示、图表&lt;/td&gt;&lt;td&gt;文字、版式和动效节奏，可以照着写 Remotion 工程&lt;/td&gt;&lt;/tr&gt;&lt;tr&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;AI 角色 + 代码界面 + 真实录屏&lt;/td&gt;&lt;td&gt;逐镜判断，再拼回原来的时间线&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;画面之外，每条视频还会拆出这些：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;字幕和花字：每行字的起止时间（导出 SRT/ASS），还有颜色、描边、怎么入场的&lt;/li&gt;
&lt;li&gt;贴纸、表情、画中画：位置和停留时长&lt;/li&gt;
&lt;li&gt;剪辑：切在哪、节奏多快、有没有卡在节拍上&lt;/li&gt;
&lt;li&gt;音频：人声还是 AI 配音、配乐是 AI 还是曲库以及它的 BPM、每个音效落在哪&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;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;3D 科普片《咸鸭蛋为什么会流油》的拆解分镜，逐帧标注「3D 渲染」&quot; loading=&quot;lazy&quot; width=&quot;1200&quot; height=&quot;822&quot; src=&quot;/_astro/case-3d.Td7hxcgk_1grALe.webp&quot; /&gt;&lt;figcaption&gt;3D 科普片《咸鸭蛋为什么会流油》的拆解分镜，逐帧标注「3D 渲染」&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;混合片「笔记没人看，先别删」的拆解分镜，「代码渲染」和「AI 视频」逐帧区分&quot; loading=&quot;lazy&quot; width=&quot;1200&quot; height=&quot;822&quot; src=&quot;/_astro/case-mixed.CheZlI57_2btJy7.webp&quot; /&gt;&lt;figcaption&gt;混合片「笔记没人看，先别删」的拆解分镜，「代码渲染」和「AI 视频」逐帧区分&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;实拍开箱的拆解分镜，绝大部分标「实拍」，只有一帧疑似「AI 视频」&quot; loading=&quot;lazy&quot; width=&quot;1200&quot; height=&quot;822&quot; src=&quot;/_astro/case-live.CK-A52Je_Z1f0hMH.webp&quot; /&gt;&lt;figcaption&gt;实拍开箱的拆解分镜，绝大部分标「实拍」，只有一帧疑似「AI 视频」&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;最特别的地方：给 AI 助手用的&lt;a href=&quot;#最特别的地方给-ai-助手用的&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;跟很多工具不一样，rea-video 是冲着让 AI 助手来跑设计的。README 开头第一句用法就是：在 Claude Code、Codex 这类能执行命令的助手里面，说一句：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Install https://github.com/JuneYaooo/rea-video, then break down this video: /path/to/video.mp4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;助手自己装 CLI、学流程、跑完整套，你只需要装好 ffmpeg 和 Python 3.10 以上。装完之后它会把一个 skill 链接到 &lt;code&gt;~/.claude&lt;/code&gt;、&lt;code&gt;~/.codex&lt;/code&gt;、&lt;code&gt;~/.agents&lt;/code&gt;，之后直接说「帮我拆解这条视频，看看是不是 AI 做的」就行。&lt;/p&gt;&lt;p&gt;我觉得这个思路跟 CleanYourTV 有点像：不追求一个什么都替你做好的图形界面，而是把判断和操作交给一个会看、会跑命令的助手，人在关键点确认一下。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;准不准&lt;a href=&quot;#准不准&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;README 给的数字是按镜头时长加权的「判断制作方式」准确率：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;纯工具模式（离线、免费）：调优集 98.3%，对微信转码过的视频 88.6%&lt;/li&gt;
&lt;li&gt;加视觉模型（Gemini 或豆包）：微信转码视频能到 99.6%&lt;/li&gt;
&lt;li&gt;再加 agent 看图复核：100%&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;差别主要在视频来源。原始文件自带传感器噪点和平台标签，工具自己就够用；从平台下载的视频被二次压缩过，这些证据被抹掉了，得靠看图补回来。报告会在你提问的语言里输出，中文或英文都行。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;动手前要知道的&lt;a href=&quot;#动手前要知道的&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;这个工具是拿来学习一条视频的结构、节奏和技法，再用自己有权使用的素材去重做。README 专门写了一条：不能直接搬运别人的视频。别人的画面、音乐、角色、肖像都不能拿来复用，发布时也要遵守平台规则和当地的 AI 内容标注要求。&lt;/p&gt;&lt;p&gt;还有一点，工具目前只完成到「拆解 + AI 镜头复刻」这一步。实拍镜头它给你拍摄方案，要你自己拍；代码镜头给你文字和版式，Remotion 工程要助手来写。别指望一条命令出成片。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;上手步骤&lt;a href=&quot;#上手步骤&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;先准备环境：ffmpeg 和 Python 3.10 以上。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;brew&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ffmpeg&lt;/span&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;# Ubuntu 用：sudo apt install ffmpeg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clone&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://github.com/JuneYaooo/rea-video&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp; &lt;/span&gt;&lt;span&gt;cd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rea-video&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;bash&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scripts/install_skill.sh&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 装 CLI，并把 skill 链接到 ~/.claude、~/.codex、~/.agents&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;rea-video&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--help&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;首次拆解会自动下载约 67 MB 的人声分离模型，存到 &lt;code&gt;~/.cache/rea-video/models&lt;/code&gt;。一条 30 秒的视频不开视觉模型，大约一分钟出结果。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;方式一：交给 AI 助手（推荐）&lt;a href=&quot;#方式一交给-ai-助手推荐&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在 Claude Code、Codex 里直接说「帮我拆解这条视频 xxx.mp4，看看是不是 AI 做的」。助手会按仓库里的 SKILL.md 流程跑：先看有没有记住的偏好 → 拆解 → 对不确定的镜头看图复核 → 按模板交付报告。&lt;/p&gt;&lt;p&gt;也可以走插件市场装：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/plugin marketplace add JuneYaooo/rea-video&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/plugin install rea-video@rea-video&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;方式二：自己敲命令&lt;a href=&quot;#方式二自己敲命令&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;section&gt;&lt;h4&gt;只做确定性取证（离线、免费）&lt;a href=&quot;#只做确定性取证离线免费&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;rea-video&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;decompose&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ref.mp4&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-o&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;out/ref&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;open&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;out/ref/report.html&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;这一步不调模型，靠 CV 和元数据判断，输出 &lt;code&gt;breakdown.json&lt;/code&gt;、&lt;code&gt;report.html&lt;/code&gt;、&lt;code&gt;report.md&lt;/code&gt;、&lt;code&gt;storyboard.jpg&lt;/code&gt;、每镜首尾帧，以及 &lt;code&gt;packaging/&lt;/code&gt; 里的字幕 SRT、带样式的 ASS、贴纸截图。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h4&gt;加视觉模型（建议，不强制）&lt;a href=&quot;#加视觉模型建议不强制&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;REA_VLM_BASE_URL&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;https&lt;/span&gt;&lt;span&gt;://.../&lt;/span&gt;&lt;span&gt;v1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;REA_VLM_API_KEY&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;... &lt;/span&gt;&lt;/span&gt;&lt;span&gt;REA_VLM_MODEL&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;gemini-2&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;5-pro&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;rea-video&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;decompose&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ref.mp4&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-o&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;out/ref&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--vlm&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;任意 OpenAI 兼容的多模态模型都行，写多个可以做备选。加视觉模型后，实拍/AI/3D 的判断更准，还会给每个镜头反推生成 prompt。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h4&gt;没有视觉模型，让能看图的助手来复核&lt;a href=&quot;#没有视觉模型让能看图的助手来复核&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;rea-video&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;review&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;out/ref&lt;/span&gt;&lt;span&gt;                 &lt;/span&gt;&lt;span&gt;# 生成逐镜看图任务和答案模板&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;rea-video&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apply-review&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;out/ref&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--by&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;zcode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# 助手填完答案后，并入结论和报告&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h4&gt;纠正和记忆&lt;a href=&quot;#纠正和记忆&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;rea-video&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;correct&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;out/ref&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--shots&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--label&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;still_motion&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--note&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;这是定格动画&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;rea-video&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;prefs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;vlm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;on&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;rea-video&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;memory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;用户指出的纠正会被记住，存在 &lt;code&gt;~/.rea-video&lt;/code&gt;，下次同一条视频自动套用，同类镜头复核时也会提示。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;照着报告复刻&lt;a href=&quot;#照着报告复刻&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;报告里每个镜头都标了做法，几种做法的下一步不一样：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;实拍镜头&lt;/strong&gt;：报告给出拍摄场次（几个场景、每个场景几个机位、先拍哪个）、景别、手持还是支架、灯光和器材清单。拍完把素材发给助手，说「按分镜表剪进去」，助手会剪到对应位置并出一段左右并排的对比片。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI 镜头&lt;/strong&gt;：报告给出生成单元和提示词（中英都有），可以手动贴到即梦、可灵生成，再发给助手拼回时间线；装了 &lt;a href=&quot;https://github.com/JuneYaooo/capsule-cinema&quot; target=&quot;_blank&quot;&gt;capsule-cinema&lt;/a&gt; 的话，说一句「用 capsule-cinema 复刻 AI 镜头」，它会自动生成、拼回、出对比片，调模型之前会先免费试跑一遍让你确认。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;代码 / 动效&lt;/strong&gt;：让助手「按报告写一个 Remotion 工程」，之后改文案只改数据。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;静图推拉&lt;/strong&gt;：一张图加测出来的缩放平移速度，助手本地直接生成，不调模型。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;声音&lt;/strong&gt;：口播按文案用 TTS 或自己录，配乐按 BPM 和调性去曲库找或用 Suno 生成，音效按时间点表加。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;最后&lt;a href=&quot;#最后&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果你对一条视频「怎么做的」好奇，或者想模仿它的节奏和技法，可以先拿自己的文件跑一遍。工具离线免费就能用，报告输出在你提问的语言里。至于复刻，AI 镜头有 capsule-cinema 帮着生成，实拍和代码的部分还是得自己动手，工具负责把每一步怎么做讲清楚。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>CleanYourTV：让 AI 助手帮你清理安卓电视的广告和预装应用</title><link>https://llxx.cc/posts/2026/11/cleanyourtv-android-tv-debloat/</link><guid isPermaLink="true">https://llxx.cc/posts/2026/11/cleanyourtv-android-tv-debloat/</guid><description>开源项目 CleanYourTV 通过局域网 ADB 停用安卓电视的广告、推荐和预装应用，再换一个干净的桌面。这篇讲它怎么做、支持哪些机型、怎么上手，以及哪里要小心。</description><pubDate>Thu, 05 Nov 2026 10:00:00 GMT</pubDate><content:encoded>&lt;p&gt;开机先看一段广告，主页一半位置是推荐的影视剧，设置里还有一堆叫不出名字的后台服务。用过国产安卓电视的人，大概都对这个界面不陌生。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/Gathin23/cleanyourtv&quot; target=&quot;_blank&quot;&gt;CleanYourTV&lt;/a&gt; 就是冲着这个来的。它通过局域网连上电视，把广告、推荐内容、数据上报服务和用不到的预装应用停掉，再装一个只放常用应用的桌面。整个过程不用 root，也不用刷机，电脑和电视在同一个 Wi-Fi 下就行。&lt;/p&gt;
&lt;a href=&quot;https://github.com/Gathin23/cleanyourtv&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Gathin23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;/&lt;/div&gt;&lt;div&gt;cleanyourtv&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Debloat any Android or Google TV over Wi-Fi and get an Apple TV-style home.&lt;/div&gt;&lt;div&gt;&lt;div&gt;—&lt;/div&gt;&lt;div&gt;—&lt;/div&gt;&lt;div&gt;NOASSERTION&lt;/div&gt;&lt;span&gt;Python&lt;/span&gt;&lt;/div&gt;&lt;/a&gt;
&lt;section&gt;&lt;h2&gt;它到底做了什么&lt;a href=&quot;#它到底做了什么&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;流程很简单：先把电视上每个应用的状态和默认桌面记下来，然后用 &lt;code&gt;pm disable-user&lt;/code&gt; 停掉列表里的应用，最后编译安装它自己的桌面，设成默认主屏幕。&lt;/p&gt;&lt;p&gt;我觉得最关键的是第二步用”停用”而没用”卸载”。系统应用还在，只是不跑了，想要回来随时能启用。项目自带的 &lt;code&gt;tools/restore.sh&lt;/code&gt; 会照着第一步的记录，把应用一个个恢复。&lt;/p&gt;&lt;p&gt;停用列表是按机型整理的纯文本。拿小米电视 4A 那份来看，一共 42 行，按用途分了组：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Xiaomi telemetry&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;com.miui.tv.analytics&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;com.xiaomi.statistic&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# PatchWall and Mi content rows / promos&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;com.mitv.tvhome.atv&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;com.mitv.tvhome.michannel&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;com.xiaomi.mitv.updateservice          # re-enable to check for firmware updates&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;开头两行是小米的数据统计，接着是 PatchWall 桌面的推荐内容。系统更新服务也在里面，注释写着想检查固件更新时再打开。哪一行不想停，前面加个 &lt;code&gt;#&lt;/code&gt; 就行。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;最特别的地方：让 AI 助手来操作&lt;a href=&quot;#最特别的地方让-ai-助手来操作&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;这个项目推荐的用法，是把活交给 Claude Code、Codex、Gemini CLI 这类能跑终端命令的编程助手。&lt;/p&gt;&lt;p&gt;仓库里有一份 &lt;code&gt;PROMPT.md&lt;/code&gt;，是写给 AI 助手的完整操作说明。你把它发给助手，填上电视型号，助手会先在局域网里找到电视、用 ADB 连上，动手前备份应用列表和系统设置。然后它会问你平时看哪些应用、要不要留着语音助手和投屏，再照你的回答去停用，每做一步都从电视上截一张图确认。最后编译桌面、装上、设成默认。&lt;/p&gt;&lt;p&gt;仓库根目录还放着 &lt;code&gt;CLAUDE.md&lt;/code&gt;、&lt;code&gt;AGENTS.md&lt;/code&gt;、&lt;code&gt;GEMINI.md&lt;/code&gt;，分别写给不同的助手。可以看出作者一开始就打算让人只管回答问题，具体操作交给 AI。&lt;/p&gt;&lt;p&gt;我觉得这个思路挺对路。每台电视的预装应用都不一样，同一个牌子换个固件，包名也会变，很难写出一个通吃的脚本。让助手现场看、现场判断，反而更靠谱。说明里还专门交代助手优先用仓库里的 &lt;code&gt;tools/disable.sh&lt;/code&gt;，别自己另写，因为备份和保护默认桌面的逻辑都在这个脚本里。&lt;/p&gt;&lt;p&gt;不过让 AI 在电视上执行命令，我还是会盯着它每一步在干什么，尤其是它要停用一个你没听说过的系统组件时。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;支持哪些电视&lt;a href=&quot;#支持哪些电视&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;只支持 Android TV 和 Google TV。三星 Tizen、LG webOS、Roku 都不是安卓，用不了。Fire TV 只能参考它的清单自己手动弄。&lt;/p&gt;&lt;p&gt;&lt;code&gt;examples/&lt;/code&gt; 目录里有 443 个机型的停用列表，都是社区拿真机验证后提交的。我数了一下国内常见的牌子：&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;TCL&lt;/td&gt;&lt;td&gt;80&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;小米&lt;/td&gt;&lt;td&gt;42&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;海信&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;创维&lt;/td&gt;&lt;td&gt;14&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;海尔&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;酷开&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;长虹、康佳&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;收录得多，不代表一定能用。README 特意提醒，部分国行电视会拒绝装第三方 APK，或者不让换默认桌面，TCL 就有这样的型号。这种电视还能停掉广告和预装应用，新桌面就未必装得上了。具体要看型号和固件，光看牌子判断不了。&lt;/p&gt;&lt;p&gt;另外，桌面要求 Android 8.0 以上。有些老电视在清单里，系统版本却不够，桌面一样装不了。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;换上的桌面长什么样&lt;a href=&quot;#换上的桌面长什么样&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;深色背景，底部一排常用应用，默认 4 个。焦点移到哪个应用上，就显示它的名字，背景颜色也跟着这个应用的横幅或图标变。往下按是更多应用，每行可以放 4 到 7 个。&lt;/p&gt;&lt;p&gt;用遥控器就能调整顺序：长按设置按钮进入排序模式，方向键挪位置。仓库里有 21 套主题，换颜色、壁纸、列数都不用重新编译。还有 30 多个扩展卡片，天气、世界时钟、睡眠定时、蓝牙开关都有，别的应用想往桌面上放卡片，得你点头才会出现。电视的屏保设置里也能选它自带的时钟屏保。&lt;/p&gt;&lt;p&gt;界面有简体中文，跟着系统语言走。&lt;/p&gt;&lt;p&gt;门槛在于仓库没有现成的 APK，桌面得在自己电脑上编译，要装 JDK 17 和 Android SDK。用 AI 助手的话，这一步也可以让它代劳。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;动手前要注意什么&lt;a href=&quot;#动手前要注意什么&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;用完一定要把调试关掉。这个项目走的是网络 ADB，默认 5555 端口，连接是明文的，有些电视固件甚至不检查授权。调试一直开着，同一个网络里的任何设备都可能控制你的电视。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Warning&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;别为了远程操作，在路由器上把电视的 5555 端口映射到公网。要远程帮家里人弄，README 推荐用 Tailscale 这类私有网络。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;停用也可能停出问题。东西虽然没删，停错了照样出故障。README 里记了一个例子：Google TV 停掉原桌面后，系统的设置向导可能会占掉主屏幕。稳妥的做法是分批停，每停一批就重启看看，遥控器、输入源切换、常用应用都正常再继续。&lt;/p&gt;&lt;p&gt;很多停用列表会关掉厂商的系统更新服务，所以之后想升级固件，得先把它重新打开。&lt;/p&gt;&lt;p&gt;还有个容易踩的坑：&lt;code&gt;PROMPT.md&lt;/code&gt; 里提到，有些电视盒子开了 USB 调试会切断 USB 口供电，插在上面的 U 盘、音箱、USB 网卡都会失灵。如果你的电视靠 USB 网卡上网，最好一口气做完，别分两次。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;上手步骤&lt;a href=&quot;#上手步骤&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;有两种用法，交给 AI 助手，或者自己敲命令。电视这边的准备工作是一样的。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;第一步：电视上打开调试&lt;a href=&quot;#第一步电视上打开调试&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;打开「设置 → 设备偏好设置 → 关于」，在「版本号」（有的叫 Build）上连按七次确定，会提示已进入开发者模式&lt;/li&gt;
&lt;li&gt;返回上一级，进「开发者选项」，打开「USB 调试」。如果还有「网络调试」或「ADB 调试」开关，也一起打开&lt;/li&gt;
&lt;li&gt;到网络设置里记下电视的局域网 IP，比如 &lt;code&gt;192.168.1.50&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;每个牌子的菜单名称都不太一样，找不到就在设置里搜”开发者”。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Tip&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;有些 Google TV 只有「无线调试」，要先用配对码配对，才能走 5555 端口。用 AI 助手的话它会处理；自己操作的话，看仓库 &lt;code&gt;PROMPT.md&lt;/code&gt; 里连接那一节。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;第二步（方式一）：交给 AI 助手&lt;a href=&quot;#第二步方式一交给-ai-助手&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;我更推荐这种。电脑和电视连同一个网络，然后：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clone&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://github.com/Gathin23/cleanyourtv&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;cd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cleanyourtv&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;claude&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;# 或者 codex、gemini&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;一定要在仓库目录里启动助手。这样它会直接用仓库里的 &lt;code&gt;tools/disable.sh&lt;/code&gt; 和 &lt;code&gt;launcher/build-and-install.sh&lt;/code&gt;，备份、保护默认桌面、恢复的逻辑都在里面，它就不会自己另写一套。&lt;/p&gt;&lt;p&gt;接着把 &lt;code&gt;PROMPT.md&lt;/code&gt; 整段发给它，把里面的 &lt;code&gt;&amp;lt;MODEL NAME HERE&amp;gt;&lt;/code&gt; 换成你的电视型号。之后助手会一步步往下走，你只需要做几件事：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;电视弹出「允许 USB 调试吗」时点允许，助手会提前告诉你什么时候弹&lt;/li&gt;
&lt;li&gt;回答它的问题：平时看哪些应用、底部快捷栏放哪几个、语音助手和投屏要不要留、还要不要收系统更新&lt;/li&gt;
&lt;li&gt;最后自己检查一遍，常用应用能不能打开，遥控器每个键是否正常，HDMI 等输入源能不能切&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;第二步（方式二）：自己敲命令&lt;a href=&quot;#第二步方式二自己敲命令&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;需要 Python 3。下面的命令都在仓库根目录里跑，IP 换成你电视的。&lt;/p&gt;&lt;section&gt;&lt;h4&gt;准备连接工具，看看电视的信息&lt;a href=&quot;#准备连接工具看看电视的信息&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;python3&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-m&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;venv&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tools/venv&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;tools/venv/bin/pip&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-r&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tools/requirements.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TV_HOST&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;192.168.1.50&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 读取型号、Android 版本和固件&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;tools/venv/bin/python&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-I&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tools/tv.py&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--probe&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 列出已安装的应用&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;tools/venv/bin/python&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-I&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tools/tv.py&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;pm list packages&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h4&gt;停用应用&lt;a href=&quot;#停用应用&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;先在 &lt;code&gt;examples/&lt;/code&gt; 里找到型号和固件都对得上的目录，读一下里面的 README，再执行：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;tools/disable.sh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;examples/你的机型/debloat.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;别直接拿其他机型的列表来用。不想停的应用，在那一行前面加 &lt;code&gt;#&lt;/code&gt;。脚本会把停用前的状态记到电脑上的 &lt;code&gt;~/.cleanyourtv/&lt;/code&gt; 目录里，之后恢复要靠它。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h4&gt;编译并安装桌面&lt;a href=&quot;#编译并安装桌面&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;需要 JDK 17、Android SDK Platform 34 和 Build Tools 34.0.0。macOS 上可以这样装：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;brew&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;openjdk@17&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;android-commandlinetools&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sdkmanager&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;platforms;android-34&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;build-tools;34.0.0&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;然后一条命令编译、安装、切换默认桌面：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;TV_HOST&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;192.168.1.50&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;launcher/build-and-install.sh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;脚本会先确认新桌面能启动，再把它设成默认，同时停掉原来的桌面。想留着原桌面，就加上 &lt;code&gt;STOCK_LAUNCHER=none&lt;/code&gt;。注意这只是不停用原桌面，默认桌面照样会换成新的：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;TV_HOST&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;192.168.1.50&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;STOCK_LAUNCHER&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;none&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;launcher/build-and-install.sh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h4&gt;换个主题（可选）&lt;a href=&quot;#换个主题可选&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;TV_HOST&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;192.168.1.50&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tools/theme.sh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;themes/aurora&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 换主题&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;TV_HOST&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;192.168.1.50&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tools/theme.sh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--reset&lt;/span&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;# 恢复默认&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;Windows 用户用仓库里对应的 &lt;code&gt;.ps1&lt;/code&gt; 脚本，用法见 README 的 Windows 一节。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;第三步：关掉调试&lt;a href=&quot;#第三步关掉调试&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;全部弄完后，回到「开发者选项」，关掉 USB 调试和网络调试，再撤销已经授权过的电脑。5555 端口的连接是明文的，一直开着不安全。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;后悔了怎么恢复&lt;a href=&quot;#后悔了怎么恢复&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;用停用时的同一份列表：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;TV_HOST&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;192.168.1.50&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tools/restore.sh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;examples/你的机型/debloat.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;脚本会照着 &lt;code&gt;~/.cleanyourtv/&lt;/code&gt; 里的记录，把应用和原来的默认桌面恢复回去。停用之前本来就关着的应用，恢复后还是关着。&lt;/p&gt;&lt;p&gt;新桌面不会被恢复脚本卸载，要删就去电视的「设置 → 应用」里删。连不上 ADB 的时候，也可以直接在电视的应用设置里，把停掉的应用一个个重新启用。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;最后&lt;a href=&quot;#最后&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果你的电视是安卓系统，开机广告和推荐内容让你烦，又不想刷机，可以先去 &lt;code&gt;examples/&lt;/code&gt; 里搜一下自己的型号。有收录的话，读完那个目录里的说明和已知问题再动手。没收录也能用，助手会现场检查你的电视，只是要多花点时间确认哪些能停、哪些不能停。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>Astro 博客搭建全过程：从零到上线</title><link>https://llxx.cc/posts/2026/11/astro-blog-setup-guide/</link><guid isPermaLink="true">https://llxx.cc/posts/2026/11/astro-blog-setup-guide/</guid><description>用 Astro 和 Firefly 主题搭一个个人博客：环境准备、改配置、写文章、Markdown 扩展、部署上线，以及我从 AstroPaper 迁移过来时踩到的坑。</description><pubDate>Wed, 04 Nov 2026 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;这个博客一开始用的是 AstroPaper，后来换成了 &lt;a href=&quot;https://github.com/CuteLeaf/Firefly&quot; target=&quot;_blank&quot;&gt;Firefly&lt;/a&gt;。这篇按现在的搭法重新写了一遍，命令和路径都是我自己跑通过的。&lt;/p&gt;
&lt;p&gt;搭完你会有一个这样的博客：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;静态站点，构建完就是一堆 HTML，放哪都能跑&lt;/li&gt;
&lt;li&gt;自带暗色模式、全文搜索、RSS、站点地图&lt;/li&gt;
&lt;li&gt;文章用 Markdown 写，frontmatter 写错了构建时直接报错&lt;/li&gt;
&lt;li&gt;可以部署到 Vercel、Cloudflare Pages，也可以自己用 Docker 跑&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;需要会一点命令行，Node.js 用过就行。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;一、环境准备&lt;a href=&quot;#一环境准备&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Firefly 基于 Astro 7，对版本要求比较新：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Node.js 22 或更高&lt;/strong&gt;（准确地说是 22.23 以上）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pnpm 11 或更高&lt;/strong&gt;，项目里有脚本强制只能用 pnpm 装依赖&lt;/li&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;node&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-v&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;# 低于 v22 需要升级&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-v&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;# 没装就 npm install -g pnpm&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--version&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;macOS 可以用 Homebrew 装 Node：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;brew&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;node&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;编辑器推荐 VS Code，装上 &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=astro-build.astro-vscode&quot; target=&quot;_blank&quot;&gt;Astro 官方扩展&lt;/a&gt;，&lt;code&gt;.astro&lt;/code&gt; 文件才有高亮和提示。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;二、创建项目&lt;a href=&quot;#二创建项目&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Firefly 不走 &lt;code&gt;pnpm create astro&lt;/code&gt;，直接克隆仓库。建议先在 GitHub 上 Fork 一份到自己账号下，再克隆自己的那份，以后部署和同步更新都方便：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clone&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://github.com/&amp;lt;你的用户名&amp;gt;/Firefly.git&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-blog&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;cd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-blog&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dev&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;打开 &lt;code&gt;http://localhost:4321&lt;/code&gt; 就能看到演示站了。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Tip&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;code&gt;pnpm install&lt;/code&gt; 会下载几个平台相关的二进制包，比如搜索用的 Pagefind，单个就有几十 MB。网络不稳的时候可能下了一半就断，pnpm 还会显示安装成功，等到 &lt;code&gt;pnpm build&lt;/code&gt; 最后一步才报 &lt;code&gt;Failed to install either of [pagefind_extended, pagefind]&lt;/code&gt;。遇到这种情况，删掉 &lt;code&gt;node_modules&lt;/code&gt; 重装一次，或者换个网络环境再装。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;三、项目结构&lt;a href=&quot;#三项目结构&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;只列出平时会动到的部分：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;my-blog/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;├── astro.config.mjs        # Astro 配置：插件、Markdown、sitemap 等&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;├── src/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│   ├── config/             # 站点配置，按功能拆成很多个文件&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│   ├── content/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│   │   ├── posts/          # 文章&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│   │   └── spec/           # 关于页、友链页、留言板的正文&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│   ├── assets/images/      # 头像、壁纸等，构建时会自动压缩&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│   └── layouts/            # 页面布局，加统计代码、站长验证在这里&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;└── public/                 # 原样复制的静态文件，favicon 放这里&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;Firefly 的配置没有塞进一个大文件，而是拆在 &lt;code&gt;src/config/&lt;/code&gt; 下，最常改的几个：&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;code&gt;siteConfig.ts&lt;/code&gt;&lt;/td&gt;&lt;td&gt;站点标题、域名、主题色、页面开关、文章列表样式&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;profileConfig.ts&lt;/code&gt;&lt;/td&gt;&lt;td&gt;侧边栏头像、昵称、简介、社交链接&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;navBarConfig.ts&lt;/code&gt;&lt;/td&gt;&lt;td&gt;顶部导航菜单&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;backgroundWallpaper.ts&lt;/code&gt;&lt;/td&gt;&lt;td&gt;首页横幅的壁纸、标题、副标题&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;sidebarConfig.ts&lt;/code&gt;&lt;/td&gt;&lt;td&gt;侧边栏放哪些小组件&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;commentConfig.ts&lt;/code&gt;&lt;/td&gt;&lt;td&gt;评论系统&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;friendsConfig.ts&lt;/code&gt;&lt;/td&gt;&lt;td&gt;友链列表&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;四、改成你自己的站&lt;a href=&quot;#四改成你自己的站&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;站点信息&lt;a href=&quot;#站点信息&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;打开 &lt;code&gt;src/config/siteConfig.ts&lt;/code&gt;，至少改这几项：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;siteConfig&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SiteConfig&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;七号研习社&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;subtitle&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;记录技术、生活与思考&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;site_url&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://llxx.cc&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;777 的个人博客，记录技术、生活与思考。&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;timezone&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Asia/Bangkok&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;site_url&lt;/code&gt; 一定要改成你的域名，RSS、sitemap 和分享卡片里的链接都靠它生成。&lt;/p&gt;&lt;p&gt;同一个文件顶部有个 &lt;code&gt;pages&lt;/code&gt; 开关表，演示站开了一堆页面：动态、项目、相册、书签、打赏、追番等等。用不上的设成 &lt;code&gt;false&lt;/code&gt;，对应的页面会返回 404，导航栏里的入口也会自动隐藏：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pages&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;resolvePageToggles&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;friends&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;guestbook&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;dynamic&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;projects&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;gallery&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;booknav&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sponsor&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;头像、图标和横幅&lt;a href=&quot;#头像图标和横幅&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;头像&lt;/strong&gt;：图片放到 &lt;code&gt;src/assets/images/&lt;/code&gt;，在 &lt;code&gt;profileConfig.ts&lt;/code&gt; 里改 &lt;code&gt;avatar&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站图标&lt;/strong&gt;：PNG 放到 &lt;code&gt;public/favicon/&lt;/code&gt;，在 &lt;code&gt;siteConfig.ts&lt;/code&gt; 的 &lt;code&gt;favicon&lt;/code&gt; 里列出来。建议放一张 180×180 的，iPhone 添加到主屏幕时会用它&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;首页横幅&lt;/strong&gt;：标题、副标题和下面那排图标链接都在 &lt;code&gt;backgroundWallpaper.ts&lt;/code&gt; 的 &lt;code&gt;homeText&lt;/code&gt; 里&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;演示站的横幅标题、社交链接、友链、关于页都是作者自己的内容，记得逐个换掉。偷懒的办法是全局搜一下 &lt;code&gt;cuteleaf&lt;/code&gt; 和 &lt;code&gt;xiaye&lt;/code&gt;，搜到的基本都要改。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;评论&lt;a href=&quot;#评论&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;commentConfig.ts&lt;/code&gt; 里的 &lt;code&gt;type&lt;/code&gt; 默认是 &lt;code&gt;&quot;none&quot;&lt;/code&gt;，即不开评论。支持 Twikoo、Waline、Giscus、Artalk、Disqus，想开哪个就把 &lt;code&gt;type&lt;/code&gt; 改成对应的名字，再填好下面那一段配置。我这里没开。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;五、写文章&lt;a href=&quot;#五写文章&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;文章放在 &lt;code&gt;src/content/posts/&lt;/code&gt; 下，子目录会原样变成网址的一部分。我按年月放：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;src/content/posts/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;└── 2026/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;└── 11/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;├── astro-blog-setup-guide.md&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;└── img/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;└── screenshot.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;这篇文章的地址就是 &lt;code&gt;/posts/2026/11/astro-blog-setup-guide/&lt;/code&gt;。图片放在旁边的 &lt;code&gt;img/&lt;/code&gt; 里，正文用相对路径 &lt;code&gt;![说明](./img/screenshot.png)&lt;/code&gt; 引用，构建时会自动转成 WebP。&lt;/p&gt;&lt;p&gt;frontmatter 长这样：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Hello World&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;published&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;2026-11-04T12:00:00.000Z&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;我的第一篇博客文章。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;category&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;技术&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;tags&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;Astro&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;author&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;777&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pinned&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;draft&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;几个字段说明：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;category&lt;/code&gt; 只能填一个，&lt;code&gt;tags&lt;/code&gt; 可以填多个。首页顶部的分类栏就是按 &lt;code&gt;category&lt;/code&gt; 统计的&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pinned: true&lt;/code&gt; 会把文章置顶&lt;/li&gt;
&lt;li&gt;&lt;code&gt;draft: true&lt;/code&gt; 是草稿，本地 &lt;code&gt;pnpm dev&lt;/code&gt; 能看到，正式构建时会被排除&lt;/li&gt;
&lt;li&gt;&lt;code&gt;updated&lt;/code&gt; 填最后修改时间，超过一定天数文章底部会提示”上次编辑于……”&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Warning&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;字段值是纯数字时要加引号。比如我的昵称是 777，写成 &lt;code&gt;author: 777&lt;/code&gt; 会被 YAML 当成数字，构建直接报错，必须写 &lt;code&gt;author: &quot;777&quot;&lt;/code&gt;。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;也可以用脚本建文章，它会帮你生成 frontmatter：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new-post&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2026/11/hello-world&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;六、Markdown 扩展&lt;a href=&quot;#六markdown-扩展&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;除了标准 Markdown，Firefly 还多了几样常用的。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;提醒块&lt;/strong&gt;，用的是 GitHub 的写法：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;!NOTE&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;gt; 普通提示。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;!WARNING&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;gt; 需要注意的地方。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;可选的还有 &lt;code&gt;TIP&lt;/code&gt;、&lt;code&gt;IMPORTANT&lt;/code&gt;、&lt;code&gt;CAUTION&lt;/code&gt;。上面那两个黄框就是这么写出来的。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;GitHub 仓库卡片&lt;/strong&gt;，一行就能插入一个带 Star 数的卡片：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;::github{repo=&quot;CuteLeaf/Firefly&quot;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;代码块&lt;/strong&gt;用的是 Expressive Code，自带复制按钮和语言标识，超过 15 行的代码默认折叠。代码块里要再嵌一个代码块时，外层改用 &lt;code&gt;~~~&lt;/code&gt; 包起来就行：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;```bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Hello from my blog!&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;```&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;七、搜索、RSS 和 sitemap&lt;a href=&quot;#七搜索rss-和-sitemap&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;这三样 Firefly 都配好了，不用另外装：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;搜索&lt;/strong&gt;：Pagefind。&lt;code&gt;pnpm build&lt;/code&gt; 的最后一步会扫描生成好的 HTML，在 &lt;code&gt;dist/pagefind/&lt;/code&gt; 里生成索引，搜索完全在浏览器里完成，不需要服务器&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RSS / Atom&lt;/strong&gt;：&lt;code&gt;/rss.xml&lt;/code&gt; 和 &lt;code&gt;/atom.xml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;sitemap&lt;/strong&gt;：&lt;code&gt;/sitemap-index.xml&lt;/code&gt;。在 &lt;code&gt;pages&lt;/code&gt; 里关掉的页面会自动排除，其他想排除的页面可以在 &lt;code&gt;astro.config.mjs&lt;/code&gt; 的 &lt;code&gt;sitemap({ filter })&lt;/code&gt; 里加规则&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;八、加统计和站长验证&lt;a href=&quot;#八加统计和站长验证&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Google Analytics、Umami、Microsoft Clarity 在 &lt;code&gt;src/config/analyticsConfig.ts&lt;/code&gt; 里填 ID 就行。&lt;/p&gt;&lt;p&gt;不在列表里的代码，比如 Google AdSense 的站点验证，直接加到 &lt;code&gt;src/layouts/Layout.astro&lt;/code&gt; 的 &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; 里：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;head&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;meta&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;charset&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;UTF-8&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;meta&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;google-adsense-account&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;ca-pub-xxxxxxxxxxxxxxxx&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;head&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;九、部署上线&lt;a href=&quot;#九部署上线&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;先在本地完整构建一次，确认没有报错：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;# 输出到 dist/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;preview&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;# 在 localhost:4321 预览构建结果&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;section&gt;&lt;h3&gt;方案一：Vercel / Netlify / Cloudflare Pages&lt;a href=&quot;#方案一vercel--netlify--cloudflare-pages&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;最省事。代码推到 GitHub，在平台上导入仓库，填两个命令：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;安装命令：&lt;code&gt;pnpm install&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;构建命令：&lt;code&gt;pnpm build&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;输出目录：&lt;code&gt;dist&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;之后每次 push 都会自动重新部署。Firefly 自带了 &lt;code&gt;vercel.json&lt;/code&gt;，用 Vercel 的话连这几项都不用填。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;方案二：Docker + Nginx&lt;a href=&quot;#方案二docker--nginx&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;有自己的服务器的话，用多阶段构建：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt; node:lts &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; base&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;WORKDIR&lt;/span&gt;&lt;span&gt; /app&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; corepack enable &amp;amp;&amp;amp; corepack prepare pnpm@latest --activate&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;COPY&lt;/span&gt;&lt;span&gt; package.json pnpm-lock.yaml ./&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; pnpm install --frozen-lockfile&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;COPY&lt;/span&gt;&lt;span&gt; . .&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; pnpm run build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt; nginx:mainline-alpine-slim&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;COPY&lt;/span&gt;&lt;span&gt; --from=base /app/dist /usr/share/nginx/html&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;EXPOSE&lt;/span&gt;&lt;span&gt; 80&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;docker&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-t&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-blog&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;docker&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-p&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;80:80&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--restart&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;unless-stopped&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-blog&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;十、从 AstroPaper 迁移过来要注意什么&lt;a href=&quot;#十从-astropaper-迁移过来要注意什么&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果你和我一样是从别的 Astro 主题换过来的，这几件事要留意：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;frontmatter 字段名不一样&lt;/strong&gt;。AstroPaper 的 &lt;code&gt;pubDatetime&lt;/code&gt;、&lt;code&gt;modDatetime&lt;/code&gt;、&lt;code&gt;featured&lt;/code&gt;、&lt;code&gt;ogImage&lt;/code&gt;，在 Firefly 里分别是 &lt;code&gt;published&lt;/code&gt;、&lt;code&gt;updated&lt;/code&gt;、&lt;code&gt;pinned&lt;/code&gt;、&lt;code&gt;image&lt;/code&gt;，另外多了一个 &lt;code&gt;category&lt;/code&gt;。文章多的话写个小脚本批量替换，正文不要动&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;文章目录换了&lt;/strong&gt;。从 &lt;code&gt;src/data/blog/&lt;/code&gt; 挪到 &lt;code&gt;src/content/posts/&lt;/code&gt;，子目录结构保持不变的话，文章网址也不会变，搜索引擎收录和别人引用的链接都不会失效&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;演示内容很多&lt;/strong&gt;。看板娘模型、音乐播放器、示例公告、作者自己的友链和打赏链接，都要手动关掉或删掉。光 &lt;code&gt;public/pio/&lt;/code&gt; 里的看板娘模型就有 15 MB，不用的话直接删&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;评论数据和路径绑定&lt;/strong&gt;。Twikoo 这类评论系统按页面路径存评论，路径一变，旧评论就对不上了&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;日常写作流程&lt;a href=&quot;#日常写作流程&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;搭好以后，平时写文章就是：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;code&gt;pnpm new-post 2026/11/文章名&lt;/code&gt; 新建文件&lt;/li&gt;
&lt;li&gt;填好 frontmatter，写正文&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pnpm dev&lt;/code&gt; 本地看效果&lt;/li&gt;
&lt;li&gt;提交、push，等自动部署&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;搭博客本身花不了多少时间，花时间的是把演示站的东西一点点换成自己的，还有之后能不能坚持写下去。&lt;/p&gt;&lt;/section&gt;</content:encoded></item></channel></rss>