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 依赖图片的亮度/结构分布来生成指纹, 对高信息熵的真实照片(人脸照片、复杂背景)区分度很好;但如果头像本身就是极简图案 (纯色块、简单几何图形、扁平风格头像),不同头像之间的哈希距离可能天然就很近, 默认阈值下仍可能出现误判。如果你的头像素材偏卡通/极简风格,建议:

  1. 先按默认参数跑一次,仔细看日志里打印出的每组重复项是否真的是同一个人
  2. 发现误判就调低 -threshold(甚至设为 0,只保留字节级完全一致的判断)
  3. 不放心就先别加 -delete-duplicates,用默认的“仅跳过、不删除源文件”模式,拼图结果满意后再决定是否要清理源文件夹

🛠 作者

Created by Qiujiu https://x.com/qiujiudev

Change by MoAEIOU https://867678.xyz

⚖️ 条款与授权

  • 请合理使用 X 平台数据
  • 请遵守 X 平台规则
  • 不建议用于商业化批量抓取

本项目基于Mo公共许可证授权