XAvatarWall
原版:https://github.com/qiujiu-dev/XAvatarWall
✨ 功能特点
- 📷 配合油猴脚本采集 X(Twitter) 粉丝头像
- ⬇️ 自动下载头像图片(无需手动准备文件夹)
- 🧩 自动生成头像墙图片
- 🔍 图片重复检测
- 📐 自动计算最佳排列布局
- 🚀 支持大量头像处理
- 🖥️ 支持多平台运行
🎯 使用场景
- 🎉 粉丝突破纪念
- 📈 账号成长记录
- 🏆 社区活动展示
- 🎂 周年纪念图片制作
🔧 使用
VCR:https://youtu.be/KJUmJKQRleM?si=DPjoqWyfBJ0npA3G
将X头像助手.js这个脚本粘贴进篡改猴,然后打开https://x.com/你的用户名/followers
点击开始采集并滚动到最下面,脚本截获了所有头像之后点击导出为TOML文件(文件名形如 avatar_20260817153000.toml)。刷新页面不会丢记录,可用「清空记录」重新开始。
把 TOML 和可执行文件放进同一个文件夹,直接运行即可。不指定 -config 时会自动选用最新的 avatar_*.toml。
程序读取 TOML 里的头像链接并下载到临时目录,拼完即删。也可用 -input-dir 直接从本地文件夹拼图。
最终图片默认输出到当前目录下的 fans_grid.png,也可以用参数覆盖默认行为。
支持的参数列表
| 参数 | 默认值 | 说明 |
|---|---|---|
-config |
自动 | 油猴脚本导出的 TOML;不填则选用最新的 avatar_*.toml |
-output |
fans_grid.png |
输出图片路径(固定输出 PNG) |
-proxy |
空(直连) | 下载代理,支持 http 和 socks5。自动识别类型 |
-input-dir |
空 | 从本地目录读取头像并拼图(跳过下载) |
-size |
200 |
每张头像缩略图边长(像素) |
-spacing |
4 |
头像间距(像素) |
-bg |
#ADD8E6 |
背景色,支持 #RRGGBB / #RGB |
-cols |
0(自动) |
手动指定列数,不填则自动算最接近正方形的行列数 |
-dedupe |
true |
是否启用感知哈希去重 |
-threshold |
2 |
去重的汉明距离阈值,越小越严格(越不容易误判为重复) |
-delete-duplicates |
false |
删除重复源文件(只对 -input-dir 有意义) |
-workers |
16 |
并发下载上限(越大越快但更容易被限流) |
头像输入支持:jpg / jpeg / png / bmp / gif / webp;拼图输出固定为 PNG,这是为了最终输出的高清。
⚙️ 自行构建
go build
🖥 对于开发者
📏 布局规则
与原版一致:cols = ceil(sqrt(n)),rows = ceil(n / cols),即优先保证接近正方形的整体比例。
📽 去重逻辑
感知哈希(pHash)判断两张图片“看起来是否相同”,而不要求文件字节完全一致。
-threshold 是汉明距离阈值:
0-2(默认2):严格模式,几乎不会把两个不同的人误判为同一个人, 但如果重复图片被大幅压缩/缩小/改变宽高比,可能会漏检4-6:能容忍更明显的重新编码、缩放差异,但开始有一定概率误判8+:宽松模式,漏检率低,但误判“长得像的不同头像”为重复的概率明显上升
已知局限:pHash 依赖图片的亮度/结构分布来生成指纹, 对高信息熵的真实照片(人脸照片、复杂背景)区分度很好;但如果头像本身就是极简图案 (纯色块、简单几何图形、扁平风格头像),不同头像之间的哈希距离可能天然就很近, 默认阈值下仍可能出现误判。如果你的头像素材偏卡通/极简风格,建议:
- 先按默认参数跑一次,仔细看日志里打印出的每组重复项是否真的是同一个人
- 发现误判就调低
-threshold(甚至设为0,只保留字节级完全一致的判断) - 不放心就先别加
-delete-duplicates,用默认的“仅跳过、不删除源文件”模式,拼图结果满意后再决定是否要清理源文件夹
🛠 作者
Created by Qiujiu https://x.com/qiujiudev
Change by MoAEIOU https://867678.xyz
⚖️ 条款与授权
- 请合理使用 X 平台数据
- 请遵守 X 平台规则
- 不建议用于商业化批量抓取
本项目基于Mo公共许可证授权