首页 / 资讯中心 / 文章详情

Pollinations 社区模型每日排行榜:从 Tinybird 统计、像素风渲染到 Discord 自动发布的完整流水线

Pollinations 社区模型每日排行榜:从 Tinybird 统计、像素风渲染到 Discord 自动发布的完整流水线 ★ FEATURED ARTICLE
AI 应用媒体生成后端前端【免费下载链接】pollinationsYour Friendly Open-Source Gen-AI Platform项目地址https://gitcode.com/gh_mirrors/po/pollinations点击查看免费下载本文围绕 pollinations 仓库中社区模型排行榜community model leaderboard的生成技能文档展开它是一张每天发布到 Discord#dev-community-models频道的像素风图片按过去 24 小时服务的 token 数对社区文本模型排名并附带速度面板与逐模型成功徽章。读完本文你将完整掌握排行榜的设计决策依据、build-leaderboard.mjs的取数与渲染管线、chromium 沙箱渲染的踩坑约束以及如何用--dry-run手动复现整条流水线。排行榜是什么、什么时候跑根据 SKILL.md 的定义这张每日榜单的生成脚本是operations/community-monitor/leaderboard/build-leaderboard.mjs它由 community-monitor EC2 监控机上的 Claude agent 自动驱动CYCLE.md 的 duty 3b 规定文本榜与图像榜各自维护独立的状态键lastLeaderboardPostedDate/lastImageLeaderboardPostedDate仅在 UTC 日期尚未记录且时间到达 ~12:00 UTC 后才会运行即一天一次。CYCLE.md 还明确了运行方式与产出契约Each script queries Tinybird, renders the pixel-art board via chromium, crops it, uploads to media.pollinations.ai, and prints JSON:{ date, imageUrl, markdown, pngPath }. Each takes ~10-15s.脚本出错或没有合格模型时agent 不设置状态键、下周期重试成功则把 stdout 的markdown字段逐字verbatim发到频道——因为 markdown 中的奖项文案workhorse、flawless、speed crown是刻意挑选出来展示图片本身没有的统计量的不允许改写或复述。榜单图片本身通过POST /upload上传后URL 直接内嵌在这条 markdown 文本里由 Discord 自动内联成图片不另发附件。部署链路上operations/community-monitor/README.md 给出了把leaderboard/build-leaderboard.mjs、build-image-leaderboard.mjs、fonts-embedded.css三个文件scp到监控机的命令而 update-from-repo.sh 会在每个周期开始前从origin/main自动刷新这两个构建脚本见其第 48–49 行install_from_main leaderboard/...两行保证仓库合并后的改动在下一个周期生效。手动重新生成命令、参数与前置条件SKILL.md 给出的标准手动操作可直接复制cd operations/community-monitor/leaderboard TB_TOKENtoken node build-leaderboard.mjs --dry-run # 只预览 HTML不渲染、不上传 TB_TOKENtoken POLLI_TOKENtoken node build-leaderboard.mjs # 完整渲染 上传并打印 markdown两种运行模式的行为差异源码里一一对应build-leaderboard.mjs--dry-run只跑 Tinybird 查询并生成 HTML写入/tmp/leaderboard-preview.html跳过 chromium 截图与上传stdout 打印{ dryRun: true, markdown }。用于在花掉一次上传额度之前先验证查询结果与排名是否符合预期。完整运行渲染 PNG 到/home/ubuntu/monitor/leaderboard-YYYY-MM-DD.png上传后把 markdown 中的{{IMAGE_URL}}占位符替换为真实 URL最终 stdout 输出{ date, imageUrl, markdown, pngPath }四字段 JSON——这正是 CYCLE.md duty 3b 消费的输出契约。环境要求来自 SKILL.md 的 Rendering 一节脚本注释同样印证依赖说明chromiumsnap 版直接execFileSync调用不引入 puppeteer/playwright 等 npm 依赖python3-pil一次性系统包sudo apt-get install -y python3-pil用于裁剪截图底部留白build-leaderboard.mjs 注释明确标注 Requires python3-pil on the boxTB_TOKENTinybird SQL 查询令牌缺失直接process.exit(1)L18-L22POLLI_TOKENmedia 上传的 Bearer 令牌仅完整运行需要POLLINATIONS_MEDIA_URL可选media API 基址默认https://media.pollinations.aiL321-L322数据层Tinybird 查询如何决定排名脚本的取数逻辑全部集中在fetchLeaderboardData()build-leaderboard.mjs两条 SQL 都查 Tinybird 的generation_event_v2表窗口为过去 24 小时、event_type generate.text、model_provider_used community、is_final。三个关键常量定义了榜单形态const MIN_REQUESTS 50; // 24h 请求数不足 50 的模型没有统计意义直接忽略 const TOP_N 10; // 主榜 10 行 const SPEED_TOP_N 3; // 速度面板取前 3主榜行字段的计算口径值得细看L44-L57total_tokenstoken_count_prompt_text token_count_prompt_cached token_count_completion_text token_count_completion_reasoning之和按它降序排列——这就是按 tokens served 排名的设计决策在 SQL 层的落点median_tps每请求完成 token 速率(completion_text completion_reasoning) / (response_time/1000)的中位数且只统计response_status 300、response_time 0、完成 token 数 20的请求。用中位数而非均值正是 SKILL.md 设计决策里说的冷启动/超时等离群点会把均值严重拉偏success100 * countIf(2xx) / greatest(countIf(response_status 400 OR response_status 500), 1)——分母排除了 4xx调用方错误所以这是排除客户端错误后的成功率筛选门槛HAVING requests 50对应MIN_REQUESTS查询用replaceRegexpOne(model_requested, ^community/, )把community/owner/model规范化成owner/model。第二条 SQL 算全局总量24h 总请求数、总 token 数、去重模型数用于顶部 hero 计数器例如 SKILL.md 里举的57,468,899 TOKENS · 24H。若 24 小时内没有任何模型达到 50 次请求main()打印 No community models with enough traffic 并以 0 退出——这就是 CYCLE.md 说的找到没有合格模型时记入周期摘要、不设状态键的触发条件。设计决策为什么是 tokens 排名、徽章与速度面板SKILL.md 专门有一节 Design decisions (read before changing anything)强调这些结论来自多轮线上反馈没有理由不要重新争论。逐条对照源码每条都有实现落点按 tokens served 排名而不是请求数。请求数会奖励话多但完成短的小模型一个请求量 4 倍、token 量只有 1/3 的模型不应排在 token 领先者前面——这是设计期间最重要的一次纠正。对应源码ORDER BY total_tokens DESCL55。token 数是主角数字顶部 hero 计数器 每行最左侧一列在模型名之前刻意让视线先读到量级。HTML 生成的行结构是.scoretoken 数→.name模型名→.tpsl→.hpL106-L121。稳定性是行内徽章不是独立榜单。早期版本有单独的 most stable 面板因为多数模型都在 100% 附近、并列太多导致排名失去意义被砍掉降级为状态指示器。具体分档逻辑在hpBadge()L78-L93成功率徽章恰好 100%亮绿色PERFECT徽章庆祝从不失败的模型而不是把它们混进爱心档≥99%♥♥♥绿色像素心 ×3≥95%♥♥≥80%♥琥珀色80%红色像素骷髅速度单独做小面板不混进主榜主榜下方三张速度卡片中位 tokens/sec第 1 名是金色卡片 FASTEST奖章L123-L138。文字最少、图形最大没有解释性段落只有主角数字、列表头和条形图想加说明文字时加一个统计量。主榜不放头像/排名徽章那是配套 Arena 散点图的元素主榜上第一行的皇冠span classcrownL112已经足够有仪式感。此外 stdout 的 Discord markdownL347-L380还有两项图里看不出来的奖项 workhorse——请求数最多的模型且仅当它不是 token 第一时追加以及️ flawless: N models at 100% success。品牌系统嵌入字体、配色板与版式字体base64 内嵌是硬要求fonts-embedded.css 里有 4 个font-face块Press Start 2P400标题/得分像素街机感与IBM Plex Mono400/600/700正文/标签全部以data:font/woff2;base64,...内联。SKILL.md 强调这是required, not optional这张板子被设计为在 chromium 沙箱里独立截图渲染沙箱没有访问 Google Fonts 的网络出口不内嵌字体时文本会静默回退到通用等宽字体、看起来是坏的。诊断口诀如果看到某次渲染的标题不是方块字先查字体嵌入。字体需要更换时的重建步骤继承自 SKILL.md用普通浏览器 UA去 Google Fonts 的 css2 接口取 woff2 文件——默认的 curl UA 会被下发过时的 ttf 格式每个src: url(...)做 base64 编码内联成font-face的 data URI只保留 Latin 子集——全 Unicode 覆盖对一块纯英文的板子只会白白膨胀文件体积。buildHtml()会在运行时读入这份 CSS 并注入style idfontsL99-L103所以字体文件必须与脚本同目录部署——这也是 README 部署命令里三文件一起 scp 的原因。配色板通过可访问性校验的图表合法色SKILL.md 给出了经过dataviz技能可访问性检查的配色体系用途颜色背景cream#F3EBDE文字/边框ink#110518速度条形periwinkle#5978df强调lavender#8338b3状态-稳定mint#3b9736状态-观察#b8860b状态-降级#b03a2e注意图表用色不是品牌原色而是同色相的 OKLCH 调整版——原始品牌粉彩色系通不过对比度/CVD色觉障碍检查。这些值都能在脚本的内联样式中验证行徽章的.ok/.warn/.bad三色L188、速度条填充#818900、主背景与点阵纹理radial-gradient(#cfc8b8 1px, transparent 1px)等。版式上固定 1200px 宽Discord 内嵌图宽度高度由内容决定10 行 速度面板渲染后再裁剪——house pixel/arcade look 的关键是硬偏移阴影box-shadow: 6px 6px 0 #110518与全局零圆角脚本里甚至写了border-radius:0 !important兜底L146与产品内其他组件的同一套视觉词汇保持一致SKILL.md 指向pollinations.ai/src/ui/components/TopContributors.tsx为同词汇参考该文件在当前仓库此路径下已不存在可作历史线索看待。渲染chromium 在 snap 沙箱下的四条硬约束Rendering 一节是用血的教训换来的约束清单全部已固化在renderPng()中build-leaderboard.mjs--no-sandbox必须有——snap 的 confinement 会拦截 Chrome 的正常沙箱。实际调用参数--headlessnew --disable-gpu --no-sandbox --hide-scrollbars --window-size1200,1600 --screenshotraw.png file://board.htmlL282-L294。永远不要把 chromium 的输出写进点前缀目录如/home/ubuntu/.foo/——snap 的 AppArmor 配置会静默拒绝写入并报Permission denied即使该目录对该用户本来可写。所以临时目录名是leaderboard-tmp-*mkdtempSync(join(/home/ubuntu/monitor, leaderboard-tmp-))脚本注释专门记录了这条验证过的坑L271-L279。Chromium CLI 没有按内容定尺寸的截图模式——它永远按--window-size渲染页面更短就留下尾部空白。脚本的解法是先画高再裁剪按 1200×1600 渲染然后内联一段 PIL 脚本从底向上扫描最后一行含深色像素逐行抽样sum(px[x, y]) 200的位置裁掉留白并保留 26px 底边距L300-L312。stderr 里的 dbus/AppArmor ERROR 是装饰性噪音ListActivatableNames、UPower一类不是失败——只有输出文件缺失才代表渲染真的挂了。上传与发布直连 media API而非 polli CLI上传走POST https://media.pollinations.ai/uploadBearerPOLLI_TOKEN、multipartfile字段而不是 shell 出去调polliCLI——SKILL.md 解释理由很直接监控机没装 polli而上传只是一个两行的 fetch不值得加依赖。源码实现印证了这个契约polliUpload()const form new FormData(); form.append(file, new Blob([buf], { type: image/png }), leaderboard.png); form.append(tags, community:leaderboard); const res await fetch(${mediaUrl}/upload, { method: POST, headers: { Authorization: Bearer ${token} }, body: form, });两点补充证据media 服务的公开文档media.pollinations.ai/README.md确认了接口形态上传需要 API keyBearer响应体为{ id, url, contentType, size }脚本正是取其中的data.url作为图片地址tags字段会让上传物进入对应 tag 的公共画廊脚本用community:leaderboard标记这批图仓库里其实有等价 CLI 实现 packages/polli-cli/src/commands/upload.ts同样是 Bearer 流式 body POST 到${MEDIA_URL}/uploadconfig.ts 中MEDIA_URL默认https://media.pollinations.ai并输出UploadResponse { id, url, contentType, size }。SKILL.md 明确建议如果 media API 的响应形态将来变化参考这个 CLI 文件——它是对同一契约的第二份参照。发布环节的最后一步由 agent 完成把 stdout JSON 的markdown字段原样作为一条 Discord 消息发出图片 URL 内联在文本中Discord 自动内嵌不要重新推导或改写。配套设计The Arena未转正的散点图方案SKILL.md 末尾记录了与主榜并行探索过的第二张可视化speed × success × price 散点图GitHub 头像标记等尺寸、每模型价格标签。它被作为一次性图发布过一次HTML/构建脚本目前只存在于会话草稿区尚未提升到leaderboard/目录。若未来要把它变成例行发布SKILL.md 给出的移植要点是以design-arena-v2.html为结构蓝本复用主榜的渲染/上传管线包含github.com/user.png?size96的头像缩略图最近邻放大做像素化、log 缩放的 x 轴、针对 95–100% 成功聚集区的分段 y 轴以及一次简单的两两斥力布局 pass 防止同尺寸标记重叠。小结一张图背后的工程取舍pollinations 的社区模型排行榜用很少的代码量单个无依赖 Node 脚本 一份内嵌字体 CSS支撑了一条完整的数据可视化管线Tinybird 24h 聚合50 请求门槛、token 排名、中位速率、排除 4xx 的成功率→ 纯 CSS 像素风 HTML固定 1200px、tokens 前置、PERFECT/心/骷髅三档徽章→ snap chromium 无头截图--no-sandbox、避免点前缀目录、画高再 PIL 裁剪→ media API 上传 → agent 逐字发布 markdown。它的价值不只是发一张图更在于把多轮社区反馈固化成了可执行的规则SKILL.md 的设计决策清单和可自动部署的脚本update-from-repo.sh每周期同步让排行榜长什么样这件本来靠口头约定的事变成了仓库里可审查、可复现的工程资产。赞分享AI 应用媒体生成后端前端【免费下载链接】pollinationsYour Friendly Open-Source Gen-AI Platform项目地址https://gitcode.com/gh_mirrors/po/pollinations点击查看免费下载相关推荐Pollinations 模型故障调试实战从 gen/enter 日志到 Tinybird 数据的完整排障链路Pollinations 模型故障调试实战从 gen/enter 日志到 Tinybird 数据的完整排障链路 本文基于 pollinations 仓库中的模AI 应用媒体生成后端前端Aria2常见问题排查手册从安装失败到下载异常的解决方案Aria2常见问题排查手册从安装失败到下载异常的解决方案 Aria2是一款高效的命令行下载工具通过Aria2一键安装管理脚本aria2.sh可以快速部署运维OpenDesign 的 Vercel 设计系统实战Geist 字体、阴影即边框与黑白工程美学全解析OpenDesign 的 Vercel 设计系统实战Geist 字体、阴影即边框与黑白工程美学全解析 本文以 OpenDesign 仓库内置的 VercelAI 应用人工智能AI 技能设计系统媒体生成创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?
咨询建站