Scan to Markdown

by swift
5
4
3
2
1
Score: 50/100

Description

用手机扫码拍照,经 LLM 视觉模型把书本/公式/表格内容转成 Markdown,直接写入 Obsidian 笔记。

Reviews

No reviews yet.

Stats

1
stars
60
downloads
0
forks
43
days
8
days
8
days
0
total PRs
0
open PRs
0
closed PRs
0
merged PRs
0
total issues
0
open issues
0
closed issues
6
commits

README file from

Github

Scan to Markdown

English: Scan book pages, formulas, and tables with your phone; a vision LLM converts them into structured Markdown written directly into your Obsidian notes (cursor position or new note). Desktop only. Supports Claude / Gemini / OpenAI / Qwen / GLM / Doubao / Kimi / ERNIE / Hunyuan. Your API key stays local; photos are sent only to your chosen LLM provider; no telemetry.

用手机扫码拍照,把书本、公式、表格等内容转成结构化 Markdown,直接写进 Obsidian 笔记。

手机和电脑连同一个 WiFi,在 Obsidian 里打开扫码面板 → 手机扫码进入拍照网页 → 拍摄或选择图片 → 插件调用视觉大模型转成 Markdown → 写入你当前打开的笔记(或另存为新笔记)。

仅支持桌面端 Obsidian(需要 Node 能力来跑本地 HTTP 服务器;移动端不支持)。 蓝牙不适合此场景(无法传输摄像头画面),统一走同一 WiFi。

功能特性

  • 扫码即拍:手机扫码打开网页,用摄像头连续拍多页,或从相册选图。
  • 拍完两种选择
    • 识别后插入:调视觉大模型转成 Markdown 再写入。
    • 直接插入图片(不识别):跳过模型识别(不需要 API Key、零 token 消耗),原图存为附件并在光标处/新笔记里用 ![[...]] 嵌入。
  • 拍前可修图:点缩略图即可对图片做旋转、明暗、对比度、裁切等基础调整,保存后再上传(识别和直接插图两种模式都生效)。裁切框支持整体拖动、拖边/角微调。
  • 两种写入方式
    • 插入当前笔记光标处(默认):识别结果直接写到当前打开笔记的当前光标位置,纯 Markdown、不附图。
    • 新建独立笔记:每次生成一个独立笔记,可附带原图存档。
  • 公式支持:数学公式用 LaTeX(行内 $...$、块级 $$...$$),自动规范化常见定界符问题,确保在 Obsidian 正常渲染。
  • 结构化排版:保留标题层级、段落、列表、表格、加粗/斜体。
  • 多服务商:内置 Claude / Gemini / OpenAI 及通义千问、智谱 GLM、豆包、Kimi、文心、混元等国产厂商预设;填入 API Key 后可一键拉取该 API 支持的模型列表并在输入框搜索选取。
  • 本地运行:识别逻辑全部在本地插件内,图片仅发往你配置的 LLM 服务商。

工作原理

手机浏览器 ──扫码──> 插件内置网页 (GET /)
   │  getUserMedia 拍照 / 选图,canvas 压缩
   ▼ POST /api/upload(base64 + JSON,带一次性 token)
插件本地 HTTP 服务器(Node http,端口默认 43112)
   │  requestUrl 调视觉模型 API
   ▼
视觉大模型 ──返回 Markdown──>
   ▼
Obsidian:插入当前笔记光标处 / 新建笔记

隐私与安全

  • API Key 存储:仅保存在你本地库的插件配置文件(<vault>/.obsidian/plugins/scan2md/data.json),不会上传到任何第三方服务器,也不包含在插件源码里。
  • 图片数据流向:拍摄的图片以 base64 形式经本地 HTTP 服务发往你选择并配置的 LLM 服务商(如智谱、OpenAI 等)进行识别。除该服务商外,图片不会发往其他任何地方。使用即视为你信任所选服务商的隐私政策。
  • 本地 HTTP 服务:插件在 0.0.0.0:<端口>(默认 43112)起一个本地服务器供手机访问,同一 WiFi 内的设备可连接。上传接口带启动时生成的一次性 token 校验。不建议在公共/不可信网络下开启;如需限制,可在防火墙关闭该端口的外部访问。
  • 无遥测:插件自身不收集、不上报任何使用数据。
  • 网络请求:均通过 Obsidian 官方 requestUrl(手机端网页内用浏览器原生 fetch 上传到本地服务)。

支持的服务商

设置 → 服务商里选择。除 Claude / Gemini 外,其余均走 OpenAI 兼容接口:

服务商 说明
Claude(Anthropic) Anthropic Messages API
Gemini(Google) Gemini generateContent
OpenAI OpenAI 兼容
通义千问(阿里) 百炼 DashScope 兼容
智谱 GLM 智谱开放平台兼容
豆包(字节火山方舟) 火山方舟兼容(需创建推理接入点)
Kimi(月之暗面) Moonshot 兼容
文心(百度) 千帆 OpenAI 兼容 v2
混元(腾讯) 腾讯云混元兼容
自定义 OpenAI 兼容端点 MiniMax / DeepSeek / Ollama / LM Studio 等

填入 API Key 后,点「模型名」右侧的刷新按钮可拉取该 API 当前支持的模型列表并在输入框搜索选取,无需手动查找模型名。

安装

从社区插件市场安装(上架后)

Obsidian 设置 → 第三方插件 → 浏览 → 搜索 "Scan to Markdown" → 安装并启用。

手动安装(从 Release)

  1. 从 GitHub Release 下载 main.jsmanifest.jsonstyles.css
  2. 拷进 <你的库>/.obsidian/plugins/scan2md/
  3. Obsidian 设置 → 第三方插件 → 启用 "Scan to Markdown"。

从源码构建

npm install
npm run build   # 生成 main.js

使用

  1. 插件设置:选择服务商、填 API Key(点模型名旁的按钮拉取模型列表选取)、选写入方式、设置端口(默认 43112)。
  2. 命令面板 → scan2MD: 打开扫码面板(或左侧 Ribbon 图标)。
  3. 手机连同一 WiFi,扫弹窗里的二维码 → 网页拍照/选图 → 「识别并插入」/「直接插入图片(不识别)」/「生成笔记」。
  4. 内容写入当前笔记光标处(或新建笔记,取决于写入方式设置)。

写入当前笔记模式下:拍照前请把光标放在目标位置;若当前没有打开的笔记,手机端会提示先打开一个。

说明与注意

  • 摄像头权限:手机浏览器在局域网 HTTP(非安全上下文)下通常禁用页面内摄像头(getUserMedia)。此时拍照页会自动隐藏页面内拍照区,只保留「从相册 / 拍照选择」系统相机入口,不会出现点了没反应的按钮。
  • 成本:视觉模型按 token 计费,网页端默认把图片压缩到宽度 ≤1600px、JPEG 质量 0.8,可在设置里调整。
  • 多网卡:若扫码地址不是局域网 IP,在扫码面板切换 IP 或手动输入。

开发

  • npm run dev:esbuild watch。
  • npm run typecheck:类型检查。

许可证

MIT