当前位置: 首页 > news >正文

RePKG 实战指南:拆开 Wallpaper Engine 的 PKG,把 TEX 纹理转成可编辑的 PNG

RePKG 实战指南:拆开 Wallpaper Engine 的 PKG,把 TEX 纹理转成可编辑的 PNG

【免费下载链接】repkgWallpaper engine PKG extractor/TEX to image converter项目地址: https://gitcode.com/gh_mirrors/re/repkg

RePKG 是一款用 C# 写成的命令行工具,专门解析 Wallpaper Engine 的 PKG 资源包,并把包内的 TEX 纹理转成 PNG 等通用图片格式。它面向壁纸创作者、素材收集者和想研究文件格式的开发者,全程只需在终端里敲命令,无需安装任何图形界面。

先从收藏夹里的一堆 .pkg 说起

很多人的 Steam 创意工坊目录下躺着这样的场景:workshop/content/431960里按编号排了几十个文件夹,每个文件夹里是scene.pkgproject.jsonpreview.jpg。壁纸在 Wallpaper Engine 里跑得好好的,可你想把某张图的素材抠出来做二创,双击 .pkg 却打不开——它是 Valve 生态里少见的专有打包格式。

如果你同时遇到下面这些情况,RePKG 基本就是为你准备的:

  • 想提取 .pkg 里的贴图、模型、音频,但找不到能解包的软件;
  • 拿到 .tex 纹理,Photoshop 和画图工具都不认;
  • 攒了一堆壁纸包,想知道每个包里到底装了什么、有多大;
  • 想把 TEX 里的 GIF 动图还原成能直接播放的文件。

RePKG 的核心价值就一句话:把"打不开"变成"一条命令的事"

它到底能帮你处理哪几类事情

能力说明对应命令
解包 PKG把资源包内的文件按原始目录结构释放到本地repkg extract xxx.pkg
还原工程连同 project.json、preview.jpg 一起拷出,恢复可用的壁纸工程repkg extract -c
TEX 转图把 TEX 纹理解码成 PNG,动图还原成 GIFrepkg extract -t
只取原文保留 TEX 原始字节,不做任何转换repkg extract --no-tex-convert
包体体检列出包内文件清单、大小、排序、过滤repkg info -e -s -b size

十分钟跑通:克隆、编译、验证

RePKG 没有发布现成的二进制安装包,拿到手需要自己编译一次,过程不长:

git clone https://gitcode.com/gh_mirrors/re/repkg cd repkg dotnet build RePKG.sln -c Release

三点需要提前知道:

  1. 目标框架:CLI 工程面向 .NET Framework 4.7.2,两个类库是 netstandard2.0。Windows 上装好 .NET SDK 即可编译;Linux/macOS 上要编译 net472 目标,需要额外引入 .NET Framework 引用程序集(或借助 Mono),最省事的做法是在 Windows 上编译、全平台运行产物。
  2. 产物位置:编译完成后,可执行文件在RePKG/bin/Release/net472/下,名字就是repkg(Windows 下为repkg.exe)。
  3. 验证安装:进入该目录执行repkg --version,能看到版本号0.2.2即表示成功。

建议顺手把可执行文件目录加进 PATH,省得每次敲全路径:

# Windows PowerShell $env:Path += ";$PWD\RePKG\bin\Release\net472"
# Linux / macOS export PATH="$PATH:$(pwd)/RePKG/bin/Release/net472"

extract 命令的每一颗"旋钮"

extract是主力命令,既能解包也能转图,具体行为由下面这些选项决定:

参数作用例子
-o, --output输出目录,默认是当前目录下的./output-o ./out
-e, --onlyexts只提取指定扩展名的条目,逗号分隔-e "tex,png"
-i, --ignoreexts跳过指定扩展名,逗号分隔-i "model,mp3"
-t, --tex把输入目录下的全部 .tex 转成图片-t ./tex_dir
-s, --singledir所有文件平铺到一个目录,不保留包内路径-s
-r, --recursive递归搜索子目录里的 .pkg / .tex-r
-c, --copyproject顺带拷贝 pkg 旁边的 project.json 与 preview.jpg-c
-n, --usename用 project.json 里的标题做输出子目录名,而不是编号-n
--no-tex-convert只提取原始文件,跳过 TEX 转图--no-tex-convert
--overwrite覆盖已存在的输出文件(默认跳过并提示)--overwrite

几个容易忽略的细节:

  • 解包时若条目是 TEX,默认会自动转成 PNG,并在旁边生成一份.tex-json信息文件(宽高、格式、mipmap 数量等),不需要额外操作;
  • -n依赖 pkg 同目录下的 project.json,如果文件缺失就退回用编号命名;
  • 目录作为输入时,extract默认只处理直接子目录里的 pkg,要扫更深层级的目录必须加-r

info 命令:给资源包做一次"体检"

info适合在动手提取前先摸清底细:

参数作用
-e, --printentries打印包内每个文件的路径和字节数
-s, --sort开启排序(与-b搭配)
-b, --sortby排序依据:nameextensionsize,默认 name
-p, --projectinfo只输出 project.json 里指定的字段,逗号分隔,*表示全部
--title-filter按壁纸标题关键字过滤,只显示匹配的包
# 看某个包里都有什么,按体积从大到小排 repkg info -e -s -b size "scene.pkg" # 把 project.json 的字段全部倒出来 repkg info -p "*" "scene.pkg" # 在一堆壁纸里找出标题含 rain 的 repkg info --title-filter "rain" E:\workshop\content\431960

需要提醒的是,info-t(查看目录下所有 TEX 信息)目前在源码里还是占位实现,TEX 的信息主要靠 extract 时生成的.tex-json文件来读,别在这上面浪费时间。

三个拿来就能用的实战场景

场景一:单张壁纸素材抢救

在创意工坊文件夹里找到心仪的壁纸,把它完整拆出来,包括工程配置和预览图:

repkg extract -c -o ./my_wallpaper "E:\workshop\content\431960\123456789\scene.pkg"

完成后my_wallpaper里会有 project.json、preview.jpg、拆出来的贴图,以及每张贴图对应的 PNG 和.tex-json,相当于把壁纸还原成了一个可再次编辑的工程目录。

场景二:整库批量转 PNG

把收藏夹里所有壁纸的 TEX 纹理一次性抽成 PNG,平铺进一个目录,方便统一管理:

repkg extract -e tex -s -r -o ./png_out "E:\workshop\content\431960"

-e tex只碰纹理、-s去掉包内层级、-r递归扫子目录,三步组合下来,输出目录里就是干干净净的一堆*.png

场景三:只想验证"这包值不值得下"

先体检再解包,避免白白占硬盘:

repkg info -e -s -b size "suspicious.pkg" repkg info -p "title,type" "suspicious.pkg"

第一条看包内有什么、体积分布如何,第二条看标题和类型,两秒钟就能判断要不要继续。

踩坑记录:常见报错与对策

现象原因处理办法
提示Input file not found路径写错,或文件不存在检查路径与扩展名,pkg/tex 均可作为输入
提示Unrecognized file extension传入了 pkg/tex 以外的文件RePKG 只认这两种格式,先确认文件类型
转出的图是黑图或尺寸不对TEX 用了较冷门的压缩变体,或 mipmap 裁剪逻辑对不上先用--no-tex-convert拿原始 tex,再用-t单独转换;仍失败可到项目 Issues 反馈
输出目录里很多文件被跳过默认不覆盖已存在文件需要强制更新时加--overwrite
GIF 动图还原后帧序错乱部分包帧信息特殊,旋转/裁剪推算有偏差属于已知的格式兼容问题,保留原始 tex 以便后续重转
大批量处理很慢每个 pkg 都要读入内存再写盘-e过滤 +-s平铺,减少 IO 次数

背后发生了什么:从魔数到像素

理解原理能帮你判断"这个报错要不要管"。RePKG 对两种格式做了逆向:

PKG 文件以魔数PKG!(十六进制0x504B4721)开头,之后是条目表,每条记录保存路径、长度等信息,正文可能经过 LZ4 压缩(源码里引用了K4os.Compression.LZ4)。解包就是"读魔数 → 解析条目表 → 按需解压 → 落盘"。

TEX 纹理的结构更讲究,文件里依次是:

  1. TEXV0005TEXI0001两个魔数,用来声明版本与类型;
  2. 头部(TexHeader),记录宽高、标志位(是否 ClampUV、是否为 GIF 动图等);
  3. 图像容器(ImagesContainer),里面是若干 mipmap 层级;
  4. 帧信息容器(FrameInfoContainer),动图专用,保存每帧的位置、尺寸、旋转角与帧间隔。

TEX 内部常用的像素格式有RGBA8888DXT1DXT3DXT5RG88R8六种。DXT 系列是压缩格式,直接拿来当图片字节流是花的,需要先解码成 RGBA——这段解码算法移植自开源库 LibSquish,这也是项目仓库里THIRD-PARTY-NOTICES.txt存在的原因。

转换流程大致是:取第一张图的 mipmap → 若是压缩格式先解压 → 按头部的目标宽高裁剪 → 存成 PNG;动图则遍历帧信息,逐帧裁剪、旋转、设置帧延迟后拼回 GIF。

源码地图:三层各管一摊

项目按职责拆成三个工程,阅读源码时可以顺着这条线走:

工程定位关键内容
RePKG.Core模型与接口ITex / ITexHeader / ITexImage 等接口,TexFormat、TexFlags、MipmapFormat 等枚举
RePKG.Application实现层PackageReader/PackageWriter、TexReader、各 Writer、DXT/RG88 解码助手、TexToImageConverter
RePKG命令行入口Program.cs 解析参数,Extract.cs 与 Info.cs 分别实现两个子命令

命令行的入口在Program.cs,它用 CommandLineParser 注册了extractinfo两个 verb;另外还藏了一个彩蛋——用repkg interactive可以进入交互模式,逐行输入命令,适合边摸索边试参数。

从使用者到贡献者:进阶路线

想把这套工具用到更顺,可以按下面的路线走:

  1. 先吃透命令:在终端执行repkg --helprepkg help extractrepkg help info,配合 README 里的 Examples 逐个跑一遍;
  2. 读懂数据流:从Program.cs追到Extract.csExtractPkg,再进TexReaderTexToImageConverter,整个"读文件→解析→转图→落盘"的链路就通了;
  3. 挑一个方向动手
    • 补全info命令里 TEX 信息的占位实现(目前InfoTex是空的);
    • 增加更多 DXT 变体或新压缩格式的支持;
    • 把交互模式做得更完整,或包一层图形界面;
    • 优化大批量场景的内存占用与并发。

仓库里的 LICENSE 与 THIRD-PARTY-NOTICES.txt 写明了许可与第三方依赖声明,做二次开发前先翻一翻这两份文件。

写在最后

RePKG 的价值在于把 Wallpaper Engine 的资源从"黑盒"变成"可读的普通文件"。它解决的是格式壁垒问题,至于素材本身,请记住订阅者协议:提取出来的内容建议只用于个人学习、素材参考或获得授权后的二次创作,商用前务必确认原作者的授权条款。技术无边界,版权有红线——工具让你"做得到",而分寸感让你"用得久"。

【免费下载链接】repkgWallpaper engine PKG extractor/TEX to image converter项目地址: https://gitcode.com/gh_mirrors/re/repkg

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.cnnetsun.cn/news/4036306.html

相关文章:

  • 告别LaTeX表格手工编码:超强工具实现图形化设计与代码自动生成
  • 2027亚洲AI算力液冷技术展官方市场信任度充足
  • 若依框架项目名称自定义全攻略:从配置到模板的完整实践
  • 外贸企业必看:谷歌SEO优化服务,助力海外订单增长
  • 基于ReAct与Function Calling构建本地AI编程助手:从原理到实战
  • 从零构建具身智能仿真环境:基于Isaac Gym与强化学习的机械臂抓取实战
  • 无血清培养基为什么越来越常用?从批间差异、动物源风险到下游纯化
  • 【学习地图】AI学习 · 文章索引
  • AI长任务处理:SSE、检查点与幂等性构建可靠异步系统
  • OneNote多人共享协作全攻略:从方案选型到问题解决
  • AI 全栈专业名词科普:从入门到理解
  • 构建AI编程助手的代码大脑:知识图谱与语义检索的工程实践
  • K均值聚类评估:SSE与轮廓系数原理、应用与实战
  • Vim正则表达式实战:从基础语法到高效文本处理
  • DeepSeek 深夜开源一个“神经系统“:大模型时代的胜负手,不在模型本身了?
  • 裁判文书大数据分析:从数据拆分到司法趋势洞察的实战指南
  • 如何在 macOS 上免费实现歌词同步:LyricsX 终极使用指南
  • 输入11位手机号,地图自动跳过去:手机号码定位查询系统的开源玩法
  • 构建高质量数据集描述文档:从Google ClusterData看结构化数据管理实践
  • NVIDIA Profile Inspector实战指南:5个场景解锁显卡隐藏设置
  • BEVDet深度解析:从LSS视角转换到3D检测的自动驾驶感知实践
  • 数学建模竞赛Python仿真优化:SimPy离散事件仿真与代码实战
  • Navicat无限试用手把手实战:三招搞定Mac版14天限制,安全不丢数据
  • Maven彻底卸载与重装指南:解决依赖冲突与构建问题
  • Git本地凭据管理:安全查看与迁移HTTPS/SSH认证信息
  • 天赐范式第135天:原型点火——Φ自动切换机制的第一次真实走通与故障记录
  • 贪心算法解决区间覆盖问题:从视频拼接看算法实战
  • Kerberos黄金票据与白银票据攻击:原理、实战与防御指南
  • C++零基础入门指南:从命令行编译到STL实战项目
  • 推荐系统重排技术:从双阶段框架到生成式演进