Releases: cdlongbow/mdcx-diy
Releases · cdlongbow/mdcx-diy
Release list
TRAWL 1.4.0 Windows Portable
TRAWL 1.4.0 Windows 便携版
基于 germondai/trawl 的 Windows 便携打包。
功能
- 绕过 Cloudflare Bot Management
- 支持 Akamai、Imperva WAF
- FlareSolverr 兼容 API (
/v1) - Camoufox 浏览器集成(Firefox 内核,随包附带)
- 内置 Redis 会话缓存(自动启动,显著提速)
- 内置稳定性补丁(Tier3/4 超时 30s → 90s)
使用方法
- 解压到任意目录(如
C:\Tools\trawl) - 双击
start-trawl.bat启动 - 等待浏览器预热 (约 1-2 分钟)
- 配置 MDCx: 设置 → 网络 → TRAWL 服务填
http://localhost:8191(不要填/v1,MDCx 自动协议适配)
系统要求
- Windows 10/11 (x64)
- 2GB RAM 可用内存
- 1GB 磁盘空间
故障排查
- 启动失败:运行
download-bun.bat重新下载 Bun - 端口冲突:编辑
src/.env,修改PORT=8191 - 浏览器慢:Camoufox 已随包附带,首次预热约 30s-1min
原版项目: https://github.com/germondai/trawl
许可: AGPL-3.0
v2.0.5 (20260815)
Changelog
v2.0.5 (2026-08-15)
功能
- DMM 高清升级探测去重:
upgrade_dmm_cover增加进程内 TTL 缓存(按规范化番号,成功缓存高清 URL、失败缓存 None)+ 同事件循环 in-flight 合并,JavBus / JavDB 三站 / R18.dev 等站点并行刮削同一番号时不再对相同 DMM 候选重复探测(未知系列全 404 场景从每站点 ~20 次请求降为全程一次) - DMM 高清图按分辨率放行跳过日亚:
_should_skip_amazon_for_existing_poster对 awsimgsrc DMM 高清图改为按分辨率直接放行(宽≥700),解决 DMM 竖图普遍 <400KB 被字节阈值误判为「不够清晰」而误走日亚搜索的问题;同时upgrade_dmm_cover增加分辨率校验,过滤 147x200 缩略图占位图,避免把海报覆盖成低清缩略图 - DMM 放行门槛降至 700:
POSTER_DMM_MIN_WIDTH与_DMM_HD_MIN_WIDTH由 1024 降到 700,MILK 系列 745x1081 等中尺寸图也能升级为海报并跳过日亚,进一步减少日亚请求;588x800 及 147x200 窄图/缩略图仍被拦截 - ASIN 数据库写入去重:
save_asin_to_excel写入前按番号去重,同番号已存在时跳过不写,避免重复行 - ASIN 出厂库增量合并:新增
merge_asin_db_from_backup(仿演员库,出厂库 md5 标记.asin_db_merge_marker未变跳过;按番号并集合并——新增番号追加、已有字段空缺补全,不覆盖用户已填值、不删行),软件更新后老用户启动时自动把出厂库新增/修正数据合并进用户库 - ASIN 出厂库更新:出厂 ASIN 库合并最新数据至 5083 个番号(净新增 1131),按番号自然排序
- 相似片推荐:新增
mdcx/core/similar.py(借鉴 OpenAver 设计)——基于 tag IDF 加权 Jaccard + 系列/片商/年份/时长/演员组合评分 + MMR 重排的本地离线相似算法,零网络零模型;主界面结果树右键「查看相似片推荐」弹出对话框,双击可跳转 - SQLite 刮削状态缓存(断点续刮):新增
mdcx/core/scrape_cache.py(标准库 sqlite3 + WAL),持久化每个源文件的刮削状态(done/failed + mtime + 失败计数),实现断点续刮与失败跨会话重试(上限 3 次,成功清零);数据库损坏自动回退内存模式;重启后自动跳过已完成且未变化的文件、恢复上次失败未超限文件 - 结果摘要缓存:
scrape_state表新增summary_json列(旧表自动迁移),刮削成功时存储相似推荐所需字段;相似推荐语料 = 历史成功结果(SQLite)+ 当次刮削结果,重启后仍可基于全历史推荐 - 相似推荐特征扩展:结果摘要新增
mosaic(有码/无码)、publisher(发行商)、directors(导演)、score(评分)四个特征,算法加分项同步扩展——马赛克类型相同 +0.35 / 不同 -0.30(有码无码不再混淆推荐)、发行商一致 +0.15、导演有交集 +0.15、评分接近 +0.05;同时修复召回缺陷:热门标签(IDF=0)不再被排除出候选召回,只影响精排权重,解决「目标片全是常见标签时完全推荐不出结果」的问题 - CF Bypass 落地域名白名单:新增配置
cf_bypass_trusted_hosts(逗号分隔,支持*.example.com子域通配),校验 Bypass 服务落地/重定向后的最终域名,防第三方服务被劫持时把恶意页面当数据;设置页新增「Bypass落地白名单」输入框 - 本地 Bypass 服务健康状态机:新增
_local_bypass_health(idle/ready/dead),连续请求失败达阈值(3 次)标记 dead 并解除转发(不再空等假死服务超时),冷却 300s 后自动重试,请求成功自动恢复 - Emby 演员管理器修复:修复「连接 Emby」无反应的根因(
ComputedManager模块不存在致 ModuleNotFoundError 被静默吞掉)、_is_jellyfin_server恒 False 的判断 bug;修复search_actor_info键大小写不匹配导致简介/信息抓取完全失效、DELETE 404 被当失败致无头像演员传不上头像;PreparePreviewThread加顶层异常处理并真正 emit error(原 worker 调用不存在的self.log致线程静默死亡);并发模型由「10 线程各自 event loop」改为单 loop +asyncio.Semaphore(10);头像/背景上传统一复用_upload_actor_photo;Emby 分支补personTypes=Actor过滤;sync_actor单演员异常不再中断整批、update_person_info不再用空值覆盖服务器已有字段 - Emby 演员管理器新功能:新增「设置」对话框(数据源优先级拖拽排序、演员类型过滤/去重、本地头像目录、Gfriends、使用数据库);「数据源测试」窗口(按配置优先级逐源验证头像/简介并展示结果,含字段/值信息表与快速设置面板);演员详情编辑对话框(左栏现有数据、右栏可编辑简介/信息表、快速设置面板、单独同步头像/简介);快速设置面板(测试/详情窗口内改即自动保存);「清空缓存文件夹」按钮;底部状态栏(连接/操作状态);同步完成后 3 秒自动重新获取演员列表
- Emby 演员管理器健壮性:头像补全主循环逐演员容错、backdrop 按索引删除、Gfriends commits 解析失败降级、时区偏差修复、缓存文件名防碰撞、
src[jp_name.index()]越界防护、按钮状态机修正、Dialog 关闭安全(closeEvent等待线程)、清理死代码(_avatar_cache/无效 checkbox/重复 layout 等) - 爬虫类型分类校准:按站点性质校准各刮削类型默认网站源——仅能有码(dmm、dmm_api、libredmm、r18dev、avbase、faleno、giga、dahlia、xcity、prestige、mgstage、fantastica、cableav、getchu、getchu_dmm、javlibrary、jav321、freejavbt、lulubar)、无码专属(avsox、kin8)、综合有码+无码(javbus、javdb 系、missav 系、javday、mmtv、airav_cc、avsex、official、iqqtv)、素人(含 mywife、iqqtv)、FC2(含 javdb 系)、欧美(仅 theporndb)、国产(含 iqqtv、hscangku);同步默认配置模板与 FEATURES 文档标注;「刮削不到?看这里!」弹窗网站列表改为动态生成(随爬虫注册自动更新)
- Emby 演员缓存持久化:演员头像缓存从临时目录(
tempfile.gettempdir())改为持久化目录userdata/emby_actor_cache/,与 gfriends.json/minnano_cache.xlsx 一致,重启后可复用缓存避免重复下载
修复
- 图片尺寸探测失效:
_read_stream_size/get_imgsize对 curl_cffi 同步生成器产出 bytes 误用await恒抛 TypeError,改为aiter_content异步迭代;修正测试 mock 与线上行为对齐(此前测试掩盖 bug,Amazon 高清择优/尺寸校验静默失效) - GUI 状态卡死:
_move_file_thread移动完成后按钮永久卡禁用(补reset_buttons_status+ try/finally);非刮削状态点「停止演员库维护」后signal_qt.stop/Flags.stop_requested永不复位导致日志静默、下一任务秒停(_on_actor_db_finished复位) - 停止标志 / 跨线程 Qt:
_show_version_thread移除 worker 线程直接操作 QWidget(setCursor/cookie 检查改经version_check_done信号回主线程);network_check按钮状态经信号回主线程 + 防重入 + 删重复 setText;to_cut后台线程读 QWidget 改为主线程采集mark_list传入、_set_pixmap跨线程改 UI 经信号回主线程 - trailer 旧文件复用:
deal_old_files带文件名时用旧file_name构造目标路径,与trailer_download的naming_rule命名不一致导致旧 trailer 无法复用/孤立文件,新增naming_rule参数对齐 - Amazon ASIN 记录丢失:低清兜底路径
asyncio.create_taskfire-and-forget(事件循环关闭时 pending task 销毁),改为await - 爬虫修复:
get_amazon_data删除对恒为 None 的html_info提取 session 的死逻辑;get_avsox_domain布尔优先级错误(or→and);check_urlmax_retries1→3 启用真实退避重试;非数字评分float()崩溃防御;translate_actor空演员名误替换全部演员;missav 冒号格式时长解析(1:30:00);missav URL slug 非番号格式不覆盖番号;javbus 搜索结果相对路径补全绝对 URL;javdb_new XPath 作用域逃逸;r18dev dvd_id 补零比较 - 读模式 tmdbid 不落盘:xlsx 缓存命中 tmdbid 立即回写
res.actor_tmdb_ids,修复still_missing为空时 NFO 缺 tmdbid - 文件写入原子化:NFO 与配置保存改为临时文件 +
os.replace原子写入(防写入中断损坏),推广到 missing 番号清单、gfriends JSON、actor_db 断点文件、amazon_database 报告等 - LogBuffer 并发安全:
write/clear加锁、get遍历浅拷贝,修复并发 append 时list changed size during iteration - 死代码清理:删除
image.py:get_pixmap(无调用且读取失败会删除源图)、amazon 4 个未用函数、parse_fanza_resp、save_asin_to_excel未实现的max_rows参数、query_asin_database重复 import 死分支、Config.from_legacytype(timedelta)恒 False 等 - Emby 演员管理器 Event loop is closed:9 处
new_event_loop()+close()改用全局executor常驻 event loop,避免 curl_cffi AsyncSession 跨 loop 复用报错 - Emby 演员管理器获取列表无反应:
QDialogButtonBox.Ok→StandardButton.Ok(PyQt6 6.4+ 扁平枚举已改嵌套);site_priority_dialog 两处补manager.save()修复网站优先级拖拽排序后不落盘 - Emby 演员管理器设置保存不生效:
EmbyActorSettingsDialog._save及两处_save_quick_settings补manager.save(),修复设置弹窗修改后不写盘 - Emby 设置弹窗 QListWidget 遍历崩溃:PyQt6 QListWidget 不可直接
for item in self.list迭代(抛 TypeError),改用item(i)索引遍历 - Emby 数据源测试跨线程 UI 崩溃:
ActorSourceTestDialog在后台线程直接操作 QWidget 导致崩溃,改用QThread+ 信号回调模式(ActorSourceTestThread发result/error信号回主线程) - 翻译页 label_60 文字被覆写:翻译页百度提示文字覆写了 label_60 原有文字导致重影,新建
label_baidu_hint独立显示 - 网络设置 groupBox 重影:网络设置页
trusted_hosts输入框与超时行 cell 冲突(同一 gridLayout cell 放了两个 widget),trusted_hosts移到 row=10,groupBox_28高度 400→480 - MDCx.ui 重复 objectName 消除:4 对重复 objectName(label_81/60/423/424 第二次出现)重命名,消除运行时控件查找歧义
- label_601 死引用删除:
main_window.py引用不存在的label_601,运行时必崩 - Courier 字体替换:117 处
font:"Courier"→font:"Courier New",修复中文环境字体名匹配失败导致文字显示为方框
工程质量
- 测试增强:新增 Amazon 跳过逻辑测试(DMM 高清/中尺寸放行、缩略图/窄图拦截、非 DMM 字节阈值保留、Amazon 来源不跳过);新增
upgrade_dmm_cover缓存行为测试(命中零探测、失败缓存保留原图、并发 in-flight 去重);更新 JavBus / R18.dev 受影响升级测试 - ASIN 库测试增强:新增 4 个测试(同番号去重、批量去重、出厂合并行为、md5 标记跳过)
- 新功能测试增强:新增相似算法 7 测试、相似对话框 5 测试、
ScrapeStateCache15 测试、CF 白名单 6 测试 + 4 集成测试、本地 Bypass 健康状态机 8 测试;修正test_media_resourcemock 与线上 curl_cffi 行为对齐 - 打包与 CI 加固:
build.py显式收集curl_cffi.libs防打包后 TLS 指纹库丢失;ci.yaml补check_info_db步骤;移除libs/下 OpenSSL 1.1 死数据;main.pystderr 重定向仅 IS_PYINSTALLER 时生效 - Emby 数据源实现合并:
emby_actor_manager.py/emby_actor_image.py/emby_actor_info.py三模块间重复的 Gfriends 索引解析、Graphis HTML 解析、信息补全链路合并——get_gfriends_index增强为完整版(版本检测+缓存刷新+展开写回)、抽出_parse_graphis_html/fill_actor_info_from_sources共用函数、_BIO_TAG_PATTERNS/_extract_bio_tags统一移至 manager 模块 - Emby API 共用函数提取:新建
emby_shared.py,移入 5 个共用函数(_generate_server_url/_build_jellyfin_headers/_is_jellyfin_server/_append_query/_upload_actor_photo),两模块从中导入并 re-export(# noqa: F401)保持向后兼容 - 本地头像预扫描索引:新增
build_local_avatar_index预扫描本地头像目录建立文件名索引,from_local_avatar加pre_scanned_index参数,N 次逐演员全树遍历降为 1 次预扫描 + N 次字典查找;新增 6 个测试
v2.0.4 (2026-08-14)
功能
- DMM 官方高清直链:新增番号→DMM cid 候选构造器
dmm_direct(前缀映射表覆盖 110+ 主流系列,含h_xxx/数字特殊前缀与跨厂商附加前缀,用 dmmapi/avbase 实测校准,配套dmm-probe探测工具);封面补全所有爬虫失败时走官方直链兜底(竖版ps高清作海报优先,横版pl裁剪兜底,无码番号跳过) - DMM 高清覆盖九个爬虫:LibreDMM / R18.dev / JavBus / JavDB 三站 / DMM / DMM API / avbase 刮削时直接把低清/水印图升级为 DMM 官方高清(统一
upgrade_dmm_cover+ 前缀表候选,check_url 验证,失败回退原图);开启「Poster 选优」时自动注入 DMM 高清候选按尺寸选优;DMM 图下载失败自动重试一次 - 同番号刮削结果 TTL 缓存:同批次相同番号文件(多 CD/重复文件)直接复用刮削结果,避免重复请求所有站点,TTL 90 秒 + 容量上限自动淘汰
- R18.dev 英文标题掩蔽还原:日文标题缺失时用服务端
title_en_uncensored还原掩蔽字段(Sex S***e→Sex Slave) - 补别名/补全功能调整:补别名来源切换为内置 minnano 爬虫(无 CF 拦截、命中质量高),新增「全量更新」开关与「起始行/限量」分片续跑;新增「minnano 补全」按钮(补缺生日/简介,日文自动翻译)
- 演员库维护工具健壮性:新增「检查用户库」(扫描格式/结构/数据异常,安全项一键自动修复)与独立停止按钮;联网工具统一滑动窗口并发(TMDB 5 / LibreDMM 2)+ 限量分片 + 断点续跑;LibreDMM 补链接加限流与共享会话
- info 库重构与同步:三语言列、五源标签收集、cn 翻译优化;出厂库合并用户库机制(cn 合并键 + md5 marker);actor 库标签/事务所/生涯日文残留清理与同步;check_actor_db 检查项整合
- Emby 演员管理器增强:信息补全与管理器接入本地演员库(最高优先,离线可用);新增 graphis 头像/背景图来源;跳过逻辑精确化(识别"无维基百科信息"占位符)
修复
- 打包与网络:PyInstaller 补充 minnano 爬虫 hidden-import;默认走代理列表补
minnano-av.com且裸 session 按配置走代理;JavDB 图片域名归一(水印tp.spfcas.com→ 无水印c0.jdbstatic.com) - Emby 演员管理器:「仅补缺失演员」不再拉全库、详情并发拉取、删除图按响应状态判定;移植版 import 修复、空响应不再误报失败、缓存导入路径修复
- 演员库维护工具:新增「更新 nfo tmdbid」与「校验 tmdbid 有效性」按钮;TMDB 演员匹配优化(繁→简转换、adult 权重优先、候选放宽 + 命中变体排序);actor_db 并发 UX 修复(信号带 task_id、通用模板消重)
- UI 与布局:工具页/设置页 groupBox 重叠连锁修复;删除无效单选按钮;MDCx.py 文案漂移回写 MDCx.ui;
validate_crawler_registry误报修复 - 网络诊断:站点超时改用用户配置值;新增"路由"列显示代理/直连
- 安全:修复
shell=True注入风险、移除 11 处?api_key=暴露、修复 5 处静默异常 + 下载 URL 白名单 - minnano 路径 bug:日文名查找与缓存文件改用运行时用户数据目录(打包后 CWD 失效问题)
- 其他:爬虫 xpath 防御下沉(10 处)、
update_nfo_tmdb_ids类型防御、UI 缩放异常不阻断启动、异常日志通道修复
工程质量
- mypy 严格化:移除全部 19 项
disable_error_code,全项目零抑制通过;BaseCrawler泛型化等修复 43+ 处类型错误,顺带修复 5 个隐藏 bug - 测试增强:UI 结构自动化测试、
validate_crawler_registry测试、Emby HTTP 测试、actor_db 按钮一致性测试;ruff 自动修复 138 处 - 其他:单站失败原因结构化分类(
FailureReason)、死代码清理、_download_chunk返回类型修正
文档
- 使用说明 tab 与 README/INSTALL/FEATURES/USER_GUIDE 等更新(仓库链接修复、新功能描述)
v2.0.3 (2026-08-03)
功能
- 演员库维护工具改为直接操作 xlsx:移除「输入演员名单 / 选择 nfo 目录」输入方式,新增三个独立按钮——补全中文名(按已有 TMDB ID 补中/英繁体翻译)、补全 LibreDMM 链接(补信息链接)、同步别名(用 TMDB 最新 also_known_as 刷新 keyword 列),统一扫描
actor_database.xlsx,每个按钮带独立防重入 - 同步别名与刮削共用同一规则:
run_actor_db_xlsx的sync_aliases改为复用_merge_keyword_values,与刮削写入 actor 库的别名合并逻辑保持一致,永不同步偏差 - 工具页工具排序调整:按用户偏好重排为 Emby 演员管理 → 演员库维护 ...
v2.0.3 (20260803)
Changelog
v2.0.3 (2026-08-03) 当前版本
功能
- 演员库维护工具改为直接操作 xlsx:移除「输入演员名单 / 选择 nfo 目录」输入方式,新增三个独立按钮——补全中文名(按已有 TMDB ID 补中/英繁体翻译)、补全 LibreDMM 链接(补信息链接)、同步别名(用 TMDB 最新 also_known_as 刷新 keyword 列),统一扫描
actor_database.xlsx,每个按钮带独立防重入 - 同步别名与刮削共用同一规则:
run_actor_db_xlsx的sync_aliases改为复用_merge_keyword_values,与刮削写入 actor 库的别名合并逻辑保持一致,永不同步偏差 - 工具页工具排序调整:按用户偏好重排为 Emby 演员管理 → 演员库维护 → 单文件刮削 → 裁剪图片 → 封面补图 → 软链接助手 → 移动视频字幕 → 检查演员缺失番号
- 打开演员数据库按钮:演员库维护工具新增「打开演员数据库」按钮,用系统默认程序打开
actor_database.xlsx供查看与手工编辑;文件不存在或打开失败时提示先安装 Excel/WPS 等办公软件 - 并发提速:演员库维护(补全中文名/链接/同步别名)改为滑动窗口并发模式,TMDB 请求并发 5、LibreDMM 请求并发 2,串行 150s+ 降至约 30s
修复
- 单 exe 按钮无提示退出:修复「打开演员数据库」按钮点击后程序直接退出(根因:
_open_actor_db_file误作实例方法调用导致 AttributeError,被 onefile 无控制台吞掉为静默退出) - executor.submit 传参错误:
AsyncBackgroundExecutor.submit()只接受单协程参数,executor.submit(asyncio.run, run())写法导致 TypeError。修复main_window.py的_run_actor_db_tool及tool_handlers.py的 cover_backfill 两处同源 bug - 跨线程 Qt 不安全操作:
_run_actor_db_tool协程内直接btn.setEnabled()跨线程操作 QWidget。改为actor_db_finishedpyqtSignal 主线程恢复,消除潜在 segfault 风险 - 日志通道不通:
_log_line仅写内存 LogBuffer,不显示在 GUI 日志页/文件,用户看到「开始扫描」后无后续输出误以为卡死。改为同时调用signal_qt.show_log_text实时显示
工程质量
- 崩溃转储埋点:
main.py注册 faulthandler + sys.excepthook + stdout/stderr 重定向到MAIN_PATH/crash/目录, onefile 无控制台环境下的 Python 异常不再被静默吞掉 - 死代码清理:移除
init.py重复setText接线、tool_handlers.py/main_window.py旧pushButton_actor_db_pick_dir/start_clicked引用已删除控件的死代码 - 记忆文件写入:
.monkeycode/MEMORY.md记录 9 条经验:onefile 静默退出诊断方法、日志通道一致性、executor.submit 正确用法、跨线程 Qt 安全模式、刮削并发架构参考
v2.0.2 (2026-08-02)
重构
- 工具页槽函数抽取:将
main_window.py中的 21 个工具/设置页槽函数抽取至独立模块tool_handlers.py,main_window.py从 3539 行减至约 3350 行 - 目录选择模式统一:新增
_pick_folder公共 helper,9 个目录选择方法统一为一行 delegate 调用 - 删除 2 个废弃 import:
emby_actor_image/emby_actor_info改为延迟导入
性能
- 行索引缓存:
update_actor_db_row新增_ACTOR_DB_ROW_INDEX全局索引(jp_name → row_index),消除 O(n²) workbook 全表扫描,三个调用点(actor_db_tool/tmdb_actor/scraper)直接受益 - 读取模式批量落盘:
scraper.py读取模式下演员 TMDB ID 补充改为共享 workbook,集中一次落盘,避免每个演员独立 load/save - 格式化跳过:
_format_db_worksheet检测表头是否已格式化,首次后跳过边框/字体/列宽设置,每次 save 减少 5 次全表遍历,CI 测试耗时从 20.8s 降至 10.7s
工程质量
- 移除 7 个文件的 network 标记:
test_tmdb_actor.py等 7 个文件的 93 个测试全部为纯离线 mock 测试,移除pytestmark = pytest.mark.network使其进入 CI - 修复 9 个预存陈旧测试:
test_network_lifecycle.py的_FakeLimiter/_FakeResponsemock 修复(添加 async context manager 支持),test_web_amazon_data.py的 mock 路径修正(mdcx.utils.rate_limit.random),test_amazon_database.pyfreeze_panes assert 修正 - 新增 14 个测试用例:行索引缓存 6 个、
_load_actor_db_wb/_flush_actor_db_wb4 个、目录选择/gfriends 同步 8 个 - CI 离线测试通过数从 530 提升至 635(+105),全量 627 passed,4 skipped
- 打包配置补充:
build.py新增mdcx.tools.emby_actor_image/emby_actor_info/sync_gfriends/scripts.cover_backfill的 hidden-import,排除 6 个开发期包(playwright/setuptools/mypy 等),预估单 exe 体积减少约 200MB
v2.0.1 (20260801)
Changelog
v2.0.1 (2026-08-01) 当前版本
新增功能
- Emby 演员管理器:工具页新增"Emby 演员管理器"按钮,打开独立对话框,可连接 Emby 服务器获取演员列表、多源匹配头像(Gfriends/minnano-av/本地文件夹)和简介(minnano-av/Wiki/本地数据库),支持批量同步到 Emby
- Emby 演员管理器 - 选库:点击"获取演员列表"时弹出媒体库选择对话框,可按需勾选要管理的库
- Emby 演员管理器 - 表格查看:演员列表表格展示头像/简介/背景图/影片数状态,支持按缺失情况筛选和搜索
- 封面补图工具:工具页新增"封面补图"功能,输入番号即可自动刮削并补齐缺失的
poster.jpg和thumb.jpg,复用当前配置的站点优先级、命名、裁切、水印规则,支持批量输入与覆盖已有图片 - 封面补图独立脚本:
scripts/cover_backfill.py支持命令行批量和自定义参数,可在打包外独立运行 - JIMMY 前缀路由:
JIMMY-003等番号自动路由到 FALENO 官网获取资料 - 失败原因记录:所有刮削来源均失败时,日志会列出各站点的具体失败原因(超时/搜索未匹配等),便于定位问题
改进
- 自动海报选优:不再将横向海报作为最终 Poster,候选图全为横图时自动改用缩略图右裁切,修复 ABF-371 一类封面未裁剪问题
修复
- Windows 路径超限:
{{ series }}系列名过长导致完整路径超 MAX_PATH(260) 时,自动缩短目录名,修复刮削后文件夹无法打开的问题(#19) - 中文字幕标签误添加:共享数据路径中未检查
nfo_tag_include配置,关闭后仍会添加"中文字幕"标签,现已修复(#20) - explorer /select 路径未引号:含空格或特殊字符的路径无法用
explorer /select打开,已修复为加引号调用 - Emby 4.9 剧照显示:
extrafanart_extras_copy将 .jpg 改为 .mp4 时使用 move 而非 copy,导致behind the scenes目录下只保留 .mp4,Emby 4.9 无法识别。改为 copy 同时保留 .jpg 和 .mp4(#17)
工程质量
- 新增 2 个模块,497 个测试用例全部通过
- 无新增第三方依赖,兼容 Windows 打包
- 新增 9 个测试用例:JIMMY 前缀路由测试、失败原因记录测试、海报横向过滤单元测试(7 个覆盖 portrait 选优逻辑)
v2.0.0 (20260718)
Changelog
v2.0.0 (2026-07-18) 当前版本
MDCx v2.0.0 全新出发。
新增爬虫
- R18.dev 爬虫:新增
r18dev刮削源,走 R18.dev 的 JSON 接口直连,不需要翻墙,番号自动补零适配,支持 dvd_id 和 content_id 两种查询方式 - JavDB API 爬虫:新增
javdb_api刮削源,走 JavDB 镜像站 HTML 直连,不用 CF 代理,带演员名简繁转换和异体字修正(筱→篠、穗→穂等),可选镜像站地址 - MissAV免防护墙爬虫 missav_api:原MissAV爬虫常被防护墙挡住;现在多了一条免防护墙通道,不用费力绕墙也能直接刮到它的影片信息
新增功能
- 界面缩放比例配置:在"设置 → 界面外观 → 高分屏缩放"设置区域新增缩放比例下拉框,支持"跟随系统"/80%/90%/100%/125%/150%/175%/200% 共 8 档选项(含非整数倍缩放)。选择非默认值时通过
QT_SCALE_FACTOR环境变量(Qt6 原生机制)精确控制界面缩放,解决高分屏字体过大或过小的问题,并可配合暗色模式使用。保存后重启软件生效 - 内置 CF Bypass(零配置):新增"启用内置 Bypass"选项,勾选后 MDCx 自动在后台启动本地旁路服务(基于隐身浏览器),无需手动搭建外部服务。
- 新增设置项:
cf_bypass_auto(bool,默认 false),与外部cf_bypass_url互斥,地址为空时方能启用本地服务
刮削系统
- 四种刮削模式:正常模式(全新刮削:扫描→刮数据→下图片→生成NFO→重命名→移动)/ 整理模式(仅归类文件,不下载图片不生成NFO)/ 更新模式(调整已有文件的目录结构)/ 读取模式(维护补刮,4个独立选项自由组合)
- 字段级优先级配置:每个字段(标题、简介、演员、海报、评分等)可独立配置来源网站顺序和翻译开关,不同刮削类型还可设置不同的字段优先级
- 刮削模式:支持 info(信息优先)、speed(速度优先)、single(单站快速)三种模式
- 刮削类型独立配置:有码/无码/FC2/国产/欧美/素人每种类型可分别设置网站源列表
- 马赛克标准化:自动将各类标签归一化为有码、无码、无码破解、流出、无码流出、国产
- 标签优先级系统:基于 info_database.xlsx 的标签优先级排序,优先级标签→系列标签→其他标签
网络与反爬
- CF Bypass 双模式:支持 Mirror 模式(外部 bypass 服务代理请求)与 HTML 模式(调用 bypass 服务
/html端点) - 域名级独立限流:每个网站独立令牌桶限流,默认 8 req/s,失败自动退避重试(403/429/500/502/503/504)
- 连接池管理:三级连接池(HostPool → ConnectionPool → Session),域名级并发控制,Session 热更新,空闲自动回收
- 网络连通性检查:内置一键测试各网站可达性工具
- 软链接支持:可选择不移动原文件,创建软链接到目标目录
界面与工具
- 暗色/亮色主题切换:内置完整双主题支持
- 海报裁剪工具:图形化界面,鼠标拖拽选择裁剪区域,支持 2:3 标准比例
- 缺失文件检测:检查媒体库中哪些文件缺失
- 成功/失败文件列表:自动记录处理结果,支持断点续刮
- 多CD分集支持:多碟片文件自动合并为一条记录
- 额外剧照处理:自动下载多张剧照并管理副本
- 图片修复:自动修复下载的图片(尺寸、格式等)
- 24 个命名模板字段:番号、标题、演员、系列、制作商、分辨率、编码等,Jinja2 条件渲染
- 演员 NFO 生成:生成 Kodi 兼容的演员信息文件(.actors 目录)
- 内置资源管理:演员数据库、ASIN 数据库、NFO 信息数据库、字体等资源统一管理
配置系统
- 配置自动迁移:旧版 INI 格式配置文件在加载时自动转换为 JSON 格式
- 配置热切换:修改配置后自动生效,无需重启
- 敏感字段脱敏:API Key 等敏感字段在导出时自动替换为
***
修复
- 网络标签页按钮重叠:修复了设置页面里网络标签页的控件叠到一起、显示不全的问题,调整了各区域的高度和位置
- Windows 下启动崩溃:修复了 Windows 版打开时因
topLevelItem(1)为空导致闪退的问题 - R18.dev 补零位数:番号标准化从 3 位补零改为 5 位,跟 R18.dev 数据库实际格式一致
- fc2cmadb 演员数据爬取修复:Inertia.js Deferred Props 导致的演员数据缺失问题。修复逻辑改为 Inertia JSON 解析后若 actresses 为空则回退到 HTML table 解析补充,同时增强 Inertia partial reload 请求头(注入 X-Inertia-Version 和 X-XSRF-TOKEN),解决已登录但爬不到演员的问题
- fc2ppvdb Cookie 检查优化:域名迁移至 fc2cmadb 后,Cookie 检查不再依赖
fc2ppvdb_session关键字 - 刮削失败标题被日志污染:修复
main_window.py:1180中刮削失败后标题回退到LogBuffer.error().get()的问题——该函数会跨任务聚合其他任务的 TMDB 演员处理日志(如[演员数据库] 已新增 ... 并写入 tmdbid=...)作为标题。改为使用文件名兜底 - 刮削过程更稳:修好了多个任务同时刮时偶尔"串数据"的老毛病,演员信息写入也更省系统资源
- 修好 30 个第三方库的安全隐患:把软件用到的外部工具库都升级到安全版本,整体更安全
改进
- 绕过网站防护墙更稳更快:后台服务重写,启动不发呆、不卡死;安装包里直接带好隐身浏览器,装完即用,不用额外下载和配置
- 界面缩放优化:放宽 Windows 窗口最小尺寸限制(从硬锁定 1089x700 改为 QSize(850, 550)),解决 1920x1080 125% 缩放下界面过大且无法缩小的问题
工程质量
- 推送前自动跑测试:新增 pytest 推送前自检,
uv run check会自动执行 ruff 格式检查 + ruff 代码规范 + pytest 单元测试,三项全过才能推 - 新增一批测试用例:R18.dev 14 个测试 + JavDB API 18 个测试,覆盖番号解析、字段映射、搜索匹配等工作
其他
- 软件内"使用说明"的内容已更新,过时的信息换成了最新的
- 新增一批自动测试,防止上面的问题以后又冒出来
v1.4.0 (2026-07-07)
新增功能
- Bing 翻译引擎:新增 Bing 翻译选项,免费免配置,与 Google 一样自动爬取翻译接口,支持中/英/日互译
- 无码官网爬虫:official 源扩展支持 Caribbeancom、HEYZO、1Pondo、Pacopacomama、10Musume 五个无码官网,番号自动路由到对应站点
- official 官网前缀路由:FNS/FALENO 与 DLDSS/DAHLIA 番号前缀自动委派给对应的子爬虫,扩大官网覆盖范围
- fc2ppvdb 适配 fc2cmadb:基础 URL 迁移至
fc2cmadb.com,新增 Inertia.js JSON + HTML 双模式解析,不再依赖旧版 fc2ppvdb XHR 接口
修复
- avsex 更新修复: 兼容 /cn/ 简体中文页面,修复 title/actor/tag/outline/extrafanart XPath 提取
- iqqtv 标题清理:去除标题末尾的
caribbeancom_番号/1pondo_番号等站点前缀,避免污染无码影片标题 - fix: 图片简化命名(poster.jpg)在 skip_reorganize 和不移动文件路径下被忽略
v1.3.3 (2026-06-23)
修复
- xcity 刮不出中文:修复了 xcity 刮出来全是英文的问题(加了请求头让网站返回繁体中文,再自动转成简体)
- 多任务同时刮会串数据:修复了同时刮多个影片时,xcity 的数据会串到别的影片上的问题
- 预置4个默认代理:amazon.co.jp、m.media-amazon.com、xcity.jp、dmm.co.jp 保障正常刮削 dmm、xcity及下载日亚高清封面
日志精简
- 日志去重:同一行重复的日志不再刷屏了
- 去掉没意义的"(old)"日志:之前每个文件都会刷"Poster done! (old)"这类消息(意思是"文件已经有了,跳过下载"),现在不显示了,日志减少了将近一半
- 报错提示不再重复弹:图片下载失败时,"去设置里勾选xxx"的提示只出现一次,不再日志和错误提示各出现一次
- 翻译跳过不再逐行输出:如果多个翻译引擎都不可用或跳过,现在汇总成一行显示,不再每个引擎占一行
日志合并
- Poster 裁剪日志合并为一行:以前裁剪海报时先输出"开始处理",再输出"用了什么策略",现在合并为一行,信息量不变
- Poster 直复制缩略图日志合并:策略说明和完成报告合并为一行
开发者工具
- 添加类型检查工具:新增 pyright 配置,后续开发时能自动发现潜在的类型错误,减少发布后出问题的概率
v1.3.2 (2026-06-22)
功能增强
- 刮削速度优化:图片下载改成并行模式,缩略图下载完后,海报、剧照等会同时下载,不用排队等了
- 演员 TMDB ID 查询加速:从 TMDB 查演员信息时,多个演员同时查(以前是排着队一个一个查),补演员改名翻译和网址也合并到一块写入硬盘,减少重复读写
界面调整
- 代理设置更清晰了:原来的"不使用代理"改成了"使用代理"。现在只对你填进去的网站走代理,其他网站默认直连,不会出现代理影响国内网站的尴尬。默认预填了
amazon.co.jp和m.media-amazon.com
修复
- Excel 字体大小不一致:修复了往演员数据库和 Amazon ASIN 数据库添加新数据时,字体默认变成 12 号,和原来 11 号不统一的问题
v1.3.1 (2026-06-20)
新增功能
- 新爬虫:JavDB APP版接口:新增
javdb_app刮削源,走的是 JavDB App 的接口,有码/无码/素人/FC2/欧美都能用,配置里对应的分类已默认加上
修复
- 欧美影片刮着刮着就超时:修复了一个代码缩进错误。以前日系番号(如
SSNI-111)正常,但欧美番号(如Viv-thomas.24.12.20)因为名字里带点号,程序错误地进入了"等待同番号"的死循环,干等 300 秒后超时报错。现在欧美番号也能正常刮了
界面调整
- 可用网站列表刷新:"可用网站"弹窗和"指定网站"下拉框现在和实际注册的爬虫保持一致,移除了已停用的
avsex、love6 - 无码分类编辑框不再出现有码站:
javlibrary、libredmm、dmm_api不会再出现在无码的编辑网站对话框里
日志优化
- 分隔线不再用满屏 emoji:以前每个任务开始和结束用 50 个连续 emoji(
👆×50、👇×50)做分隔线,在某些电脑上显示为乱码方框,且日志文件体积巨大。改为 40 个等号====,清爽多了
v1.3.0 (2026-06-18) 重磅更新
新增功能
- 演员日文名更准了:以前填演员表用的是搜索用的中文名,现在改用 TMDB 返回的日文原名(像"三上悠亜"这种)
- 自动补演员网址:刮削完会自动检查哪些演员有 TMDB ID 但没网址,用日文名去 LibreDMM 找到网址填上
- 重磅更新,读取模式下,向已刮削的影片的NFO中补全写入演员tmdbid
- 前提条件:
- 1.设置网络页面填入TMDB API KEY(没有的要去TMDB申请)
- 2.设置NFO页面勾选"为演员写入TMDB ID"
- 3.设置刮削模式为选读取模式,并勾选"允许更新 nfo文件"
- 4.TMDB上要有这个演员的信息资料
- 注意:如果不想在补全演员tmdbid后,改变nfo中的演员名,请不要勾选设置翻译页面的"使用演员映射表翻译演员"
- 好消息:AVdb的LEO、龙王大佬们在持续补充 TMDB 女优资料中,lsj可以定期用读取模式去获取新增加女优的tmdbid了,不用重新刮削
读取模式改进
- 选项更灵活了:4 个选项现在互不绑定。可以只勾"有 NFO 时更新"不勾"更新 NFO",就只整理文件不改 NFO;也可以只勾"更新 NFO"不勾"有 NFO 时更新",就只改 NFO 内容不挪文件
修复
- NFO 里的
<![CDATA[...]]>改用正规解析,不会再因为内容里恰好有]]>而出错 - 正则表达式安全:文件名中的特殊字符会先转义再匹配,不会崩
- 并发请求异常:演员名查询时如果某个请求出错,不会让整个任务崩溃
- 被悄悄吞掉的错误日志:演员数据查询中隐蔽的异常现在会写入日志
v1.2.1 (2026-06-17)
修复
- 修复传统窗口模式下(未勾选"隐藏边框"),点击原生标题栏关闭按钮无响应问题
- 修复反序设置导致已有超链接单元格样式标记丢失
功能增强
- 完善 LibreDMM 演员链接自动补全功能
- xlsx 冻结窗格从
A2改为B2,同时固定表头行和第1列(番号列),横向滚动时始终可见 - 传统窗口模式下,点击关闭按钮同样遵循
HIDE_CLOSE配置,支持"关闭时隐藏到系统托盘"
UI 改进
- 更新设置翻译页面提示词,反映 xlsx 数据库格式和 TMDB 自动填充功能
v1.2.0 (2026-06-16)
架构改进
- 将
_read_actor_db_xlsx及列常量从tmdb_actor.py迁移至resources.py,彻底消除模块初始化阶段的循环导入依赖
修复
- #consts.py
IS_DOCKER改为检测/.dockerenv文件,避免 Linux 桌面环境误判为 Docker - #number.py
get_number_first_letter("")加空字符串保护,防止IndexError崩溃 - #tmdb_actor.py
_tmdb_request()curl_cffi 分支补上follow_redirects参数,统一两种 HTTP 后端的重定向行为
功能增强
- #file_crawler.py
_normalize_release_value()增加YYYYMMDD无分隔符日期格式兼容 - #tmdb_actor.py 演员数据库首次发现为
None时自动重试加载(延迟加载兜底),减少不必要的 TMDB API 请求 - #tmdb_actor.py 对
update_actor_db_row()增加asyncio.Lock()防止并发写 xlsx 导致文件损坏 - #resources.py
reload_actor_db()文件不存在时不再重置actor_db为None;异常时恢复旧值保留缓存;异常信息同步写入主日志和 traceback 日志
代码精简
- #resources.py
_get_mark_icon()7 处重复的 if-not-isfile-copy 合并为数据驱动循环 - #number.py FC2 / HEYZO 番号提取两个几乎相同的 elif 分支合并为一个,区分前缀和最小位数
- #crawlers/ 12 个爬虫文件各自定义的
split_csv函数统一为crawlers/base/types.py的共享函数,各文件 import 使用 - #pyproject.toml 添加
[build-system]段,符合 PEP 517/518 打包规范
线程安全
- #log_buffer.py
all_buffers字典所有读写操作增加threading.Lock保护,消除多协程并发时字典损坏风险
v1.1.0 (2026-06-13)
新增功能
-
Minnano-av 演员信息刮削源
- 新增
minnano_crawler.py模块,支持从 みんなのAV 网站抓取演员信息 - 支持中文→日文演员名映射(通过
actor_database.xlsx查找日文原名后再搜索) - 实现模糊搜索匹配策略:精确匹配优先,其次多字符公共子串匹配,最后五十音回退搜索
- 详情页加了标题核对,避免匹配到错误的演员
- 新增
-
Emby 演员信息增强
- 在 Wikipedia 之前优先查询 Minnano-av 数据源,补充 Emby 演员元数据
- Minnano-av 缓存文件
minnano_cache.xlsx集成,避免重复请求 - 缓存表头冻结、数据行全边框、URL 超链接,便于用户手动审查
-
Gfriends 头像本地仓库
- UI 新增"Gfriends 设置"区域:可以选择本地仓库路径、点按钮更新(拉取最新头像)、显示最后更新时间
- 有本地仓库时优先从本地读取,不联网;本地没配置时才从 GitHub 网络下载
- 更新按钮在没选路径或正在更新时禁用,防止误操作
- 保存配置时,如果本地和网络都没填会弹窗提醒
-
Gfriends 头像升级:AI 修复版优先
- 找Gfriends 头像时优先用
AI-Fix-名字.jpg(AI 修复增强版),再找普通版
- 找Gfriends 头像时优先用
-
搜索链接中文兼容
- Graphis、Minnano-av、Wikidata 搜索时,演员名字自动做编码转换,解决日语名字搜索失败的问题
配置变更
- 新增
gfriends_local_path配置项:填本地 Gfriends 文件夹路径即可启用本地模式
v1.0.0 (2026-06-11)
MDCx-DIY 首个正式发布版,基于Hazard804改良的mdcx项目制作,对前辈表示衷心感谢!!!
刮削引擎
- 40+ 网站爬虫(有码/无码/FC2/国产/欧美)
- 新增 libredmm 刮削源(可刮削dmm下架影片)
- GenericBaseCrawler 统一框架 + 上下文隔离
- 智能番号识别与自动分类(用户预定义)
- 异步并发架构(asyncio + 渐进式任务调度)
- curl-cffi 浏览器指纹伪装
TMDB 演员
- 新增 NFO 女优 TMDB ID 功能
- NFO 女优 TMDB ID 写入(需在 NFO 设置勾选 + 填入 API Key)
- 日文原名搜索,日本出生地 + 女性/未指定性别 + 精确名匹配过滤
- 多候选按 popularity 排序取最优,失败不阻塞刮削
- 令牌桶限流器(3.5 req/s,突发 10),并发 3 查询
- TMDB adult 候选自动跳过,搜索候选数优化为 5
- actor_database.xlsx用于nfo增加tmdbid和演员映射功能,反向搜索 + 增量写入,已预置部分女优数据,后续随软件使用动态更新(新演员若TMDB有数据就在表中追加数据,表中演员若TMDB数据更新,表中相关数据会追加)
- 超链接一致性校验与自动修复
Amazon 高清封面
- ASIN 条码识别 + 三层搜索策略
- 封面 poster 固定 1500 尺寸(平衡质量和大小)
- 新增Amazon ASIN 缓存功能,通过Excel 缓存(amazon_asin_database.xlsx)
- 缓存去重逻辑,保护高置信度数据
- ASIN 缓存Excel随软件使用动态追加(同个影片二次刮削时不用再去Amazon查找,直接用表中数据下载高清封面)
数据源迁移
- actor_mapping XML + TMDB 缓存合并为 actor_database.xlsx
- mapping_info.xml 迁移为 info_database.xlsx
- 内置 xlsx 数据库,支持表头冻结,筛选、超链接等,用户可自行编辑或通过超链接审查数据
代理与网络
- HTTP/SOCKS5 代理配置
- 新增"不使用代理"网站选择器:40+ 刮削源下拉快速选择,智能域名匹配
- 默认 api.tmdb.org 不走代理
元数据与媒体
- NFO 生成器,30+ 字段,兼容 Kodi/Emby/Jellyfin
- 多语言翻译(Google/Bing/百度/DeepL/DeepLX/LLM 六引擎)
- Jinja2 命名模板引擎
- OpenCV 人脸检测智能裁剪
- 海报/背景图/预告片自动获取
- 字幕管理与缺失检测
- Emby/Jellyfin 演员信息补全 + 头像同步
界面与工具
- PyQt6 桌面图形界面
- 命令行工具(crawl、gen_enums)
- 构建工具链(build、bump、changelog、check)
工程质量
- 70+ 个测试文件覆盖核心模块
- CI:ruff format + ruff check
-...
220260708
Changelog
v2.0.0 (2026-07-08)
版本说明
v2.0.0 是一个重大版本号升级,反映了项目从 v1.x 的持续演进。包含自 v1.4.0 以来的所有累积改进。
修复
- fc2cmadb 演员数据爬取修复:Inertia.js Deferred Props 导致的演员数据缺失问题。修复逻辑改为 Inertia JSON 解析后若 actresses 为空则回退到 HTML table 解析补充,同时增强 Inertia partial reload 请求头(注入 X-Inertia-Version 和 X-XSRF-TOKEN),解决已登录但爬不到演员的问题
- fc2ppvdb Cookie 检查优化:域名迁移至 fc2cmadb 后,Cookie 检查不再依赖
fc2ppvdb_session关键字 - 界面缩放优化:放宽 Windows 窗口最小尺寸限制(从硬锁定 1089x700 改为 QSize(850, 550)),解决 1920x1080 125% 缩放下界面过大且无法缩小的问题
新增功能
- 界面缩放比例配置:在"高分屏缩放"设置区域新增缩放比例下拉框,支持"跟随系统"/100%/125%/150%/175%/200% 六档选项。选择非默认值时通过
QT_SCALE_FACTOR环境变量(Qt6 原生机制)精确控制界面缩放,解决高分屏字体过大或过小的问题。保存后重启软件生效
v1.4.0 (2026-07-07)
新增功能
- Bing 翻译引擎:新增 Bing 翻译选项,免费免配置,与 Google 一样自动爬取翻译接口,支持中/英/日互译
- 无码官网爬虫:official 源扩展支持 Caribbeancom、HEYZO、1Pondo、Pacopacomama、10Musume 五个无码官网,番号自动路由到对应站点
- official 官网前缀路由:FNS/FALENO 与 DLDSS/DAHLIA 番号前缀自动委派给对应的子爬虫,扩大官网覆盖范围
- fc2ppvdb 适配 fc2cmadb:基础 URL 迁移至
fc2cmadb.com,新增 Inertia.js JSON + HTML 双模式解析,不再依赖旧版 fc2ppvdb XHR 接口
修复
- avsex 更新修复: 兼容 /cn/ 简体中文页面,修复 title/actor/tag/outline/extrafanart XPath 提取
- iqqtv 标题清理:去除标题末尾的
caribbeancom_番号/1pondo_番号等站点前缀,避免污染无码影片标题 - fix: 图片简化命名(poster.jpg)在 skip_reorganize 和不移动文件路径下被忽略
v1.3.3 (2026-06-23)
修复
- xcity 刮不出中文:修复了 xcity 刮出来全是英文的问题(加了请求头让网站返回繁体中文,再自动转成简体)
- 多任务同时刮会串数据:修复了同时刮多个影片时,xcity 的数据会串到别的影片上的问题
- 预置4个默认代理:amazon.co.jp、m.media-amazon.com、xcity.jp、dmm.co.jpdmm.co.jp 保障正常刮削 dmm、xcity及下载日亚高清封面
日志精简
- 日志去重:同一行重复的日志不再刷屏了
- 去掉没意义的"(old)"日志:之前每个文件都会刷"Poster done! (old)"这类消息(意思是"文件已经有了,跳过下载"),现在不显示了,日志减少了将近一半
- 报错提示不再重复弹:图片下载失败时,"去设置里勾选xxx"的提示只出现一次,不再日志和错误提示各出现一次
- 翻译跳过不再逐行输出:如果多个翻译引擎都不可用或跳过,现在汇总成一行显示,不再每个引擎占一行
日志合并
- Poster 裁剪日志合并为一行:以前裁剪海报时先输出"开始处理",再输出"用了什么策略",现在合并为一行,信息量不变
- Poster 直复制缩略图日志合并:策略说明和完成报告合并为一行
开发者工具
- 添加类型检查工具:新增 pyright 配置,后续开发时能自动发现潜在的类型错误,减少发布后出问题的概率
v1.3.2 (2026-06-22)
功能增强
- 刮削速度优化:图片下载改成并行模式,缩略图下载完后,海报、剧照等会同时下载,不用排队等了
- 演员 TMDB ID 查询加速:从 TMDB 查演员信息时,多个演员同时查(以前是排着队一个一个查),补演员改名翻译和网址也合并到一块写入硬盘,减少重复读写
界面调整
- 代理设置更清晰了:原来的"不使用代理"改成了"使用代理"。现在只对你填进去的网站走代理,其他网站默认直连,不会出现代理影响国内网站的尴尬。默认预填了
amazon.co.jp和m.media-amazon.com
修复
- Excel 字体大小不一致:修复了往演员数据库和 Amazon ASIN 数据库添加新数据时,字体默认变成 12 号,和原来 11 号不统一的问题
v1.3.1 (2026-06-20)
新增功能
- 新爬虫:JavDB APP版接口:新增
javdb_app刮削源,走的是 JavDB App 的接口,有码/无码/素人/FC2/欧美都能用,配置里对应的分类已默认加上
修复
- 欧美影片刮着刮着就超时:修复了一个代码缩进错误。以前日系番号(如
SSNI-111)正常,但欧美番号(如Viv-thomas.24.12.20)因为名字里带点号,程序错误地进入了"等待同番号"的死循环,干等 300 秒后超时报错。现在欧美番号也能正常刮了
界面调整
- 可用网站列表刷新:"可用网站"弹窗和"指定网站"下拉框现在和实际注册的爬虫保持一致,移除了已停用的
avsex、love6 - 无码分类编辑框不再出现有码站:
javlibrary、libredmm、javdbapi不会再出现在无码的编辑网站对话框里
日志优化
- 分隔线不再用满屏 emoji:以前每个任务开始和结束用 50 个连续 emoji(
👆×50、👇×50)做分隔线,在某些电脑上显示为乱码方框,且日志文件体积巨大。改为 40 个等号====,清爽多了
文档更新
- 同步更新了
FEATURES.md、COMPLETE_FEATURES.md、CODE_WIKI.md、architecture.md中的爬虫列表和分类信息
v1.3.0 (2026-06-18) 重磅更新
新增功能
- 演员日文名更准了:以前填演员表用的是搜索用的中文名,现在改用 TMDB 返回的日文原名(像"三上悠亜"这种)
- 自动补演员网址:刮削完会自动检查哪些演员有 TMDB ID 但没网址,用日文名去 LibreDMM 找到网址填上
- 重磅更新,读取模式下,向已刮削的影片的NFO中补全写入演员tmdbid
- 前提条件:
- 1.设置网络页面填入TMDB API KEY(没有的要去TMDB申请)
- 2.设置NFO页面勾选“为演员写入TMDB ID”
- 3.设置刮削模式为选读取模式,并勾选“允许更新 nfo文件”
- 4.TMDB上要有这个演员的信息资料
- 注意:
- 如果不想在补全演员tmdbid后,改变nfo中的演员名,请不要勾选设置翻译页面的“使用演员映射表翻译演员”
- 因为软件在补全演员tmdbid后,默认用TMDB上的该演员中文简体或繁体名映射,甚至在没有中文简体或繁体名时直接回退日文名,可能和你原nfo的演员名不一样
- 好消息:AVdb的LEO、龙王大佬们在持续补充 TMDB 女优资料中,lsj可以定期用读取模式去获取新增加女优的tmdbid了,不用重新刮削
读取模式改进
- 选项更灵活了:4 个选项现在互不绑定。可以只勾"有 NFO 时更新"不勾"更新 NFO",就只整理文件不改 NFO;也可以只勾"更新 NFO"不勾"有 NFO 时更新",就只改 NFO 内容不挪文件
修复
- NFO 里的
<![CDATA[...]]>改用正规解析,不会再因为内容里恰好有]]>而出错 - 正则表达式安全:文件名中的特殊字符会先转义再匹配,不会崩
- 并发请求异常:演员名查询时如果某个请求出错,不会让整个任务崩溃
- 被悄悄吞掉的错误日志:演员数据查询中隐蔽的异常现在会写入日志
v1.2.1 (2026-06-17)
修复
- 修复传统窗口模式下(未勾选"隐藏边框"),点击原生标题栏关闭按钮无响应问题
- 修复反序设置导致已有超链接单元格样式标记丢失
功能增强
- 完善 LibreDMM 演员链接自动补全功能
- xlsx 冻结窗格从
A2改为B2,同时固定表头行和第1列(番号列),横向滚动时始终可见 - 传统窗口模式下,点击关闭按钮同样遵循
HIDE_CLOSE配置,支持"关闭时隐藏到系统托盘"
UI 改进
- 更新设置翻译页面提示词,反映 xlsx 数据库格式和 TMDB 自动填充功能
v1.2.0 (2026-06-16)
架构改进
- 将
_read_actor_db_xlsx及列常量从tmdb_actor.py迁移至resources.py,彻底消除模块初始化阶段的循环导入依赖
修复
- #consts.py
IS_DOCKER改为检测/.dockerenv文件,避免 Linux 桌面环境误判为 Docker - #number.py
get_number_first_letter("")加空字符串保护,防止IndexError崩溃 - #tmdb_actor.py
_tmdb_request()curl_cffi 分支补上follow_redirects参数,统一两种 HTTP 后端的重定向行为
功能增强
- #file_crawler.py
_normalize_release_value()增加YYYYMMDD无分隔符日期格式兼容 - #tmdb_actor.py 演员数据库首次发现为
None时自动重试加载(延迟加载兜底),减少不必要的 TMDB API 请求 - #tmdb_actor.py 对
update_actor_db_row()增加asyncio.Lock()防止并发写 xlsx 导致文件损坏 - #resources.py
reload_actor_db()文件不存在时不再重置actor_db为None;异常时恢复旧值保留缓存;异常信息同步写入主日志和 traceback 日志
代码精简
- #resources.py
_get_mark_icon()7 处重复的 if-not-isfile-copy 合并为数据驱动循环 - #number.py FC2 / HEYZO 番号提取两个几乎相同的 elif 分支合并为一个,区分前缀和最小位数
- #crawlers/ 12 个爬虫文件各自定义的
split_csv函数统一为crawlers/base/types.py的共享函数,各文件 import 使用 - #pyproject.toml 添加
[build-system]段,符合 PEP 517/518 打包规范
线程安全
- #log_buffer.py
all_buffers字典所有读写操作增加threading.Lock保护,消除多协程并发时字典损坏风险
v1.1.0 (2026-06-13)
新增功能
-
Minnano-av 演员信息刮削源
- 新增
minnano_crawler.py模块,支持从 みんなのAV 网站抓取演员信息 - 支持中文→日文演员名映射(通过
actor_database.xlsx查找日文原名后再搜索) - 实现模糊搜索匹配策略:精确匹配优先,其次多字符公共子串匹配,最后五十音回退搜索
- 详情页加了标题核对,避免匹配到错误的演员
- 新增
-
Emby 演员信息增强
- 在 Wikipedia 之前优先查询 Minnano-av 数据源,补充 Emby 演员元数据
- Minnano-av 缓存文件
minnano_cache.xlsx集成,避免重复请求 - 缓存表头冻结、数据行全边框、URL 超链接,便于用户手动审查
-
Gfriends 头像本地仓库
- UI 新增"Gfriends 设置"区域:可以选择本地仓库路径、点按钮更新(拉取最新头像)、显示最后更新时间
- 有本地仓库时优先从本地读取,不联网;本地没配置时才从 GitHub 网络下载
- 更新按钮在没选路径或正在更新时禁用,防止误操作
- 保存配置时,如果本地和网络都没填会弹窗提醒
-
Gfriends 头像升级:AI 修复版优先
- 找Gfriends 头像时优先用
AI-Fix-名字.jpg(AI 修复增强版),再找普通版
- 找Gfriends 头像时优先用
-
搜索链接中文兼容
- Graphis、Minnano-av、Wikidata 搜索时,演员名字自动做编码转换,解决日语名字搜索失败的问题
配置变更
- 新增
gfriends_local_path配置项:填本地 Gfriends 文件夹路径即可启用本地模式
v1.0.0 (2026-06-11)
MDCx-DIY 首个正式发布版,基于Hazard804改良的mdcx项目制作,对前辈表示衷心感谢!!!
刮削引擎
- 40+ 网站爬虫(有码/无码/FC2/国产/欧美)
- 新增 libredmm 刮削源(可刮削dmm下架影片)
- GenericBaseCrawler 统一框架 + 上下文隔离
- 智能番号识别与自动分类(用户预定义)
- 异步并发架构(asyncio + 渐进式任务调度)
- curl-cffi 浏览器指纹伪装
TMDB 演员
- 新增 NFO 女优 TMDB ID 功能
- NFO 女优 TMDB ID 写入(需在 NFO 设置勾选 + 填入 API Key)
- 日文原名搜索,日本出生地 + 女性/未指定性别 + 精确名匹配过滤
- 多候选按 popularity 排序取最优,失败不阻塞刮削
- 令牌桶限流器(3.5 req/s,突发 10),并发 3 查询
- TMDB adult 候选自动跳过,搜索候选数优化为 5
- actor_database.xlsx用于nfo增加tmdbid和演员映射功能,反向搜索 + 增量写入,已预置部分女优数据,后续随软件使用动态更新(新演员若TMDB有数据就在表中追加数据,表中演员若TMDB数据更新,表中相关数据会追加)
- 超链接一致性校验与自动修复
Amazon 高清封面
- ASIN 条码识别 + 三层搜索策略
- 封面 poster 固定 1500 尺寸(平衡质量和大小)
- 新增Amazon ASIN 缓存功能,通过Excel 缓存(amazon_asin_database.xlsx)
- 缓存去重逻辑,保护高置信度数据
- ASIN 缓存Excel随软件使用动态追加(同个影片二次刮削时不用再去Amazon查找,直接用表中数据下载高清封面)
数据源迁移
- actor_mapping XML + TMDB 缓存合并为 actor_database.xlsx
- mapping_info.xml 迁移为 info_database.xlsx
- 内置 xlsx 数据库,支持表头冻结,筛选、超链接等,用户可自行编辑或通过超链接审查数据
代理与网络
- HTTP/SOCKS5 代理配置
- 新增"不使用代理"网站选择器:40+ 刮削源下拉快速选择,智能域名匹配
- 默认 api.tmdb.org 不走代理
元数据与媒体
- NFO 生成器,30+ 字段,兼容 Kodi/Emby/Jellyfin
- 多语言翻译(Google/Bing/百度/DeepL/DeepLX/LLM 六引擎)
- Jinja2 命名模板引擎
- OpenCV 人脸检测智能裁剪
- 海报/背景图/预告片自动获取
- 字幕管理与缺失检测
- Emby/Jellyfin 演员信息补全 + 头像同步
界面与工具
- PyQt6 桌面图形界面
- 命令行工具(crawl、gen_enums)
- 构建工具链(build、bump、changelog、check)
修复
工程质量
- 70+ 个测试文件覆盖核心模块
- CI:ruff format + ruff check
- Release:macOS DMG + Windows EXE
- 新增29 篇技术文档(架构、模块、API、迁移指南等)
220260623
Changelog
v1.3.3 (2026-06-23)
Bug 修复
- xcity 刮不出中文:修复了 xcity 刮出来全是英文的问题(加了请求头让网站返回繁体中文,再自动转成简体)
- 多任务同时刮会串数据:修复了同时刮多个影片时,xcity 的数据会串到别的影片上的问题
- 预置4个默认代理:amazon.co.jp、m.media-amazon.com、xcity.jp、dmm.co.jpdmm.co.jp 保障正常刮削 dmm、xcity及下载日亚高清封面
日志精简
- 日志去重:同一行重复的日志不再刷屏了
- 去掉没意义的"(old)"日志:之前每个文件都会刷"Poster done! (old)"这类消息(意思是"文件已经有了,跳过下载"),现在不显示了,日志减少了将近一半
- 报错提示不再重复弹:图片下载失败时,"去设置里勾选xxx"的提示只出现一次,不再日志和错误提示各出现一次
- 翻译跳过不再逐行输出:如果多个翻译引擎都不可用或跳过,现在汇总成一行显示,不再每个引擎占一行
日志合并
- Poster 裁剪日志合并为一行:以前裁剪海报时先输出"开始处理",再输出"用了什么策略",现在合并为一行,信息量不变
- Poster 直复制缩略图日志合并:策略说明和完成报告合并为一行
开发者工具
- 添加类型检查工具:新增 pyright 配置,后续开发时能自动发现潜在的类型错误,减少发布后出问题的概率
220260622
Changelog
v1.3.2 (2026-06-22)
功能增强
- 刮削速度优化:图片下载改成并行模式,缩略图下载完后,海报、剧照等会同时下载,不用排队等了
- 演员 TMDB ID 查询加速:从 TMDB 查演员信息时,多个演员同时查(以前是排着队一个一个查),补演员改名翻译和网址也合并到一块写入硬盘,减少重复读写
界面调整
- 代理设置更清晰了:原来的"不使用代理"改成了"使用代理"。现在只对你填进去的网站走代理,其他网站默认直连,不会出现代理影响国内网站的尴尬。默认预填了
amazon.co.jp和m.media-amazon.com
Bug 修复
- Excel 字体大小不一致:修复了往演员数据库和 Amazon ASIN 数据库添加新数据时,字体默认变成 12 号,和原来 11 号不统一的问题
v1.3.1 (2026-06-20)
新增功能
- 新爬虫:JavDB APP版接口:新增
javdb_app刮削源,走的是 JavDB App 的接口,有码/无码/素人/FC2/欧美都能用,配置里对应的分类已默认加上
Bug 修复
- 欧美影片刮着刮着就超时:修复了一个代码缩进错误。以前日系番号(如
SSNI-111)正常,但欧美番号(如Viv-thomas.24.12.20)因为名字里带点号,程序错误地进入了"等待同番号"的死循环,干等 300 秒后超时报错。现在欧美番号也能正常刮了
界面调整
- 可用网站列表刷新:"可用网站"弹窗和"指定网站"下拉框现在和实际注册的爬虫保持一致,移除了已停用的
avsex、love6 - 无码分类编辑框不再出现有码站:
javlibrary、libredmm、javdbapi不会再出现在无码的编辑网站对话框里
日志优化
- 分隔线不再用满屏 emoji:以前每个任务开始和结束用 50 个连续 emoji(
👆×50、👇×50)做分隔线,在某些电脑上显示为乱码方框,且日志文件体积巨大。改为 40 个等号====,清爽多了
文档更新
- 同步更新了
FEATURES.md、COMPLETE_FEATURES.md、CODE_WIKI.md、architecture.md中的爬虫列表和分类信息
v1.3.0 (2026-06-18) 重磅更新
新增功能
- 演员日文名更准了:以前填演员表用的是搜索用的中文名,现在改用 TMDB 返回的日文原名(像"三上悠亜"这种)
- 自动补演员网址:刮削完会自动检查哪些演员有 TMDB ID 但没网址,用日文名去 LibreDMM 找到网址填上
- 重磅更新,读取模式下,向已刮削的影片的NFO中补全写入演员tmdbid
- 前提条件:
- 1.设置网络页面填入TMDB API KEY(没有的要去TMDB申请)
- 2.设置NFO页面勾选“为演员写入TMDB ID”
- 3.设置刮削模式为选读取模式,并勾选“允许更新 nfo文件”
- 4.TMDB上要有这个演员的信息资料
- 注意:
- 如果不想在补全演员tmdbid后,改变nfo中的演员名,请不要勾选设置翻译页面的“使用演员映射表翻译演员”
- 因为软件在补全演员tmdbid后,默认用TMDB上的该演员中文简体或繁体名映射,甚至在没有中文简体或繁体名时直接回退日文名,可能和你原nfo的演员名不一样
- 好消息:AVdb的LEO、龙王大佬们在持续补充 TMDB 女优资料中,lsj可以定期用读取模式去获取新增加女优的tmdbid了,不用重新刮削
读取模式改进
- 选项更灵活了:4 个选项现在互不绑定。可以只勾"有 NFO 时更新"不勾"更新 NFO",就只整理文件不改 NFO;也可以只勾"更新 NFO"不勾"有 NFO 时更新",就只改 NFO 内容不挪文件
Bug 修复
- NFO 里的
<![CDATA[...]]>改用正规解析,不会再因为内容里恰好有]]>而出错 - 正则表达式安全:文件名中的特殊字符会先转义再匹配,不会崩
- 并发请求异常:演员名查询时如果某个请求出错,不会让整个任务崩溃
- 被悄悄吞掉的错误日志:演员数据查询中隐蔽的异常现在会写入日志
v1.2.1 (2026-06-17)
Bug 修复
- 修复传统窗口模式下(未勾选"隐藏边框"),点击原生标题栏关闭按钮无响应问题
- 修复反序设置导致已有超链接单元格样式标记丢失
功能增强
- 完善 LibreDMM 演员链接自动补全功能
- xlsx 冻结窗格从
A2改为B2,同时固定表头行和第1列(番号列),横向滚动时始终可见 - 传统窗口模式下,点击关闭按钮同样遵循
HIDE_CLOSE配置,支持"关闭时隐藏到系统托盘"
UI 改进
- 更新设置翻译页面提示词,反映 xlsx 数据库格式和 TMDB 自动填充功能
v1.2.0 (2026-06-16)
架构改进
- 将
_read_actor_db_xlsx及列常量从tmdb_actor.py迁移至resources.py,彻底消除模块初始化阶段的循环导入依赖
Bug 修复
- #consts.py
IS_DOCKER改为检测/.dockerenv文件,避免 Linux 桌面环境误判为 Docker - #number.py
get_number_first_letter("")加空字符串保护,防止IndexError崩溃 - #tmdb_actor.py
_tmdb_request()curl_cffi 分支补上follow_redirects参数,统一两种 HTTP 后端的重定向行为
功能增强
- #file_crawler.py
_normalize_release_value()增加YYYYMMDD无分隔符日期格式兼容 - #tmdb_actor.py 演员数据库首次发现为
None时自动重试加载(延迟加载兜底),减少不必要的 TMDB API 请求 - #tmdb_actor.py 对
update_actor_db_row()增加asyncio.Lock()防止并发写 xlsx 导致文件损坏 - #resources.py
reload_actor_db()文件不存在时不再重置actor_db为None;异常时恢复旧值保留缓存;异常信息同步写入主日志和 traceback 日志
代码精简
- #resources.py
_get_mark_icon()7 处重复的 if-not-isfile-copy 合并为数据驱动循环 - #number.py FC2 / HEYZO 番号提取两个几乎相同的 elif 分支合并为一个,区分前缀和最小位数
- #crawlers/ 12 个爬虫文件各自定义的
split_csv函数统一为crawlers/base/types.py的共享函数,各文件 import 使用 - #pyproject.toml 添加
[build-system]段,符合 PEP 517/518 打包规范
线程安全
- #log_buffer.py
all_buffers字典所有读写操作增加threading.Lock保护,消除多协程并发时字典损坏风险
v1.1.0 (2026-06-13)
新增功能
-
Minnano-av 演员信息刮削源
- 新增
minnano_crawler.py模块,支持从 みんなのAV 网站抓取演员信息 - 支持中文→日文演员名映射(通过
actor_database.xlsx查找日文原名后再搜索) - 实现模糊搜索匹配策略:精确匹配优先,其次多字符公共子串匹配,最后五十音回退搜索
- 详情页加了标题核对,避免匹配到错误的演员
- 新增
-
Emby 演员信息增强
- 在 Wikipedia 之前优先查询 Minnano-av 数据源,补充 Emby 演员元数据
- Minnano-av 缓存文件
minnano_cache.xlsx集成,避免重复请求 - 缓存表头冻结、数据行全边框、URL 超链接,便于用户手动审查
-
Gfriends 头像本地仓库
- UI 新增"Gfriends 设置"区域:可以选择本地仓库路径、点按钮更新(拉取最新头像)、显示最后更新时间
- 有本地仓库时优先从本地读取,不联网;本地没配置时才从 GitHub 网络下载
- 更新按钮在没选路径或正在更新时禁用,防止误操作
- 保存配置时,如果本地和网络都没填会弹窗提醒
-
Gfriends 头像升级:AI 修复版优先
- 找Gfriends 头像时优先用
AI-Fix-名字.jpg(AI 修复增强版),再找普通版
- 找Gfriends 头像时优先用
-
搜索链接中文兼容
- Graphis、Minnano-av、Wikidata 搜索时,演员名字自动做编码转换,解决日语名字搜索失败的问题
配置变更
- 新增
gfriends_local_path配置项:填本地 Gfriends 文件夹路径即可启用本地模式
v1.0.0 (2026-06-11)
MDCx-DIY 首个正式发布版,基于Hazard804改良的mdcx项目制作,对前辈表示衷心感谢!!!
刮削引擎
- 40+ 网站爬虫(有码/无码/FC2/国产/欧美)
- 新增 libredmm 刮削源(可刮削dmm下架影片)
- GenericBaseCrawler 统一框架 + 上下文隔离
- 智能番号识别与自动分类(用户预定义)
- 异步并发架构(asyncio + 渐进式任务调度)
- curl-cffi 浏览器指纹伪装
TMDB 演员
- 新增 NFO 女优 TMDB ID 功能
- NFO 女优 TMDB ID 写入(需在 NFO 设置勾选 + 填入 API Key)
- 日文原名搜索,日本出生地 + 女性/未指定性别 + 精确名匹配过滤
- 多候选按 popularity 排序取最优,失败不阻塞刮削
- 令牌桶限流器(3.5 req/s,突发 10),并发 3 查询
- TMDB adult 候选自动跳过,搜索候选数优化为 5
- actor_database.xlsx用于nfo增加tmdbid和演员映射功能,反向搜索 + 增量写入,已预置部分女优数据,后续随软件使用动态更新(新演员若TMDB有数据就在表中追加数据,表中演员若TMDB数据更新,表中相关数据会追加)
- 超链接一致性校验与自动修复
Amazon 高清封面
- ASIN 条码识别 + 三层搜索策略
- 封面 poster 固定 1500 尺寸(平衡质量和大小)
- 新增Amazon ASIN 缓存功能,通过Excel 缓存(amazon_asin_database.xlsx)
- 缓存去重逻辑,保护高置信度数据
- ASIN 缓存Excel随软件使用动态追加(同个影片二次刮削时不用再去Amazon查找,直接用表中数据下载高清封面)
数据源迁移
- actor_mapping XML + TMDB 缓存合并为 actor_database.xlsx
- mapping_info.xml 迁移为 info_database.xlsx
- 内置 xlsx 数据库,支持表头冻结,筛选、超链接等,用户可自行编辑或通过超链接审查数据
代理与网络
- HTTP/SOCKS5 代理配置
- 新增"不使用代理"网站选择器:40+ 刮削源下拉快速选择,智能域名匹配
- 默认 api.tmdb.org 不走代理
元数据与媒体
- NFO 生成器,30+ 字段,兼容 Kodi/Emby/Jellyfin
- 多语言翻译(Google/百度/DeepL/DeepLX/LLM 五引擎)
- Jinja2 命名模板引擎
- OpenCV 人脸检测智能裁剪
- 海报/背景图/预告片自动获取
- 字幕管理与缺失检测
- Emby/Jellyfin 演员信息补全 + 头像同步
界面与工具
- PyQt6 桌面图形界面
- 命令行工具(crawl、gen_enums)
- 构建工具链(build、bump、changelog、check)
修复
工程质量
- 70+ 个测试文件覆盖核心模块
- CI:ruff format + ruff check
- Release:macOS DMG + Windows EXE
- 新增29 篇技术文档(架构、模块、API、迁移指南等)
220260621
Changelog
v1.3.1 (2026-06-20)
新增功能
- 新爬虫:JavDB APP版接口:新增
javdb_app刮削源,走的是 JavDB App 的接口,有码/无码/素人/FC2/欧美都能用,配置里对应的分类已默认加上
Bug 修复
- 欧美影片刮着刮着就超时:修复了一个代码缩进错误。以前日系番号(如
SSNI-111)正常,但欧美番号(如Viv-thomas.24.12.20)因为名字里带点号,程序错误地进入了"等待同番号"的死循环,干等 300 秒后超时报错。现在欧美番号也能正常刮了
界面调整
- 可用网站列表刷新:"可用网站"弹窗和"指定网站"下拉框现在和实际注册的爬虫保持一致,移除了已停用的
avsex、love6 - 无码分类编辑框不再出现有码站:
javlibrary、libredmm、javdbapi不会再出现在无码的编辑网站对话框里
日志优化
- 分隔线不再用满屏 emoji:以前每个任务开始和结束用 50 个连续 emoji(
👆×50、👇×50)做分隔线,在某些电脑上显示为乱码方框,且日志文件体积巨大。改为 40 个等号====,清爽多了
文档更新
- 同步更新了
FEATURES.md、COMPLETE_FEATURES.md、CODE_WIKI.md、architecture.md中的爬虫列表和分类信息
v1.3.0 (2026-06-18) 重磅更新
新增功能
- 演员日文名更准了:以前填演员表用的是搜索用的中文名,现在改用 TMDB 返回的日文原名(像"三上悠亜"这种)
- 自动补演员网址:刮削完会自动检查哪些演员有 TMDB ID 但没网址,用日文名去 LibreDMM 找到网址填上
- 重磅更新,读取模式下,向已刮削的影片的NFO中补全写入演员tmdbid
- 前提条件:
- 1.设置网络页面填入TMDB API KEY(没有的要去TMDB申请)
- 2.设置NFO页面勾选“为演员写入TMDB ID”
- 3.设置刮削模式为选读取模式,并勾选“允许更新 nfo文件”
- 4.TMDB上要有这个演员的信息资料
- 注意:
- 如果不想在补全演员tmdbid后,改变nfo中的演员名,请不要勾选设置翻译页面的“使用演员映射表翻译演员”
- 因为软件在补全演员tmdbid后,默认用TMDB上的该演员中文简体或繁体名映射,甚至在没有中文简体或繁体名时直接回退日文名,可能和你原nfo的演员名不一样
- 好消息:AVdb的LEO、龙王大佬们在持续补充 TMDB 女优资料中,lsj可以定期用读取模式去获取新增加女优的tmdbid了,不用重新刮削
读取模式改进
- 选项更灵活了:4 个选项现在互不绑定。可以只勾"有 NFO 时更新"不勾"更新 NFO",就只整理文件不改 NFO;也可以只勾"更新 NFO"不勾"有 NFO 时更新",就只改 NFO 内容不挪文件
Bug 修复
- NFO 里的
<![CDATA[...]]>改用正规解析,不会再因为内容里恰好有]]>而出错 - 正则表达式安全:文件名中的特殊字符会先转义再匹配,不会崩
- 并发请求异常:演员名查询时如果某个请求出错,不会让整个任务崩溃
- 被悄悄吞掉的错误日志:演员数据查询中隐蔽的异常现在会写入日志
v1.2.1 (2026-06-17)
Bug 修复
- 修复传统窗口模式下(未勾选"隐藏边框"),点击原生标题栏关闭按钮无响应问题
- 修复反序设置导致已有超链接单元格样式标记丢失
功能增强
- 完善 LibreDMM 演员链接自动补全功能
- xlsx 冻结窗格从
A2改为B2,同时固定表头行和第1列(番号列),横向滚动时始终可见 - 传统窗口模式下,点击关闭按钮同样遵循
HIDE_CLOSE配置,支持"关闭时隐藏到系统托盘"
UI 改进
- 更新设置翻译页面提示词,反映 xlsx 数据库格式和 TMDB 自动填充功能
v1.2.0 (2026-06-16)
架构改进
- 将
_read_actor_db_xlsx及列常量从tmdb_actor.py迁移至resources.py,彻底消除模块初始化阶段的循环导入依赖
Bug 修复
- #consts.py
IS_DOCKER改为检测/.dockerenv文件,避免 Linux 桌面环境误判为 Docker - #number.py
get_number_first_letter("")加空字符串保护,防止IndexError崩溃 - #tmdb_actor.py
_tmdb_request()curl_cffi 分支补上follow_redirects参数,统一两种 HTTP 后端的重定向行为
功能增强
- #file_crawler.py
_normalize_release_value()增加YYYYMMDD无分隔符日期格式兼容 - #tmdb_actor.py 演员数据库首次发现为
None时自动重试加载(延迟加载兜底),减少不必要的 TMDB API 请求 - #tmdb_actor.py 对
update_actor_db_row()增加asyncio.Lock()防止并发写 xlsx 导致文件损坏 - #resources.py
reload_actor_db()文件不存在时不再重置actor_db为None;异常时恢复旧值保留缓存;异常信息同步写入主日志和 traceback 日志
代码精简
- #resources.py
_get_mark_icon()7 处重复的 if-not-isfile-copy 合并为数据驱动循环 - #number.py FC2 / HEYZO 番号提取两个几乎相同的 elif 分支合并为一个,区分前缀和最小位数
- #crawlers/ 12 个爬虫文件各自定义的
split_csv函数统一为crawlers/base/types.py的共享函数,各文件 import 使用 - #pyproject.toml 添加
[build-system]段,符合 PEP 517/518 打包规范
线程安全
- #log_buffer.py
all_buffers字典所有读写操作增加threading.Lock保护,消除多协程并发时字典损坏风险
v1.1.0 (2026-06-13)
新增功能
-
Minnano-av 演员信息刮削源
- 新增
minnano_crawler.py模块,支持从 みんなのAV 网站抓取演员信息 - 支持中文→日文演员名映射(通过
actor_database.xlsx查找日文原名后再搜索) - 实现模糊搜索匹配策略:精确匹配优先,其次多字符公共子串匹配,最后五十音回退搜索
- 详情页加了标题核对,避免匹配到错误的演员
- 新增
-
Emby 演员信息增强
- 在 Wikipedia 之前优先查询 Minnano-av 数据源,补充 Emby 演员元数据
- Minnano-av 缓存文件
minnano_cache.xlsx集成,避免重复请求 - 缓存表头冻结、数据行全边框、URL 超链接,便于用户手动审查
-
Gfriends 头像本地仓库
- UI 新增"Gfriends 设置"区域:可以选择本地仓库路径、点按钮更新(拉取最新头像)、显示最后更新时间
- 有本地仓库时优先从本地读取,不联网;本地没配置时才从 GitHub 网络下载
- 更新按钮在没选路径或正在更新时禁用,防止误操作
- 保存配置时,如果本地和网络都没填会弹窗提醒
-
Gfriends 头像升级:AI 修复版优先
- 找Gfriends 头像时优先用
AI-Fix-名字.jpg(AI 修复增强版),再找普通版
- 找Gfriends 头像时优先用
-
搜索链接中文兼容
- Graphis、Minnano-av、Wikidata 搜索时,演员名字自动做编码转换,解决日语名字搜索失败的问题
配置变更
- 新增
gfriends_local_path配置项:填本地 Gfriends 文件夹路径即可启用本地模式
v1.0.0 (2026-06-11)
MDCx-DIY 首个正式发布版,基于Hazard804改良的mdcx项目制作,对前辈表示衷心感谢!!!
刮削引擎
- 40+ 网站爬虫(有码/无码/FC2/国产/欧美)
- 新增 libredmm 刮削源(可刮削dmm下架影片)
- GenericBaseCrawler 统一框架 + 上下文隔离
- 智能番号识别与自动分类(用户预定义)
- 异步并发架构(asyncio + 渐进式任务调度)
- curl-cffi 浏览器指纹伪装
TMDB 演员
- 新增 NFO 女优 TMDB ID 功能
- NFO 女优 TMDB ID 写入(需在 NFO 设置勾选 + 填入 API Key)
- 日文原名搜索,日本出生地 + 女性/未指定性别 + 精确名匹配过滤
- 多候选按 popularity 排序取最优,失败不阻塞刮削
- 令牌桶限流器(3.5 req/s,突发 10),并发 3 查询
- TMDB adult 候选自动跳过,搜索候选数优化为 5
- actor_database.xlsx用于nfo增加tmdbid和演员映射功能,反向搜索 + 增量写入,已预置部分女优数据,后续随软件使用动态更新(新演员若TMDB有数据就在表中追加数据,表中演员若TMDB数据更新,表中相关数据会追加)
- 超链接一致性校验与自动修复
Amazon 高清封面
- ASIN 条码识别 + 三层搜索策略
- 封面 poster 固定 1500 尺寸(平衡质量和大小)
- 新增Amazon ASIN 缓存功能,通过Excel 缓存(amazon_asin_database.xlsx)
- 缓存去重逻辑,保护高置信度数据
- ASIN 缓存Excel随软件使用动态追加(同个影片二次刮削时不用再去Amazon查找,直接用表中数据下载高清封面)
数据源迁移
- actor_mapping XML + TMDB 缓存合并为 actor_database.xlsx
- mapping_info.xml 迁移为 info_database.xlsx
- 内置 xlsx 数据库,支持表头冻结,筛选、超链接等,用户可自行编辑或通过超链接审查数据
代理与网络
- HTTP/SOCKS5 代理配置
- 新增"不使用代理"网站选择器:40+ 刮削源下拉快速选择,智能域名匹配
- 默认 api.tmdb.org 不走代理
元数据与媒体
- NFO 生成器,30+ 字段,兼容 Kodi/Emby/Jellyfin
- 多语言翻译(Google/百度/DeepL/DeepLX/LLM 五引擎)
- Jinja2 命名模板引擎
- OpenCV 人脸检测智能裁剪
- 海报/背景图/预告片自动获取
- 字幕管理与缺失检测
- Emby/Jellyfin 演员信息补全 + 头像同步
界面与工具
- PyQt6 桌面图形界面
- 命令行工具(crawl、gen_enums)
- 构建工具链(build、bump、changelog、check)
修复
工程质量
- 70+ 个测试文件覆盖核心模块
- CI:ruff format + ruff check
- Release:macOS DMG + Windows EXE
- 新增29 篇技术文档(架构、模块、API、迁移指南等)
220260620
Changelog
v1.3.1 (2026-06-20)
新增功能
- 新爬虫:JavDB APP版接口:新增
javdb_app刮削源,走的是 JavDB App 的接口,有码/无码/素人/FC2/欧美都能用,配置里对应的分类已默认加上
Bug 修复
- 欧美影片刮着刮着就超时:修复了一个代码缩进错误。以前日系番号(如
SSNI-111)正常,但欧美番号(如Viv-thomas.24.12.20)因为名字里带点号,程序错误地进入了"等待同番号"的死循环,干等 300 秒后超时报错。现在欧美番号也能正常刮了
界面调整
- 可用网站列表刷新:"可用网站"弹窗和"指定网站"下拉框现在和实际注册的爬虫保持一致,移除了已停用的
avsex、love6 - 无码分类编辑框不再出现有码站:
javlibrary、libredmm、javdbapi不会再出现在无码的编辑网站对话框里
日志优化
- 分隔线不再用满屏 emoji:以前每个任务开始和结束用 50 个连续 emoji(
👆×50、👇×50)做分隔线,在某些电脑上显示为乱码方框,且日志文件体积巨大。改为 40 个等号====,清爽多了
文档更新
- 同步更新了
FEATURES.md、COMPLETE_FEATURES.md、CODE_WIKI.md、architecture.md中的爬虫列表和分类信息