把 PDF、Office、图片等文件批量转成 Markdown
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add AlbertZJ/dsh-markitdown该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · tool
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 5 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件
查看扫描证据(共 18 处,展示前 18 条)
- 读取本地文件lib/skills.js:27
for (const name of readdirSync(assetRoot).sort()) { - 读取本地文件lib/skills.js:30
if (!statSync(directory).isDirectory() || !existsSync(path)) continue; - 读取本地文件lib/skills.js:30
if (!statSync(directory).isDirectory() || !existsSync(path)) continue; - 读取本地文件lib/skills.js:49
const { description } = parseSkill(readFileSync(path, "utf8"), path); - 读取本地文件lib/skills.js:76
const content = parseSkill(await readFile(locator, { - 写入本地文件lib/tools.js:233
await mkdir(dirname(outputPath), { recursive: true }); - 写入本地文件lib/tools.js:234
await writeFile(outputPath, markdown, "utf8"); - 写入本地文件lib/tools.js:264
await mkdir(dirname(outputPath), { recursive: true }); - 写入本地文件lib/tools.js:265
await writeFile(outputPath, result.markdown, "utf8"); - 执行外部命令来自配置/变量lib/runner.js:199
child = spawn(connection.command, args, { - 写入本地文件lib/runner.js:439
await writeFile(target, bytes); - 删除本地文件lib/runner.js:446
await rm(directory, { - 读取本地文件lib/runner.js:524
size = (await stat(source)).size; - 写入本地文件lib/runner.js:560
await writeFile(effectiveSource, bytes); - 读取本地文件lib/runner.js:565
const size = (await stat(source)).size; - 删除本地文件lib/runner.js:577
if (downloadedDir !== void 0) await rm(downloadedDir, { - 读取本地文件lib/runner.js:649
const resolved = await realpath(head); - 读取本地文件lib/runner.js:673
const [rootReal, targetReal] = await Promise.all([realpath(root), realpathBestEffort(target)]);
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-skill@deepseek-ai/dsh-tools@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成dsh-markitdown
通过模型侧工具把 PDF、Office、HTML、图片、音频等文件转成 Markdown——不走 MCP、不内置二进制。插件驱动你指定的 Python 解释器运行 markitdown 包(python -m markitdown)。
提供的能力
- markitdown_check:探测所配置的解释器,返回已装的 MarkItDown 版本(配置了 LLM 模式时一并报告 helper 就绪状态);未安装时给出精确的 setup 命令。
- markitdown_convert:把单个来源或批量来源转成 Markdown:
- path:单个绝对本地路径或 http(s) URL(如 YouTube 链接,需已装 [all] extra);
- paths:最多 16 个路径/URL 的批量,单个失败不影响其他来源;
- stdinBase64:以 canonical base64 字节走 MarkItDown stdin(必须给 extensionHint/mimeHint);
- 提示参数对应 CLI:extensionHint(-x,也可放行进白名单外的本地扩展名)、 mimeHint(-m)、charsetHint(-c)、keepDataUris;
展开完整文档(README 剩余 1 节)
dsh-markitdown
通过模型侧工具把 PDF、Office、HTML、图片、音频等文件转成 Markdown——不走 MCP、不内置二进制。插件驱动你指定的 Python 解释器运行 markitdown 包(python -m markitdown)。
提供的能力
- markitdown_check:探测所配置的解释器,返回已装的 MarkItDown 版本(配置了 LLM 模式时一并报告 helper 就绪状态);未安装时给出精确的 setup 命令。
- markitdown_convert:把单个来源或批量来源转成 Markdown:
- path:单个绝对本地路径或 http(s) URL(如 YouTube 链接,需已装 [all] extra);
- paths:最多 16 个路径/URL 的批量,单个失败不影响其他来源;
- stdinBase64:以 canonical base64 字节走 MarkItDown stdin(必须给 extensionHint/mimeHint);
- 提示参数对应 CLI:extensionHint(-x,也可放行进白名单外的本地扩展名)、 mimeHint(-m)、charsetHint(-c)、keepDataUris;
- URL 来源经连接级钉扎出口校验后下载字节再转换(校验的地址即连接的地址,无 DNS rebinding 间隙;loopback/私网/链路本地目标默认拒绝,除非 allowPrivateUrls);
- output 把单来源结果写文件,outputDir 按来源写 <名称>.md;默认内联返回 Markdown。
- DOCX 图片导出:Word 内嵌图片会导出成文件,data URI 占位符替换为文件链接,会话可以直接打开原图(read_image)并追问,而不是依赖一次性描述。
指定 output 时图片写入同级的 <名称>.media/ 并用相对路径引用;指定 outputDir 时每个 <名称>.media/ 与对应 Markdown 并排;内联转换则导出到临时目录并用绝对路径引用。全程不涉及模型或 API 密钥。
- 可选图片描述:在独立的 设置 → MarkItDown 页面(不在插件清单里)有一个开关,开启后由模型为每张导出图片额外写描述;同一页面每个提供商一张卡片——OpenAI、DeepSeek 或自定义端点——各自保存模型和 API 密钥,当前启用的卡片决定转换用哪一组。密钥存入 dsh 凭证存储而非配置文件;各提供商的 apiKeyEnv 引用与环境变量仍作为兜底。内置 python/llm_convert.py helper,只有开启描述时才需要 openai 包。
DOCX 单独处理:markitdown 0.1.x 的 Word 转换器从不把内嵌图片交给 LLM,所以 helper 会按文档顺序解包 word/media、导出(以及按需描述)每张图,并原位替换 data URI 占位符。描述使用 temperature=0,要求逐字转录、看不清标 [unreadable]、发送者不确定时明说而不猜,并标注原图成员名以便核对。
- markitdown 技能:打包工作流(环境检查 → 转换 → 汇报注意事项),含各格式预期与已知限制。
支持的输入:PDF、DOCX/DOC、PPTX/PPT、XLSX/XLS、CSV、JSON、XML、 HTML/HTM、EPUB、MD、Outlook MSG、ZIP(内含文件逐个转换)、 JPG/JPEG/PNG/GIF/TIFF/BMP(EXIF 元数据,可用时 OCR)、 WAV/MP3(语音转写,需要 [all] extra)。
安装
前置:某个 Python 环境里已安装 MarkItDown:
python -m pip install 'markitdown[all]'
从 Git 仓库安装插件到 dsh(任一 profile 的插件页"从源码安装",或等价 CLI 命令):
github:AlbertZJ/dsh-markitdown
配置
全部可选;当 PATH 上的 python 已装好包时默认值即可用。
- name: 'dsh-markitdown'
config:
运行 -m markitdown 的 Python 解释器。Windows 上只有 py 启动器时填 py 或绝对路径,例如 C:/Users/you/AppData/Local/Programs/Python/Python312/python.exe command: python timeoutMs: 60000 # 单次转换超时 maxInputBytes: 52428800 # 源文件 50 MiB 上限 maxOutputBytes: 8388608 # 捕获输出 8 MiB 上限(超出即杀进程)可选:把所有读写限制在一个工作区内。路径会跟随符号链接解析,必须落在该根目录之下。
allowedRoot: D:/work/documents
可选:LLM 辅助转换(内嵌图片由 LLM 描述)。需要 pip install openai。
提供商与密钥在「设置 → MarkItDown」页面配置;下面就是它写入的配置:当前启用的提供商 + 每个提供商一组 profile。
llmProvider: deepseek
llmProviders:
openai: { baseUrl: https://api.openai.com/v1, model: gpt-4o, apiKeyEnv: OPENAI_API_KEY }
deepseek: { baseUrl: https://api.deepseek.com/v1, model: deepseek-chat, apiKeyEnv: DEEPSEEK_API_KEY }
custom: { baseUrl: https://api.example.com/v1, model: my-model, apiKeyEnv: MARKITDOWN_API_KEY }
旧的单提供商字段,仅在 llmProvider 未设置时生效: llmModel: gpt-4o llmBaseUrl: https://api.deepseek.com/v1 llmApiKeyEnv: OPENAI_API_KEY 是否让当前模型描述每张导出的 DOCX 图片(默认关闭;无论开关如何,图片都会导出并链接)。可在「设置 → MarkItDown」页面切换。
describeImages: false
验证
pnpm install
pnpm run build
pnpm run verify # 结构校验(包、patch、技能、lib、locale)
verify.mjs 无第三方依赖,每次 push 也会在 CI 里跑。
说明与限制
- 转换以 dsh 宿主子进程方式运行,不经过 Bash 审批流;插件在调用 MarkItDown 前会校验路径(绝对路径、存在、扩展名白名单、大小上限)。
- 无文本层的扫描版 PDF 转换结果会很少或为空。
- 复杂排版会被压平成线性 Markdown。DOCX 内嵌图片会导出为文件(Markdown 旁的 <名称>.media/)并以路径引用;内联转换导出到临时目录,可能被系统清理——需要长期保留时请用 output/outputDir。设置了 allowedRoot 时,内联转换不会在工作区外写文件,而是保留 data URI。
- 图片描述是一次性结果:措辞精确要求高时,应打开导出的原图(read_image)而不是依赖描述。
- 本插件不会自行安装 Python 包;跑 markitdown_check 按其指引安装。
许可
MIT。MarkItDown 本身为 Microsoft 的 MIT 许可项目,未被打包进本插件——请按上面的方式装进你的 Python 环境。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
AlbertZJ/dsh-markitdown
把 PDF、Office、图片等文件批量转成 Markdown
相关插件 · 工具 / 效率
破甲管控台kingcharleslzy-ai/dsh-purge
dsh-purge Community · DeepSeek Harness 社区维护版:宿主兼容、状态诊断、提示词管理、更新与本机备份回滚。基于小杨 / YuJunZhiXue 的 dsh-purge。
★ 3,801已汉化DeepSeek 客户端
74.5
网文长卷lingfengQAQ/webnovel-writer
基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200…
★ 7,636已汉化DSH
72.2
多智能体协作HKUDS/AutoSwarm
AutoSwarm: Unify Your Agents. Unify Your Context (Codex · Claude Code · DeepSeek Harness · Muse · Grok · WorkBuddy· nanobot · and more)
★ 2,082已汉化DSH
71.7
Vox 拼贴视频生成Alisa0808/vox-director
🎬 Vox Director拼贴动效导演
★ 2,129已汉化DSH
71.4
Agent 演化引擎Q00/ouroboros
智能体 OS:智能体自己变聪明,我们只守住底线:面试准入、分阶段评估、带预算的进化循环。MCP 服务器,14 种运行时:Claude Code、Codex CLI、Gemini CLI、OpenCode、Copilot、Kiro 等。
★ 6,292已汉化DSH
71.3
智能体运行框架路由HarnessRouter/harnessrouter
智能体运行框架的统一接口。
★ 3,800已汉化DSH
71.2