albi0 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
albi0-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,212 @@
1
+ Metadata-Version: 2.4
2
+ Name: albi0
3
+ Version: 0.1.0
4
+ Summary: Plugin-based Unity Asset Extractor
5
+ Keywords: unity,asset,extractor,plugin,game,seer
6
+ Author: Nattsu39
7
+ Author-email: Nattsu39 <nattsu39@outlook.com>
8
+ License-Expression: MIT
9
+ Classifier: Framework :: Robot Framework
10
+ Classifier: Framework :: Robot Framework :: Library
11
+ Classifier: Operating System :: OS Independent
12
+ Classifier: Programming Language :: Python :: 3
13
+ Requires-Dist: asyncer>=0.0.8
14
+ Requires-Dist: anyio>=4.6.2.post1
15
+ Requires-Dist: tqdm>=4.67.0
16
+ Requires-Dist: httpx>=0.27.2
17
+ Requires-Dist: click>=8.1.7
18
+ Requires-Dist: orjson>=3.10.11
19
+ Requires-Dist: unitypy>=1.23
20
+ Requires-Dist: loguru>=0.7.2
21
+ Requires-Dist: aiofiles>=24.1.0
22
+ Requires-Dist: slpp>=1.2.3
23
+ Requires-Dist: dataclasses-json>=0.6.7
24
+ Requires-Python: >=3.10
25
+ Project-URL: Bug Tracker, https://github.com/SeerAPI/albi0/issues
26
+ Project-URL: Homepage, https://github.com/SeerAPI/albi0
27
+ Project-URL: Repository, https://github.com/SeerAPI/albi0
28
+ Description-Content-Type: text/markdown
29
+
30
+ <div align="center">
31
+
32
+ # Albi0
33
+ ~~[摸鱼的图书馆管理员](https://wiki.biligame.com/seerplan/%E9%98%BF%E5%B0%94%E6%AF%94%E9%9B%B6)~~<br>
34
+ 🟨插件化的 Unity 游戏资源更新与提取工具🟩
35
+
36
+ </div>
37
+
38
+ ## 功能特性
39
+
40
+ - 插件化:通过插件系统以支持多个游戏客户端,并提供了抽象的manifest版本管理器接口,便于支持热更逻辑
41
+ - 异步下载:基于 `httpx`、`anyio` 与 `tqdm` 的高速并发下载与实时进度显示
42
+
43
+ ## 已支持的游戏
44
+
45
+ - [赛尔计划](https://www.biligame.com/detail/?id=107861)
46
+ - [赛尔号Unity端](https://seer.61.com/)
47
+
48
+ ## 使用方式
49
+
50
+ 推荐使用 `uvx` 直接运行,无需本地安装依赖,但需要先安装 `uv`,[uv 安装文档](https://docs.astral.sh/uv/getting-started/installation/)
51
+
52
+ 之后使用 `uvx` 运行:
53
+
54
+ ```bash
55
+ uvx albi0 --help
56
+ ```
57
+
58
+ ## 快速开始
59
+
60
+ 1) 列出可用的更新器与提取器:
61
+
62
+ ```bash
63
+ uvx albi0 list
64
+ ```
65
+
66
+ 2) 更新远程资源(示例:下载 NewSeer AB 包):
67
+
68
+ ```bash
69
+ # 可选:切换工作目录(默认当前目录)
70
+ uvx albi0 update -n newseer.default -w ./newseer
71
+ ```
72
+
73
+ 3) 仅查看远程版本号(不下载资源):
74
+
75
+ ```bash
76
+ uvx albi0 update -n newseer.default --version-only
77
+ ```
78
+
79
+ 4) 提取资源(AB 文件 → 本地目录):
80
+ ```bash
81
+ # 使用指定提取器提取(按组名/名称)
82
+ uvx albi0 extract -n newseer "./path/to/*.ab" -o ./output
83
+
84
+ # 合并模式(将多个源文件合并为一个环境后再导出)
85
+ uvx albi0 extract -n seerproject -m "./assets/**/*.ab" -o ./out
86
+
87
+ # 原样导出(忽略自定义处理,使用默认提取器)
88
+ uvx albi0 extract -e "./raw/*.ab" -o ./raw_out
89
+ ```
90
+
91
+ 提示:导出路径会自动带上提取器名前缀,例如传入 `-n newseer -o ./output`,实际导出目录为 `./output/newseer/...`。
92
+
93
+ ## CLI 参考
94
+
95
+ ### 顶层命令
96
+
97
+ ```bash
98
+ uvx albi0 --help
99
+ uvx albi0 list
100
+ uvx albi0 update -n <updater_name> [-w WORKING_DIR] [--version-only] [PATTERNS...]
101
+ uvx albi0 extract [OPTIONS] [PATTERNS...]
102
+ ```
103
+
104
+ ### list
105
+
106
+ - 说明:打印已注册的更新器与提取器(来自已导入的插件)
107
+
108
+ ### update
109
+
110
+ - 必选参数:`-n, --updater-name` 指定更新器名称或组名(可用名称见 `list` 输出)
111
+ - 可选参数:
112
+ - `-w, --working-dir` 切换执行时的工作目录
113
+ - `--version-only` 仅获取远程版本号,不下载资源文件
114
+ - 位置参数:`PATTERNS...` 可选的文件名过滤模式(glob语法),用于仅更新匹配的清单项
115
+ - 行为:
116
+ - 对比远程与本地资源清单,若需要更新则并发下载资源文件并保存清单
117
+ - 进度条展示每个文件的下载进度与总体任务进度
118
+ - 当传入 `--version-only` 时,仅打印远程版本号并退出,不进行下载
119
+ - 当提供 `PATTERNS...` 时,仅会下载文件名匹配 `PATTERNS...` 的条目
120
+
121
+ ### extract
122
+
123
+ - 可选参数:
124
+ - `-o, --output-dir` 导出目录(默认当前目录)
125
+ - `-n, --extractor-name` 提取器名称或组名(默认 `default`)
126
+ - `-e, --export-as-is` 原样导出(强制使用默认提取器)
127
+ - `-m, --merge-extract` 合并模式(先合并环境再导出)
128
+ - 位置参数:`PATTERNS...` 资源文件的 glob 模式(如 `"./**/*.ab"`)
129
+ - 行为:
130
+ - 依次加载匹配到的资源文件,调用插件注册的处理器进行导出
131
+ - 在对象导出前后,可由插件的前/后处理器自定义处理逻辑
132
+
133
+ ## 插件体系概览
134
+
135
+ - 提取器(Extractor):在插件模块中通过构造 `Extractor()` 即完成注册
136
+ - 更新器(Updater):在插件模块中通过构造 `Updater()` 即完成注册
137
+ - 分组机制:名称支持点号分组,例如 `newseer.default`、`seerproject.ab`;在 CLI 中传入组名可批量执行同组组件
138
+
139
+ ## 典型工作流
140
+
141
+ ```bash
142
+ # 1. 查看可用组件
143
+ uvx albi0 list
144
+
145
+ # 2. 下载(或更新)远程资源
146
+ uvx albi0 update -n newseer.default -w ./workspace
147
+
148
+ # 仅下载匹配的资源(使用 glob 过滤)
149
+ uvx albi0 update -n newseer.default "*.builtin" "Shader/*"
150
+
151
+ # 3. 提取资源到本地
152
+ uvx albi0 extract -n newseer "./workspace/newseer/assetbundles/**/*.ab" -m -o ./exports
153
+ ```
154
+
155
+ ## 开发流程
156
+
157
+ 项目使用 `uv` 进行依赖管理与构建:
158
+
159
+ ```bash
160
+ # 克隆仓库
161
+ git clone https://github.com/SeerAPI/albi0.git
162
+
163
+ # 安装依赖(包含开发/测试依赖)
164
+ uv sync
165
+
166
+ # 本地运行 CLI
167
+ uv run albi0 --help
168
+
169
+ # 运行测试
170
+ uv run --group test pytest
171
+
172
+ # 构建发行包
173
+ uv build
174
+ ```
175
+
176
+ ## 常见问题(FAQ)
177
+
178
+ - Q: 为什么没有看到我新写的插件生效?
179
+ - A: 确保插件模块在 `albi0/plugins/__init__.py` 被导入;CLI 入口会导入 `albi0.plugins` 完成注册。
180
+ - Q: 下载很慢/失败?
181
+ - A: 默认 `httpx` 客户端带有 UA/Referer 头,且支持并发;可根据网络情况调整并发或使用代理(自行扩展 `Downloader`)。
182
+ - Q: 导出结果的格式不符合预期?
183
+ - A: 检查对应插件的对象前处理器与资源后处理器逻辑,或使用 `-e/--export-as-is` 原样导出。
184
+
185
+ ## 目录结构(简要)
186
+
187
+ ```
188
+ albi0/
189
+ ├── cli/ # CLI命令系统
190
+ │ ├── commands/ # 具体命令实现
191
+ │ └── __init__.py # CLI主框架
192
+ ├── plugins/ # 插件系统
193
+ │ ├── seerproject.py # SeerProject插件
194
+ │ └── newseer.py # NewSeer插件
195
+ ├── extract/ # 资源提取核心
196
+ │ ├── extractor.py # 提取器实现
197
+ │ └── registry.py # 提取器注册表
198
+ ├── update/ # 更新功能模块
199
+ │ ├── downloader.py # 下载器实现
200
+ │ ├── updater.py # 更新器实现
201
+ │ └── version.py # 版本管理器实现
202
+ ├── bytes_reader.py # 字节流读取工具
203
+ ├── utils.py # 通用工具函数
204
+ ├── typing.py # 类型定义
205
+ ├── log.py # 日志配置
206
+ ├── container.py # 插件容器
207
+ └── request.py # httpx客户端封装
208
+ ```
209
+
210
+ ## 许可证
211
+
212
+ MIT
albi0-0.1.0/README.md ADDED
@@ -0,0 +1,183 @@
1
+ <div align="center">
2
+
3
+ # Albi0
4
+ ~~[摸鱼的图书馆管理员](https://wiki.biligame.com/seerplan/%E9%98%BF%E5%B0%94%E6%AF%94%E9%9B%B6)~~<br>
5
+ 🟨插件化的 Unity 游戏资源更新与提取工具🟩
6
+
7
+ </div>
8
+
9
+ ## 功能特性
10
+
11
+ - 插件化:通过插件系统以支持多个游戏客户端,并提供了抽象的manifest版本管理器接口,便于支持热更逻辑
12
+ - 异步下载:基于 `httpx`、`anyio` 与 `tqdm` 的高速并发下载与实时进度显示
13
+
14
+ ## 已支持的游戏
15
+
16
+ - [赛尔计划](https://www.biligame.com/detail/?id=107861)
17
+ - [赛尔号Unity端](https://seer.61.com/)
18
+
19
+ ## 使用方式
20
+
21
+ 推荐使用 `uvx` 直接运行,无需本地安装依赖,但需要先安装 `uv`,[uv 安装文档](https://docs.astral.sh/uv/getting-started/installation/)
22
+
23
+ 之后使用 `uvx` 运行:
24
+
25
+ ```bash
26
+ uvx albi0 --help
27
+ ```
28
+
29
+ ## 快速开始
30
+
31
+ 1) 列出可用的更新器与提取器:
32
+
33
+ ```bash
34
+ uvx albi0 list
35
+ ```
36
+
37
+ 2) 更新远程资源(示例:下载 NewSeer AB 包):
38
+
39
+ ```bash
40
+ # 可选:切换工作目录(默认当前目录)
41
+ uvx albi0 update -n newseer.default -w ./newseer
42
+ ```
43
+
44
+ 3) 仅查看远程版本号(不下载资源):
45
+
46
+ ```bash
47
+ uvx albi0 update -n newseer.default --version-only
48
+ ```
49
+
50
+ 4) 提取资源(AB 文件 → 本地目录):
51
+ ```bash
52
+ # 使用指定提取器提取(按组名/名称)
53
+ uvx albi0 extract -n newseer "./path/to/*.ab" -o ./output
54
+
55
+ # 合并模式(将多个源文件合并为一个环境后再导出)
56
+ uvx albi0 extract -n seerproject -m "./assets/**/*.ab" -o ./out
57
+
58
+ # 原样导出(忽略自定义处理,使用默认提取器)
59
+ uvx albi0 extract -e "./raw/*.ab" -o ./raw_out
60
+ ```
61
+
62
+ 提示:导出路径会自动带上提取器名前缀,例如传入 `-n newseer -o ./output`,实际导出目录为 `./output/newseer/...`。
63
+
64
+ ## CLI 参考
65
+
66
+ ### 顶层命令
67
+
68
+ ```bash
69
+ uvx albi0 --help
70
+ uvx albi0 list
71
+ uvx albi0 update -n <updater_name> [-w WORKING_DIR] [--version-only] [PATTERNS...]
72
+ uvx albi0 extract [OPTIONS] [PATTERNS...]
73
+ ```
74
+
75
+ ### list
76
+
77
+ - 说明:打印已注册的更新器与提取器(来自已导入的插件)
78
+
79
+ ### update
80
+
81
+ - 必选参数:`-n, --updater-name` 指定更新器名称或组名(可用名称见 `list` 输出)
82
+ - 可选参数:
83
+ - `-w, --working-dir` 切换执行时的工作目录
84
+ - `--version-only` 仅获取远程版本号,不下载资源文件
85
+ - 位置参数:`PATTERNS...` 可选的文件名过滤模式(glob语法),用于仅更新匹配的清单项
86
+ - 行为:
87
+ - 对比远程与本地资源清单,若需要更新则并发下载资源文件并保存清单
88
+ - 进度条展示每个文件的下载进度与总体任务进度
89
+ - 当传入 `--version-only` 时,仅打印远程版本号并退出,不进行下载
90
+ - 当提供 `PATTERNS...` 时,仅会下载文件名匹配 `PATTERNS...` 的条目
91
+
92
+ ### extract
93
+
94
+ - 可选参数:
95
+ - `-o, --output-dir` 导出目录(默认当前目录)
96
+ - `-n, --extractor-name` 提取器名称或组名(默认 `default`)
97
+ - `-e, --export-as-is` 原样导出(强制使用默认提取器)
98
+ - `-m, --merge-extract` 合并模式(先合并环境再导出)
99
+ - 位置参数:`PATTERNS...` 资源文件的 glob 模式(如 `"./**/*.ab"`)
100
+ - 行为:
101
+ - 依次加载匹配到的资源文件,调用插件注册的处理器进行导出
102
+ - 在对象导出前后,可由插件的前/后处理器自定义处理逻辑
103
+
104
+ ## 插件体系概览
105
+
106
+ - 提取器(Extractor):在插件模块中通过构造 `Extractor()` 即完成注册
107
+ - 更新器(Updater):在插件模块中通过构造 `Updater()` 即完成注册
108
+ - 分组机制:名称支持点号分组,例如 `newseer.default`、`seerproject.ab`;在 CLI 中传入组名可批量执行同组组件
109
+
110
+ ## 典型工作流
111
+
112
+ ```bash
113
+ # 1. 查看可用组件
114
+ uvx albi0 list
115
+
116
+ # 2. 下载(或更新)远程资源
117
+ uvx albi0 update -n newseer.default -w ./workspace
118
+
119
+ # 仅下载匹配的资源(使用 glob 过滤)
120
+ uvx albi0 update -n newseer.default "*.builtin" "Shader/*"
121
+
122
+ # 3. 提取资源到本地
123
+ uvx albi0 extract -n newseer "./workspace/newseer/assetbundles/**/*.ab" -m -o ./exports
124
+ ```
125
+
126
+ ## 开发流程
127
+
128
+ 项目使用 `uv` 进行依赖管理与构建:
129
+
130
+ ```bash
131
+ # 克隆仓库
132
+ git clone https://github.com/SeerAPI/albi0.git
133
+
134
+ # 安装依赖(包含开发/测试依赖)
135
+ uv sync
136
+
137
+ # 本地运行 CLI
138
+ uv run albi0 --help
139
+
140
+ # 运行测试
141
+ uv run --group test pytest
142
+
143
+ # 构建发行包
144
+ uv build
145
+ ```
146
+
147
+ ## 常见问题(FAQ)
148
+
149
+ - Q: 为什么没有看到我新写的插件生效?
150
+ - A: 确保插件模块在 `albi0/plugins/__init__.py` 被导入;CLI 入口会导入 `albi0.plugins` 完成注册。
151
+ - Q: 下载很慢/失败?
152
+ - A: 默认 `httpx` 客户端带有 UA/Referer 头,且支持并发;可根据网络情况调整并发或使用代理(自行扩展 `Downloader`)。
153
+ - Q: 导出结果的格式不符合预期?
154
+ - A: 检查对应插件的对象前处理器与资源后处理器逻辑,或使用 `-e/--export-as-is` 原样导出。
155
+
156
+ ## 目录结构(简要)
157
+
158
+ ```
159
+ albi0/
160
+ ├── cli/ # CLI命令系统
161
+ │ ├── commands/ # 具体命令实现
162
+ │ └── __init__.py # CLI主框架
163
+ ├── plugins/ # 插件系统
164
+ │ ├── seerproject.py # SeerProject插件
165
+ │ └── newseer.py # NewSeer插件
166
+ ├── extract/ # 资源提取核心
167
+ │ ├── extractor.py # 提取器实现
168
+ │ └── registry.py # 提取器注册表
169
+ ├── update/ # 更新功能模块
170
+ │ ├── downloader.py # 下载器实现
171
+ │ ├── updater.py # 更新器实现
172
+ │ └── version.py # 版本管理器实现
173
+ ├── bytes_reader.py # 字节流读取工具
174
+ ├── utils.py # 通用工具函数
175
+ ├── typing.py # 类型定义
176
+ ├── log.py # 日志配置
177
+ ├── container.py # 插件容器
178
+ └── request.py # httpx客户端封装
179
+ ```
180
+
181
+ ## 许可证
182
+
183
+ MIT
@@ -0,0 +1,14 @@
1
+ from importlib.metadata import version
2
+
3
+ from asyncer import asyncify
4
+
5
+ from albi0.cli import cli
6
+
7
+ try:
8
+ __version__ = version('albi0')
9
+ except Exception:
10
+ __version__ = None
11
+
12
+
13
+ async def cli_main(*args, **kwargs):
14
+ return await asyncify(cli)(*args, **kwargs)
@@ -0,0 +1,16 @@
1
+ import sys
2
+
3
+ import anyio
4
+
5
+ from albi0 import cli_main
6
+
7
+
8
+ def main(*args):
9
+ try:
10
+ anyio.run(cli_main, *args)
11
+ except KeyboardInterrupt:
12
+ sys.exit(1)
13
+
14
+
15
+ if __name__ == '__main__':
16
+ main()