Obsidian 图片自动上传:PicGo-Core 对接 Chevereto 图床实战
本文最后更新于 128 天前,其中的信息可能已经有所发展或是发生改变,如有失效可到评论区留言。
文章摘要
为解决Obsidian插件在macOS下使用PicGo App上传图片至Chevereto图床时频繁报错的问题,通过切换至PicGo-Core实现稳定上传。该方案采用本地安装方式规避系统权限限制,利用Node.js核心引擎直接调用Chevereto API,省去跨应用通信环节。配置流程包括创建自定义目录、手动初始化config.json、交互式设置上传参数,并通过curl与PicGo-Core双重验证图床接口可用性。最终实现Obsidian“image auto upload”插件无缝调用,提升写作时图片上传的稳定性与自动化程度,尤其适用于依赖本地图床容灾备份的博客写作场景。
Qwen3-14B · 2026-06-18

1 前言

我平时主要在 macOS 下使用 Obsidian(Markdown)来写博客,写作过程中不可避免要插入图片,因此图床方案就成了绕不开的问题。

我的博客最终的图床托管在 Cloudflare R2 上,但为了实现 容灾备份,实际流程稍微复杂一些:我在写作时,图片会先被上传到家庭数据中心自建的 Chevereto 图床(参考文章:奇技淫巧系列 chevereto+PicGo+Obsidian实现高效的图床图片上传及图片url获取),然后再通过 rclone 将 Chevereto 图床里的图片同步复制到 R2(参考文章:家庭数据中心系列 使用rclone和cloudflare R2打造chevereto的异地容灾图床)。

换句话说,我本地写作时一直依赖的是 本地网络中的Chevereto 图床,而 如何把 Obsidian 插入的图片顺畅地上传到 Chevereto 并生成链接,就要靠 Obsidian 里的 Image Auto Upload 插件配合 PicGo App 来完成:

image.png

关键角色就是这个Image Auto Upload插件,如果在插件设置里把默认上传器选为 “PicGo(App)”(见上图),大部分情况下都能正常使用。但问题是,偶尔会莫名报错:

upload failed, check dev consol

如下所示:

image.png

这个问题并不少见,Google 一搜一大堆类似反馈:
image.png

常见的“解决办法”无非就是:重启 Obsidian,禁用/启用插件,甚至重启整个系统,或者干脆把 PicGo App 卸载重装。但本质上,这是 Image Auto Upload 插件和 PicGo App 之间通信不稳定导致的,我自己之前遇到过几次,重启一下 macOS 就能恢复,所以也懒得深究。

然而,最近在升级m4pro macmini OS版本到Tahoe 26之后,这个熟悉的 bug 又出现了:“upload failed, check dev consol”。说实话,这种小毛病已经不止一次发生了,每次要么重启,要么重新安装插件,搞得挺烦的。既然如此,我干脆不和 PicGo App 继续较劲了——直接换成插件支持的另一种上传模式:PicGo-Core

这种方式完全绕过桌面 App,不依赖本地环回接口,而是直接调用 Node.js 的核心上传逻辑,更纯粹,也少了中间可能出问题的环节。


💡 补充说明:

PicGo-Core 可以理解为 PicGo 的“命令行核心版”:它不是一个带界面的桌面应用,而是一个基于 Node.js 的上传引擎,所有图床上传逻辑都由它来执行,插件只需直接调用即可。

相比之下,PicGo App 更像是 PicGo-Core 的 UI 封装层,插件要通过本地环回接口与它通信。这就带来两个问题:一是某些系统/浏览器会限制本地通信;二是通信链条多了一层,更容易出错。

所以,PicGo-Core 的优势就是:轻量、直接、不依赖本地 App,甚至可以在无头服务器环境中运行,稳定性也更高。


2 macos下安装PicGo-Core

2.1 概述

一般来说,全局安装(sudo npm install -g picgo)的好处是:命令随处可用,不管在哪个目录都能直接敲 picgo;但缺点也很明显,配置路径、依赖路径都散落在系统目录里,一旦升级系统或者 Node.js 版本,有可能出现权限问题或者路径找不到。

而本地安装(安装到用户目录,比如 ~/.picgo/),则更“自给自足”一些:配置文件、插件、核心程序都集中在一个地方,哪怕系统升级、权限规则变化,也不会受到太大影响。唯一的“代价”就是你得记得调用它的完整路径(例如 ~/.picgo/node_modules/.bin/picgo),不过这个完全可以通过插件设置或 alias 来解决。

特别是在 M 系列芯片的 macOS(比如我这台 m4pro Mac mini) 上,全局安装经常会踩坑:

  • 系统对 /usr/local/lib 等目录的写入权限收得更紧,sudo npm install -g 要么直接报错,要么装上了但 Obsidian 插件找不到。
  • Obsidian 插件运行在 Electron 沙箱里,有时候读取不到你 shell 环境的全局 PATH,导致明明装了,插件还是报“找不到 picgo”。
  • 即便勉强能跑,也容易出现升级 Node 或 macOS 后全局路径失效的情况。

比如:

image.png

所以,踩了半天”全局安装”的坑之后,我最终选择了本地安装,这样更稳,也更符合 macOS 这种“逐步收紧权限”的趋势。

2.2 安装brew及node.js(可选)

由于需要用到npm来安装picgo-core及相关插件,而npm是node.js的包管理器,默认macOS并未集成node.js,所以需要先安装。

  1. 安装brew(可选,已经安装可跳过)

macos直接在其github上的官方页面链接(https://github.com/Homebrew/brew/releases/download/)下载pkg安装包,当前最新版是4.5.15版本,下载后直接点击安装即可。

注:我习惯用brew来安装node.js,如果已经安装了brew,可以跳过该步骤。

  1. 安装node.js

运行如下命令即可安装node.js的v20版:

brew install node@20

目前 PicGo 的部分依赖仍基于 CommonJS,而 Node.js 新版本对 ESM 模块加载策略更加严格,在 Node 22+ 环境下可能出现 ERR_REQUIRE_ESM 错误,因此使用 Node.js 20 LTS 版本可以避免该问题。

如果你已经安装了 Node 22+,且遇到 PicGo 启动时报错:ERR_REQUIRE_ESM,解决方法是安装 Node.js 20 LTS,可以参考如下步骤:

brew install node@20
brew link node@20 --force --overwrite

然后使用以下步骤确认:

node -v
which node

如果成功,会变成类似以下输出:

v20.20.1
/opt/homebrew/bin/node

2.3 本地安装方式安装picgo-core及chevereto插件

  1. 创建目录

PicGo-Core 的本地模式建议放在用户主目录下的 .picgo 文件夹:

mkdir ~/.picgo
  1. 创建一个合法的 package.json文件

直接在~/.picgo文件夹中新建一个package.json 文件:

touch ~/.picgo/package.json

内容如下:

{
  "name": "picgo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "type": "commonjs",
  "dependencies": {
    "picgo": "^1.5.9",
    "picgo-plugin-chevereto": "^1.1.0"
  }
}

注:之所以不使用npm init -y命令来初始化package.json,是因为新版 Node.js / npm(比如 Node 24 搭配 npm 11)下,如果 package.json 的 name 字段是以点号开头的(即 .picgo),就会被判定为非法名字,直接导致 npm init -y 报错类似:”Invalid name: ‘.picgo'”,而Obsidian要能正常配合PicGo-Core却要求PicGo的主目录必须是~/.picgo(这是非常深的一个坑,折腾了我好几天~),所以只能手动创建package.json文件了。

  1. 安装 PicGo-Core 和插件

在这个目录下安装 PicGo-Core 以及需要的插件(这里以 Chevereto 插件为例):

cd ~/.picgo
npm install picgo picgo-plugin-chevereto

image.png

  1. 确认安装路径

安装完成后,PicGo-Core 的执行文件会在~/.picgo/node_modules/picgo/bin/picgo,可用以下命令确认:

ls -l ~/.picgo/node_modules/picgo/bin/picgo

image.png

之后在 WordPress 插件 image auto upload 的设置里,只要指定这个路径,就能直接调用 PicGo-Core 上传图片。

2.4 设置”picgo-plugin-chevereto”插件

在本地安装了 PicGo-Core 并引入 picgo-plugin-chevereto 插件后,需要配置插件的上传器才能上传图片到 Chevereto 图床。通过 PicGo-Core 提供的命令行工具,可以交互式地设置上传器信息。


值得注意的是,理论上运行 picgo set uploader chevereto 命令时,PicGo-Core 会通过交互提示让你输入 Chevereto 的 API URL 和 Key,并将配置自动生成或更新到配置文件(config.json),同时写入 PicGo-Core 的插件信息,从而完成上传器的初始化。但在某些环境下,例如使用非默认目录(如 ~/picgo 而非 ~/.picgo)或者其他系统差异,这条命令可能无法正常生成配置文件,报出 “No uploader named chevereto” 的错误,类似于:

mac_1759281205765.png

在这种情况下,可以先手动创建一个合法的 config.json 文件(有点脱裤子放屁的感觉~),然后在命令中显式指定配置文件路径,这样 PicGo-Core 才能正确加载插件和上传器,保证 Obsidian 插件调用时不会出问题。


先创建一个config.json配置文件:

touch ~/.picgo/config.json 

配置文件格式以我自己使用的进行示范(url和key后面的内容可以是真实的,也可以不是,因为这里config.json配置文件的目的主要是只是为了让picgo set uploader chevereto命令能正常进入交互式设置流程):

{
  "picBed": {
    "uploader": "chevereto",
    "chevereto": {
      "url": "http://192.168.10.99:8090/api/1/upload",
      "key": "1234567890",
      "source_param": "",
      "url_param": ""
    },
    "current": "chevereto"
  },
  "picgoPlugins": {
    "picgo-plugin-chevereto": true
  }
}

然后使用以下命令格式设置上传器:

~/.picgo/node_modules/.bin/picgo set uploader chevereto --config ~/.picgo/config.json

执行后,会依次提示输入 Chevereto 的 API 地址、API Key、上传文件字段名等信息:

image.png

注:在交互式设置过程中,如果在config.json文件中url和key字段后面的内容是真实信息,那全程只需要回车即可;如果不是真实信息,那么设置过程就需要手动输入真实内容。

2.5 PicGo-Core上传功能验证

在完成 PicGo-Core 的安装和插件配置之后,第一步是验证图床接口是否可以正常工作。可以先使用 curl 命令直接调用 chevereto API 上传一张图片,确认服务端接口没问题,以我的chevereto图床地址为例(第一个-F后面的xxxxxxxx是chevereto图床相册对应的key):

curl -X POST "http://192.168.10.99:8090/api/1/upload" \
  -F "xxxxxxxx" \
  -F "source=@/Volumes/data/ishot/chatgpt.png"

如果上传成功,终端会返回类似下面的 JSON 数据,其中包含图片的 URL(实际的URL是正则格式):

{
  "success": true,
  "image": {
    "url": "http://192.168.10.99:8090/images/2025/09/19/chatgp.png",
    ...
  }
}

如下图:

image.png

确认 API 可用后,就可以用 PicGo-Core 进行上传测试了。因为我们是本地安装到 ~/.picgo/,所以命令如下:

~/.picgo/node_modules/.bin/picgo upload /Volumes/data/ishot/chatgpt.png --config ~/.picgo/config.json

如果 PicGo-Core 配置正确,上传完成后会在终端显示成功提示,并返回图片的 URL类似如下:

[PicGo SUCCESS]: 
http://192.168.10.99:8090/images/2025/09/19/chatgptc13e706aae1fefad.png

如下图:

image.png

通过这两步验证,我们可以确认:

1、 Chevereto API 正常工作

2、PicGo-Core 以及 picgo-plugin-chevereto 插件配置正确,能够成功上传图片

3、后续 Obsidian “image auto upload”插件调用 PicGo-Core 上传时,也可以顺利生成图片 URL


这里先用 curl 测试 API 的目的,是为了确认图床接口本身可用,排除网络或 Chevereto 配置问题。因为 PicGo-Core 实际上传也依赖同样的 API,如果 curl 测试都失败了,PicGo-Core 无论怎么配置都不会成功。之所以要加这一步,是因为之前部署chevereto图床的m1 macmini升级到Tahoe 26之后,因为内置256g硬盘空间不够导致docker desktop for mac工作异常,恰好引起了chevereto容器的问题,导致我研究了半天。

接着用 PicGo-Core 命令行上传,验证插件和本地核心程序是否正确运行,并能生成 Obsidian 所需的图片 URL。这个顺序也方便排错:先确认服务端正常,再确认本地 PicGo-Core 配置无误,从而保证后续 Obsidian 插件调用时不会因为接口或本地环境问题失败。


2.6 obsibian “image auto upload”插件设置

至此,还剩最后一步:修改obsibian 中的”image auto upload”插件设置,需要修改3个地方:

1、默认上传器改为”PicGo-Core”

2、Picgo-Core路径填写本地安装的Picgo-core的路径:

~/.picgo/node_modules/.bin/picgo

3、以及打开”修改PATH”选项

如下图:

image.png

至此,大功告成,又可以愉快的直接ishot截图然后直接粘贴到obsidian中了。

3

4 后话

这次折腾其实是个典型例子:一个看似不起眼的小问题,背后却牵扯到插件调用方式、应用间通信、系统安全策略等一连串的细节。以前我写作时用 PicGo App 配合 Obsidian 插件,虽然偶尔也会报错,但重启一下大多能解决;然而这次升级到Tahoe 26后又出现 “upload failed, check dev consol”报错,让我终于下定决心不再拖延,认真把整条链路梳理清楚,并寻找一种更稳妥的替代方案。

最终换用 PicGo-Core,反而让流程变得更清爽:没有跨应用的 API 通信,也不用依赖本地环回接口,所有逻辑都由 Node.js 核心程序直接执行。这样一来,Obsidian 插件只需要调用核心功能,稳定性和可控性都提升了一个层级。

从定位上讲,PicGo App 更适合习惯可视化配置、拖拽上传的用户;而 PicGo-Core 更贴合命令行用户和自动化场景。严格来说,两者并无绝对优劣之分,但就我自己的体验而言,PicGo-Core 的稳定性和可控性明显更胜一筹,尤其是在写作这种高频、连续的场景里,少折腾、少报错才是最重要的。

对我来说,写作的节奏比什么都重要,工具应该是安静而可靠的存在。现在这套 Obsidian + PicGo-Core + Chevereto 的链路跑顺了,至少在可预见的未来,不会再因为「upload failed」突然打断我的思路。

折腾到最后,反而印证了一个老道理:有时候,与其不断修补旧方案,不如换个角度,干脆直接走一条更稳的路


顺便提一下,Windows 下的部署和配置 PicGo-Core 以及 Obsidian 插件步骤大体相似,先安装 Node.js,然后进行本地或全局安装、插件配置和上传测试即可。但 Windows 环境可能会遇到一些小坑,例如路径分隔符、管理员权限、防火墙或杀毒软件阻止 Node.js 网络访问等。由于我平时不在 Windows 上主力写作,也懒得去验证这些细节,所以本文就不展开 Windows 平台的操作了。相比之下,macOS 本地安装 PicGo-Core 更方便、少折腾,这也是本文选择实践平台的原因。


📌 内容结构提示:
这篇内容属于「博客知识地图」的一部分,你可以从这里查看完整内容路径: 博客知识地图
查看相关分类·3个匹配
📎 相关文章
分享这篇文章
博客内容均系原创,转载请注明出处!博客的RSS地址为:https://blog.tangwudi.com/feed,欢迎订阅;如有需要,可以加入Telegram群一起讨论问题。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
       

👋 欢迎来到“无敌的个人博客”

这里主要围绕以下方向展开长期探索:

🧱 个人数字基础设施与博客系统构建
☁️ Cloudflare 与网络架构实践
🧠 AI 与知识系统探索
🛡️ 网络安全与访问优化
🎵 音乐与声音认知
👁️ 认知视角与世界观