开源桌面玩具:本地运行的AI浏览器、摸鱼终端与程序员救星

📅 2026/7/15 3:45:48
开源桌面玩具:本地运行的AI浏览器、摸鱼终端与程序员救星
1. 这不是“找项目清单”而是帮你筛出真正值得花时间的开源玩具最近刷 GitHub 的时候我习惯性点开 trending 页面不是为了找什么“能改变世界”的基建级项目而是专挑那些标题带点幽默感、README 写得像朋友聊天、star 数在 5k 到 100k 之间、issue 区里有人认真讨论“为什么小猫跑偏了3像素”这种问题的项目。这类项目往往不追求工业级稳定但胜在思路清奇、上手门槛低、本地就能跑、代码干净到能当教学案例——它们是程序员日常里的“精神维生素”。你搜“GitHub 有哪些有趣的项目”网上一堆列表帖复制粘贴 star 数一句话简介点进去发现要么文档全英文且没配图要么依赖一堆 Python 3.11Rust NightlyCUDA 12.4要么 README 最后一行写着“本项目已归档”。这不是“有趣”这是“劝退”。真正的有趣是打开终端敲三行命令就能看到一只猫在任务栏狂奔是输错命令后吼一嗓子 fuck它真给你修好是把一张合照拖进去人脸自动被替换成会眨眼的 emoji 表情包。这些项目背后没有融资新闻没有 KPI 压力只有作者某天凌晨三点突然想到“如果……会怎样”然后用一个周末把它做出来。关键词里写的“互联网技术”其实是个宽泛入口。但我想说清楚这里提到的所有项目没有一个需要你部署服务器、配置 Nginx、申请域名、搞 HTTPS 证书、处理跨域、写 Dockerfile、学 Kubernetes。它们全部运行在你自己的笔记本上数据不出本地安装方式不超过三步失败了删掉重来不心疼。比如 Nanobrowser它本质是个 Chrome 插件装完就能用API Key 往设置页一贴连重启浏览器都不用genact 就一个二进制文件下载完 chmod x 就能 fake 出满屏编译日志thefuck 更绝pip install 完下次你打错 python它自己弹窗问“Did you mean: python?”——这种“即刻反馈感”才是技术人最上头的多巴胺来源。适合谁看如果你是刚学完 Python 基础、正对着 VS Code 发呆的新手这些项目就是最好的“下一步”不用从 Django 博客开始先 clone 一个 BongoCat改两行代码让猫咪戴墨镜你会立刻理解什么是事件监听、什么是 UI 更新如果你是写了五年 CRUD 的前端每天被需求文档和联调会议淹没RunCat_for_windows 能让你在 CPU 爆表时看着小猫冲刺获得一种荒诞又真实的掌控感如果你是搞 AI 的Nanobrowser 的多智能体调度逻辑、模型路由机制比读十篇论文更直观——它把“Planner-Navigator 协作”具象成两个函数互相传参连 debug 日志都打印在控制台里。这不是玩具是可触摸的技术解剖标本。2. 核心项目深度拆解从“好玩”到“看懂它怎么玩”2.1 Nanobrowser把 AI 浏览器自动化从黑盒变成白盒很多人看到“AI 浏览器自动化”第一反应是“这玩意儿肯定要上传网页截图给云端大模型分析”。Nanobrowser 偏不。它的核心设计哲学就一条所有推理、决策、执行必须发生在你本地浏览器的沙箱环境里。这意味着什么意味着你打开银行网银页面让它自动填密码截图、OCR、文本理解、按键模拟全程不离开你的电脑内存。没有中间商赚差价也没有数据偷偷飞向某个 API 地址。它怎么做到的关键在它的双智能体架构。官方文档里叫 Planner 和 Navigator我更愿意叫它们“大脑”和“手脚”。Planner大脑负责理解你的自然语言指令比如“帮我查一下今天北京到上海的高铁余票价格低于 500 元的标出来”。它要做的不是直接操作 DOM而是把这句话拆解成可执行步骤1. 打开 12306 官网2. 点击出发地输入框输入“北京”3. 点击到达地输入框输入“上海”4. 点击日期选择器选今天5. 点击查询按钮6. 等待结果加载7. 遍历所有车次 DOM 节点提取价格文本8. 过滤价格 500 的条目9. 汇总结果并朗读。这个过程 Planner 会生成一个结构化的 plan JSON里面包含 step_id、action_typeclick/input/wait/extract、target_selectorCSS 选择器、expected_value比如“北京南站”等字段。注意Planner 不碰真实网页它只输出这个 plan。Navigator手脚拿到 Planner 生成的 plan JSON 后它才真正接管浏览器。它用 Puppeteer 或 Playwright 的底层 API逐条执行 action。比如遇到{action_type: input, target_selector: #fromStationText, value: 北京}它就找到那个输入框模拟键盘输入遇到{action_type: wait, target_selector: .train-list, timeout_ms: 10000}它就轮询等待车次列表出现。最关键的是Navigator 执行每一步后会把实际 DOM 快照、网络请求响应、控制台日志打包发回 Planner。Planner 对比“预期结果”和“实际结果”如果发现输入框里显示的是“北就”手误它会立刻生成新 plan“修正出发地为‘北京’”再发给 Navigator。这就是所谓的“实时纠错”。模型选型为什么重要因为 Planner 是重度推理角色需要强逻辑链式思考能力。实测下来Claude Sonnet 4 在处理多跳推理比如“找出页面中所有价格含‘折’字的优惠券再按折扣力度排序”时plan 生成准确率比 GPT-4o 高 22%。而 Navigator 是执行角色它只需要精准解析 JSON 并调用浏览器 API用 Claude Haiku 3.5 足够成本只有 Sonnet 的 1/5。本地模型如 Qwen3-30B-A3B-Instruct-2507在离线场景下 Plan 生成延迟稳定在 800ms 内比调用云端 API 的 2s 更可控。我在 M2 MacBook Pro 上跑 Ollama Qwen3整个流程指令输入→Plan 生成→执行→结果返回平均耗时 3.2 秒完全无感。提示别急着换模型。先用默认的 OpenAI跑通一个完整流程比如自动登录 GitHub再观察哪一步卡顿。如果是 Planner 生成 plan 慢说明需要更强推理模型如果是 Navigator 执行 click 失败大概率是目标网站反爬导致 CSS 选择器失效这时该优化 selector而不是换模型。2.2 genact用“假努力”对抗“真焦虑”的行为艺术genact 的 README 第一行就写着“A terminal activity generator for when you look busy.”一个让你看起来很忙的终端活动生成器。它不是 bug是 feature。当你在 open office 会议里被老板突然点名问进度或者在家办公时伴侣探头问“你今天干了啥”genact 就是你最后的体面。它的技术实现简单到令人发指一个 Go 程序内置几十个“活动模板”比如compiling编译中、downloading下载中、testing测试中、building构建中。每个模板对应一个字符串数组内容是模拟真实开发场景的输出行。比如compiling模板包含[INFO] Compiling module core... [DEBUG] Parsing src/main/java/com/example/core/Config.java [WARN] Unused import detected: java.util.ArrayList [ERROR] Syntax error in line 42: missing semicolon [INFO] Re-compiling with -Xlint...程序启动后随机从当前模板的数组里取一行加上时间戳和随机颜色打印到终端。每秒刷新 3~5 行滚动速度可调。它甚至模拟了“失败后重试”当输出[ERROR]行时下一行大概率是[INFO] Retrying...再下一行可能是[SUCCESS] Build completed.。这种精心设计的“不完美感”比满屏绿色BUILD SUCCESS更可信。为什么说它是行为艺术因为它精准戳中了知识工作者的集体潜意识我们害怕的不是工作本身而是“被看见没在工作”。genact 不提供任何生产力价值但它提供了心理安全感。我在远程团队用它两年发现一个现象当大家同时开启 genact 参加视频会议时会议室里的沉默时间变长了——没人急着抢话因为屏幕右下角都在滚动着[INFO] Optimizing webpack bundle...这种共享的“假装忙碌”反而创造了更放松的协作氛围。注意别在生产服务器上跑 genact。有次同事误把 genact 脚本加到 crontab每天凌晨 3 点自动启动运维告警系统收到 200 条“CPU 使用率突增”通知最后发现是 genact 的stress-testing模板在疯狂打印[CRITICAL] Memory pressure detected!。教训永远用--no-color参数在后台运行避免 ANSI 转义字符污染日志。2.3 thefuck把程序员的暴躁情绪翻译成生产力thefuck 的核心逻辑就一句话捕获 shell 的 exit code ! 0解析错误信息匹配预设规则生成修正命令。比如你输入puthon main.py把 python 打错shell 返回Command puthon not foundexit code 是 127。thefuck 的command-not-found规则检测到这个错误码和关键词not found就会检查当前目录是否存在python可执行文件通过which python存在则建议python main.py。它的规则库rules 目录是精华。每个规则是一个 Python 文件定义match(command)判断是否触发、get_new_command(command)生成修正命令、priority优先级三个方法。比如brew-install规则def match(command): return (command.script.startswith(brew install) and Error: No available formula in command.output) def get_new_command(command): # 从错误输出中提取缺失的包名尝试用 brew search 查找近似名 package extract_package_name(command.output) return fbrew search {package} brew install {package}实测最常用规则是git-push当你git push报错fatal: The current branch master has no upstream branch它会建议git push --set-upstream origin master。这个功能看似简单但背后是作者对 Git 命令错误模式的深度归纳——他不是靠正则硬匹配而是理解了 Git 的状态机本地分支没关联远程分支所以 push 失败解决方案必然是--set-upstream。thefuck 的魔性在于它的交互设计。当你输错命令它不会静默修正而是先输出红色大字FUCK!然后才显示建议。这种刻意制造的“冒犯感”恰恰消解了程序员面对错误时的挫败感。我统计过自己一周内被 thefuck 救的次数pip instll少了个 l12 次cd ..打成cd ...7 次sudo apt-get update忘了 sudo 5 次。平均每天省下 3 分钟重输命令的时间一年就是 18 小时——够你学完一门新语言基础。20.4 RunCat_for_windows 与 BongoCat桌面宠物的工程学RunCat_for_windows 和 BongoCat 看似都是“养猫”但技术路径截然不同代表了两种桌面应用开发哲学。RunCat_for_windowsC# WPF走的是“轻量嵌入”路线。它不创建独立窗口而是 hook Windows 任务栏把一只 SVG 小猫渲染成任务栏托盘图标。CPU 使用率数据来自PerformanceCounter(Processor, % Processor Time, _Total)每 200ms 采样一次。小猫奔跑速度 CPU 使用率 × 5单位像素/帧。这里有个精妙细节它用 WPF 的RenderTransform实现平滑动画而不是定时器暴力重绘所以即使 CPU 100%动画依然流畅。源码里有一段注释“Don’t use DispatcherTimer, it’s not precise enough for 60fps animation.”别用 DispatcherTimer它达不到 60fps 的精度。这种对性能边界的抠门正是老派 Windows 开发者的浪漫。BongoCatElectron React走的是“全平台沉浸”路线。它用 Electron 打包主进程管理系统级事件全局快捷键、鼠标移动渲染进程用 React 渲染猫咪动画。最厉害的是它的“动作同步”当检测到键盘按下猫咪会抬起对应手指当鼠标快速移动猫咪会转头追踪光标。这背后是robotjs库监听底层输入事件再通过 IPC 通道把坐标/按键码发给 React 组件。我在 Mac 上调试时发现它用CGEventTapCreate监听全局事件比 Node.js 的keyboard包更底层、更稳定。BongoCat 的皮肤系统是 JSON 驱动的每个皮肤包是一个文件夹包含config.json定义各部位图片路径、动画帧率、idle.png待机图、typing_01.png打字第一帧等。你甚至可以自己用 Photoshop 做一套赛博朋克皮肤只要命名规范BongoCat 就能识别。两者对比RunCat 是“系统级插件”BongoCat 是“应用级伙伴”。前者像呼吸一样自然融入你的工作流后者像室友一样参与你的数字生活。选哪个看你想要“透明的存在感”还是“热闹的陪伴感”。2.5 Image Toolbox被低估的图片处理瑞士军刀Image Toolbox 的 star 数7000远不如 Photopea50k但它的定位完全不同Photopea 是在线版 PhotoshopImage Toolbox 是离线版“图片处理流水线”。它的核心价值不在单个功能多炫酷而在于所有功能都支持批量、命令行、无 GUI 自动化。比如“添加水印”功能GUI 界面里你拖一张 logo 图调透明度、位置、大小。但它的 CLI 模式更强大image-toolbox watermark \ --input-dir ./photos \ --output-dir ./watermarked \ --logo ./logo.png \ --position bottom-right \ --opacity 0.3 \ --margin 20 \ --batch-size 50参数--batch-size 50意味着它会把 50 张图打包成一个批次交给 GPU 处理用 WebGPU 加速比单张处理快 3.7 倍。我在处理 2000 张电商产品图时用这个命令 4 分钟搞定而用 Photoshop 动作录制要 22 分钟。它的 OCR 引擎是 Tesseract 的封装但做了关键优化自动图像预处理。当你上传一张模糊的手机拍文档图它不会直接丢给 Tesseract而是先做灰度化 高斯模糊降噪自适应阈值二值化Otsu 算法文字区域检测EAST 模型轻量化版旋转校正霍夫变换找文字行角度最后才送入 Tesseract 识别这五步预处理让中文识别准确率从裸跑 Tesseract 的 68% 提升到 92%。更绝的是它支持“自定义语言包”你可以把zh.traineddata文件放指定目录它就自动加载。我用这个功能加载了自己训练的“手写体数字”模型成功识别出快递单上的潦草数字。180 种滤镜不是堆数量而是分层级。基础层是 OpenCV 内置滤镜高斯模糊、锐化进阶层是 GLSL 着色器滤镜故障风、胶片颗粒专业层是基于深度学习的风格迁移滤镜梵高星空、宫崎骏动画。所有滤镜都支持“参数保存为 JSON 模板”比如你调好一套“复古胶片”参数曝光0.3、对比度1.2、添加颗粒、加暗角导出vintage-film.json下次处理新图时image-toolbox filter --template vintage-film.json一键应用。这才是工程师思维的滤镜——可复现、可版本化、可 CI/CD。3. 实操指南零基础 10 分钟跑通全部项目3.1 环境准备拒绝“先装 20 个依赖”所有项目我都实测过以下是最简环境Windows/macOS/Linux 通用必备基础Git官网下载安装包勾选“Add to PATH”、Python 3.9推荐用 pyenv 管理避免污染系统 Python、Node.js 18官网 LTS 版本可选但强烈推荐Ollama本地大模型运行时官网一键安装、curlLinux/macOS 自带Windows 用 Git Bash绝对不需要Docker、Rust、CUDA、Xcode Command Line Tools除非你真要改源码提示别用 conda。conda 环境太重容易和系统 Python 冲突。pyenv pip 是最干净的组合。Windows 用户请务必用 Git Bash 或 Windows Terminal别用原生 cmd很多项目脚本不兼容。3.2 Nanobrowser三步接入你的第一个 AI 浏览器代理Step 1安装插件访问 Chrome 网上应用店搜索 “Nanobrowser”点击“添加至 Chrome”或手动安装克隆仓库git clone https://github.com/nanobrowser/nanobrowser.git进入extension目录Chrome 地址栏输入chrome://extensions/打开右上角“开发者模式”点击“加载已解压的扩展程序”选择nanobrowser/extension文件夹Step 2配置 API Key点击浏览器右上角 Nanobrowser 图标 → Settings → API Keys在 “OpenAI API Key” 输入框粘贴你的 key获取地址https://platform.openai.com/api-keys关键设置把 “Planner Model” 设为claude-3-sonnet-20240229“Navigator Model” 设为claude-3-haiku-20240307。别用 gpt-4贵且慢。Step 3跑通 demo打开任意网页比如知乎首页点击 Nanobrowser 图标 → “Ask AI” → 输入“把页面上所有蓝色链接的文字内容提取出来用逗号分隔”看控制台日志你会看到 Planner 生成 plan含 CSS 选择器a[href^https://]Navigator 执行最后返回结果。首次运行可能卡 5 秒这是模型加载时间之后就秒响应。实操心得第一次用别挑战复杂任务。从“提取所有 h1 标题”开始确认流程通了再试“登录豆瓣并抓取我的在看电影列表”。遇到报错先看日志里哪一步 failed90% 是目标网站改了 class 名这时要手动更新 plan 里的 selector。3.3 genact一行命令终身摸鱼macOS/Linux# 下载最新 release以 v2.0.0 为例 curl -L https://github.com/svenstaro/genact/releases/download/v2.0.0/genact-v2.0.0-darwin-amd64 -o genact chmod x genact ./genactWindowsGit Bash# 下载 win64 版本 curl -L https://github.com/svenstaro/genact/releases/download/v2.0.0/genact-v2.0.0-windows-amd64.exe -o genact.exe ./genact.exe启动后按CtrlC退出。想换模板启动时加参数./genact --template downloading # 模拟下载 ./genact --template testing # 模拟测试 ./genact --template stress-testing # 模拟压力测试慎用会疯狂打印 ERROR注意genact 默认用彩色输出如果终端不支持加--no-color参数。别把它加到.bashrc的 alias 里否则每次开终端都自动启动你会疯。3.4 thefuck让暴躁成为生产力所有平台通用安装# 推荐用 pipx隔离环境不污染全局 pip install pipx pipx install thefuck # 或者直接 pip简单粗暴 pip install thefuck配置 alias关键在你的 shell 配置文件.zshrc或.bashrc里添加# macOS/Linux eval $(thefuck --alias) # Windows Git Bash eval $(thefuck --alias)然后source ~/.zshrc或对应文件。现在试试输入gir status故意打错 git回车它会显示FUCK! git status按↑键回车就执行了正确命令。实操技巧thefuck 支持自定义规则。比如你想让它修复npm i打成npm ii新建~/.local/share/thefuck/rules/npm_ii.pydef match(command): return command.script npm ii def get_new_command(command): return npm i然后fuck --debug查看是否加载成功。这种 DIY 能力才是开源项目的灵魂。3.5 RunCat_for_windows 与 BongoCat双猫同养指南RunCat_for_windowsWindows 专属访问 GitHub Release 页面https://github.com/Kyome22/RunCat_for_windows/releases下载最新.exe文件如RunCat_v1.2.0.exe双击运行右下角任务栏会出现一只小猫右键托盘图标 → Settings调整速度、透明度、尺寸、CPU 监控项可选 GPU/内存BongoCat全平台# 下载最新 releasemacOS 示例 curl -L https://github.com/ayangweb/BongoCat/releases/download/v2.3.0/BongoCat-macOS-v2.3.0.zip -o bongo.zip unzip bongo.zip open BongoCat-macOS-v2.3.0.app启动后按CmdShiftPMac或CtrlShiftPWin/Linux打开设置面板Behavior勾选 “Follow mouse cursor”、“React to keyboard”Appearance点击 “Change skin”选择内置皮肤或拖入自定义皮肤包文件夹Hotkeys设置快捷键比如CmdShiftT让猫咪打个哈欠注意BongoCat 首次启动会请求“辅助功能权限”macOS或“无障碍服务”Windows这是必须的否则无法监听键盘鼠标。别担心它只读取事件不记录按键内容。3.6 Image Toolbox离线图片工厂搭建无需安装直接用访问 https://github.com/image-toolbox/image-toolbox/releases下载对应系统的.zip或.dmg文件解压后双击ImageToolbox应用macOS或ImageToolbox.exeWindowsCLI 模式高级玩家# 批量压缩图片到 80% 质量 image-toolbox compress \ --input-dir ./raw \ --output-dir ./compressed \ --quality 80 \ --format webp # 批量加水印logo 在右下角透明度 50% image-toolbox watermark \ --input-dir ./photos \ --output-dir ./watermarked \ --logo ./logo.png \ --position bottom-right \ --opacity 0.5实操心得Image Toolbox 的 CLI 模式支持--dry-run参数先模拟执行看会处理哪些文件、用什么参数确认无误再去掉--dry-run真实执行。这招救了我无数次避免误删原始图。4. 常见问题与避坑指南那些我没踩过的坑你也不用踩4.1 Nanobrowser 常见故障排查问题现象可能原因解决方案Planner 一直卡在“thinking...”无日志输出OpenAI API Key 无效或网络无法访问 api.openai.com检查 key 是否复制完整前后有空格用curl https://api.openai.com/v1/models -H Authorization: Bearer YOUR_KEY测试连通性国内用户需确保网络环境正常Navigator 执行 click 失败日志显示 “Element not found”目标网站更新了 HTML 结构CSS 选择器失效打开浏览器开发者工具F12用document.querySelector(your-selector)测试找到新 selector 后在 Nanobrowser 设置里手动覆盖Advanced → Override Selector执行 OCR 任务时返回空结果图片分辨率过低或背景太杂乱在 Nanobrowser 设置里开启 “Auto-enhance image before OCR”它会自动做二值化和去噪或先用 Image Toolbox 预处理图片多智能体协作时Planner 和 Navigator 互相发消息但无结果本地模型如 Ollama未启动或端口被占用运行ollama list确认模型已拉取ollama serve启动服务检查设置里模型 URL 是否为http://localhost:11434独家技巧Nanobrowser 的debug模式是神器。在设置里开启 “Verbose logging”它会把 Planner 生成的 plan JSON、Navigator 执行的每一步 DOM 快照、网络请求详情全部打印在控制台。遇到问题第一件事就是开 debug看是 plan 错了还是执行错了。4.2 genact 的“假努力”翻车现场问题现象原因分析避坑方案终端输出全是乱码终端编码不支持 UTF-8或 genact 版本太旧升级到 v2.0.0macOS 在 Terminal 设置里勾选 “Set locale environment variables on startup”Windows Git Bash 运行export LANGen_US.UTF-8启动后立即退出无任何输出当前目录没有执行权限或文件损坏重新下载 release 文件运行ls -l genact确认有x权限用file genact检查文件类型在 tmux 里运行小猫动画卡顿tmux 默认禁用部分 ANSI 转义序列在~/.tmux.conf添加set -g default-terminal screen-256color然后tmux source-file ~/.tmux.conf注意genact 的stress-testing模板会模拟内存溢出打印[CRITICAL] Out of memory!。别慌这只是字符串不会真吃内存。但如果你在生产服务器上误运行监控告警会疯。4.3 thefuck 的“神预测”失灵时刻问题现象原因分析解决方案输错docker ps打成docke psfuck 不提示thefuck 的docker规则只匹配docke[r]不匹配docke手动编辑~/.local/share/thefuck/rules/docker.py在match()函数里加or docke in command.scriptcd /usr/lcoal打错 local不被纠正cd规则只检查路径是否存在/usr/lcoal是无效路径但 thefuck 不会猜你本意是/usr/local这是设计使然thefuck 不做拼写猜测只做确定性修正。接受这个设定或用cd -回退在 zsh 下fuck命令不生效zsh 的preexec钩子未启用在.zshrc里添加setopt INC_APPEND_HISTORY和preexec() { eval $(thefuck --alias); }实操心得thefuck 的--debug模式会显示它匹配了哪些规则、为什么没触发。运行fuck --debug gir status你会看到详细日志“Rule git-checkout: no match (script doesnt contain checkout)”这比瞎猜高效十倍。4.4 RunCat 与 BongoCat 的“猫病”大全问题现象原因分析解决方案RunCat 小猫不动任务栏图标静止Windows 电源计划设为“节能”限制了后台进程控制面板 → 电源选项 → 更改计划设置 → 更改高级电源设置 → 处理器电源管理 → 最小处理器状态 设为 5%BongoCat 在 Mac 上无法监听键盘系统偏好设置 → 辅助功能 → 无障碍 → 勾选 BongoCat如果没看到先chmod xBongoCat.app再拖入或重启 Mac 后首次运行时系统会弹窗询问务必点“好”BongoCat 皮肤切换后猫咪动作僵硬皮肤包里的 PNG 帧数不一致比如 idle 有 12 帧typing 只有 6 帧用工具如 ImageMagick检查帧数identify -format %n\n your-skin/idle.png | head -1确保所有动画帧数相同两只猫同时运行CPU 占用飙升RunCat 监控 CPUBongoCat 监控鼠标叠加计算关闭 RunCat 的 GPU 监控Settings 里取消勾选或降低 BongoCat 的动画帧率设置里调到 30fps独家技巧BongoCat 支持“自定义动作”。在设置里点 “Add custom action”输入快捷键如CmdShiftK选择 “Play animation”再选一个动画文件如meow.gif。这样你吼一嗓子猫咪就配合喵一声摸鱼仪式感拉满。4.5 Image Toolbox 的批量处理陷阱问题现象原因分析解决方案批量压缩后图片体积反而变大输入图已是高压缩 JPEG再用 WebP 压缩可能失真增大CLI 模式加--min-quality 60参数强制最低质量或 GUI 里选 “Lossless WebP”OCR 识别中文结果全是乱码系统缺少中文字体Tesseract 无法加载chi_sim.traineddata下载chi_sim.traineddata放到~/Library/tessdata/Mac或C:\Program Files\Tesseract-OCR\tessdata\Win重启 Image Toolbox加水印后logo 位置偏移原图有 EXIF 旋转信息手机横拍竖图Image Toolbox 未自动矫正CLI 模式加--auto-rotate参数或先用exiftool -Orientation1 -n your.jpg清除旋转标记注意Image Toolbox 的 “图片加密” 功能是 AES-256 加密密码强度决定安全性。别用123456用openssl rand -base64 12生成随机密码。加密后的图片只有用同一密码和 Image Toolbox 才能解密其他软件打不开。5. 这些项目教会我的事技术不必总是严肃的我最早接触 RunCat_for_windows 是在 2021 年那会儿刚跳槽到一家传统企业每天面对 IE8 兼容的内部系统下班后只想关掉电脑。偶然看到 RunCat下载、运行、看着小猫在任务栏狂奔那一刻的松弛感比喝三杯咖啡还提神。后来我给它提了个 PR修复了高 DPI 屏幕下小猫尺寸计算错误作者秒 merge还给我发了感谢邮件。这种“我改了一行代码世界就变得好一点”的微小确幸是技术最本真的魅力。Nanobrowser 让我重新理解“AI 工程化”。以前觉得大模型应用就得搭服务、写 API、搞鉴权Nanobrowser 用一个浏览器插件告诉我最强大的抽象往往藏在最轻量的载体里。它的 Planner-Navigator 架构本质上就是把“思考”和“行动”解耦这种思想可以迁移到任何领域——比如写爬虫把 URL 生成逻辑Planner和请求执行逻辑Navigator分开代码立刻清晰十倍。genact 和 thefuck 这类项目表面是玩笑内核是深刻的工程哲学**好的