@mcptoolshop/facet
v0.8.0
Published
Query a governed decision record instead of reading it — zero-prerequisite npx install (verified binary launcher) for facet's four-leg-verified SQLite+FTS5 record index, served over MCP.
Maintainers
Readme
该风格应用于资源上,在纹理空间中——而不是针对每个视角进行绘制,然后将它们组合在一起。向流程提供一个形式夸张的粘土概念模型,它会返回一个带有纹理的网格,其颜色来自对该网格的样式化参考,所有参考无法看到的部分都通过蒙版绘画笔刷和感知表面的膨胀来填充。
名称既指问题的一半:多边形,也指它们需要呈现的面。
安装
该流程本身是一组本地脚本,您可以在键入的路径上调用这些脚本——克隆仓库并阅读入门指南。
两个服务器作为一个软件包提供——记录索引,因此助手可以查询证据链,而不是读取它;以及从 v0.4.0 版本开始,测量服务器,这样两个相隔几个月测量的资源将通过一个代码路径进行处理。
npx @mcptoolshop/facet # the record index; zero-prerequisite, no Python needed
pip install facet-mcp[measure-full] # + the measurement tools and their instrumentsfacet-mcp 是针对记录的标准输入/输出 MCP 服务器(六个工具,其中四足验证作为拒绝的健康表面),而 facet-index 本身是索引(build / verify / q / claims)。从检出目录内部运行任何一个;--db 指的是不同的索引。
测量服务器——v0.4.0 版本的新功能
facet-measure 回答了比较的数值部分,并且不会说明输出是否良好。每个有效负载都包含服务器版本、仪器的文件哈希值和配置哈希值,并且 measure_report 拒绝跨不匹配进行比较——这是整个系统存在的目的。
通过运行一个动词而不是 --help 来验证——控制网格返回 786,432 个面,并在没有检出目录的机器上具有完整的身份包围。
您获得的结果取决于一件事,那就是您的 Python 版本:
| 您的 Python | [measure-full] 提供了 |
|---|---|
| 3.11 / 3.12 | 所有八个工具——open3d 从 PyPI 安装 |
| 3.13 | 四个工具;mesh_stats、mesh_topology、measure_report、anchor_check |
open3d 0.19.0 是最新的发布版,并发布了 cp38–cp312 wheels,不包含 sdist,因此在 3.13 上,PyPI 上没有任何内容可以安装。额外的文件将其置于 python_version < "3.13" 之后,因此安装在那里成功,并且四个几何工具会输出 4 REFUSED,表明它们需要什么——而不是整个安装失败。
要在 Python 3.13 上获得所有八个工具,Open3D 在其持续更新的开发通道上发布了当前的 cp313 wheels。在命令行中使用直接 URL 即可;它只是禁止在已发布的软件包元数据中进行使用:
# Linux — stable filename, no build hash
pip install https://github.com/isl-org/Open3D/releases/download/main-devel/open3d-0.19.0-cp313-cp313-manylinux_2_35_x86_64.whl⚠ 在 Windows 和 macOS 上,开发 wheels 的后缀是 +<sha>(撰写本文时为 open3d-0.19.0+63e30be-cp313-cp313-win_amd64.whl),并且名称会随着 main 的变化而变化——列出 main-devel 发布版 中的资源,并选择当前版本。此构建是该流程自身的依赖于 Open3D 的数字所使用的测量依据,并且它是一个真正的可比性边界:身份包围记录仪器的哈希值,而不是其依赖项——E31。
在 v0.3.1 版本之前,wheel 包含两个 .py 文件,不包含任何测量仪器,因此安装的测量服务器没有任何内容可以调用。没有人注意到这一点,因为这个仓库就是检出目录:该工具在其构建的位置工作,并且从未在其他地方使用过。
⚠ pip install facet-mcp 在每个已发布版本中都存在问题,直到 v0.3.0 版本,并在 v0.3.1 中修复。 wheel 将 facet_index 作为顶级模块进行安装,因此,在 v0.3.0 及更早的版本中,它会根据 <venv>/Lib 解析记录的位置——该文件既不包含语料库也不包含索引——并且 build、claims 和 q 在没有 --db 的情况下都会失败。在 v0.3.0 或更早版本上,请使用上面的 npx 二进制文件。
从 v0.3.1 开始,根目录通过测试记录来解析,而不是假设它:从检出目录内部运行任何一个命令,它会找到该目录;从其他任何位置运行它,它将输出 4 REFUSED,并显示它尝试的两个目录和它查找的两个标记。现在这两个命令都读取 $FACET_INDEX_DB,并且它选择哪个索引,而不是哪个语料库。在从 main 构建并在干净的虚拟环境中安装的 wheel 上进行测量——E24。
此代码块已更正两次。它最初显示为 pipx install facet-mcp # 或直接安装 Python 包 , until v0.3.0's read-back ran a verb instead of --help。然后,它说 wheel“仅适用于 q 和 claims”——claims 也无法工作,E24 通过运行它发现了这一点。两次更正都在 known-defects.md 中,并附有其测量结果。
当前状态
四个已接受的资源,跨越四个主题类别,无需任何积分。每个资源都由导演在其自己的缩放级别上进行评估——在 GLB 上或在全尺寸工作表中——而不是通过指标来确定是否达到阈值。
| 主题 | 类别 | 已接受 | 参考/笔刷/膨胀 | |---|---|---|---| | Character (W3) | 人形生物 | 2026-08-04 | 68.8 / 4.2 / 27.0 | | Galleon | 车辆,细线骨架 | 2026-08-05 | 36.89 / 6.87 / 56.24 | | Dragon | 野兽,翼膜 | 2026-08-07 | 44.15 / 3.07 / 52.78 | | Longsword | 道具,近乎二维,灰度 | 2026-08-08 | 45.25 / 2.07 / 52.68 |
共享的是有效的纹素,并且它们不能跨主题进行比较——一艘船从视平线隐藏了大部分自身,而动物则隐藏了一半。将每个资源与其自身的预先注册的范围上限进行比较,结果显示它们达到了 86–93%:行之间的差异在于几何形状,而不是回归。 完整数字及其分母。
第五个测试对象处于中间循环阶段,并且它是第一个以参考为基础进行构建的(2026-08-17 → 2026-08-19)。 A1,“档案管理员”,是从一个包含其自身嵌入配方的参考开始的,而不是从一个粘土概念开始,此后每个阶段都受到该参考的约束:在存在网格之前,规范已在 16/16 个表面 上得到确认;网格在导演审核后获得批准;一个场景以 像素级精确的方式三次 复制了参考;一个包含 sha256 清单的八视图双环图;以及两个命名的污染失败,每个都经过测量以确定其机制,然后才进行任何更改。烘焙过程已于 2026-08-19 获得批准——基于身份和服装套装,这就是该批准的全部范围。
然后笔刷打开,它只在孔中进行绘制。 第一笔于 2026-08-19 在偏航角 90 度处着陆:不变性 ANDON 读取 0.014 lv,最大热分量为 0 px,超出测试的 472,318 个像素范围;commit 绘制了 3,585 个纹素,将孔从 2,044,423 变为 2,040,838,之后重新验证了源图集的字节级一致性。在导演的缩放视图中,背心领口到肩部的浅色三角形变成了紫红色,缝线看起来像一件完整的服装。它没有创造一张脸,也没有转动头部或绘制第二件背心。
方法论结果比资产本身更重要。 在整个过程中,ControlNet 强度从未被调整——每个修复都 消除了一个原因,而不是对某个问题施加压力。其中两个失败是顾问自身规范缺陷,在执行席位和外部审查渠道中发现,并且在花费任何资源之前,两者都在记录中以测量结果的形式呈现,这些测量结果证实了它们。
这是一个流水线,而不是一个单角色生成器。 如果针对八个命名的元素违反规范,则提示将赢得 8 胜 0 负——中位 ΔE 为 46.3,而五个保留的对照组为 6.2——同时人物形象保持不变。结构由网格和控制来维持;命名的属性与提示相关联。
投影问题已于 2026-08-16 结束 (E45–E49)。
这八个图像 组成:从每个视角的束中重建,并根据边界 × 面向 × 可见性权重进行处理,图集首次通过了导演的接受标准——两次,跨越两个阶段——与一个已发布的图集形成对比,该图集的路径一直在破坏绘制的图像,而这些图像是所有图像都同意的内容。执行此操作的链位于 tools/ (emit_view_aovs, s3_composite, flow_estimate, s3_run, s3_sheet,
atlas_from_aovs, twin_mesh_warp),主要通过一个外部审查渠道构建,该渠道指定的校准声明一直保持 二十次成功,并且每次都经过验证,即在信任构建之前运行它。
规范是数据,它控制着支出(2026-08-17)。 身份规范命名了十七个元素;生成双胞胎的工作流程命名了十六个元素;配置文件默认值命名了六个元素。没有任何东西将它们联系起来,因此四个阶段修复了在源处出现错误的绘画之后构图。规范现在是一个数据库,其键是 表面——一个元素列表无法显示缺少的内容,并且一个可为空的占位符会使孔成为一行——并且 canon_gate 在生成工具内部运行,在输出目录存在之前。如果生成的提示不涵盖已批准的规范,则该生成将被拒绝,并且不会写入任何内容。
这是一个路由器,并且它采用“故障安全”模式。 它将一个对象解析为其规范文件,从 两个方向 覆盖一个提示,并携带一个范围。如果给定的工具用于生成内容且没有提供规范,则该工具不会安静地运行——它会拒绝。 对于真正没有规范的对象,存在一种基于普查的解决方案,并且不能由具有规范的对象使用:--no-canon --subject GALLEON 继续执行并宣布其自身;--no-canon --subject W3 被 拒绝,因为 W3 具有表面。这通过构造而不是约定来关闭复选框,这一点很重要,因为之前的形状——if args.canon:——允许已发布的 PowerShell 驱动程序在不发出任何声音的情况下通过关卡。
第二个方向是检测实际缺陷的方法。 检查提示 是否包含 规范可以找到一个简单的提示。检查提示中的 所有内容 是否都是规范,可以找到一个命名了角色没有的元素的短语——并且有一个存在于活动默认值中:gold necklace,该存储库已经测量出它错误地命名了金色腰带吊坠,“并且该元素意外地幸存下来。” 包含该短语的覆盖提示现在返回 missing: 0 并仍然被拒绝,并命名了该子句。
canon_gate 1.0.0 census (occupancy is not ratification)
subject named occupancy ratified prof_hit surfaces
W3 19 24/24 24/24 5/19 canon/w3.surfaces.json
GALLEON 13 - - 11/13 NONE
DRAGON 11 - - 10/11 NONE
LONGSWORD 5 5/5 5/5 4/5 canon/longsword.surfaces.json
E10-LAYER 1 - - - NONE
LOGO 0 - - - NONE
A1 10 16/16 16/16 10/10 canon/a1.surfaces.jsonprof_hit 5/19 是一个 故意留下的样本:它是运行实际将使用的活动默认值,因此第一个 --profile character.json 应该会停止。修复字符串将会删除证据。
并且有一个工作表,因为没有规范的四个对象不会自行完成任务。 它输出一个对象 类型 所暗示的所有表面——因此,在有人命名它之前,孔就是一个行——将 IDENTITY.md 转换为清单,将关节作为对来携带以进行确认,并保留每个视角的范围插槽。它 在结构上无法填充任何占位符,这是对其进行测试的属性:带有已分配表面的有毒短语不会被写入。生成规范是人类参考的过程;工作表只是使该过程更便宜和完整。
边界明确,而非需要自行探索。 它会检查两个方向上的规范短语,并确定其范围。它不会检查释义或同义词——语义匹配会将模型置于边界内,而本仓库原则上拒绝这样做;也不会对单个视图的元素进行检查,直到声明了视图范围;也不会检查指定的材质是否出现在“正确”表面上。存在范围插槽,并且它们的表面列表为空:填充它们需要人工操作,就像填充人物一样。四个对象拥有一个 IDENTITY.md 文件,但没有 surfaces JSON 文件——这是因为没有完成相关工作,而不是在未进行手动操作的情况下生成。
衡量提示可以包含的元素数量,并且它并未达到规范值。 文献资料对每个添加的提示元素都设定了成本,即这些元素是否会实际出现,且范围远低于我们的水平,因此 Opus 团队询问,是否可以使用已支付的图像来解决这个问题。答案是不能,原因在于结构性问题——语料库中的任何元素都不会保持其短语不变,同时周围的计数发生变化并且可能不存在。 他们提供的是单方面的限制,即在一个摄像头上使用五个提示,且字节完全一致的控制、遮罩和种子:在 10 → 17 的元素阶梯中,删除了所有在 10 时存在的内容,而零计数处的身份变化则改变了整个校准区间。W3 的规范要求为 19,但语料库从未达到这个值(E55)。工作室会打印三个数字,这些数字会被合并——24 个提示表面、25 个必需的检查、19 个唯一的元素——因此,从不会将覆盖率与元素计数进行比较。
路线
styled 2D concept ╌╌► clay prep ╌╌╮ ← CANDIDATE hop, walked once. Not a route
╎ stage. Everything below it is the route.
▼
form-exaggerated clay concept ──► image-to-3D ──► weld ──► density allocation
│
cull what no camera can see ◄────────────┘
│
▼
twins, generated from THIS mesh ──► project ──► brush the holes ──► fill分阶段进行,并附带每个阶段的理由:手册。
虚线路径是新的,并且故意不是实线。 路线中的第一个方框一直显示为粘土概念,到目前为止,没有任何东西能够实现这一点——每个粘土都是手工制作的,并在进入时进行哈希处理。现在存在一个“概念→粘土”工具,并且它的第一组已经以完整尺寸进行了测试:姿势、腕带、腰带饰品和撕裂的下摆都已包含;鬃毛则没有;颜色泄漏在整个帧中测量为 C* p99.9 = 13.15,背景为无缝的非彩色。这组数据无法显示的是网格是否会得到改进,这是唯一能够证明其价值的问题,因此它仍然是一个候选对象,并且已经记录了相关证据:概念准备。
是什么让它起作用
六个发现,每个发现都需要一次实验,并且每个发现都适用于其产生的主题之外的情况。完整版本,包含测量数据。
- 首先是形式,其次才是风格。 重构器将表面噪声视为几何体。一个干净的、类似雕塑的粘土,并故意夸大了平面,其拓扑结构比程式化的精灵更好;程式化的孪生版本会同时生成,并成为颜色参考。
- 构建面部,获得面部。 头部裁剪会将 3.1–4.5 倍 更多的多边形放置在头部上,并且这种差异是结构性的——分离的眼睑、眉毛皱纹、建模的鼻孔空腔——而不是更清晰的模糊效果。
- 孪生对象属于一个网格,而不是一个角色。 在多个网格中使用孪生对象,覆盖率会下降 62% → 22.7%,因为手臂投射到模型旁边的空白空间中。每次都从你即将进行纹理处理的网格中生成孪生对象。
- 身份属于提示。 如果规范元素未在提示中命名,则它会意外出现,并且也会以相同的方式离开——当金色膝盖护甲最终仅通过损坏的 ControlNet 中的噪声出现在图像中时,就会对其进行测量。
- 询问几何体,而不是阈值。 将键控遮罩替换为精确的光线投射轮廓,会将参考覆盖率从 28.4% 提高到 39.1% 的有效纹素——完全是累加的,没有扩散,也没有 GPU。角落中值键控现在已经在这里失败了三次,并且已被淘汰。
- 剔除任何摄像头都无法看到的元素,从图集中剔除,而不是从网格中删除。 49% 的图集纹素从外部不可见;排除这些面可以减少插值 68%。与其删除,不如排除,这样就可以使失败变得不可能,而不仅仅是可检测。
尚未解决的问题
已命名并测量,位于首页而不是脚注中。所有问题,代码位置。
- 某些可见表面映射到图集空间,但没有任何烘焙过程会写入这些数据,渲染时显示为图像未修改的默认黑色。Blender 的烘焙工具使用纹素中心采样,因此没有覆盖任何纹素中心的三角形区域将保持空白——它的开发者已经命名了这种机制并合并了一个修复方案(https://projects.blender.org/blender/blender/pulls/161752),该修复方案是在测量所有数据的两周后进行的。这是一种与特定对象无关的属性,而是与流程有关:在一个资源上进行测量,而在其他四个资源上未进行测量。
- 刀片带在所有八个摄像机中占据 0.00% 的第一阶段参考值——钢材放置在灰色背景上,正好位于关键阈值的边缘。该组合可以修复 55.72%。
- **笔触接缝没有对齐。**一种来源边界的差异是普通纹理变化的 5.5 倍;导演命名的区域的差异是 9.5 倍。
- 扩散会在不相关的图集岛屿之间产生渗漏——74.9% 的扩散纹素从另一个岛屿获取颜色,与平均距离为 1.0(在高度为 1.0 的图形上)的岛屿相距 0.177。⚠ 这个比例是在图集纹素中计算的,不能作为摄像机所见内容的依据:扩散占烘焙后图集的 26.95%,占渲染图形像素的 4.95%,比例为 0.18。颜色存在于大型图表中,孔洞存在于小型图表中,因此扩散纹素在屏幕空间中成本较低。
- ⚑ 决定接受标准的缺陷是由 PAINT 引起的,而不是由任何填充引起的——区域呈现出另一种材质的颜色,而没有任何斑点统计数据可以检测到这一点。通过三种方式、在三个不同的空间中进行三次测量:91.05%
reference的纹素具有 0.99 倍的增强效果,与基准率完全一致;相同类别的绿色布料为 68.46%reference;而在薄刀片上,表面自身的绘制纹素有 18.77% 被污染,而其扩散填充的比例为 5.55%。 该填充正确地从其最近的已绘制邻居处获取数据——而这个邻居本身已经存在问题。混合本身是一种未记录的双频带分割(M + gaussian_blur_σ16(B − M)),它在相同的点上测量了 四个替代方案中最差的结果。 - ⚑ 绘制的面呈现出条纹,并且上述所有权发现出现在一个已接受的资源上。A1 的孪生面是一个连续的色调;烘焙结果被切割成垂直的不同桃红色条纹。
project_twins是 胜者全得——每个纹素由其面对权重决定,而不是通过平均值来确定,因此该面由正面视图和两个 45° 四分之一视图看到,这些视图在皮肤值的 R、G 和 B 值上存在差异,分别为 R 13.0 / G 13.9 / B 18.3。无论是在脸上哪个区域,只要有两个 UV 图表被不同的摄像机拥有,就会出现不一致的情况,因此条纹是岛屿边界,而不是污渍——也不是灰色孔洞类别。画笔在结构上无法修复它:commit只写入孔洞纹素,并且已绘制的纹素已被冻结。已经提出了两种解决方案,但都没有被采用——让正面视图拥有整个头部区域,或者允许进行缝隙混合,从而重新绘制已绘制的皮肤,而当前流程中的任何阶段都无法做到这一点。 加权平均值已经在工具中累积,并且混合后的图集已经存在于磁盘上;没有人将其呈现给导演。这在烘焙被批准时就已存在于表格中,并且该批准涵盖了身份和服装套装——一个已接受的工件上的公开缺陷并不构成矛盾,但记录中不应将批准视为涵盖任何未进行评估的属性。 - **各个视图永远不会是独立的,这限制了所有混合修复方案。**对于每个缺陷区域,100% 的具有两个或多个贡献摄像机的面都位于 90° 范围内(平均为 45°),并且 21% 的缺陷面仅由一个摄像机看到。相邻视图在几乎相同的控制下同时失败,因此摄影测量学中发布的基于多视角的优势不能直接应用于此。
- 该流程中的每次重建都是一个空心双层外壳,壁厚约为两个体素。没有体积预测条件适用于其中任何一个。
- 各个板材在未命名的材质边界处存在差异,而关键在于规范(2026-08-16)。内部与网格的扭曲测量结果显示,所有八个视图中,平均值为 3.5–11.1 像素,而轮廓线的平均值为 1.2–3.0;导演圈出的每个残余区域——袖口、手部、靴子顶部——都是一个材质连接点,该生成提示从未提及。⚠ 已于 2026-08-17 更正,并且更正结果更加明确。 之前的表述是“记录的提示包含六个元素”——经过测量,它将两个不同的文件焊接在一起。生成孪生体的流程命名了 17 个中的 16 个,仅缺少握持部分;画笔配置文件默认值 命名了六个。两者都是正确的,并且该句子只做出了一个错误的声明。重要的是,握持、护手和护胫在 16 短语的提示中出现 零次——因为规范中根本不存在与它们相关的元素。即使是完整的提示也无法命名从未指定的“手”。✅ 已于 2026-08-17 关闭——表面列表已被遍历、填充,并且所有 24 个都得到了确认,现在该流程会拒绝任何不包含这些内容的提示。
- 5.65–5.57% 的有效纹素是没有任何平面环摄像机能够看到的表面——它们在每个视图中都未能通过深度门,没有投影路径可以绘制它们,并且已发布的流水线使用岛屿盲区填充来覆盖这些区域,从而产生了深色标记。它们需要一种策略(中性材质、画笔或接受),而不是修复方案(E49 报告)。
- 已接受等级的表格上的平面彩色多边形——导演提出的唯一一个公开问题。⚠ 填充通道假设已被证伪(2026-08-17)。孤立填充的测量值低于其自身的基准率(0.27 倍),这些补丁位于 90–99% 的普通已绘制纹素上,并且相同的缺陷存在于从一个在修复之前就存在的图集构建的渲染中。相反,它被追溯到其来源:渲染视图的孪生体在该区域是干净的,并且不同的视图拥有 115 个缺陷像素中的 97 个,面对权重为 0.68,而另一个则为 0.60。角度补丁是一种散射伪像,颜色是已命名表面上真实的跨视图不一致现象——因此,“缺陷存在于孪生体中”这一说法并不能证明需要进行孪生体再生。 ⚠ 并且本页提出的修复方案也被证伪(2026-08-17)。之前的表述是“更喜欢目标视图的合成器是范围内的修复方案,而且成本为零。”该合成器已经存在,并且已经是默认设置;与从一个记录的运行中提取的静态图像上的平面分类器进行比较,首先选择目标会增加命名目标的数量(38 → 40),并大幅增加另外两个目标的数量(23 → 64,36 → 110),从而变得更加一致。机制:形状是所有权,颜色不是。 橄榄色是视图 6 对其正在正确绘制的表面的绘制结果,因此在目标为 6 的情况下——这意味着优先选择视图 6——该策略会最大化构成缺陷的颜料。所有权策略无法修复已正确归因的表面上的跨视图颜色不一致现象,这使得整个系列都失效,而不是只失效其中一个部分(E52)。剩下的只是一个绘制问题,并且需要进行一次生成。*已过时的文本,但根据更正规则保留:“孤立岛屿的大小与单个三角形相当,从边界相邻的孪生样本中提取并使用未侵蚀的轮廓线进行平面填充。”
这个仓库是如何运行的
纪律性与流水线一样重要,并且它存在是有原因的:之前的流程进行了十次实验,每次都对自己的输出进行评估,并在下一次实验中将结论作为既定事实。该循环中的任何环节都无法验证。
- 先制定规范,后进行报告,最后得出结论——并且设计实验的环节不会对其自身的结果进行评分。总共有七十二个实验,详见记录。
- 更正会直接应用到相应的位置,与推翻它的测量结果并列显示,而不是以静默删除的方式进行。仅在最初的环节中,就有六项既定主张被证明是错误的,并且这六项都仍然可以与替代它们的内容一起查看。
- 失败的结果将保留在仓库中,并附带其原因。
tools/superseded/不是一个存档——任何人都可以运行这些工具,并观察它们以相同的方式失败。 - 负面结果也是一种完全的成功,它会被报告和记录下来,而不是调整到某个数值。
- 测试与修改代码的代码提交相关联——共有 1346 个通过测试,由两个参与者进行,并且在 1289 个隔离环境中启用了基于路径的 CI(持续集成)。
- **可以查询记录。**对整个流程使用 SQLite + FTS5 索引进行验证,并在四个方面进行了验证。它发现,在三个站点中,散文描述的结论与实际计数不符,这是通过统计记录本身得出的。
所有内容的位置
| | | |---|---| | 手册 | 指南——分阶段的流程、主题和配置系统 | | 概念准备 | 候选粘土生成:其 Gate 0 流程、放置方式以及它所开启的许可证项目 | | 记录 | 七十二个实验:规范、报告、结论,以及在测量之前声明的所有预测 | | 流程中学到的内容 | 持久的发现和来之不易的规则,完整呈现 | | 每个工具的状态 | 哪些有效,哪些已被取代,以及每项内容的证据 | | 已知缺陷 | 所有未解决的问题,已在代码中进行测量和定位 | | 流程的实际过程 | 按时间顺序排列的历史记录,更正内容完整保留 | | CLAUDE.md | 如何在此处工作——角色、规则以及每个角色的成本 |
许可证状态
每个阶段都在本地运行,并且在商业上是安全的:SDXL (OpenRAIL++)、MV-Adapter (开源)、open3d (Apache-2.0)、spandrel (MIT)、RealESRGAN anime6B (BSD-3)、Blender、numpy、scipy、trimesh。
故意排除,并说明原因:nvdiffrast(非商业用途——通过结构性触发器强制执行,而不是通过证明),Hunyuan3D-Paint(在欧盟、英国和韩国的许可证无效)、MVPaint 和 TEXGen(完全没有许可证),以及 UltraSharp / SUPIR / StableSR(非商业放大器)。
声明的边界,而不是让其自行发现。它描述了记录的流程——即上述图中的各个阶段,从图像到 3D 开始。在其上游的候选粘土生成环节目前在封闭的云 API 上运行,该 API 的条款本仓库尚未验证,因此此处没有任何许可证声明涵盖由其粘土制成的资产。这是一个开放项目,并有明确的路径来解决它:符合许可要求的本地模型是 Qwen-Image-Edit (Apache-2.0),并且 FLUX.1-Kontext [dev] 因与 nvdiffrast 相同的理由而被排除——非商业权重。两者都经过了工作室的模型目录验证,而不是回忆;其原因在概念准备中。
信任和威胁模型
facet 完全在您自己的机器上运行——每个工具都是一个脚本,您可以针对您输入的路径进行调用,因此有意义的问题不是此应用程序请求了哪些权限,而是这些脚本对您的机器做了什么。通过测量来回答这个问题,并且每次流程都可以重新运行;完整的策略在 SECURITY.md 中:
- **访问的数据:**网格、纹理、图像和 JSON 文件位于本地磁盘上,路径由您在命令行中传递。此外还有
docs/index/facet.db,它是派生的——它不包含任何尚未存在于此仓库中的文件,并且facet_index.py build会从头开始重新生成它。 - **未访问的数据:**绝不会有任何凭据。此处没有任何内容读取、存储或传输令牌、密钥或密码,并且这些内容也不存在于树中——已检查是否存在以提供程序为前缀的密钥、GitHub PAT、Slack 令牌、AWS 密钥 ID、私钥块、承载令牌和内联
api_key/password赋值,零个匹配项,没有跟踪任何类似凭据的文件。 - **无遥测数据。**不收集或发送任何数据。由于没有任何内容需要选择退出,因此不需要进行选择退出的操作。
- **网络出口:**两个工具会打开一个套接字——
restylize_views.py和texpass_brush.py——并且两者都会调用 ComfyUI HTTP API,地址为--host,默认值为127.0.0.1:8188。tools/中的其他任何内容都不会进行网络调用。 - **权限:**普通用户。无需提升权限、安装服务或写入系统设置或注册表。
三个明显的漏洞被公开,而不是声称已被修复,因为一份仅列出保证的安全说明并不是一个威胁模型:文件操作没有进行沙箱隔离(工具会按照其参数指示写入任何位置);许多工具和文档都内置了绝对本地路径——在26个文件中共有114处出现,这并非秘密,而是对一台机器的布局的一种披露,也是大多数工具无法在其他地方未经修改运行的原因;并且,未发布的实验脚本中出现的意外错误会显示为Python堆栈跟踪信息,没有任何--debug门控。有意的停止操作是ANDON:消息,其中包含触发它们的测量结果。这就是研究仪器的约定,SHIP_GATE.md准确地记录了何时不再满足要求——对于两个命令方面而言,在0.2.0版本中,它执行安装操作:facet-index和facet-mcp返回0(正常)/ 1(用户错误)/ 2(运行时错误)。并且,自从E22之后,对于触发的门控或失败的verify环节,会显示**4拒绝**,这意味着工具正在运行并告知您不要继续操作,而不是出现运行时错误。所有这些都会以结构化的方式拒绝,并命名下一步骤,而不是显示堆栈跟踪信息(E21)。
并且,这两个命令中的门控不再可删除。在“安装”方面,每个ANDON都会触发raise;一个简单的assert是一个语句,它会静默地移除python -O,并且在此仓库中,有87个门控可以通过环境变量进行删除,直到E22将其转换为不可删除状态。在相同的门控上,分别在四种解释器模式下进行了测量。
并且,自从E23之后,生成四个已接受资产的路径上的门控也不可再删除——它包含跨越十二个工具的57个站点,转换为对文件进行纯粹的移动操作,而这些文件之前从未被测试过,现在每个站点都会在-O和PYTHONOPTIMIZE=1以及正常解释器下拒绝。
并且,自从E25之后,该类别已关闭。它包含跨越43个文件的133个站点——这些是生成上述四个已接受资产证据的测量仪器,它们以相同的方式进行转换,从而使总数达到raise,即278。
在tools/下,仅剩一个简单的ANDON assert:
superseded/texpass_thin_mask.py,它永远不会被转换为可删除状态,因为这些工具会被保留,以便任何人都可以运行它们并观察它们以相同的方式失败。该剩余部分会通过名称固定在测试套件中,因此未来的清理操作无法在不故意编辑测试的情况下将其移除。
**支持状态:**此仓库采用开放方式进行开发,在一个平台上,由一位负责人和一个轮换的顾问和执行者团队共同完成。main是唯一受支持的状态。没有发布渠道、回溯策略或SLA——取而代之的是记录:每个声明都与其生成代码相邻,并且docs/experiments包含每个声明的规范、报告和裁决。
要求
Blender 5.x,Python 3.11+,以及numpy、scipy、trimesh、open3d、Pillow、spandrel、torch。仅需要本地安装ComfyUI才能使用修复画笔。该项目是在RTX 5090上开发的;VRAM的可用空间比原始速度更重要。
CI在ubuntu-latest / Python 3.12上运行套件中的hermetic子集,并进行固定安装(.github/workflows/ci.yml);artifacts层需要记录的树结构,这些树结构位于E:\AI\training中,但不在git中,因此CI会故意将其排除。本地,python -m pytest运行所有1346个测试,而python -m pytest -m "not artifacts"运行CI重现的1289个测试。
