deepseek-harness
tiwe0/GeoChat会话隔离的 GeoGebra 画布,提供 20 个原生工具用于作图、场景读回、文字排版检查与动画采样,并内置 55 个数学技能和离线 Applet 资源。
把 Minecraft Java 存档变成 Blender 封面或动画:在 .mca 区域文件里找大片平地,导出地形为 OBJ,无头驱动 Blender(MCprep 材质、BPS 角色骨架、三点布光)。每次渲染后用 OpenCV 检查朝向、接地、曝光、布光和构图,不合格就调整参数重渲。需 Blender 4.2 LTS 以上、Python 3.10+(opencv-python、numpy),首次使用运行 setup 装配 Minecraft 素材。
把 Minecraft 存档变成 Blender 封面和动画。 你只需要提供存档和 Blender,其余全自动 —— 而且渲完会自己检查对不对。
快速开始 · 使用教程 · 工作原理 · 常见问题 · 参与贡献
地图是玩家自己在 设置 → 背景地图 里拖进去的存档 zip,皮肤也是自己传的 64×64 PNG。
机位、布光、材质、渲完的自动审图全部自动。
之前 · 现在 · 平光、无投影、剑穿过胸口 · AgX + 黄金时刻 + 接触阴影 + 景深,3/4 侧脸持剑
存档 .mca → 自动找机位 → 导出几何 → Blender 搭场景(MCprep 材质 + BPS 骨架 + 三点布光)
→ 渲染 → ★ OpenCV 审图 → 不合格自动调参重渲 → 出图 / 出片你不用会 Blender,不用会 Mineways,不用手动摆相机、调灯光、配材质。
# ① 装(或在 DSH 插件市场里搜 dsh-blender-mc)
dsh plugin --profile desktop add dsh-blender-mc
# ② 体检 + 装配 Minecraft 素材(MCprep / BPS 骨架 / 物品库 / ffmpeg)
mc_doctor
mc_setup
# ③ 出图(存档 zip 已经在「设置 → 背景地图」里传过)
mc_shoot { "map": "方可梦世界", "out": "E:/出图" }传地图:设置 → 背景地图 → 把存档或整合包压成的 .zip 拖进去,自动解压识别, 之后 mc_shoot({ "map": "名字" }) 就能点名出图(map 会自动补存档路径和搜索范围)。
没有 DSH?也能当纯命令行工具用
pip install opencv-python numpy
python py/cli.py doctor
python py/cli.py setup
python py/cli.py shoot "D:/saves/新的世界" --area -2050,-1940,-1230,-980 --out ./out因为手工调试渲染最耗时的不是渲染,是渲完看不出问题。
这个项目在开发过程中真实踩过的坑:
现象 · 实际原因 · 人眼发现耗时 "视角好像不对" · 角色背对镜头(yaw 差 180°) · 反复调相机 → 才想到是角色朝向 "人咋是悬浮的" · 脚离地 0.019,MC 方块边缘锐利,一点缝就显眼 · 三轮排查 + 三次数值测量 "背景咋回事,也没有光源" · 「标准」视图转换无高光压缩,物理天空削顶成白,动态范围被占满 · 两组对比实验 "钻石剑好像没正确握在手上" · 抓握点用错(骨骼尾端 vs 手臂网格底部) · 逐部件测量
这四类问题的共同点:都能被 CV 判出来,但人眼在缩略图上看不出来。
所以渲染之后加了一道 OpenCV 审图:
检查项 · 判据 · 不合格自动怎么改 朝向 · 头部区域的皮肤色占比(正面 ~30% / 背面 ~9%) · yaw +180° 接地 · 脚底下方 vs 旁边地面的色差 · 加大下沉量 曝光 · 死白/死黑像素比、动态范围 · 降天空强度 布光 · 角色周围地面的灰阶方差(太均匀 = 平光) · 抬灯光倍率 构图 · 主体占画面高度、水平位置、头顶留白 · 调整相机距离
故意给一个错的朝向(--yaw -125,背影),看它自己怎么办:
[4/5] 第 1 次渲染(yaw-125.0°)
[5/5] 审图: WARN 62 分
⚠️ [1] 看到的是【背面】(头部皮肤占比仅 8.9%)
🔧 角色朝向 -125.0° → 55.0°(转正面)
[4/5] 第 2 次渲染(yaw55.0°)
[5/5] 审图: PASS 92 分
✅ 达标(92 ≥ 85),停止迭代它自己发现并修正了。 这正是手工调试时最花时间的那一步。
· 必需 · 说明 ✅ · Blender · 4.2 LTS 以上。下载 ✅ · Python 3.10+ · 要能 pip install ✅ · Minecraft Java 版存档 · .mca 区域文件那层目录 ⭕ · MCprep / BPS 骨架 / 物品库 / ffmpeg · 可选,缺了会明确告诉你少了什么功能
基岩版不支持 —— 基岩版用 LevelDB,本项目只读 Anvil 格式。
pip install opencv-python numpy方式 A:从插件市场装(推荐)
DSH → 设置 → 插件市场 → 搜索 dsh-blender-mc → 安装 → 开新会话
方式 B:命令行装(推荐给要配本机路径的人)
dsh plugin --profile desktop add dsh-blender-mc@0.2.1
python scripts/install_to_profile.py --profile desktop # 写本机路径配置(可 --dry-run 预览)为什么写成 `@0.2.1`:DSH 装包时有一层「新版本冷却期」(pnpm minimumReleaseAge),刚发布几个小时的版本不会自动被选中 —— 不带版本号时可能装到旧的 0.1.2,而那个版本在
DSH 0.2.0-rc.2 上 7 个工具全都注册不上。写死版本号会绕过冷却期(DSH 会把它记进
minimumReleaseAgeExclude)。等冷却期过了,不带版本号也能装到最新的。install_to_profile.py 会先备份、再改 profile 的 cordis.patch.yml,写前用 PyYAML 自查、 写后用 dsh --dump-config 让 DSH 自己组合一遍 —— 这是 0.2.1 修掉的重点, 细节见下面「⚠️ 装完 DSH 打不开怎么办」。
方式 C:从源码装
git clone https://github.com/TreeCodeTyper/dsh-blender-mc.git
cd dsh-blender-mc
python py/cli.py doctor # 先看看缺什么症状:双击 DSH 没反应 / 窗口一闪就没;命令行跑 dsh 报 failed to parse overlay ...\cordis.patch.yml: YAMLException: end of the stream or a document separator is expected 或 ... must be a top-level YAML array of loader patch entries。
原因:profile 的补丁层 cordis.patch.yml 必须恰好是一份一维 YAML 列表。 0.2.1 之前的 scripts/install_to_profile.py 会直接往文件末尾拼 - id: blender-mc 块, 而全新 profile 的模板里那行 [] 占位还在 —— [] 后面再跟块条目就是一份文档两个顶层元素, YAML 解析失败 → 补丁层读不出来 → 应用起不来。重装 DSH 能让补丁层退回 [] 模板, 所以「只能重装」;但下次再装同一个坑还会踩。
不用重装的救法(在 DSH 打不开的状态下也能跑):
python scripts/repair_profile.py # 先体检,看哪个 profile 的补丁层坏了
python scripts/repair_profile.py --apply # 修(写前自动备份 .bak-<时间戳>)它只做行级修复:把和别人共存的 [] 占位注释成 # []、文件里一条条目都不剩时补回 [], 然后重启 DSH 即可。修不好也别硬改 —— 把报错贴到 issues。
手工改的话记住两条:① 一个文件里只能有一份顶层列表;② 没有条目时文件里必须留 [],只剩注释会被解析成 null,同样起不来。第三方资产(MCprep、角色骨架、物品库)不随本项目分发,需要从你本地已有的资源目录装配:
python py/cli.py setup --dry-run # 先看会搬什么,不动文件
python py/cli.py setup # 实际装配装配器会:
.mca)python py/cli.py shoot "D:/saves/我的世界" --area -2100,-1600,-1400,-900 --out ./出图--area 是允许搜索的矩形范围(x0,x1,z0,z1)。不给机位它会自己找。
DSH → 设置 → 背景地图 → 拖入存档 .zip(或点「选择文件」)。
方可梦世界/新的世界/level.dat)icon.png 就用它)、MC 版本、坐标范围;三个按钮:设为默认 / 重命名 / 删除(删除是软删,文件进回收目录,可找回)
传完就不用记路径了,出图时用 map 参数点名:
// mc_shoot
{ "map": "方可梦世界", "out": "E:/出图/方可梦封面" } // 名字可以写部分前缀
{ "map": "m_542656d4d9e4", "out": "..." } // 也可以写 map idmap 省掉两个必填参数:save(自动指向解压出来的存档目录)和 area (自动按存档包围盒推荐机位搜索范围)。想自己指定范围,照旧写 area 覆盖它。
命令行等价写法(不经过 DSH 面板):
# 导入一个 zip(--root 默认 %USERPROFILE%\.dsh\blender-mc\maps)
python py/cli.py map import --zip D:/整合包/方可梦世界.zip --name 方可梦世界
python py/cli.py map list
python py/cli.py map resolve --name 方可梦 # 打印 savePath / area / 版本数据都在 %USERPROFILE%.dsh\blender-mc\maps 下,一个地图一个目录,删插件不删地图。
第一次用请看 → 手把手使用教程 (从找存档目录开始,到出封面、出动画、调参,每步都有截图级说明)
# 检查运行条件(缺什么会给出完整安装指引)
python py/cli.py doctor
# 装配外部资产
python py/cli.py setup [资源目录...] [--dry-run]
# 提取你自己资源包里的模型(Bedrock 几何 → OBJ,插件不带任何素材)
python py/cli.py extract <资源目录> --out <目录> [--list] [--filter 关键词]
# 在存档里找机位(按「开阔度」排序)
python py/cli.py scan <存档> --area x0,x1,z0,z1
# 出封面(含审图闭环)
python py/cli.py shoot <存档> --area x0,x1,z0,z1 --out <目录>
# 出动画(默认 10 秒杀戮光环)
python py/cli.py anim <封面工程.blend> --out <目录> [--preview 1,60,120]
python py/cli.py anim <封面工程.blend> --preset yujian --out <目录> # 御剑飞天
python py/cli.py anim <封面工程.blend> --preset <配方名> --out <目录> # 自己写的配方
# 分镜成片:一份分镜表 → 多镜头渲染 → 按顺序剪成一支 MP4(同时写 分镜表.md)
python py/cli.py film --plan 分镜.json --out <目录> [--animatic]
# 只审图,不跑 Blender
python py/cli.py check <图...> [--json]
# 地图库:把存档 zip 收进来(DSH 面板做的是同一件事)
python py/cli.py map import --zip <存档.zip> [--name 名字]
python py/cli.py map list | resolve --name <名字> | rename | delete | default | doctormc_anim 出来的是一条 240 帧的长镜头。真实片子是"分镜表定几个镜头,每镜单独渲, 最后剪起来"——这就是 mc_film 干的事,你只要说一句话:
把刚才的御剑飞天剪成 10 秒:先中景看符阵亮、再低机位仰拍冲天、最后大远景飞进云里
模型会写一份分镜表交给 mc_film,它依次做:逐镜建工程(同一套动作、不同机位)→ 按帧区间渲 → 重编号 → ffmpeg 拼接 → 写 分镜表.md。