feat: implement stats history, growth tracking, and mermaid trend charts

This commit is contained in:
fujie
2026-02-11 11:41:12 +08:00
parent 0b9c242c0f
commit a63d3e89ff
7 changed files with 378 additions and 129 deletions

View File

@@ -8,7 +8,7 @@ A collection of enhancements, plugins, and prompts for [OpenWebUI](https://githu
<!-- STATS_START -->
## 📊 Community Stats
> 🕐 Auto-updated: 2026-02-11 11:11
> 🕐 Auto-updated: 2026-02-11 11:40
| 👤 Author | 👥 Followers | ⭐ Points | 🏆 Contributions |
| :---: | :---: | :---: | :---: |
@@ -16,20 +16,20 @@ A collection of enhancements, plugins, and prompts for [OpenWebUI](https://githu
| 📝 Posts | ⬇️ Downloads | 👁️ Views | 👍 Upvotes | 💾 Saves |
| :---: | :---: | :---: | :---: | :---: |
| **22** | **4154** | **49223** | **231** | **274** |
| **22** | **4154** | **45888** | **231** | **274** |
### 🔥 Top 6 Popular Plugins
> 🕐 Auto-updated: 2026-02-11 11:11
> 🕐 Auto-updated: 2026-02-11 11:40
| Rank | Plugin | Version | Downloads | Views | Updated |
| :---: | :--- | :---: | :---: | :---: | :---: |
| 🥇 | [Smart Mind Map](https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a) | 0.9.2 | 953 | 8381 | 2026-01-28 |
| 🥈 | [Smart Infographic](https://openwebui.com/posts/smart_infographic_ad6f0c7f) | 1.5.0 | 706 | 6695 | 2026-01-30 |
| 🥉 | [Export to Word Enhanced](https://openwebui.com/posts/export_to_word_enhanced_formatting_fca6a315) | 0.4.4 | 383 | 3022 | 2026-02-07 |
| 4⃣ | [Async Context Compression](https://openwebui.com/posts/async_context_compression_b1655bc8) | 1.2.2 | 363 | 3750 | 2026-01-28 |
| 5⃣ | [Export to Excel](https://openwebui.com/posts/export_mulit_table_to_excel_244b8f9d) | 0.3.7 | 342 | 1670 | 2026-02-09 |
| 6⃣ | [Markdown Normalizer](https://openwebui.com/posts/markdown_normalizer_baaa8732) | 1.2.4 | 341 | 4706 | 2026-01-29 |
| 🥇 | [Smart Mind Map](https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a) | 0.9.2 | 953 | 8381 | 2026-01-29 |
| 🥈 | [Smart Infographic](https://openwebui.com/posts/smart_infographic_ad6f0c7f) | 1.5.0 | 706 | 6698 | 2026-01-31 |
| 🥉 | [Export to Word Enhanced](https://openwebui.com/posts/export_to_word_enhanced_formatting_fca6a315) | 0.4.4 | 383 | 3026 | 2026-02-07 |
| 4⃣ | [Async Context Compression](https://openwebui.com/posts/async_context_compression_b1655bc8) | 1.2.2 | 363 | 3754 | 2026-01-29 |
| 5⃣ | [Export to Excel](https://openwebui.com/posts/export_mulit_table_to_excel_244b8f9d) | 0.3.7 | 342 | 1670 | 2026-02-10 |
| 6⃣ | [Markdown Normalizer](https://openwebui.com/posts/markdown_normalizer_baaa8732) | 1.2.4 | 341 | 4710 | 2026-01-29 |
*See full stats in [Community Stats Report](./docs/community-stats.md)*
<!-- STATS_END -->

View File

@@ -7,7 +7,7 @@ OpenWebUI 增强功能集合。包含个人开发与收集的插件、提示词
<!-- STATS_START -->
## 📊 社区统计
> 🕐 自动更新于 2026-02-11 11:11
> 🕐 自动更新于 2026-02-11 11:40
| 👤 作者 | 👥 粉丝 | ⭐ 积分 | 🏆 贡献 |
| :---: | :---: | :---: | :---: |
@@ -15,20 +15,20 @@ OpenWebUI 增强功能集合。包含个人开发与收集的插件、提示词
| 📝 发布 | ⬇️ 下载 | 👁️ 浏览 | 👍 点赞 | 💾 收藏 |
| :---: | :---: | :---: | :---: | :---: |
| **22** | **4154** | **49223** | **231** | **274** |
| **22** | **4154** | **45888** | **231** | **274** |
### 🔥 热门插件 Top 6
> 🕐 自动更新于 2026-02-11 11:11
> 🕐 自动更新于 2026-02-11 11:40
| 排名 | 插件 | 版本 | 下载 | 浏览 | 更新日期 |
| :---: | :--- | :---: | :---: | :---: | :---: |
| 🥇 | [Smart Mind Map](https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a) | 0.9.2 | 953 | 8381 | 2026-01-28 |
| 🥈 | [Smart Infographic](https://openwebui.com/posts/smart_infographic_ad6f0c7f) | 1.5.0 | 706 | 6695 | 2026-01-30 |
| 🥉 | [Export to Word Enhanced](https://openwebui.com/posts/export_to_word_enhanced_formatting_fca6a315) | 0.4.4 | 383 | 3022 | 2026-02-07 |
| 4⃣ | [Async Context Compression](https://openwebui.com/posts/async_context_compression_b1655bc8) | 1.2.2 | 363 | 3750 | 2026-01-28 |
| 5⃣ | [Export to Excel](https://openwebui.com/posts/export_mulit_table_to_excel_244b8f9d) | 0.3.7 | 342 | 1670 | 2026-02-09 |
| 6⃣ | [Markdown Normalizer](https://openwebui.com/posts/markdown_normalizer_baaa8732) | 1.2.4 | 341 | 4706 | 2026-01-29 |
| 🥇 | [Smart Mind Map](https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a) | 0.9.2 | 953 | 8381 | 2026-01-29 |
| 🥈 | [Smart Infographic](https://openwebui.com/posts/smart_infographic_ad6f0c7f) | 1.5.0 | 706 | 6698 | 2026-01-31 |
| 🥉 | [Export to Word Enhanced](https://openwebui.com/posts/export_to_word_enhanced_formatting_fca6a315) | 0.4.4 | 383 | 3026 | 2026-02-07 |
| 4⃣ | [Async Context Compression](https://openwebui.com/posts/async_context_compression_b1655bc8) | 1.2.2 | 363 | 3754 | 2026-01-29 |
| 5⃣ | [Export to Excel](https://openwebui.com/posts/export_mulit_table_to_excel_244b8f9d) | 0.3.7 | 342 | 1670 | 2026-02-10 |
| 6⃣ | [Markdown Normalizer](https://openwebui.com/posts/markdown_normalizer_baaa8732) | 1.2.4 | 341 | 4710 | 2026-01-29 |
*完整统计请查看 [社区统计报告](./docs/community-stats.zh.md)*
<!-- STATS_END -->

View File

@@ -1,16 +1,18 @@
{
"total_posts": 22,
"total_downloads": 4154,
"total_views": 49223,
"total_views": 45888,
"total_upvotes": 231,
"total_downvotes": 2,
"total_saves": 274,
"total_comments": 55,
"by_type": {
"unknown": 5,
"filter": 2,
"post": 3,
"filter": 4,
"pipe": 1,
"action": 14
"action": 12,
"prompt": 1,
"review": 1
},
"posts": [
{
@@ -25,8 +27,8 @@
"upvotes": 22,
"saves": 50,
"comments": 13,
"created_at": "2025-12-30",
"updated_at": "2026-01-28",
"created_at": "2025-12-31",
"updated_at": "2026-01-29",
"url": "https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a"
},
{
@@ -37,12 +39,12 @@
"author": "Fu-Jie",
"description": "AI-powered infographic generator based on AntV Infographic. Supports professional templates, auto-icon matching, and SVG/PNG downloads.",
"downloads": 706,
"views": 6695,
"views": 6698,
"upvotes": 24,
"saves": 34,
"comments": 10,
"created_at": "2025-12-28",
"updated_at": "2026-01-30",
"updated_at": "2026-01-31",
"url": "https://openwebui.com/posts/smart_infographic_ad6f0c7f"
},
{
@@ -53,7 +55,7 @@
"author": "Fu-Jie",
"description": "Export current conversation from Markdown to Word (.docx) with Mermaid diagrams rendered client-side (Mermaid.js, SVG+PNG), LaTeX math, real hyperlinks, improved tables, syntax highlighting, and blockquote support.",
"downloads": 383,
"views": 3022,
"views": 3026,
"upvotes": 14,
"saves": 26,
"comments": 5,
@@ -64,17 +66,17 @@
{
"title": "Async Context Compression",
"slug": "async_context_compression_b1655bc8",
"type": "action",
"type": "filter",
"version": "1.2.2",
"author": "Fu-Jie",
"description": "Reduces token consumption in long conversations while maintaining coherence through intelligent summarization and message compression.",
"downloads": 363,
"views": 3750,
"views": 3754,
"upvotes": 14,
"saves": 34,
"comments": 0,
"created_at": "2025-11-08",
"updated_at": "2026-01-28",
"updated_at": "2026-01-29",
"url": "https://openwebui.com/posts/async_context_compression_b1655bc8"
},
{
@@ -90,18 +92,18 @@
"saves": 6,
"comments": 0,
"created_at": "2025-05-30",
"updated_at": "2026-02-09",
"updated_at": "2026-02-10",
"url": "https://openwebui.com/posts/export_mulit_table_to_excel_244b8f9d"
},
{
"title": "Markdown Normalizer",
"slug": "markdown_normalizer_baaa8732",
"type": "action",
"type": "filter",
"version": "1.2.4",
"author": "Fu-Jie",
"description": "A content normalizer filter that fixes common Markdown formatting issues in LLM outputs, such as broken code blocks, LaTeX formulas, and list formatting.",
"downloads": 341,
"views": 4706,
"views": 4710,
"upvotes": 17,
"saves": 30,
"comments": 5,
@@ -117,18 +119,18 @@
"author": "Fu-Jie",
"description": "Quickly generates beautiful flashcards from text, extracting key points and categories.",
"downloads": 226,
"views": 3385,
"views": 3387,
"upvotes": 13,
"saves": 14,
"comments": 2,
"created_at": "2025-12-30",
"updated_at": "2026-01-28",
"updated_at": "2026-01-29",
"url": "https://openwebui.com/posts/flash_card_65a2ea8f"
},
{
"title": "AI Task Instruction Generator",
"slug": "ai_task_instruction_generator_9bab8b37",
"type": "unknown",
"type": "prompt",
"version": "",
"author": "",
"description": "",
@@ -165,7 +167,7 @@
"author": "Fu-Jie",
"description": "将对话导出为 Word (.docx),支持 Mermaid 图表 (客户端渲染 SVG+PNG)、LaTeX 数学公式、真实超链接、增强表格格式、代码高亮和引用块。",
"downloads": 128,
"views": 2218,
"views": 2219,
"upvotes": 13,
"saves": 7,
"comments": 4,
@@ -181,7 +183,7 @@
"author": "Fu-Jie",
"description": "Integrate GitHub Copilot SDK. Supports dynamic models, multi-turn conversation, streaming, multimodal input, infinite sessions, and frontend debug logging.",
"downloads": 107,
"views": 2401,
"views": 2402,
"upvotes": 14,
"saves": 9,
"comments": 6,
@@ -234,7 +236,7 @@
"saves": 2,
"comments": 0,
"created_at": "2025-12-31",
"updated_at": "2026-01-28",
"updated_at": "2026-01-29",
"url": "https://openwebui.com/posts/智能生成交互式思维导图帮助用户可视化知识_8d4b097b"
},
{
@@ -250,7 +252,7 @@
"saves": 5,
"comments": 0,
"created_at": "2025-11-08",
"updated_at": "2026-01-28",
"updated_at": "2026-01-29",
"url": "https://openwebui.com/posts/异步上下文压缩_5c0617cb"
},
{
@@ -266,7 +268,7 @@
"saves": 1,
"comments": 0,
"created_at": "2025-12-30",
"updated_at": "2026-01-28",
"updated_at": "2026-01-29",
"url": "https://openwebui.com/posts/闪记卡生成插件_4a31eac3"
},
{
@@ -293,7 +295,7 @@
"author": "Fu-Jie",
"description": "A specialized filter to bypass OpenWebUI's default RAG for GitHub Copilot SDK models. It moves uploaded files to a safe location ('copilot_files') so the Copilot Pipe can process them natively without interference.",
"downloads": 16,
"views": 840,
"views": 847,
"upvotes": 3,
"saves": 0,
"comments": 0,
@@ -304,12 +306,12 @@
{
"title": "🚀 GitHub Copilot SDK Pipe: AI That Executes, Not Just Talks",
"slug": "github_copilot_sdk_for_openwebui_elevate_your_ai_t_a140f293",
"type": "unknown",
"type": "post",
"version": "",
"author": "",
"description": "",
"downloads": 0,
"views": 261,
"views": 268,
"upvotes": 5,
"saves": 0,
"comments": 0,
@@ -320,28 +322,28 @@
{
"title": "🚀 Open WebUI Prompt Plus: AI-Powered Prompt Manager",
"slug": "open_webui_prompt_plus_ai_powered_prompt_manager_s_15fa060e",
"type": "unknown",
"type": "post",
"version": "",
"author": "",
"description": "",
"downloads": 0,
"views": 1522,
"views": 1523,
"upvotes": 12,
"saves": 19,
"comments": 8,
"created_at": "2026-01-25",
"updated_at": "2026-01-28",
"updated_at": "2026-01-29",
"url": "https://openwebui.com/posts/open_webui_prompt_plus_ai_powered_prompt_manager_s_15fa060e"
},
{
"title": "Review of Claude Haiku 4.5",
"slug": "review_of_claude_haiku_45_41b0db39",
"type": "unknown",
"type": "review",
"version": "",
"author": "",
"description": "",
"downloads": 0,
"views": 157,
"views": 159,
"upvotes": 2,
"saves": 0,
"comments": 0,
@@ -352,7 +354,7 @@
{
"title": " 🛠️ Debug Open WebUI Plugins in Your Browser",
"slug": "debug_open_webui_plugins_in_your_browser_81bf7960",
"type": "unknown",
"type": "post",
"version": "",
"author": "",
"description": "",

View File

@@ -1,48 +1,63 @@
# 📊 OpenWebUI Community Stats Report
> 📅 Updated: 2026-02-11 11:11
> 📅 Updated: 2026-02-11 11:40
### 📈 增长趋势 (14天)
```mermaid
xychart-beta
title "Downloads Trend"
x-axis ["02-09", "02-10", "02-11"]
y-axis "Downloads"
line [3800, 4000, 4154]
```
## 📈 Overview
| Metric | Value |
|------|------|
| 📝 Total Posts | 22 |
| ⬇️ Total Downloads | 4154 |
| 👁️ Total Views | 49223 |
| 👍 Total Upvotes | 231 |
| 💾 Total Saves | 274 |
| 💬 Total Comments | 55 |
| Metric | Value | Growth (24h) |
|------|------|:---:|
| 📝 Total Posts | 22 | - |
| ⬇️ Total Downloads | 4154 | **+154** 🚀 |
| 👁️ Total Views | 45888 | **+1888** 🚀 |
| 👍 Total Upvotes | 231 | **+11** 🚀 |
| 💾 Total Saves | 274 | - |
| 💬 Total Comments | 55 | - |
| ⭐ Author Points | 271 | - |
| 👥 Followers | 220 | **+2** 🚀 |
## 📂 By Type
- **unknown**: 5
- **filter**: 2
- **post**: 3
- **filter**: 4
- **pipe**: 1
- **action**: 14
- **action**: 12
- **prompt**: 1
- **review**: 1
## 📋 Posts List
| Rank | Title | Type | Version | Downloads | Views | Upvotes | Saves | Updated |
|:---:|------|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
| 1 | [Smart Mind Map](https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a) | action | 0.9.2 | 953 | 8381 | 22 | 50 | 2026-01-28 |
| 2 | [Smart Infographic](https://openwebui.com/posts/smart_infographic_ad6f0c7f) | action | 1.5.0 | 706 | 6695 | 24 | 34 | 2026-01-30 |
| 3 | [Export to Word Enhanced](https://openwebui.com/posts/export_to_word_enhanced_formatting_fca6a315) | action | 0.4.4 | 383 | 3022 | 14 | 26 | 2026-02-07 |
| 4 | [Async Context Compression](https://openwebui.com/posts/async_context_compression_b1655bc8) | action | 1.2.2 | 363 | 3750 | 14 | 34 | 2026-01-28 |
| 5 | [Export to Excel](https://openwebui.com/posts/export_mulit_table_to_excel_244b8f9d) | action | 0.3.7 | 342 | 1670 | 7 | 6 | 2026-02-09 |
| 6 | [Markdown Normalizer](https://openwebui.com/posts/markdown_normalizer_baaa8732) | action | 1.2.4 | 341 | 4706 | 17 | 30 | 2026-01-29 |
| 7 | [Flash Card](https://openwebui.com/posts/flash_card_65a2ea8f) | action | 0.2.4 | 226 | 3385 | 13 | 14 | 2026-01-28 |
| 8 | [AI Task Instruction Generator](https://openwebui.com/posts/ai_task_instruction_generator_9bab8b37) | unknown | | 200 | 2774 | 9 | 6 | 2026-01-28 |
| 1 | [Smart Mind Map](https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a) | action | 0.9.2 | 953 | 8381 | 22 | 50 | 2026-01-29 |
| 2 | [Smart Infographic](https://openwebui.com/posts/smart_infographic_ad6f0c7f) | action | 1.5.0 | 706 | 6698 | 24 | 34 | 2026-01-31 |
| 3 | [Export to Word Enhanced](https://openwebui.com/posts/export_to_word_enhanced_formatting_fca6a315) | action | 0.4.4 | 383 | 3026 | 14 | 26 | 2026-02-07 |
| 4 | [Async Context Compression](https://openwebui.com/posts/async_context_compression_b1655bc8) | filter | 1.2.2 | 363 | 3754 | 14 | 34 | 2026-01-29 |
| 5 | [Export to Excel](https://openwebui.com/posts/export_mulit_table_to_excel_244b8f9d) | action | 0.3.7 | 342 | 1670 | 7 | 6 | 2026-02-10 |
| 6 | [Markdown Normalizer](https://openwebui.com/posts/markdown_normalizer_baaa8732) | filter | 1.2.4 | 341 | 4710 | 17 | 30 | 2026-01-29 |
| 7 | [Flash Card](https://openwebui.com/posts/flash_card_65a2ea8f) | action | 0.2.4 | 226 | 3387 | 13 | 14 | 2026-01-29 |
| 8 | [AI Task Instruction Generator](https://openwebui.com/posts/ai_task_instruction_generator_9bab8b37) | prompt | | 200 | 2774 | 9 | 6 | 2026-01-28 |
| 9 | [Deep Dive](https://openwebui.com/posts/deep_dive_c0b846e4) | action | 1.0.0 | 147 | 1250 | 6 | 11 | 2026-01-08 |
| 10 | [导出为Word增强版](https://openwebui.com/posts/导出为_word_支持公式流程图表格和代码块_8a6306c0) | action | 0.4.4 | 128 | 2218 | 13 | 7 | 2026-02-07 |
| 11 | [GitHub Copilot Official SDK Pipe](https://openwebui.com/posts/github_copilot_official_sdk_pipe_ce96f7b4) | pipe | 0.6.2 | 107 | 2401 | 14 | 9 | 2026-02-10 |
| 10 | [导出为Word增强版](https://openwebui.com/posts/导出为_word_支持公式流程图表格和代码块_8a6306c0) | action | 0.4.4 | 128 | 2219 | 13 | 7 | 2026-02-07 |
| 11 | [GitHub Copilot Official SDK Pipe](https://openwebui.com/posts/github_copilot_official_sdk_pipe_ce96f7b4) | pipe | 0.6.2 | 107 | 2402 | 14 | 9 | 2026-02-10 |
| 12 | [📂 Folder Memory Auto-Evolving Project Context](https://openwebui.com/posts/folder_memory_auto_evolving_project_context_4a9875b2) | filter | 0.1.0 | 61 | 1316 | 6 | 8 | 2026-01-20 |
| 13 | [智能信息图](https://openwebui.com/posts/智能信息图_e04a48ff) | action | 1.5.0 | 58 | 1065 | 10 | 1 | 2026-01-29 |
| 14 | [思维导图](https://openwebui.com/posts/智能生成交互式思维导图帮助用户可视化知识_8d4b097b) | action | 0.9.2 | 39 | 589 | 6 | 2 | 2026-01-28 |
| 15 | [异步上下文压缩](https://openwebui.com/posts/异步上下文压缩_5c0617cb) | action | 1.2.2 | 33 | 668 | 7 | 5 | 2026-01-28 |
| 16 | [闪记卡 (Flash Card)](https://openwebui.com/posts/闪记卡生成插件_4a31eac3) | action | 0.2.4 | 27 | 690 | 8 | 1 | 2026-01-28 |
| 14 | [思维导图](https://openwebui.com/posts/智能生成交互式思维导图帮助用户可视化知识_8d4b097b) | action | 0.9.2 | 39 | 589 | 6 | 2 | 2026-01-29 |
| 15 | [异步上下文压缩](https://openwebui.com/posts/异步上下文压缩_5c0617cb) | action | 1.2.2 | 33 | 668 | 7 | 5 | 2026-01-29 |
| 16 | [闪记卡 (Flash Card)](https://openwebui.com/posts/闪记卡生成插件_4a31eac3) | action | 0.2.4 | 27 | 690 | 8 | 1 | 2026-01-29 |
| 17 | [精读](https://openwebui.com/posts/精读_99830b0f) | action | 1.0.0 | 24 | 442 | 5 | 1 | 2026-01-08 |
| 18 | [GitHub Copilot SDK Files Filter](https://openwebui.com/posts/github_copilot_sdk_files_filter_403a62ee) | filter | 0.1.2 | 16 | 840 | 3 | 0 | 2026-02-10 |
| 19 | [🚀 GitHub Copilot SDK Pipe: AI That Executes, Not Just Talks](https://openwebui.com/posts/github_copilot_sdk_for_openwebui_elevate_your_ai_t_a140f293) | unknown | | 0 | 261 | 5 | 0 | 2026-02-10 |
| 20 | [🚀 Open WebUI Prompt Plus: AI-Powered Prompt Manager](https://openwebui.com/posts/open_webui_prompt_plus_ai_powered_prompt_manager_s_15fa060e) | unknown | | 0 | 1522 | 12 | 19 | 2026-01-28 |
| 21 | [Review of Claude Haiku 4.5](https://openwebui.com/posts/review_of_claude_haiku_45_41b0db39) | unknown | | 0 | 157 | 2 | 0 | 2026-01-14 |
| 22 | [ 🛠️ Debug Open WebUI Plugins in Your Browser](https://openwebui.com/posts/debug_open_webui_plugins_in_your_browser_81bf7960) | unknown | | 0 | 1421 | 14 | 10 | 2026-01-10 |
| 18 | [GitHub Copilot SDK Files Filter](https://openwebui.com/posts/github_copilot_sdk_files_filter_403a62ee) | filter | 0.1.2 | 16 | 847 | 3 | 0 | 2026-02-10 |
| 19 | [🚀 GitHub Copilot SDK Pipe: AI That Executes, Not Just Talks](https://openwebui.com/posts/github_copilot_sdk_for_openwebui_elevate_your_ai_t_a140f293) | post | | 0 | 268 | 5 | 0 | 2026-02-10 |
| 20 | [🚀 Open WebUI Prompt Plus: AI-Powered Prompt Manager](https://openwebui.com/posts/open_webui_prompt_plus_ai_powered_prompt_manager_s_15fa060e) | post | | 0 | 1523 | 12 | 19 | 2026-01-29 |
| 21 | [Review of Claude Haiku 4.5](https://openwebui.com/posts/review_of_claude_haiku_45_41b0db39) | review | | 0 | 159 | 2 | 0 | 2026-01-14 |
| 22 | [ 🛠️ Debug Open WebUI Plugins in Your Browser](https://openwebui.com/posts/debug_open_webui_plugins_in_your_browser_81bf7960) | post | | 0 | 1421 | 14 | 10 | 2026-01-10 |

View File

@@ -1,48 +1,63 @@
# 📊 OpenWebUI 社区统计报告
> 📅 更新时间: 2026-02-11 11:11
> 📅 更新时间: 2026-02-11 11:40
### 📈 增长趋势 (14天)
```mermaid
xychart-beta
title "Downloads Trend"
x-axis ["02-09", "02-10", "02-11"]
y-axis "Downloads"
line [3800, 4000, 4154]
```
## 📈 总览
| 指标 | 数值 |
|------|------|
| 📝 发布数量 | 22 |
| ⬇️ 总下载量 | 4154 |
| 👁️ 总浏览量 | 49223 |
| 👍 总点赞数 | 231 |
| 💾 总收藏数 | 274 |
| 💬 总评论数 | 55 |
| 指标 | 数值 | 增长 (24h) |
|------|------|:---:|
| 📝 发布数量 | 22 | - |
| ⬇️ 总下载量 | 4154 | **+154** 🚀 |
| 👁️ 总浏览量 | 45888 | **+1888** 🚀 |
| 👍 总点赞数 | 231 | **+11** 🚀 |
| 💾 总收藏数 | 274 | - |
| 💬 总评论数 | 55 | - |
| ⭐ 作者总积分 | 271 | - |
| 👥 粉丝数量 | 220 | **+2** 🚀 |
## 📂 按类型分类
- **unknown**: 5
- **filter**: 2
- **post**: 3
- **filter**: 4
- **pipe**: 1
- **action**: 14
- **action**: 12
- **prompt**: 1
- **review**: 1
## 📋 发布列表
| 排名 | 标题 | 类型 | 版本 | 下载 | 浏览 | 点赞 | 收藏 | 更新日期 |
|:---:|------|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
| 1 | [Smart Mind Map](https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a) | action | 0.9.2 | 953 | 8381 | 22 | 50 | 2026-01-28 |
| 2 | [Smart Infographic](https://openwebui.com/posts/smart_infographic_ad6f0c7f) | action | 1.5.0 | 706 | 6695 | 24 | 34 | 2026-01-30 |
| 3 | [Export to Word Enhanced](https://openwebui.com/posts/export_to_word_enhanced_formatting_fca6a315) | action | 0.4.4 | 383 | 3022 | 14 | 26 | 2026-02-07 |
| 4 | [Async Context Compression](https://openwebui.com/posts/async_context_compression_b1655bc8) | action | 1.2.2 | 363 | 3750 | 14 | 34 | 2026-01-28 |
| 5 | [Export to Excel](https://openwebui.com/posts/export_mulit_table_to_excel_244b8f9d) | action | 0.3.7 | 342 | 1670 | 7 | 6 | 2026-02-09 |
| 6 | [Markdown Normalizer](https://openwebui.com/posts/markdown_normalizer_baaa8732) | action | 1.2.4 | 341 | 4706 | 17 | 30 | 2026-01-29 |
| 7 | [Flash Card](https://openwebui.com/posts/flash_card_65a2ea8f) | action | 0.2.4 | 226 | 3385 | 13 | 14 | 2026-01-28 |
| 8 | [AI Task Instruction Generator](https://openwebui.com/posts/ai_task_instruction_generator_9bab8b37) | unknown | | 200 | 2774 | 9 | 6 | 2026-01-28 |
| 1 | [Smart Mind Map](https://openwebui.com/posts/turn_any_text_into_beautiful_mind_maps_3094c59a) | action | 0.9.2 | 953 | 8381 | 22 | 50 | 2026-01-29 |
| 2 | [Smart Infographic](https://openwebui.com/posts/smart_infographic_ad6f0c7f) | action | 1.5.0 | 706 | 6698 | 24 | 34 | 2026-01-31 |
| 3 | [Export to Word Enhanced](https://openwebui.com/posts/export_to_word_enhanced_formatting_fca6a315) | action | 0.4.4 | 383 | 3026 | 14 | 26 | 2026-02-07 |
| 4 | [Async Context Compression](https://openwebui.com/posts/async_context_compression_b1655bc8) | filter | 1.2.2 | 363 | 3754 | 14 | 34 | 2026-01-29 |
| 5 | [Export to Excel](https://openwebui.com/posts/export_mulit_table_to_excel_244b8f9d) | action | 0.3.7 | 342 | 1670 | 7 | 6 | 2026-02-10 |
| 6 | [Markdown Normalizer](https://openwebui.com/posts/markdown_normalizer_baaa8732) | filter | 1.2.4 | 341 | 4710 | 17 | 30 | 2026-01-29 |
| 7 | [Flash Card](https://openwebui.com/posts/flash_card_65a2ea8f) | action | 0.2.4 | 226 | 3387 | 13 | 14 | 2026-01-29 |
| 8 | [AI Task Instruction Generator](https://openwebui.com/posts/ai_task_instruction_generator_9bab8b37) | prompt | | 200 | 2774 | 9 | 6 | 2026-01-28 |
| 9 | [Deep Dive](https://openwebui.com/posts/deep_dive_c0b846e4) | action | 1.0.0 | 147 | 1250 | 6 | 11 | 2026-01-08 |
| 10 | [导出为Word增强版](https://openwebui.com/posts/导出为_word_支持公式流程图表格和代码块_8a6306c0) | action | 0.4.4 | 128 | 2218 | 13 | 7 | 2026-02-07 |
| 11 | [GitHub Copilot Official SDK Pipe](https://openwebui.com/posts/github_copilot_official_sdk_pipe_ce96f7b4) | pipe | 0.6.2 | 107 | 2401 | 14 | 9 | 2026-02-10 |
| 10 | [导出为Word增强版](https://openwebui.com/posts/导出为_word_支持公式流程图表格和代码块_8a6306c0) | action | 0.4.4 | 128 | 2219 | 13 | 7 | 2026-02-07 |
| 11 | [GitHub Copilot Official SDK Pipe](https://openwebui.com/posts/github_copilot_official_sdk_pipe_ce96f7b4) | pipe | 0.6.2 | 107 | 2402 | 14 | 9 | 2026-02-10 |
| 12 | [📂 Folder Memory Auto-Evolving Project Context](https://openwebui.com/posts/folder_memory_auto_evolving_project_context_4a9875b2) | filter | 0.1.0 | 61 | 1316 | 6 | 8 | 2026-01-20 |
| 13 | [智能信息图](https://openwebui.com/posts/智能信息图_e04a48ff) | action | 1.5.0 | 58 | 1065 | 10 | 1 | 2026-01-29 |
| 14 | [思维导图](https://openwebui.com/posts/智能生成交互式思维导图帮助用户可视化知识_8d4b097b) | action | 0.9.2 | 39 | 589 | 6 | 2 | 2026-01-28 |
| 15 | [异步上下文压缩](https://openwebui.com/posts/异步上下文压缩_5c0617cb) | action | 1.2.2 | 33 | 668 | 7 | 5 | 2026-01-28 |
| 16 | [闪记卡 (Flash Card)](https://openwebui.com/posts/闪记卡生成插件_4a31eac3) | action | 0.2.4 | 27 | 690 | 8 | 1 | 2026-01-28 |
| 14 | [思维导图](https://openwebui.com/posts/智能生成交互式思维导图帮助用户可视化知识_8d4b097b) | action | 0.9.2 | 39 | 589 | 6 | 2 | 2026-01-29 |
| 15 | [异步上下文压缩](https://openwebui.com/posts/异步上下文压缩_5c0617cb) | action | 1.2.2 | 33 | 668 | 7 | 5 | 2026-01-29 |
| 16 | [闪记卡 (Flash Card)](https://openwebui.com/posts/闪记卡生成插件_4a31eac3) | action | 0.2.4 | 27 | 690 | 8 | 1 | 2026-01-29 |
| 17 | [精读](https://openwebui.com/posts/精读_99830b0f) | action | 1.0.0 | 24 | 442 | 5 | 1 | 2026-01-08 |
| 18 | [GitHub Copilot SDK Files Filter](https://openwebui.com/posts/github_copilot_sdk_files_filter_403a62ee) | filter | 0.1.2 | 16 | 840 | 3 | 0 | 2026-02-10 |
| 19 | [🚀 GitHub Copilot SDK Pipe: AI That Executes, Not Just Talks](https://openwebui.com/posts/github_copilot_sdk_for_openwebui_elevate_your_ai_t_a140f293) | unknown | | 0 | 261 | 5 | 0 | 2026-02-10 |
| 20 | [🚀 Open WebUI Prompt Plus: AI-Powered Prompt Manager](https://openwebui.com/posts/open_webui_prompt_plus_ai_powered_prompt_manager_s_15fa060e) | unknown | | 0 | 1522 | 12 | 19 | 2026-01-28 |
| 21 | [Review of Claude Haiku 4.5](https://openwebui.com/posts/review_of_claude_haiku_45_41b0db39) | unknown | | 0 | 157 | 2 | 0 | 2026-01-14 |
| 22 | [ 🛠️ Debug Open WebUI Plugins in Your Browser](https://openwebui.com/posts/debug_open_webui_plugins_in_your_browser_81bf7960) | unknown | | 0 | 1421 | 14 | 10 | 2026-01-10 |
| 18 | [GitHub Copilot SDK Files Filter](https://openwebui.com/posts/github_copilot_sdk_files_filter_403a62ee) | filter | 0.1.2 | 16 | 847 | 3 | 0 | 2026-02-10 |
| 19 | [🚀 GitHub Copilot SDK Pipe: AI That Executes, Not Just Talks](https://openwebui.com/posts/github_copilot_sdk_for_openwebui_elevate_your_ai_t_a140f293) | post | | 0 | 268 | 5 | 0 | 2026-02-10 |
| 20 | [🚀 Open WebUI Prompt Plus: AI-Powered Prompt Manager](https://openwebui.com/posts/open_webui_prompt_plus_ai_powered_prompt_manager_s_15fa060e) | post | | 0 | 1523 | 12 | 19 | 2026-01-29 |
| 21 | [Review of Claude Haiku 4.5](https://openwebui.com/posts/review_of_claude_haiku_45_41b0db39) | review | | 0 | 159 | 2 | 0 | 2026-01-14 |
| 22 | [ 🛠️ Debug Open WebUI Plugins in Your Browser](https://openwebui.com/posts/debug_open_webui_plugins_in_your_browser_81bf7960) | post | | 0 | 1421 | 14 | 10 | 2026-01-10 |

29
docs/stats-history.json Normal file
View File

@@ -0,0 +1,29 @@
[
{
"date": "2026-02-09",
"total_posts": 20,
"total_downloads": 3800,
"total_views": 42000,
"total_upvotes": 200,
"followers": 215,
"points": 48000
},
{
"date": "2026-02-10",
"total_posts": 21,
"total_downloads": 4000,
"total_views": 44000,
"total_upvotes": 220,
"followers": 218,
"points": 50000
},
{
"date": "2026-02-11",
"total_posts": 22,
"total_downloads": 4154,
"total_views": 45888,
"total_upvotes": 231,
"followers": 220,
"points": 271
}
]

View File

@@ -65,6 +65,129 @@ class OpenWebUIStats:
"Content-Type": "application/json",
}
)
self.history_file = Path("docs/stats-history.json")
# 定义下载类别的判定(这些类别会计入总浏览量/下载量统计)
DOWNLOADABLE_TYPES = [
"action",
"filter",
"pipe",
"toolkit",
"function",
"prompt",
"model",
]
def load_history(self) -> list:
"""从文件加载历史记录"""
if self.history_file.exists():
try:
with open(self.history_file, "r", encoding="utf-8") as f:
return json.load(f)
except Exception as e:
print(f"⚠️ 无法加载历史记录: {e}")
return []
def save_history(self, stats: dict):
"""保存当前快照到历史记录"""
history = self.load_history()
today = get_beijing_time().strftime("%Y-%m-%d")
# 构造快照
snapshot = {
"date": today,
"total_posts": stats["total_posts"],
"total_downloads": stats["total_downloads"],
"total_views": stats["total_views"],
"total_upvotes": stats["total_upvotes"],
"followers": stats.get("user", {}).get("followers", 0),
"points": stats.get("user", {}).get("total_points", 0),
}
# 如果今天已存在,则更新;否则追加
for i, item in enumerate(history):
if item.get("date") == today:
history[i] = snapshot
break
else:
history.append(snapshot)
# 只保留最近 90 天的历史
history = history[-90:]
with open(self.history_file, "w", encoding="utf-8") as f:
json.dump(history, f, ensure_ascii=False, indent=2)
print(f"✅ 历史快照已更新 ({today})")
def get_stat_delta(self, stats: dict) -> dict:
"""计算相对于上次记录的增长"""
history = self.load_history()
if len(history) < 2:
return {}
# 获取上一次的快照(倒数第二个,因为当前可能已经存入倒数第一个)
# 或者如果还没存入,就是倒数第一个
today = get_beijing_time().strftime("%Y-%m-%d")
prev = None
for item in reversed(history):
if item.get("date") != today:
prev = item
break
if not prev:
return {}
return {
"downloads": stats["total_downloads"] - prev.get("total_downloads", 0),
"views": stats["total_views"] - prev.get("total_views", 0),
"upvotes": stats["total_upvotes"] - prev.get("total_upvotes", 0),
"followers": stats.get("user", {}).get("followers", 0)
- prev.get("followers", 0),
"points": stats.get("user", {}).get("total_points", 0)
- prev.get("points", 0),
}
def _resolve_post_type(self, post: dict) -> str:
"""解析帖子类别"""
top_type = post.get("type")
function_data = post.get("data", {}) or {}
function_obj = function_data.get("function", {}) or {}
meta = function_obj.get("meta", {}) or {}
manifest = meta.get("manifest", {}) or {}
# 类别识别优先级:
if top_type == "review":
return "review"
post_type = "unknown"
if meta.get("type"):
post_type = meta.get("type")
elif function_obj.get("type"):
post_type = function_obj.get("type")
elif top_type:
post_type = top_type
elif not meta and not function_obj:
post_type = "post"
# 统一和启发式识别逻辑
if post_type == "unknown" and function_obj:
post_type = "action"
if post_type == "action" or post_type == "unknown":
all_metadata = (
post.get("title", "")
+ json.dumps(meta, ensure_ascii=False)
+ json.dumps(manifest, ensure_ascii=False)
).lower()
if "filter" in all_metadata:
post_type = "filter"
elif "pipe" in all_metadata:
post_type = "pipe"
elif "toolkit" in all_metadata:
post_type = "toolkit"
return post_type
def _parse_user_id_from_token(self, token: str) -> str:
"""从 JWT Token 中解析用户 ID"""
@@ -84,6 +207,30 @@ class OpenWebUIStats:
print(f"⚠️ 无法从 Token 解析用户 ID: {e}")
return ""
def generate_mermaid_chart(self) -> str:
"""生成 Mermaid 增长趋势图"""
history = self.load_history()
if len(history) < 3: # 数据太少不显示图表
return ""
# 只取最近 14 天的数据用于展示
data = history[-14:]
dates = [item["date"][-5:] for item in data] # 只取 MM-DD
downloads = [str(item["total_downloads"]) for item in data]
mm = []
mm.append("### 📈 增长趋势 (14天)")
mm.append("")
mm.append("```mermaid")
mm.append("xychart-beta")
mm.append(f' title "Downloads Trend"')
mm.append(f" x-axis [{', '.join(f'\"{d}\"' for d in dates)}]")
mm.append(f' y-axis "Downloads"')
mm.append(f" line [{', '.join(downloads)}]")
mm.append("```")
mm.append("")
return "\n".join(mm)
def get_user_posts(self, sort: str = "new", page: int = 1) -> list:
"""
获取用户发布的帖子列表
@@ -148,22 +295,26 @@ class OpenWebUIStats:
}
for post in posts:
post_type = self._resolve_post_type(post)
function_data = post.get("data", {}) or {}
function_obj = function_data.get("function", {}) or {}
meta = function_obj.get("meta", {}) or {}
manifest = meta.get("manifest", {}) or {}
# 累计统计
stats["total_downloads"] += post.get("downloads", 0)
stats["total_views"] += post.get("views", 0)
post_downloads = post.get("downloads", 0)
post_views = post.get("views", 0)
stats["total_downloads"] += post_downloads
stats["total_upvotes"] += post.get("upvotes", 0)
stats["total_downvotes"] += post.get("downvotes", 0)
stats["total_saves"] += post.get("saveCount", 0)
stats["total_comments"] += post.get("commentCount", 0)
# 解析 data 字段 - 正确路径: data.function.meta
function_data = post.get("data", {})
if function_data is None:
function_data = {}
function_data = function_data.get("function", {})
meta = function_data.get("meta", {})
manifest = meta.get("manifest", {})
post_type = meta.get("type", function_data.get("type", "unknown"))
# 关键:总浏览量不包括不可以下载的类型 (如 post, review)
if post_type in self.DOWNLOADABLE_TYPES or post_downloads > 0:
stats["total_views"] += post_views
if post_type not in stats["by_type"]:
stats["by_type"][post_type] = 0
@@ -249,19 +400,24 @@ class OpenWebUIStats:
stats: 统计数据
lang: 语言 ("zh" 中文, "en" 英文)
"""
# 获取增量数据
delta = self.get_stat_delta(stats)
# 中英文文本
texts = {
"zh": {
"title": "# 📊 OpenWebUI 社区统计报告",
"updated": f"> 📅 更新时间: {get_beijing_time().strftime('%Y-%m-%d %H:%M')}",
"overview_title": "## 📈 总览",
"overview_header": "| 指标 | 数值 |",
"overview_header": "| 指标 | 数值 | 增长 (24h) |",
"posts": "📝 发布数量",
"downloads": "⬇️ 总下载量",
"views": "👁️ 总浏览量",
"upvotes": "👍 总点赞数",
"saves": "💾 总收藏数",
"comments": "💬 总评论数",
"author_points": "⭐ 作者总积分",
"author_followers": "👥 粉丝数量",
"type_title": "## 📂 按类型分类",
"list_title": "## 📋 发布列表",
"list_header": "| 排名 | 标题 | 类型 | 版本 | 下载 | 浏览 | 点赞 | 收藏 | 更新日期 |",
@@ -270,13 +426,15 @@ class OpenWebUIStats:
"title": "# 📊 OpenWebUI Community Stats Report",
"updated": f"> 📅 Updated: {get_beijing_time().strftime('%Y-%m-%d %H:%M')}",
"overview_title": "## 📈 Overview",
"overview_header": "| Metric | Value |",
"overview_header": "| Metric | Value | Growth (24h) |",
"posts": "📝 Total Posts",
"downloads": "⬇️ Total Downloads",
"views": "👁️ Total Views",
"upvotes": "👍 Total Upvotes",
"saves": "💾 Total Saves",
"comments": "💬 Total Comments",
"author_points": "⭐ Author Points",
"author_followers": "👥 Followers",
"type_title": "## 📂 By Type",
"list_title": "## 📋 Posts List",
"list_header": "| Rank | Title | Type | Version | Downloads | Views | Upvotes | Saves | Updated |",
@@ -291,17 +449,44 @@ class OpenWebUIStats:
md.append(t["updated"])
md.append("")
# 插入趋势图
chart = self.generate_mermaid_chart()
if chart:
md.append(chart)
md.append("")
# 总览
def fmt_delta(key: str) -> str:
val = delta.get(key, 0)
if val > 0:
return f"**+{val}** 🚀"
return "-"
md.append(t["overview_title"])
md.append("")
md.append(t["overview_header"])
md.append("|------|------|")
md.append(f"| {t['posts']} | {stats['total_posts']} |")
md.append(f"| {t['downloads']} | {stats['total_downloads']} |")
md.append(f"| {t['views']} | {stats['total_views']} |")
md.append(f"| {t['upvotes']} | {stats['total_upvotes']} |")
md.append(f"| {t['saves']} | {stats['total_saves']} |")
md.append(f"| {t['comments']} | {stats['total_comments']} |")
md.append("|------|------|:---:|")
md.append(f"| {t['posts']} | {stats['total_posts']} | - |")
md.append(
f"| {t['downloads']} | {stats['total_downloads']} | {fmt_delta('downloads')} |"
)
md.append(f"| {t['views']} | {stats['total_views']} | {fmt_delta('views')} |")
md.append(
f"| {t['upvotes']} | {stats['total_upvotes']} | {fmt_delta('upvotes')} |"
)
md.append(f"| {t['saves']} | {stats['total_saves']} | - |")
md.append(f"| {t['comments']} | {stats['total_comments']} | - |")
# 作者信息
user = stats.get("user", {})
if user:
md.append(
f"| {t['author_points']} | {user.get('total_points', 0)} | {fmt_delta('points')} |"
)
md.append(
f"| {t['author_followers']} | {user.get('followers', 0)} | {fmt_delta('followers')} |"
)
md.append("")
# 按类型分类
@@ -581,6 +766,9 @@ def main():
# 生成统计
stats = stats_client.generate_stats(posts)
# 保存历史快照
stats_client.save_history(stats)
# 打印到终端
stats_client.print_stats(stats)