diff --git a/projects.md b/projects.md
index 15db95c..b8f18fb 100644
--- a/projects.md
+++ b/projects.md
@@ -1,28 +1,28 @@
# Crawled Projects Index
-_自动生成,最近更新 2026-04-28 13:56 UTC_
+_自动生成,最近更新 2026-04-28 14:01 UTC_
**当前**:15 个项目 · 73 个附件 · 739.1 MB
> 按 **Stars 倒序**。Title → 源站;UUID → 本仓库对应目录。
-| # | Title | Author | License | ⭐ Stars | ❤️ Likes | 🍴 Forks | 👁 Views | 💬 Comments | Files | Size (MB) |
-|---|-------|--------|---------|--------:|---------:|---------:|---------:|------------:|------:|----------:|
-| 1 | [加热台量产计划](https://oshwhub.com/sheep_finder/pcb-heng-wen-jia-re-tai)
[`7b6a3988…`](./data/raw/oshwhub/7b6a398811f14eba9a952b8d2ddd7ace/) | [sheep_finder](https://oshwhub.com/sheep_finder) | Public Domain | 3,293 | 1,447 | 3,939 | 347,329 | 383 | 4 | 23.0 |
-| 2 | [支持PD3.1/米PPS与Emarker读取的USB电压电流表](https://oshwhub.com/qaxslk/dai-PD-QCyou-pian-jian-ce-yi-ji-)
[`1a1e8655…`](./data/raw/oshwhub/1a1e865568d04db59a5a140dd3f13581/) | [qaxslk](https://oshwhub.com/qaxslk) | CC BY-NC-SA 4.0 | 2,695 | 1,215 | 1,146 | 306,681 | 448 | 13 | 204.5 |
-| 3 | [(高颜值)220V供电300W四路彩屏桌面电源](https://oshwhub.com/eda_uahyxtbgs/165w-three-way-multi-protocol-fa)
[`dc91a91e…`](./data/raw/oshwhub/dc91a91e669349898d709a5ba02f5b5f/) | [cqlcp](https://oshwhub.com/eda_uahyxtbgs) | CC BY-NC-SA 4.0 | 1,955 | 1,428 | 0 | 91,319 | 274 | 11 | 172.4 |
-| 4 | [自制ST-LINK V2-1(开源版本)](https://oshwhub.com/CYIIOT/ST_LINK-V2_1)
[`298873b7…`](./data/raw/oshwhub/298873b7fdbe44f8ba0e7351e023bc2c/) | [攻城狮神木](https://oshwhub.com/CYIIOT) | GPL 3.0 | 1,947 | 863 | 996 | 239,671 | 369 | 7 | 20.9 |
-| 5 | [QF ZERO V2 智能手表终端V1.0.9-24-6-29](https://oshwhub.com/dhx233/esp32_s3_watch)
[`892dbc4e…`](./data/raw/oshwhub/892dbc4ebca74227ac6269a1693380d8/) | [启凡科创](https://oshwhub.com/dhx233) | Public Domain | 1,737 | 774 | 643 | 175,969 | 164 | 6 | 113.0 |
-| 6 | [RT300-MKV 250W 数控升降压桌面可调电源](https://oshwhub.com/XACT/rt300-mkv)
[`91206ca7…`](./data/raw/oshwhub/91206ca73e96455f946bfcdd73e814fd/) | [XACT](https://oshwhub.com/XACT) | CC BY-NC-SA 4.0 | 1,735 | 867 | 782 | 185,523 | 231 | 2 | 80.9 |
-| 7 | [ESP-VoCat 喵伴:会听、会动、会陪伴的 AI 萌宠](https://oshwhub.com/esp-college/echoear)
[`ba64bd6f…`](./data/raw/oshwhub/ba64bd6f1c9c467ba3b674a54943557d/) | [乐鑫小铁匠](https://oshwhub.com/esp-college) | GPL 3.0 | 1,525 | 558 | 0 | 215,910 | 434 | 8 | 32.6 |
-| 8 | [立创·泰山派RK3566开发板](https://oshwhub.com/li-chuang-kai-fa-ban/li-chuang-tai-shan-pai-kai-fa-ban)
[`7360e73d…`](./data/raw/oshwhub/7360e73de5dd428e9f29e10573f2d8ac/) | [立创开发板](https://oshwhub.com/li-chuang-kai-fa-ban) | GPL 3.0 | 1,025 | 627 | 0 | 397,479 | 380 | 0 | 0.0 |
-| 9 | [【全网首发】X86电脑主板](https://oshwhub.com/oshwhub/dian-nao-zhu-ban)
[`b7784066…`](./data/raw/oshwhub/b77840665e2e48148c1b04ce84b5f7e7/) | [OSHWHub](https://oshwhub.com/oshwhub) | GPL 3.0 | 1,015 | 754 | 0 | 99,998 | 407 | 1 | 10.1 |
-| 10 | [t12-858d烙铁热风枪通用焊台二合一](https://oshwhub.com/mojinyinhu/t12858-tong-yong-han-tai)
[`3e2f893d…`](./data/raw/oshwhub/3e2f893d74664e01b755ccf2582792de/) | [mojinyinhu](https://oshwhub.com/mojinyinhu) | GPL 3.0 | 1,013 | 483 | 395 | 133,220 | 293 | 7 | 44.1 |
-| 11 | [立创·梁山派开发板](https://oshwhub.com/li-chuang-kai-fa-ban/liang-shan)
[`0c467598…`](./data/raw/oshwhub/0c46759837334318aa4882d6d37f96fa/) | [立创开发板](https://oshwhub.com/li-chuang-kai-fa-ban) | GPL 3.0 | 891 | 760 | 0 | 237,019 | 518 | 1 | 13.1 |
-| 12 | [大功率感应加热2500W 增强型ZVS](https://oshwhub.com/diy17102800/tu-teng-zvs)
[`f974b06d…`](./data/raw/oshwhub/f974b06d9c01470bb319e7df6d4512c9/) | [金石之声](https://oshwhub.com/diy17102800) | TAPR Open Hardware License | 708 | 355 | 378 | 61,550 | 265 | 2 | 8.8 |
-| 13 | [手持红外热成像](https://oshwhub.com/wesd/h7b0-re-cheng-xiang)
[`1b09581d…`](./data/raw/oshwhub/1b09581d66d34438a1e6513e457e0532/) | [wesd](https://oshwhub.com/wesd) | CERN Open Hardware License | 646 | 247 | 175 | 73,081 | 266 | 2 | 3.3 |
-| 14 | [小汐 & 阿曈 -> 盖革计数器(MWGC-2T)](https://oshwhub.com/yanranxiaoxi/Multi-adaptation-Wi-Fi-Geiger-Counter-Double-Tube-Type)
[`b077573d…`](./data/raw/oshwhub/b077573dfb764e95b1d27faba49cca65/) | [久治明千树汐](https://oshwhub.com/yanranxiaoxi) | CC BY-SA 4.0 | 365 | 212 | 189 | 49,755 | 168 | 2 | 4.0 |
-| 15 | [柚子爱AI相机-YuzuAI-YuzuMaix-AIoT-V831开发板](https://oshwhub.com/armbian-pythoniot/yuzumaix-v831)
[`922c1f3a…`](./data/raw/oshwhub/922c1f3a9b9a43ff98998f476e7946ca/) | [Armbian-PythonIot](https://oshwhub.com/armbian-pythoniot) | CC BY-NC-SA 3.0 | 236 | 129 | 96 | 45,128 | 93 | 7 | 8.3 |
+| # | Title | Author | License | 版本 | ⭐ Stars | ❤️ Likes | 🍴 Forks | 👁 Views | Files | Size (MB) |
+|---|-------|--------|---------|------|--------:|---------:|---------:|---------:|------:|----------:|
+| 1 | [加热台量产计划](https://oshwhub.com/sheep_finder/pcb-heng-wen-jia-re-tai)
[`7b6a3988…`](./data/raw/oshwhub/7b6a398811f14eba9a952b8d2ddd7ace/) | [sheep_finder](https://oshwhub.com/sheep_finder) | Public Domain | Std
6.5.43 | 3,293 | 1,447 | 3,939 | 347,329 | 4 | 23.0 |
+| 2 | [支持PD3.1/米PPS与Emarker读取的USB电压电流表](https://oshwhub.com/qaxslk/dai-PD-QCyou-pian-jian-ce-yi-ji-)
[`1a1e8655…`](./data/raw/oshwhub/1a1e865568d04db59a5a140dd3f13581/) | [qaxslk](https://oshwhub.com/qaxslk) | CC BY-NC-SA 4.0 | Std
6.5.15 | 2,695 | 1,215 | 1,146 | 306,681 | 13 | 204.5 |
+| 3 | [(高颜值)220V供电300W四路彩屏桌面电源](https://oshwhub.com/eda_uahyxtbgs/165w-three-way-multi-protocol-fa)
[`dc91a91e…`](./data/raw/oshwhub/dc91a91e669349898d709a5ba02f5b5f/) | [cqlcp](https://oshwhub.com/eda_uahyxtbgs) | CC BY-NC-SA 4.0 | Pro 3.x
3.2.69 | 1,955 | 1,428 | 0 | 91,319 | 11 | 172.4 |
+| 4 | [自制ST-LINK V2-1(开源版本)](https://oshwhub.com/CYIIOT/ST_LINK-V2_1)
[`298873b7…`](./data/raw/oshwhub/298873b7fdbe44f8ba0e7351e023bc2c/) | [攻城狮神木](https://oshwhub.com/CYIIOT) | GPL 3.0 | Std
6.5.39 | 1,947 | 863 | 996 | 239,671 | 7 | 20.9 |
+| 5 | [QF ZERO V2 智能手表终端V1.0.9-24-6-29](https://oshwhub.com/dhx233/esp32_s3_watch)
[`892dbc4e…`](./data/raw/oshwhub/892dbc4ebca74227ac6269a1693380d8/) | [启凡科创](https://oshwhub.com/dhx233) | Public Domain | Std
6.5.41 | 1,737 | 774 | 643 | 175,969 | 6 | 113.0 |
+| 6 | [RT300-MKV 250W 数控升降压桌面可调电源](https://oshwhub.com/XACT/rt300-mkv)
[`91206ca7…`](./data/raw/oshwhub/91206ca73e96455f946bfcdd73e814fd/) | [XACT](https://oshwhub.com/XACT) | CC BY-NC-SA 4.0 | Std
6.5.23 | 1,735 | 867 | 782 | 185,523 | 2 | 80.9 |
+| 7 | [ESP-VoCat 喵伴:会听、会动、会陪伴的 AI 萌宠](https://oshwhub.com/esp-college/echoear)
[`ba64bd6f…`](./data/raw/oshwhub/ba64bd6f1c9c467ba3b674a54943557d/) | [乐鑫小铁匠](https://oshwhub.com/esp-college) | GPL 3.0 | Pro 3.x
3.2.91 | 1,525 | 558 | 0 | 215,910 | 8 | 32.6 |
+| 8 | [立创·泰山派RK3566开发板](https://oshwhub.com/li-chuang-kai-fa-ban/li-chuang-tai-shan-pai-kai-fa-ban)
[`7360e73d…`](./data/raw/oshwhub/7360e73de5dd428e9f29e10573f2d8ac/) | [立创开发板](https://oshwhub.com/li-chuang-kai-fa-ban) | GPL 3.0 | Pro 2.x
2.1.40 | 1,025 | 627 | 0 | 397,479 | 0 | 0.0 |
+| 9 | [【全网首发】X86电脑主板](https://oshwhub.com/oshwhub/dian-nao-zhu-ban)
[`b7784066…`](./data/raw/oshwhub/b77840665e2e48148c1b04ce84b5f7e7/) | [OSHWHub](https://oshwhub.com/oshwhub) | GPL 3.0 | Pro 3.x
3.2.15 | 1,015 | 754 | 0 | 99,998 | 1 | 10.1 |
+| 10 | [t12-858d烙铁热风枪通用焊台二合一](https://oshwhub.com/mojinyinhu/t12858-tong-yong-han-tai)
[`3e2f893d…`](./data/raw/oshwhub/3e2f893d74664e01b755ccf2582792de/) | [mojinyinhu](https://oshwhub.com/mojinyinhu) | GPL 3.0 | Std
6.5.15 | 1,013 | 483 | 395 | 133,220 | 7 | 44.1 |
+| 11 | [立创·梁山派开发板](https://oshwhub.com/li-chuang-kai-fa-ban/liang-shan)
[`0c467598…`](./data/raw/oshwhub/0c46759837334318aa4882d6d37f96fa/) | [立创开发板](https://oshwhub.com/li-chuang-kai-fa-ban) | GPL 3.0 | Pro 2.x
2.1.30.c6721c40 | 891 | 760 | 0 | 237,019 | 1 | 13.1 |
+| 12 | [大功率感应加热2500W 增强型ZVS](https://oshwhub.com/diy17102800/tu-teng-zvs)
[`f974b06d…`](./data/raw/oshwhub/f974b06d9c01470bb319e7df6d4512c9/) | [金石之声](https://oshwhub.com/diy17102800) | TAPR Open Hardware License | Std
6.5.40 | 708 | 355 | 378 | 61,550 | 2 | 8.8 |
+| 13 | [手持红外热成像](https://oshwhub.com/wesd/h7b0-re-cheng-xiang)
[`1b09581d…`](./data/raw/oshwhub/1b09581d66d34438a1e6513e457e0532/) | [wesd](https://oshwhub.com/wesd) | CERN Open Hardware License | Std
6.5.22 | 646 | 247 | 175 | 73,081 | 2 | 3.3 |
+| 14 | [小汐 & 阿曈 -> 盖革计数器(MWGC-2T)](https://oshwhub.com/yanranxiaoxi/Multi-adaptation-Wi-Fi-Geiger-Counter-Double-Tube-Type)
[`b077573d…`](./data/raw/oshwhub/b077573dfb764e95b1d27faba49cca65/) | [久治明千树汐](https://oshwhub.com/yanranxiaoxi) | CC BY-SA 4.0 | Std
6.5.47 | 365 | 212 | 189 | 49,755 | 2 | 4.0 |
+| 15 | [柚子爱AI相机-YuzuAI-YuzuMaix-AIoT-V831开发板](https://oshwhub.com/armbian-pythoniot/yuzumaix-v831)
[`922c1f3a…`](./data/raw/oshwhub/922c1f3a9b9a43ff98998f476e7946ca/) | [Armbian-PythonIot](https://oshwhub.com/armbian-pythoniot) | CC BY-NC-SA 3.0 | Std
6.5.37 | 236 | 129 | 96 | 45,128 | 7 | 8.3 |
## 汇总
diff --git a/scripts/build_index.py b/scripts/build_index.py
index d27ea8c..5bbd2f6 100644
--- a/scripts/build_index.py
+++ b/scripts/build_index.py
@@ -19,6 +19,17 @@ def fmt_mb(b: int) -> str:
return f"{b / 1024 / 1024:.1f}"
+SOURCE_FORMAT_LABEL = {
+ "easyeda-std": "Std",
+ "easyeda-pro": "Pro 3.x",
+ "easyeda-pro-legacy": "Pro 2.x",
+ "kicad": "KiCad",
+ "altium": "Altium",
+ "eagle": "Eagle",
+ "other": "Other",
+}
+
+
def collect() -> list[dict]:
rows: list[dict] = []
for meta in (REPO / "data" / "raw").rglob("metadata.json"):
@@ -38,6 +49,8 @@ def collect() -> list[dict]:
"files_count": len(files),
"files_bytes": bytes_total,
"local_dir": str(meta.parent.relative_to(REPO)),
+ "source_format": m.get("source_format"),
+ "editor_version": m.get("editor_version"),
}
)
# sort by stars desc, tie-break by likes
@@ -71,12 +84,12 @@ def render(rows: list[dict]) -> str:
w("> 按 **Stars 倒序**。Title → 源站;UUID → 本仓库对应目录。")
w("")
w(
- "| # | Title | Author | License | "
- "⭐ Stars | ❤️ Likes | 🍴 Forks | 👁 Views | 💬 Comments | Files | Size (MB) |"
+ "| # | Title | Author | License | 版本 | "
+ "⭐ Stars | ❤️ Likes | 🍴 Forks | 👁 Views | Files | Size (MB) |"
)
w(
- "|---|-------|--------|---------|"
- "--------:|---------:|---------:|---------:|------------:|------:|----------:|"
+ "|---|-------|--------|---------|------|"
+ "--------:|---------:|---------:|---------:|------:|----------:|"
)
for i, r in enumerate(rows, 1):
m = r["metrics"]
@@ -89,10 +102,13 @@ def render(rows: list[dict]) -> str:
author_link = f"[{r['author_display']}]({author_url})"
uuid_short = r["uuid"][:8]
dir_link = f"[`{uuid_short}…`](./{r['local_dir']}/)"
+ version_label = SOURCE_FORMAT_LABEL.get(r["source_format"] or "", "—")
+ if r["editor_version"]:
+ version_label = f"{version_label}
{r['editor_version']}"
w(
- f"| {i} | {title_link}
{dir_link} | {author_link} | {r['license']} | "
+ f"| {i} | {title_link}
{dir_link} | {author_link} | {r['license']} | {version_label} | "
f"{m.get('stars', 0):,} | {m.get('likes', 0):,} | {m.get('forks', 0):,} | "
- f"{m.get('views', 0):,} | {m.get('comments', 0):,} | "
+ f"{m.get('views', 0):,} | "
f"{r['files_count']} | {fmt_mb(r['files_bytes'])} |"
)
w("")