<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>剪贴板工具 on Wodaixin</title><link>https://wodaixin.github.io/blog/tags/%E5%89%AA%E8%B4%B4%E6%9D%BF%E5%B7%A5%E5%85%B7/</link><description>Recent content in 剪贴板工具 on Wodaixin</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Thu, 09 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://wodaixin.github.io/blog/tags/%E5%89%AA%E8%B4%B4%E6%9D%BF%E5%B7%A5%E5%85%B7/index.xml" rel="self" type="application/rss+xml"/><item><title>找不到好用的Linux剪贴板，我做了个带AI的开源版本</title><link>https://wodaixin.github.io/blog/p/clipgenius-ai-clipboard/</link><pubDate>Thu, 09 Apr 2026 00:00:00 +0000</pubDate><guid>https://wodaixin.github.io/blog/p/clipgenius-ai-clipboard/</guid><description>&lt;img src="https://wodaixin.github.io/blog/" alt="Featured image of post 找不到好用的Linux剪贴板，我做了个带AI的开源版本" /&gt;
 &lt;blockquote&gt;
 &lt;p&gt;项目地址：&lt;a class="link" href="https://github.com/wodaixin/ClipGenius" target="_blank" rel="noopener"
 &gt;github.com/wodaixin/ClipGenius&lt;/a&gt;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="被windows升级锁机后的意外收获"&gt;被Windows升级&amp;quot;锁机&amp;quot;后的意外收获
&lt;/h2&gt;&lt;p&gt;2026年的某一天，Windows自动升级后，我的电脑被锁了。&lt;/p&gt;
&lt;p&gt;不是病毒，不是硬件故障，而是微软的激活机制出了问题。折腾了几天，各种方法都试过，最后还是没能解决。那一刻我突然意识到：我对自己的电脑，竟然没有完全的控制权。&lt;/p&gt;
&lt;p&gt;正好那段时间，我想体验一下OpenClaw、Claude等AI工具的自部署版本——这些工具在Linux上的体验更好，也更&amp;quot;私密&amp;quot;。于是我做了一个决定：彻底切换到Ubuntu。&lt;/p&gt;
&lt;p&gt;切换的过程整体还算顺利，但有一个小问题让我很不适应：剪贴板。&lt;/p&gt;
&lt;p&gt;在Windows上，我习惯了两个工具：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;系统自带的&lt;code&gt;Win+V&lt;/code&gt;剪贴板历史&lt;/li&gt;
&lt;li&gt;开源项目&lt;a class="link" href="https://github.com/huiyadanli/PasteEx" target="_blank" rel="noopener"
 &gt;PasteEx&lt;/a&gt;——可以快速将剪贴板内容保存为文件&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这两个工具对于我这种需要频繁处理图片、文本的电商工作来说，简直是神器。&lt;/p&gt;
&lt;p&gt;但在Ubuntu上，我试过很多剪贴板工具：Clipman、CopyQ、Diodon……它们要么功能简陋，要么界面老旧，要么不支持云端同步。作为电商从业者，我每天需要：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;复制大量产品文案和描述&lt;/li&gt;
&lt;li&gt;收集竞品的图片素材&lt;/li&gt;
&lt;li&gt;保存Facebook广告资料库的视频链接&lt;/li&gt;
&lt;li&gt;在多个设备间同步这些内容&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;找不到一个满意的工具，让我的工作效率大打折扣。&lt;/p&gt;
&lt;h2 id="意外的转机google-ai-studio"&gt;意外的转机：Google AI Studio
&lt;/h2&gt;&lt;p&gt;前段时间，我开始在Google AI Studio上尝试用AI辅助工作。当时只是想让AI帮我整理一些文案，没想到Google主动推荐了一些AI功能的使用场景。&lt;/p&gt;
&lt;p&gt;这给了我一个想法：既然找不到好用的剪贴板工具，为什么不自己做一个？而且，既然AI这么强大，为什么不让剪贴板也变得智能一点？&lt;/p&gt;
&lt;p&gt;于是，ClipGenius就这样诞生了。&lt;/p&gt;
&lt;p&gt;最初的版本很简单，就是一个能记录剪贴历史的网页应用。但随着开发的深入，我逐渐加入了：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AI自动分析内容&lt;/li&gt;
&lt;li&gt;多模态聊天功能&lt;/li&gt;
&lt;li&gt;云端同步&lt;/li&gt;
&lt;li&gt;图片生成&lt;/li&gt;
&lt;li&gt;语音对话&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;现在回头看，它已经远远超出了我最初的设想。&lt;/p&gt;
&lt;h2 id="clipgenius能做什么"&gt;ClipGenius能做什么？
&lt;/h2&gt;&lt;h3 id="1-智能内容分类"&gt;1. 智能内容分类
&lt;/h3&gt;&lt;p&gt;ClipGenius会自动识别你复制的内容类型，分为6种：&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;strong&gt;图片&lt;/strong&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;strong&gt;视频&lt;/strong&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;strong&gt;URL&lt;/strong&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;strong&gt;Markdown&lt;/strong&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;strong&gt;代码&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;15+种语言识别&lt;/td&gt;
 &lt;td&gt;代码片段、配置文件&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;文本&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;默认类型&lt;/td&gt;
 &lt;td&gt;文案、备注&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;不需要手动分类，复制后自动归档。对于我这种每天要处理几十上百条内容的人来说，这个功能省了太多时间。&lt;/p&gt;
&lt;h3 id="2-ai自动分析"&gt;2. AI自动分析
&lt;/h3&gt;&lt;p&gt;登录后启用自动分析，AI会为每条内容生成：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;智能文件名&lt;/strong&gt;：比如&lt;code&gt;img_20260409_143052&lt;/code&gt;或&lt;code&gt;product_description_summary&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;内容摘要&lt;/strong&gt;：一段话概括内容要点&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这个功能特别适合整理素材。以前我保存一堆图片，文件名都是&lt;code&gt;IMG_1234.jpg&lt;/code&gt;，根本不知道是什么。现在AI会自动生成有意义的名字，比如&lt;code&gt;nike_running_shoes_ad&lt;/code&gt;，一目了然。&lt;/p&gt;
&lt;p&gt;AI分析支持两个提供商：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Gemini&lt;/strong&gt;：支持文本、图片、视频（推荐）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Minimax&lt;/strong&gt;：仅支持文本&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="3-多模态ai聊天"&gt;3. 多模态AI聊天
&lt;/h3&gt;&lt;p&gt;这是我最喜欢的功能之一。&lt;/p&gt;
&lt;p&gt;你可以把任何剪贴内容附加到对话中，然后和AI聊天：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;分析图片&lt;/strong&gt;：&amp;ldquo;这张产品图的设计风格是什么？&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;优化文案&lt;/strong&gt;：&amp;ldquo;帮我把这段描述改得更吸引人&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;解释代码&lt;/strong&gt;：&amp;ldquo;这段代码是做什么的？&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;翻译内容&lt;/strong&gt;：&amp;ldquo;把这段英文翻译成中文&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;AI会流式输出回答，甚至会展示&amp;quot;思考过程&amp;quot;（Gemini的thinking功能）。对话历史会自动保存，可以随时回顾。&lt;/p&gt;
&lt;h3 id="4-特色功能fb广告视频一键下载"&gt;4. 特色功能：FB广告视频一键下载
&lt;/h3&gt;&lt;p&gt;作为电商从业者，我经常需要研究竞品的Facebook广告素材。FB广告资料库虽然公开，但视频下载很麻烦——通常需要打开开发者工具，找到视频CDN链接，然后手动下载。&lt;/p&gt;
&lt;p&gt;ClipGenius简化了这个流程：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在FB广告资料库找到视频&lt;/li&gt;
&lt;li&gt;复制视频的CDN链接（通常是&lt;code&gt;scontent-xxx.xx.fbcdn.net&lt;/code&gt;开头）&lt;/li&gt;
&lt;li&gt;粘贴到ClipGenius&lt;/li&gt;
&lt;li&gt;自动识别并下载为本地视频&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;下载机制很智能：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;优先使用系统代理（如果你用Clash等工具）&lt;/li&gt;
&lt;li&gt;降级到CORS代理&lt;/li&gt;
&lt;li&gt;失败则保存为URL链接&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：目前这个功能只支持Facebook CDN链接。未来计划集成yt-dlp等工具，支持更多视频平台。&lt;/p&gt;
&lt;h3 id="5-云端同步可选"&gt;5. 云端同步（可选）
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;重要说明：ClipGenius无需登录即可使用，所有功能在本地都能正常工作。登录只是为了启用云端同步功能。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果你需要跨设备同步，可以使用Firebase：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;实时同步&lt;/strong&gt;：在电脑上复制，手机上立即可见&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;本地优先&lt;/strong&gt;：所有数据先存到IndexedDB，即使离线也能用&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;访客模式&lt;/strong&gt;：不登录也能使用，数据只存本地&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;免费额度&lt;/strong&gt;：Firestore提供慷慨的免费额度，个人使用完全够用&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;同步限制：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;✅ 支持：文本、URL、Markdown、代码&lt;/li&gt;
&lt;li&gt;✅ 支持：图片（base64编码，单个文件&amp;lt;1MB）&lt;/li&gt;
&lt;li&gt;❌ 不支持：视频文件（超过1MB限制）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Firestore单个文档大小限制为1MB，因此大文件（如视频）无法同步。这些文件只会保存在本地IndexedDB中。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;扩展建议：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果你有技术能力，可以自行扩展：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;替换为其他云存储（如AWS S3、阿里云OSS）&lt;/li&gt;
&lt;li&gt;集成更多AI提供商（Claude、OpenAI等）&lt;/li&gt;
&lt;li&gt;添加文件压缩和分片上传&lt;/li&gt;
&lt;li&gt;实现增量同步机制&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;项目代码结构清晰，修改起来不难。这也是开源的意义所在。&lt;/p&gt;
&lt;p&gt;同步策略是&amp;quot;双写&amp;quot;：本地变更立即写入IndexedDB，同时上传到Firestore；远程变更会覆盖本地（云端优先）。这样既保证了响应速度，又避免了数据丢失。&lt;/p&gt;
&lt;h3 id="6-图片生成"&gt;6. 图片生成
&lt;/h3&gt;&lt;p&gt;基于Gemini的文字转图像功能：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;标准模式&lt;/strong&gt;：使用免费的Gemini API&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;专业模式&lt;/strong&gt;：使用付费的AI Studio密钥&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;虽然我不常用这个功能，但偶尔需要快速生成一张配图时，还是挺方便的。&lt;/p&gt;
&lt;h3 id="7-语音对话"&gt;7. 语音对话
&lt;/h3&gt;&lt;p&gt;基于Gemini 3.1 Flash Live的实时语音交互。可以直接和AI语音对话，适合开车或不方便打字的场景。&lt;/p&gt;
&lt;h2 id="实际使用场景"&gt;实际使用场景
&lt;/h2&gt;&lt;h3 id="场景1产品文案管理"&gt;场景1：产品文案管理
&lt;/h3&gt;&lt;p&gt;电商工作中，我需要为不同平台准备不同版本的产品描述。以前是复制到记事本，现在直接用ClipGenius：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;复制多个版本的文案&lt;/li&gt;
&lt;li&gt;AI自动生成摘要（比如&amp;quot;短版文案&amp;quot;、&amp;ldquo;详细描述&amp;rdquo;）&lt;/li&gt;
&lt;li&gt;需要时快速搜索和复用&lt;/li&gt;
&lt;li&gt;云端同步，手机上也能查看&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="场景2竞品分析素材收集"&gt;场景2：竞品分析素材收集
&lt;/h3&gt;&lt;p&gt;研究竞品时，我会收集大量素材：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;产品图片：自动分类为image&lt;/li&gt;
&lt;li&gt;广告视频：FB链接自动下载&lt;/li&gt;
&lt;li&gt;落地页链接：保存为URL&lt;/li&gt;
&lt;li&gt;文案描述：保存为text&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所有内容都有AI生成的摘要，后续整理时一目了然。&lt;/p&gt;
&lt;h3 id="场景3代码片段管理"&gt;场景3：代码片段管理
&lt;/h3&gt;&lt;p&gt;虽然我不是专业程序员，但开发ClipGenius的过程中，我也积累了不少常用代码片段：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Firebase配置代码&lt;/li&gt;
&lt;li&gt;React组件模板&lt;/li&gt;
&lt;li&gt;CSS样式片段&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ClipGenius会自动识别代码语言，提供语法高亮，比传统的代码片段工具更直观。&lt;/p&gt;
&lt;h3 id="场景4跨设备工作流需要登录"&gt;场景4：跨设备工作流（需要登录）
&lt;/h3&gt;&lt;p&gt;如果你配置了Firebase并登录，可以实现跨设备同步：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;早上在手机上看到好的广告案例，复制链接&lt;/li&gt;
&lt;li&gt;到公司后，电脑上的ClipGenius已经同步了&lt;/li&gt;
&lt;li&gt;点开链接，分析创意，记录笔记&lt;/li&gt;
&lt;li&gt;笔记也会同步回手机，随时可以查看&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：视频文件不会同步，只会保存在本地。如果你主要处理文本、图片、链接，同步功能会很方便。&lt;/p&gt;
&lt;h2 id="技术实现"&gt;技术实现
&lt;/h2&gt;&lt;h3 id="技术栈"&gt;技术栈
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;类别&lt;/th&gt;
 &lt;th&gt;技术选择&lt;/th&gt;
 &lt;th&gt;原因&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;前端框架&lt;/td&gt;
 &lt;td&gt;React 19 + Vite&lt;/td&gt;
 &lt;td&gt;最新特性，开发体验好&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;样式&lt;/td&gt;
 &lt;td&gt;Tailwind CSS v4&lt;/td&gt;
 &lt;td&gt;快速开发，易于定制&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;AI SDK&lt;/td&gt;
 &lt;td&gt;@google/genai&lt;/td&gt;
 &lt;td&gt;官方SDK，功能完整&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;后端&lt;/td&gt;
 &lt;td&gt;Firebase&lt;/td&gt;
 &lt;td&gt;免费额度足够，实时同步&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;本地存储&lt;/td&gt;
 &lt;td&gt;IndexedDB&lt;/td&gt;
 &lt;td&gt;离线可用，容量大&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;动画&lt;/td&gt;
 &lt;td&gt;motion/react&lt;/td&gt;
 &lt;td&gt;流畅的交互体验&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;国际化&lt;/td&gt;
 &lt;td&gt;i18next&lt;/td&gt;
 &lt;td&gt;支持中英文切换&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="架构设计"&gt;架构设计
&lt;/h3&gt;&lt;p&gt;ClipGenius采用&amp;quot;本地优先&amp;quot;的架构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;用户操作
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;立即写入 IndexedDB（本地）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;异步上传到 Firestore（云端）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;其他设备实时接收更新
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&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;离线可用&lt;/strong&gt;：访客模式完全本地化&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据安全&lt;/strong&gt;：本地和云端双重备份&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="智能内容检测"&gt;智能内容检测
&lt;/h3&gt;&lt;p&gt;内容类型检测是核心功能之一。以代码检测为例：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;detectCodeLanguage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rules&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;RegExp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;][]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sr"&gt;/^\s*\{[\s\S]*\}\s*$/&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;json&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sr"&gt;/^def |^from .+ import/&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;python&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sr"&gt;/^func |^package |:= /&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;go&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sr"&gt;/^fn |^let mut |^impl /&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;rust&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// ... 15+ 种语言规则
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;regex&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lang&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;regex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;lang&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;通过正则表达式匹配语言特征，准确率很高。&lt;/p&gt;
&lt;h3 id="fb视频下载机制"&gt;FB视频下载机制
&lt;/h3&gt;&lt;p&gt;视频下载的实现比较有意思：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;downloadFBVideo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 1. 先尝试直接fetch（会使用系统代理）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;blob&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Direct fetch failed&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 2. 降级到CORS代理
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;proxyUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sb"&gt;`https://corsproxy.io/?&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nb"&gt;encodeURIComponent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;proxyUrl&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;blob&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这种&amp;quot;优雅降级&amp;quot;的策略，保证了在不同网络环境下都能工作。&lt;/p&gt;
&lt;h2 id="如何开始使用"&gt;如何开始使用
&lt;/h2&gt;&lt;h3 id="部署方式"&gt;部署方式
&lt;/h3&gt;&lt;p&gt;ClipGenius是开源项目，需要自行部署。最简单的方式是使用Docker：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 克隆项目&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/wodaixin/ClipGenius.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ClipGenius
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 配置环境变量&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cp .env.example .env
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 编辑 .env，填入 Firebase 和 Gemini API 配置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 使用 Docker Compose 启动&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker-compose up -d
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;访问 &lt;code&gt;http://localhost:8080&lt;/code&gt; 即可使用。&lt;/p&gt;
&lt;h3 id="配置说明"&gt;配置说明
&lt;/h3&gt;&lt;p&gt;需要准备两个API密钥：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Firebase配置（仅需要云同步时配置）&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;访问 &lt;a class="link" href="https://console.firebase.google.com/" target="_blank" rel="noopener"
 &gt;Firebase Console&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;创建新项目&lt;/li&gt;
&lt;li&gt;启用Authentication（Google登录）和Firestore&lt;/li&gt;
&lt;li&gt;复制配置信息到&lt;code&gt;.env&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;注意&lt;/strong&gt;：Firestore免费额度对个人使用完全够用，但视频文件不会同步到云端&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Gemini API密钥（需要AI功能时配置）&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;访问 &lt;a class="link" href="https://aistudio.google.com/app/apikey" target="_blank" rel="noopener"
 &gt;Google AI Studio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;创建API密钥&lt;/li&gt;
&lt;li&gt;填入&lt;code&gt;.env&lt;/code&gt;的&lt;code&gt;VITE_GEMINI_API_KEY&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;如果你只想本地使用，可以不配置Firebase，所有功能都能正常工作。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;详细配置步骤见项目文档。&lt;/p&gt;
&lt;h3 id="为什么不提供在线服务"&gt;为什么不提供在线服务？
&lt;/h3&gt;&lt;p&gt;有人可能会问：为什么不做成SaaS，直接提供在线服务？&lt;/p&gt;
&lt;p&gt;原因有几个：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;成本考虑&lt;/strong&gt;：AI API调用、Firebase存储都需要成本，免费提供不现实&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;隐私保护&lt;/strong&gt;：剪贴板内容可能包含敏感信息，自部署更安全&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;开源精神&lt;/strong&gt;：我希望这是一个思路分享，而不是商业产品&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可定制性&lt;/strong&gt;：自部署可以根据需求修改代码，添加功能&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;项目定位&lt;/strong&gt;：这是个人实验项目，不是成熟产品&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果你有技术基础，自部署其实很简单。如果没有，也可以部署到Google Cloud Run等平台，成本很低（甚至可能在免费额度内）。&lt;/p&gt;
&lt;h2 id="开发过程中的收获"&gt;开发过程中的收获
&lt;/h2&gt;&lt;h3 id="1-ai不是万能的但很有用"&gt;1. AI不是万能的，但很有用
&lt;/h3&gt;&lt;p&gt;最初我对AI的期望很高，以为它能自动完成所有开发工作。实际上：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AI擅长写重复性代码（组件模板、CRUD逻辑）&lt;/li&gt;
&lt;li&gt;AI不擅长架构设计和复杂逻辑&lt;/li&gt;
&lt;li&gt;需要人来把控方向和质量&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但即便如此，AI也大大提升了开发效率。很多以前需要查文档的问题，现在直接问AI就能解决。&lt;/p&gt;
&lt;h3 id="2-开源项目的文档很重要"&gt;2. 开源项目的文档很重要
&lt;/h3&gt;&lt;p&gt;ClipGenius的文档写了很久，包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;快速入门指南&lt;/li&gt;
&lt;li&gt;功能使用说明&lt;/li&gt;
&lt;li&gt;架构设计文档&lt;/li&gt;
&lt;li&gt;API参考手册&lt;/li&gt;
&lt;li&gt;部署指南&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;好的文档不仅帮助用户，也帮助自己理清思路。&lt;/p&gt;
&lt;h3 id="3-模块化设计便于扩展"&gt;3. 模块化设计便于扩展
&lt;/h3&gt;&lt;p&gt;项目采用了清晰的模块化结构：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AI提供商可插拔（Gemini、Minimax）&lt;/li&gt;
&lt;li&gt;存储层可替换（IndexedDB、Firestore）&lt;/li&gt;
&lt;li&gt;组件高度解耦&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这意味着如果你想：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;替换为其他云存储（AWS S3、阿里云OSS）&lt;/li&gt;
&lt;li&gt;添加新的AI提供商（Claude、OpenAI）&lt;/li&gt;
&lt;li&gt;修改UI样式和交互&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;都可以很方便地实现，不需要大规模重构。&lt;/p&gt;
&lt;h3 id="4-用户反馈很宝贵"&gt;4. 用户反馈很宝贵
&lt;/h3&gt;&lt;p&gt;虽然项目刚开源不久，但已经收到一些反馈：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;有人建议支持更多视频平台&lt;/li&gt;
&lt;li&gt;有人希望增加标签功能&lt;/li&gt;
&lt;li&gt;有人想要导出功能&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些反馈让我意识到，工具的价值在于解决真实问题，而不是堆砌功能。&lt;/p&gt;
&lt;h2 id="未来计划"&gt;未来计划
&lt;/h2&gt;&lt;p&gt;ClipGenius还有很多可以改进的地方：&lt;/p&gt;
&lt;h3 id="短期计划"&gt;短期计划
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 支持更多视频平台（YouTube、抖音等）&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 增加标签和文件夹功能&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 支持批量导出&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 优化移动端体验&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="长期计划"&gt;长期计划
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 集成更多AI提供商（Claude、OpenAI等）&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 支持团队协作功能&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 开发浏览器插件&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 开发桌面客户端（Electron）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你对这些功能感兴趣，欢迎贡献代码或提Issue。&lt;/p&gt;
&lt;h2 id="写在最后"&gt;写在最后
&lt;/h2&gt;&lt;p&gt;从Windows被&amp;quot;锁机&amp;quot;，到切换Ubuntu，再到开发ClipGenius，这个过程让我深刻体会到：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;有时候，限制反而是创造的起点。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果不是Windows升级出问题，我可能不会切换到Linux；如果不是Linux缺少好用的剪贴板工具，我可能不会开发ClipGenius；如果不是有了真实的需求，我可能不会深入学习React和AI技术。&lt;/p&gt;
&lt;p&gt;我不是专业的前端开发者，也不是AI专家。但因为有真实的痛点，加上AI的辅助，我也能做出一个还算不错的工具。&lt;/p&gt;
&lt;h3 id="关于项目的现状"&gt;关于项目的现状
&lt;/h3&gt;&lt;p&gt;需要坦诚地说：&lt;strong&gt;ClipGenius还有很多bug，代码也不够完善。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我开源这个项目，主要是想分享一个思路：如何用AI辅助开发，如何将剪贴板、AI、云同步结合起来。至于代码质量、功能完善度，还有很大的提升空间。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关于后续维护：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;我可能不会持续修复公开版本的bug&lt;/li&gt;
&lt;li&gt;即使修复，也可能只在我的私人版本中进行&lt;/li&gt;
&lt;li&gt;如果你发现问题，欢迎提Issue，但不保证会及时响应&lt;/li&gt;
&lt;li&gt;更欢迎你Fork后自己改进，这才是开源的意义&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这不是一个&amp;quot;产品&amp;quot;，而是一个&amp;quot;实验&amp;quot;。如果它能给你一些启发，或者帮你解决一些问题，那就足够了。&lt;/p&gt;
&lt;p&gt;如果你也在用Linux，也苦于找不到好用的剪贴板工具，不妨试试ClipGenius。如果你也想体验OpenClaw、Claude等AI工具的自部署版本，Ubuntu确实是个不错的选择。&lt;/p&gt;
&lt;p&gt;如果你有任何建议或问题，欢迎在GitHub上提Issue或PR。但请理解，这只是我的一个个人项目，不是商业产品。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;开源的意义，不在于代码有多完美，而在于分享思路和可能性。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;项目链接&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GitHub：&lt;a class="link" href="https://github.com/wodaixin/ClipGenius" target="_blank" rel="noopener"
 &gt;github.com/wodaixin/ClipGenius&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;文档：&lt;a class="link" href="https://github.com/wodaixin/ClipGenius/tree/main/docs" target="_blank" rel="noopener"
 &gt;项目文档&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;技术栈&lt;/strong&gt;：React 19 · Vite · Firebase · Gemini · Tailwind CSS · TypeScript&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;许可证&lt;/strong&gt;：MIT License&lt;/p&gt;</description></item></channel></rss>