CoolFace
Apppublic

theo670668/cf-aggregator

sourceHugging Faceupdated 20d agoView on Hugging Face
0likes
App README

cf-vless-lite

按需更新型本地/云端聚合器:周期性抓取 Emilia proxyip 候选,仅在更新期间临时启动 engine 做真实链路实测(落地 IPv4 + 出口国家非 CN + 延迟门控),完成即停止,产出订阅(base64 / 明文)与状态。

取代旧 cf-vless-sub 的 HF 部署:环境变量直接沿用同名语义(ACCOUNTS / HOST / UUID / REGIONS / PERREGION / NODECOUNT / MAXMS / SCHEDULEMIN / HTTPPORT / ENGINEBIN / TOKEN)。

运行形态

  • —serve:常驻轻量调度(默认每 60 分钟一轮,SCHEDULE_MIN 可配)+ 只读订阅服务(默认 :7860)。engine 只在每一轮更新内启动/停止,其余时间零常驻。
  • —update [--force]:手动立即更新一轮(--force 全量重测并重抓上游)。
  • —status:当前节点 / 黑名单 / 上次运行统计。
  • —gen-ips:抓取本机视角优选 IP(可填 CONNECT_ADDRS)。

更新流程

抓 Emilia(jsdelivr+raw 双源 + 缓存 TTL 30min)
  → REGIONS 候选筛选(每地区配额 = PER_REGION,默认 3,总量上限可配)
  → 生成临时 engine 配置(每候选一个 socks inbound + VLESS outbound 指向账号,
     path 携带 proxyip=候选;本地调试可经 SOCKS_PROXY 出站)
  → 启动 engine → 并发实测回声站(api.ip.sb 主 + fallback)
  → 判定:出口必须 IPv4;出口国家 CN 直接拒收(根治 google.cn/m 跳转);
     延迟 > MAX_MS 不收(0=不限);地区配额按实测出口国家计数
  → fill 重试:不足缺口半数自动延时补一轮(最多 2 轮)
  → 停止 engine(finally 兜底)→ 发布订阅(links.txt / links.base64 / state.json)

HTTP 接口(只读订阅服务,恒不启动 engine)

路由说明
GET /feedbase64 订阅;?fmt=raw 明文
GET /status节点数 / 黑名单 / 上次运行统计 / 延迟摘要(min/med/max,定位客户端 -1)
GET /update?token=xxx后台触发一次更新(配置 TOKEN 后必须携带;未配置则禁用外部触发)

环境变量(全部可配,config.json 同义)

变量默认说明
ACCOUNTS空JSON 数组 [{"id","host","uuid"}],多账号轮询;或 HOST+UUID 单账号
REGIONSSG,JP,HK,US,NL,GB,DE,FR,KR,CA,AU,FI候选地区(两字母,决定候选来源,非出口约束)
PER_REGION3每地区配额(按实测出口国家计数)
NODE_COUNT0总量上限(0 = 地区数 × PER_REGION)
CONNECT_ADDRS空优选 IP 连接池(逗号分隔 ip[:port],轮换;空 = 账号域名直连)
MAX_MS8000收录延迟上限(0 = 不限)
SCHEDULE_MIN60自动更新周期(分钟)
ECHO_PRIMARY / 回声 fallbacksapi.ip.sb实测回声站(返回 ip+国别)
HTTP_HOST / HTTP_PORT0.0.0.0 / 7860订阅服务监听
ENGINE_BIN持久化目录/engine/engine(HF 为 /data/engine/engine)engine 二进制路径;默认落在持久化存储(首次下载后重启复用),显式设置覆盖
ENGINE_BASE_PORT35000临时验证配置 inbound 起始端口
PROXY_URL空上游抓取代理(本地调试)
SOCKS_PROXY空本地实测出站 socks(如 127.0.0.1:10808;HF 留空直连)
TOKEN空/update 鉴权 token
DATA_DIRdata持久化目录(HF 建议 /data)

账号默认不提交仓库(HF Secrets 提供);本地可用 config.json 或环境变量。

数据与缓存(DATA_DIR)

文件内容
links.txt / links.base64订阅明文 / v2ray base64
engine/engineengine 二进制(首次启动按需下载后持久化,重启复用)
state.json节点(实测出口/IP/延迟/地区)、黑名单、失败防抖、上次运行统计
upstream_proxyips.jsonEmilia 候选缓存(TTL 30min,上游全挂回落)

写文件原子替换,读者始终看到完整内容。

本地开发

bash
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt       # 清华镜像
.venv/bin/python main.py update --force         # 需可访问账号(或 SOCKS_PROXY 经代理)
.venv/bin/python main.py serve                  # 常驻 + 订阅 :7860
.venv/bin/python -m unittest discover -s test   # 10 用例

测试

核心判定规则等 10 个单元测试(不依赖外网):Emilia 解析 / 地区筛选 / 回声站解析 / CN 拒收 / 配额限制 / 慢节点跳过 / engine 配置结构 / 链接编码 / tag 排序。