Skip to content

Jinger52035/PatchToolPy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PatchTool

一款基于 PyQt6 的 Unreal Engine 桌面工具,提供文件夹比较与补丁管理UE MemReport 内存分析UAsset 资产查看与对比三大核心功能。

界面采用 JetBrains New UI 风格,支持可持久化的浅色/深色主题和中英文切换。


目录


安装与运行

环境要求

  • Python 3.11+
  • Windows 10/11

安装依赖

pip install -r requirements.txt

主要依赖:

  • PyQt6>=6.6:桌面界面
  • matplotlib>=3.8:MemReport 图表

启动

python main.py

功能一:文件夹比较

切换到 「文件夹比较」 标签页。

比较文件夹

  1. 点击左侧 「浏览...」 选择源文件夹
  2. 点击右侧 「浏览...」 选择目标文件夹
  3. 点击 「比较」 按钮开始对比

比较完成后,结果以双栏树形表格展示:

标记颜色 含义 说明
白色 相同 文件内容一致(MD5 匹配)
粉色 修改 文件存在但内容不同
蓝色 新增 仅在目标(右侧)文件夹存在
紫色 删除 仅在源(左侧)文件夹存在

工具栏功能:

  • 过滤按钮:点击「相同」「修改」「仅右侧」「仅左侧」可单独显示/隐藏对应类别
  • 交换按钮:快速交换左右文件夹路径
  • 全部展开/全部折叠:控制目录树的展开状态
  • 底部统计栏实时显示各类文件数量

查看文件差异

双击任意一行文件,打开 Diff 查看器

  • 文本文件:左右分栏对比,绿色标记新增行,红色标记删除行,支持同步滚动
  • 二进制文件:显示 MD5 校验值、首个差异位置、十六进制对比视图(Offset / Hex / ASCII 三栏),差异字节高亮标记

生成补丁

  1. 完成文件夹比较后,点击 「生成补丁」
  2. 选择保存路径,生成 .patch 文件

补丁文件本质是 ZIP 压缩包,内部结构:

patch_file.patch (ZIP)
├── manifest.json      # 变更清单(新增/修改/删除列表 + 元信息)
└── files/             # 新增和修改后的完整文件
    ├── path/to/added_file.txt
    └── path/to/modified_file.dat

应用补丁

  1. 点击 「应用补丁」
  2. 选择 .patch 文件
  3. 选择要应用补丁的目标文件夹
  4. 确认弹窗中显示的操作明细(新增/修改/删除文件数量),确认后执行

功能二:MemReport 分析

切换到 「MemReport 分析」 标签页。用于解析 Unreal Engine 的 memreport -full 命令导出的内存报告文件。

导入文件

  1. 点击 「导入文件」
  2. 选择一个或多个 .memreport / .txt / .log 文件
  3. 导入时自动在原文件旁生成同名 .json 中间数据文件

多文件导入后可通过顶部下拉框切换查看。

浏览数据

界面左侧为 分区导航树,点击任意分区在右侧查看详情:

  • 总览:展示文件路径、分区列表摘要(类型、行数/条目数)
  • 表格类型(如 Obj List、RenderTargets、ListTextures):
    • 支持 点击表头排序(升序/降序)
    • 支持 关键字搜索过滤(输入框位于表格上方)
    • 数值列自动右对齐,千分位格式化
    • 列宽自适应内容,可手动拖拽调整
  • 键值类型(如 Header、Mem FromReport):双列表格展示,键名加粗
  • 原始文本类型:等宽字体显示原文

JSON 中间数据

导入 .memreport 时自动生成 .json 文件,也可以点击 「导出 JSON」 手动导出到指定路径。

JSON 结构示例:

{
  "filepath": "S:/data/report.memreport",
  "filename": "report.memreport",
  "sections": [
    {
      "name": "Header",
      "type": "kv",
      "data": {
        "Platform Memory Stats for Windows": "",
        "Process Physical Memory": "2134.45 MB used, 2256.78 MB peak"
      }
    },
    {
      "name": "obj list -countsort",
      "type": "table",
      "headers": ["Class", "Count", "NumKB", "MaxKB", "ResExcKB", "ResExcDedSysKB", "ResExcDedVidKB", "ResExcUnkKB"],
      "rows": [
        ["Texture2D", "1736", "2479.24", "2560.12", "451324.00", "0.00", "451324.00", "0.00"]
      ]
    },
    {
      "name": "RenderTargets",
      "type": "table",
      "headers": ["SizeMB", "Dimensions", "ArrayCount", "Mips", "Name", "Format", "UnusedFrames"],
      "rows": [
        ["256.000", "16384x2048", "2", "1", "Shadow.Virtual.PhysicalPagePool", "R32_UINT", "0"]
      ]
    }
  ]
}

三种分区类型:

type 说明 字段
table 表格数据 headers (列名数组) + rows (二维数组)
kv 键值对 data (对象)
raw 原始文本 lines (字符串数组)

支持的数据分区

解析器自动识别以下 UE MemReport 命令/区块:

分区 解析类型 说明
Header 键值 平台内存统计、进程物理/虚拟内存
DumpParticleMem 表格 粒子系统内存明细
ConfigMem 表格 配置文件缓存大小
RenderTargets 表格 渲染目标池内存(尺寸、格式、Mip 数)
RenderTargets Summary 键值 渲染目标池汇总(总量/已用/未用)
ListTextures 表格 全部纹理列表(尺寸、格式、LOD 组、流送状态)
ListParticleSystems 表格 粒子系统资源占用
obj list class=XXX 表格 指定类型对象列表(SoundWave / SkeletalMesh / StaticMesh 等)
ListAnims 表格 动画序列列表
Mem FromReport 键值 STAT 格式内存汇总(544+ 条目)
rhi.DumpMemory 键值 RHI 显存分配明细
obj list -countsort 表格 全类型对象计数排序(Class / Count / NumKB / ResExcKB 等)

同时兼容简单格式的 memreport 文件(无 MemReport: Begin/End command 包裹,靠区块标题自动识别)。


功能三:UAsset 资产工具

切换到 「UAsset」 标签页,可查看和对比 Unreal Engine 的 .uasset / .umap 文件。

打开与浏览资产

可通过工具栏、空状态按钮或拖放打开资产。左侧内容树提供以下数据视图:

  • General Information、Name Map、Imports 和 Export Information
  • Soft Object Paths、Depends Map、Soft Package References 和 Data Resources
  • Custom Versions、Export Properties 和 Extra Data
  • 单个 Export 的 Raw Binary,以及整个文件的 Raw Binary (All)

表格支持只读浏览、排序、选择、查找和 JSON 导出;可通过对象引用在 Import/Export 节点间跳转。

Raw Binary 查看

Raw Binary 使用虚拟化十六进制表格显示大文件,包含 OffsetHexASCIIRegion 列。不同解析区域使用文字颜色区分,不提供悬浮提示或悬浮高亮。

资产对比

点击 「对比资产」 分别加载左右两个资产,可按内容树查看结构和字节差异:

  • 支持仅显示差异、上一处/下一处差异和首尾跳转
  • 左右表格同步滚动
  • Hex 与 ASCII 中相同字节使用白色背景,不同字节使用红色背景和白色文字
  • 支持 General、Name Map、Import、Export、Properties、Extra Data 和 Raw Binary 对比

目录对比与辅助工具

  • 目录对比:扫描两个目录中的 .uasset / .umap,按相同、修改、仅左侧和仅右侧过滤
  • 差异统计:查看资产比较结果的数量和分布
  • 查找:在当前表格或 Raw Binary 内容中定位数据
  • 日志:查看 UAsset 解析和操作日志

外观与语言

  • 设置 → 主题 中切换浅色或深色主题;选择会保存并在下次启动时恢复
  • 设置 → 语言 中切换中文或英文
  • 全局界面、Diff、图表、发布记录和 UAsset 弹窗共享统一主题

打包为 exe

python build.py

自动安装 PyInstaller(如未安装)并打包为单文件可执行程序,输出到 dist/PatchTool.exe。打包配置在 build.spec 中,默认无控制台窗口。


项目结构

PatchTool/
├── main.py                          # 入口
├── requirements.txt                 # 依赖 (PyQt6 / Matplotlib)
├── build.py                         # 打包脚本
├── build.spec                       # PyInstaller 配置
├── app/
│   ├── main_window.py              # 主窗口(菜单栏、标签页、状态栏)
│   ├── i18n.py                     # 中英文翻译字典
│   ├── theme.py                    # 浅色/深色主题、调色板与持久化
│   ├── styles.py                   # 动态 QSS 接口
│   ├── compare/
│   │   ├── compare_engine.py       # 文件夹比较引擎(递归遍历 + MD5 哈希)
│   │   ├── compare_widget.py       # 比较界面(双栏树形视图 + 过滤 + 统计)
│   │   ├── diff_viewer.py          # Diff 查看器(文本对比 + Hex 对比)
│   │   └── patch_engine.py         # 补丁生成与应用(ZIP 格式 + manifest)
│   ├── memreport/
│   │   ├── memreport_parser.py     # MemReport 解析器(CSV / 表格 / KV / STAT 自动识别)
│   │   ├── memreport_widget.py     # MemReport 查看界面(搜索 / 排序 / JSON 导出)
│   │   ├── compare_view.py         # 多报告对比
│   │   └── chart_widgets.py        # 主题化统计图表
│   ├── uasset/
│   │   ├── uasset_widget.py        # UAsset 主界面
│   │   ├── uasset_parser.py        # UAsset / UMap 解析器
│   │   ├── property_parser.py      # Export 属性解析
│   │   ├── table_handler.py        # 数据表格与虚拟 Raw Binary 模型
│   │   ├── compare_dialog.py       # 资产结构和字节对比
│   │   ├── folder_compare_dialog.py # 资产目录对比
│   │   └── diff_stats_dialog.py    # 差异统计
│   └── widgets/
│       └── folder_selector.py      # 文件夹选择器组件
└── test_data/                      # 测试数据

About

PatchTool Python version

Resources

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages