仓库缺少 LICENSE,想确认许可条款后再提交贡献
先说这个问题
仓库当前没有 LICENSE 文件 (GitHub API 的 license 字段为 null)。
按默认著作权规则,没有许可证 = 「保留所有权利」。严格来说,别人(包括我)没有法律依据
去复制、修改、分发这份代码 —— 即使在 GitHub 上开 PR 这种协作形式,也是在默认授权框架下
才顺理成章。README 里写了「欢迎 PR」,但那是一句期望,不构成许可条款。
这会影响的不只是外部贡献者:
想提 PR 的人不知道自己写的东西会以什么条款分发出去;
想在自己公司内部部署的人不确定是否合规;
你们将来如果打算接受外部代码,没有明确的 inbound 许可声明(CLA / DCO / 或直接
声明 inbound=outbound)会留下隐患;
如果哪天要用更严格或更宽松的条款重新发布,追溯历史贡献会很麻烦。
所以想先问一句:你们计划给仓库加一个许可证吗?如果加,倾向于哪个?
我个人建议 MIT 或 Apache-2.0 —— 这类本地工具项目最常见、对使用者最友好,
而且能立刻消除上面这些问题。如果你们倾向于别的条款(GPL、AGPL 或保留部分权利),
也完全没问题,只要明确下来就行。
只要许可证明确了,我这边随时可以按需要把下面几个贡献点拆成独立 PR 提上来。
我打算贡献什么
我在做 Windows 微信 4.x 聊天记录查看/导出/分析方向的开发,交叉对比过若干开源方案,
其中就包括这个项目。三层架构(native core + FastAPI 后端 + Vue 前端)分得很干净,
微信原生转写与本地 Whisper 双路线、账号维度的缓存与并发模型都做得比我见过的大部分方案好,
所以想反过来把我在自己项目里已经稳定运行、而这边还缺的东西贡献回来。
贡献点一:演示数据库种子脚本(最独立,建议先合)
仓库里已有的 tools/seed_ai_acceptance.py 生成的是明文 SQLite,而真实链路是 WCDB 加密的。
我写的 tools/seed_demo_database.py 生成的是真正按 WCDB/SQLCipher 页格式加密 的演示账号,
可以直接跑通从「扫描账号目录」→「解密」→「读取」的完整链路。
两个刻意的设计:
不硬编码加密常量 ,而是 import 上游自己的 PAGE_SIZE / RESERVE_SIZE /
_derive_sqlcipher_enc_key / _compute_page_hmac。这样上游改加密格式时,
脚本会跟着一起失效,而不是悄悄产生错误数据 —— 我认为这一点比脚本本身更重要。
数据全是虚构的 (wxid_demo_2026、昵称统一带「示例」、链接一律 example.com),
覆盖单聊/群聊、文本/链接卡片/转账/系统提示/引用消息。
用途是给测试、截图、新贡献者上手提供一个不含真实隐私的起点。
自校验实测(用上游自己的解密器):Page 1 HMAC verification passed、
successful_pages=7 failed_pages=0、reserved_space=80、自校验通过:成功解密 2/2。
涉及文件:tools/seed_demo_database.py、tests/test_seed_demo_database.py(5 项)、
docs/demo-database-seed.md。不碰任何产品逻辑,输出默认落在已在 .gitignore 的 output/demo/。
贡献点二:多协议云端语音识别适配器(engine="cloud")
现在识别只有两条路:本地 faster-whisper(要下 75 MB ~ 3.1 GB 模型 + 占 CPU/GPU)
和微信原生(依赖微信客户端在线)。两种情况覆盖不到:
机器性能有限,本地跑一条语音要等十几秒;
只想偶尔转写少量语音,不值得为它下模型、装 CUDA 运行库;
手上已经有 OpenAI 兼容 / 阿里云百炼的额度,想直接复用。
我把它做成可替换的后端,支持三类协议:
openai_compatible(/audio/transcriptions multipart)、
dashscope_asr(/chat/completions + base64 input_audio)、
custom_multipart(字段名/请求头/响应路径全可配置)。
几个关键取舍:
默认不联网。 没配 base_url 时构建返回 None,所有既有路径行为完全不变。
缓存与本地路线共用。 复用同一张 transcript 表和同一套取音频/SILK 解码逻辑,
只有 model 字段写成 cloud:<protocol>:<model> 做隔离。所以本地跑过的切云端
不需要重新识别 —— 这点我认为比另起一套缓存重要得多。
不申请本地模型活动租约 (云端路线完全不加载模型);并发默认 3、上限 8,
因为瓶颈在服务商限流,不能按本地 CPU 并发推导,配成 64 会把账号打爆。
微信原生已转写的语音直接跳过 ,避免重复付费。
安全约束 (要把用户语音上传出去,所以写得比较克制):明文 HTTP 只允许回环地址;
不跟随重定向(防 Authorization 头被转发给未知主机);默认 25 MB / 硬上限 100 MB;
错误信息不含本机路径、API Key 与响应正文;设置读接口永不回显 Key;
配置落盘做白名单 + 长度限制 + 拒绝控制字符(手改 JSON 塞换行不能污染请求头)。
与 #151 的关系 :我注意到 #151 正在改写语音转写这条路(批量入口、
SettingsDialog.vue、VoiceTranscriptionSidebar.vue、导出对话框的 exportTranscribeVoice)。
我刻意没有动 那两个前端文件和 voice_transcription.py 里的识别逻辑,改动只限于
engine 白名单与分发这一层。所以这个 PR 建议等 #151 合入后我再 rebase 提交 ,
避免制造冲突。如果你希望更早看到代码,我也可以现在就提。
补充一句:项目里已有的 cdn_image_service.py 走第三方商业 CDN,和这个不冲突 ——
那条路依赖特定服务商的额度与兑换码,而这里是用户自己的 接口地址与 Key。
贡献点三:批量高清原图自动化(想先问是否需要)
这个项目当前的高清图路线是商业 CDN。我自己项目里的做法不同:不依赖任何第三方服务,
直接在本地驱动微信客户端把聊天里的压缩图批量换回原图并归档。
但我在移植前想先确认价值:它依赖 Windows UI 自动化(热键、窗口句柄、资源监控),
移植成本不低且天然只支持 Windows,功能上和现有 CDN 路线有重叠。
所以想问:这个方向你们需要吗? 如果重叠部分你们觉得没必要,
我可以只挑其中不依赖 UI 自动化的部分(原图资源的识别、去重与归档)单独提。
关于测试
我用 uv + Python 3.11 跑了完整测试集,并且改动前后逐项对比 :
测试数
失败
错误
跳过
基线(未改动)
2682
85
18
10
加上我的改动
2758
85
18
10
失败集合逐项比对完全相同(新增失败 0 项) ,新增的 76 项测试全部通过。
需要说明的是,上面的失败/错误在我这边本来就不是绿色 ,原因是环境缺件而非代码问题:
test_native_core_export_decrypt.py、test_macos_manual_launch.py 等需要预编译的
wechatdb_client.dll,仓库里没有,直接 error;
一批 macOS 用例在 Windows 上失败;
test_voice_transcription_contract.py::test_export_option_is_wired_from_dialog_to_backend
在基线提交上就是红的:exportTranscribeVoice 在 ChatExportDialog.vue 与
useChatExport.js 里都不存在 —— 看起来正是 feat: 升级本地语音识别并修复小程序图片导出与 Windows 回归 #151 的 diff 在补的东西。
所以我描述自己改动的测试结果时都是和基线对比给的,没有把既有失败算进来。
如果你们的 CI 装了原生库,失败集会比上面小得多。
小结
许可证 :能给一个明确答复吗?这是我现在唯一的前置阻塞。
贡献点一(种子脚本) :不碰产品逻辑、争议最小,许可证明确后我可以立刻提 PR。
贡献点二(云端 ASR) :代码已完成并在 fork 上,建议等 feat: 升级本地语音识别并修复小程序图片导出与 Windows 回归 #151 后 rebase 再提。
贡献点三(高清原图) :想先听你们意见,需要我再动手。
谢谢!
仓库缺少 LICENSE,想确认许可条款后再提交贡献
先说这个问题
仓库当前没有 LICENSE 文件(GitHub API 的
license字段为null)。按默认著作权规则,没有许可证 = 「保留所有权利」。严格来说,别人(包括我)没有法律依据
去复制、修改、分发这份代码 —— 即使在 GitHub 上开 PR 这种协作形式,也是在默认授权框架下
才顺理成章。README 里写了「欢迎 PR」,但那是一句期望,不构成许可条款。
这会影响的不只是外部贡献者:
声明 inbound=outbound)会留下隐患;
所以想先问一句:你们计划给仓库加一个许可证吗?如果加,倾向于哪个?
我个人建议 MIT 或 Apache-2.0 —— 这类本地工具项目最常见、对使用者最友好,
而且能立刻消除上面这些问题。如果你们倾向于别的条款(GPL、AGPL 或保留部分权利),
也完全没问题,只要明确下来就行。
只要许可证明确了,我这边随时可以按需要把下面几个贡献点拆成独立 PR 提上来。
我打算贡献什么
我在做 Windows 微信 4.x 聊天记录查看/导出/分析方向的开发,交叉对比过若干开源方案,
其中就包括这个项目。三层架构(native core + FastAPI 后端 + Vue 前端)分得很干净,
微信原生转写与本地 Whisper 双路线、账号维度的缓存与并发模型都做得比我见过的大部分方案好,
所以想反过来把我在自己项目里已经稳定运行、而这边还缺的东西贡献回来。
贡献点一:演示数据库种子脚本(最独立,建议先合)
仓库里已有的
tools/seed_ai_acceptance.py生成的是明文 SQLite,而真实链路是 WCDB 加密的。我写的
tools/seed_demo_database.py生成的是真正按 WCDB/SQLCipher 页格式加密的演示账号,可以直接跑通从「扫描账号目录」→「解密」→「读取」的完整链路。
两个刻意的设计:
PAGE_SIZE/RESERVE_SIZE/_derive_sqlcipher_enc_key/_compute_page_hmac。这样上游改加密格式时,脚本会跟着一起失效,而不是悄悄产生错误数据 —— 我认为这一点比脚本本身更重要。
wxid_demo_2026、昵称统一带「示例」、链接一律example.com),覆盖单聊/群聊、文本/链接卡片/转账/系统提示/引用消息。
用途是给测试、截图、新贡献者上手提供一个不含真实隐私的起点。
自校验实测(用上游自己的解密器):
Page 1 HMAC verification passed、successful_pages=7 failed_pages=0、reserved_space=80、自校验通过:成功解密 2/2。涉及文件:
tools/seed_demo_database.py、tests/test_seed_demo_database.py(5 项)、docs/demo-database-seed.md。不碰任何产品逻辑,输出默认落在已在.gitignore的output/demo/。贡献点二:多协议云端语音识别适配器(
engine="cloud")现在识别只有两条路:本地
faster-whisper(要下 75 MB ~ 3.1 GB 模型 + 占 CPU/GPU)和微信原生(依赖微信客户端在线)。两种情况覆盖不到:
我把它做成可替换的后端,支持三类协议:
openai_compatible(/audio/transcriptionsmultipart)、dashscope_asr(/chat/completions+ base64input_audio)、custom_multipart(字段名/请求头/响应路径全可配置)。几个关键取舍:
base_url时构建返回None,所有既有路径行为完全不变。transcript表和同一套取音频/SILK 解码逻辑,只有
model字段写成cloud:<protocol>:<model>做隔离。所以本地跑过的切云端不需要重新识别 —— 这点我认为比另起一套缓存重要得多。
因为瓶颈在服务商限流,不能按本地 CPU 并发推导,配成 64 会把账号打爆。
不跟随重定向(防
Authorization头被转发给未知主机);默认 25 MB / 硬上限 100 MB;错误信息不含本机路径、API Key 与响应正文;设置读接口永不回显 Key;
配置落盘做白名单 + 长度限制 + 拒绝控制字符(手改 JSON 塞换行不能污染请求头)。
与 #151 的关系:我注意到 #151 正在改写语音转写这条路(批量入口、
SettingsDialog.vue、VoiceTranscriptionSidebar.vue、导出对话框的exportTranscribeVoice)。我刻意没有动那两个前端文件和
voice_transcription.py里的识别逻辑,改动只限于engine 白名单与分发这一层。所以这个 PR 建议等 #151 合入后我再 rebase 提交,
避免制造冲突。如果你希望更早看到代码,我也可以现在就提。
补充一句:项目里已有的
cdn_image_service.py走第三方商业 CDN,和这个不冲突 ——那条路依赖特定服务商的额度与兑换码,而这里是用户自己的接口地址与 Key。
贡献点三:批量高清原图自动化(想先问是否需要)
这个项目当前的高清图路线是商业 CDN。我自己项目里的做法不同:不依赖任何第三方服务,
直接在本地驱动微信客户端把聊天里的压缩图批量换回原图并归档。
但我在移植前想先确认价值:它依赖 Windows UI 自动化(热键、窗口句柄、资源监控),
移植成本不低且天然只支持 Windows,功能上和现有 CDN 路线有重叠。
所以想问:这个方向你们需要吗? 如果重叠部分你们觉得没必要,
我可以只挑其中不依赖 UI 自动化的部分(原图资源的识别、去重与归档)单独提。
关于测试
我用
uv+ Python 3.11 跑了完整测试集,并且改动前后逐项对比:失败集合逐项比对完全相同(新增失败 0 项),新增的 76 项测试全部通过。
需要说明的是,上面的失败/错误在我这边本来就不是绿色,原因是环境缺件而非代码问题:
test_native_core_export_decrypt.py、test_macos_manual_launch.py等需要预编译的wechatdb_client.dll,仓库里没有,直接 error;test_voice_transcription_contract.py::test_export_option_is_wired_from_dialog_to_backend在基线提交上就是红的:
exportTranscribeVoice在ChatExportDialog.vue与useChatExport.js里都不存在 —— 看起来正是 feat: 升级本地语音识别并修复小程序图片导出与 Windows 回归 #151 的 diff 在补的东西。所以我描述自己改动的测试结果时都是和基线对比给的,没有把既有失败算进来。
如果你们的 CI 装了原生库,失败集会比上面小得多。
小结
谢谢!