feat(posts): publish batch-06 posts 01 & 02, render full visual asset suites for all 5 posts

This commit is contained in:
hoelee committed 2026-10-27 22:30:31 +08:00
1 parent c51885d00a
commit 8a581dc68b
42 files changed
+93 -4

No files matched your search

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

+25
View File
@@ -296,5 +296,30 @@
},
"generating-full-length-songs-with-yue2-comfyui": {
"evidence": "60 songs - 9-part structure - 295s headroom cap"
},
"when-lowering-crf-does-nothing-maxrate-deadlock": {
"evidence": "CRF 19→14 · SSIM +0.00003 · 106.2h wasted",
"ogTitle_en": "When Lowering CRF Does Nothing",
"ogTitle_zh": "降低 CRF 为何毫无效果:maxrate 死锁"
},
"why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux": {
"evidence": "-map 0 copy · tx3g CC · udta/name dual-write",
"ogTitle_en": "Why ffmpeg -map 0 Breaks Remux",
"ogTitle_zh": "ffmpeg -map 0 搞崩跨容器混流"
},
"traefik-yaegi-plugin-package-name-trap": {
"evidence": "Yaegi lookup · hyphen to underscore · panic",
"ogTitle_en": "Traefik Yaegi Plugin Package Trap",
"ogTitle_zh": "Traefik Yaegi 插件启动崩溃陷阱"
},
"architecting-sea-payment-and-offline-licensing-pipelines": {
"evidence": "toyyibPay FPX · FOR UPDATE · Ed25519 offline",
"ogTitle_en": "SEA Payment & Offline Licensing",
"ogTitle_zh": "东南亚网银支付与离线机器码授权"
},
"batch-generating-80-technical-covers-with-comfyui": {
"evidence": "89 covers in 48m · 35% safe zone · Laplacian filter",
"ogTitle_en": "Batch Generating 80+ Technical Covers",
"ogTitle_zh": "ComfyUI 批量闭环 80+ 张技术封面"
}
}
+44
View File
@@ -0,0 +1,44 @@
import os
import re
repo = "D:/dev/hoelee-blog"
posts_dir = os.path.join(repo, "src/content/posts")
slugs = [
("when-lowering-crf-does-nothing-maxrate-deadlock", False),
("why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux", False),
("traefik-yaegi-plugin-package-name-trap", True),
("architecting-sea-payment-and-offline-licensing-pipelines", True),
("batch-generating-80-technical-covers-with-comfyui", True)
]
for slug, is_draft in slugs:
en_path = os.path.join(posts_dir, f"{slug}.md")
zh_path = os.path.join(posts_dir, "zh", f"{slug}.md")
draft_val = "true" if is_draft else "false"
# Process EN
with open(en_path, "r", encoding="utf-8") as f:
en_text = f.read()
en_text = re.sub(r"^draft:\s*(true|false)", f"draft: {draft_val}", en_text, flags=re.MULTILINE)
if "ogImage:" not in en_text:
en_text = re.sub(r"^---\r?\n", f"---\nogImage: \"/og/{slug}.jpg\"\nbanner: \"/banners/{slug}.jpg\"\n", en_text)
with open(en_path, "w", encoding="utf-8") as f:
f.write(en_text)
# Process ZH
with open(zh_path, "r", encoding="utf-8") as f:
zh_text = f.read()
zh_text = re.sub(r"^draft:\s*(true|false)", f"draft: {draft_val}", zh_text, flags=re.MULTILINE)
if "ogImage:" not in zh_text:
zh_text = re.sub(r"^---\r?\n", f"---\nogImage: \"/og/zh-{slug}.jpg\"\nbanner: \"/banners/{slug}.jpg\"\n", zh_text)
with open(zh_path, "w", encoding="utf-8") as f:
f.write(zh_text)
print("Frontmatter updated successfully.")
@@ -1,4 +1,6 @@
---
ogImage: "/og/architecting-sea-payment-and-offline-licensing-pipelines.jpg"
banner: "/banners/architecting-sea-payment-and-offline-licensing-pipelines.jpg"
title: "Delivering Commercial Desktop Software in Southeast Asia: Multi-Gateway Billing with toyyibPay and Keygate Fulfillment"
description: "How I architected a cross-border commercial software entitlement pipeline: combining toyyibPay FPX payments, machine-bound Keygate licenses, and idempotent state machines for Southeast Asian markets."
pubDate: 2026-10-27
@@ -1,4 +1,6 @@
---
ogImage: "/og/batch-generating-80-technical-covers-with-comfyui.jpg"
banner: "/banners/batch-generating-80-technical-covers-with-comfyui.jpg"
title: "Batch Generating 80+ Technical Covers with ComfyUI: Constraining Style, Space, and Typography"
description: "How I automated the generation of 89 high-contrast technical article covers using a headless ComfyUI API pipeline: enforcing negative space, dark palettes, and zero-hallucination text boundaries."
pubDate: 2026-10-27
@@ -1,4 +1,6 @@
---
ogImage: "/og/traefik-yaegi-plugin-package-name-trap.jpg"
banner: "/banners/traefik-yaegi-plugin-package-name-trap.jpg"
title: "Why Your Traefik Yaegi Plugin Fails on Boot: The Module Hyphen to Underscore Trap"
description: "Why Traefik crashes on boot with 'CreateConfig failed with Yaegi' when loading custom Go plugins: diagnosing the hidden package naming convention enforced by the Yaegi dynamic interpreter."
pubDate: 2026-10-27
@@ -1,4 +1,6 @@
---
ogImage: "/og/when-lowering-crf-does-nothing-maxrate-deadlock.jpg"
banner: "/banners/when-lowering-crf-does-nothing-maxrate-deadlock.jpg"
title: "When Lowering CRF Does Nothing: The -maxrate Ceiling and the SSIM Quality Deadlock"
description: "Why dropping CRF by five steps improved SSIM by only 0.00003: discovering the mathematical conflict between -maxrate bitrate ceilings and quality gates in high-throughput video re-encoding."
pubDate: 2026-10-27
@@ -6,7 +8,7 @@ category: devops
blueprint: self-hosted-infrastructure
blueprintLayer: L1-compute-storage-network
tags: ["ffmpeg", "transcoding", "hevc", "ssim", "video-engineering", "quality-gate"]
draft: true
draft: false
summary:
audience: "Video Infrastructure Engineers, SREs & Platform Architects"
painPoint: "A high-throughput video space-reclamation pipeline repeatedly burned 106 hours across 487 encoding rounds because quality-gate retries (crf -2) produced zero metric improvement on capped bitrates."
@@ -1,4 +1,6 @@
---
ogImage: "/og/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.jpg"
banner: "/banners/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.jpg"
title: "Why ffmpeg -map 0 Breaks Your Remux: The Hidden Matrix of Multi-Track MP4 and Matroska"
description: "Why using -map 0 silently aborts Matroska muxers, drops subtitle fonts, and corrupts Apple playback: an empirical teardown of container constraints across multi-track media pipelines."
pubDate: 2026-10-27
@@ -6,7 +8,7 @@ category: engineering
blueprint: self-hosted-infrastructure
blueprintLayer: L1-compute-storage-network
tags: ["ffmpeg", "containers", "mp4", "matroska", "subtitles", "media-pipeline"]
draft: true
draft: false
summary:
audience: "Media Systems Engineers, Full-Stack Architects & Streaming DevOps"
painPoint: "A media remuxing daemon using naive -map 0 silently crashed on container conversions, dropped stylised subtitles, and broke track selection on iOS clients."
@@ -1,4 +1,6 @@
---
ogImage: "/og/zh-architecting-sea-payment-and-offline-licensing-pipelines.jpg"
banner: "/banners/architecting-sea-payment-and-offline-licensing-pipelines.jpg"
title: "在东南亚交付桌面商业软件:对接 toyyibPay 本地网银与 Keygate 机器码离线授权"
description: "如何为东南亚市场构建跨区域商业软件交付流水线:深度集成 toyyibPay FPX 银行直付网关、Keygate 硬件绑定离线授权体系与幂等状态机架构实战。"
pubDate: 2026-10-27
@@ -1,4 +1,6 @@
---
ogImage: "/og/zh-batch-generating-80-technical-covers-with-comfyui.jpg"
banner: "/banners/batch-generating-80-technical-covers-with-comfyui.jpg"
title: "用 ComfyUI 批量闭环 80+ 张技术图文封面:设计规范约束、留白控制与批处理工作流"
description: "如何通过 Headless ComfyUI API 流水线自动化生成 89 张高对比度技术博客封面:深度实战留白预留、暗色调约束与零文本幻觉的批处理闭环方案。"
pubDate: 2026-10-27
@@ -1,4 +1,6 @@
---
ogImage: "/og/zh-traefik-yaegi-plugin-package-name-trap.jpg"
banner: "/banners/traefik-yaegi-plugin-package-name-trap.jpg"
title: "Traefik 自定义插件启动崩溃:Yaegi 解释器的连字符与下划线陷阱"
description: "为什么本地测试全部通过的 Go 插件在 Traefik 启动时报错 'CreateConfig failed with Yaegi':深度排查 Yaegi 动态解释器对模块路径连字符转下划线的包命名隐蔽契约。"
pubDate: 2026-10-27
@@ -1,4 +1,6 @@
---
ogImage: "/og/zh-when-lowering-crf-does-nothing-maxrate-deadlock.jpg"
banner: "/banners/when-lowering-crf-does-nothing-maxrate-deadlock.jpg"
title: "当降低 CRF 毫无效果:视频转码中 -maxrate 封顶与 SSIM 质量门禁的死锁"
description: "为什么将 CRF 下调 5 档仅让 SSIM 微升 0.00003:深度拆解高吞吐视频转码管线中 -maxrate 码率天花板与客观质量门禁之间的数学死锁与两档放行解法。"
pubDate: 2026-10-27
@@ -6,7 +8,7 @@ category: devops
blueprint: self-hosted-infrastructure
blueprintLayer: L1-compute-storage-network
tags: ["ffmpeg", "transcoding", "hevc", "ssim", "video-engineering", "quality-gate"]
draft: true
draft: false
summary:
audience: "视频基础设施工程师、SRE 与平台架构师"
painPoint: "私有高吞吐转码管线在 487 轮转码中空转了 106 小时算力,原因是质量门禁的自动重试(CRF -2)在硬性码率上限拦截下完全失效。"
@@ -1,4 +1,6 @@
---
ogImage: "/og/zh-why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.jpg"
banner: "/banners/why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux.jpg"
title: "为什么 ffmpeg -map 0 会搞崩混流:跨容器多音轨、字幕与字体的深水区"
description: "为什么无脑使用 -map 0 会导致 Matroska 混流器直接报错退出、字幕字体静默丢失以及 Apple 客户端音轨失效:跨格式多媒体管线中的容器兼容性实战拆解。"
pubDate: 2026-10-27
@@ -6,7 +8,7 @@ category: engineering
blueprint: self-hosted-infrastructure
blueprintLayer: L1-compute-storage-network
tags: ["ffmpeg", "containers", "mp4", "matroska", "subtitles", "media-pipeline"]
draft: true
draft: false
summary:
audience: "多媒体系统工程师、全栈架构师与流媒体 DevOps"
painPoint: "后台转码服务使用朴素的 -map 0 命令进行混流,在跨容器转换时遭遇混流器崩溃、特效字幕丢失以及 iOS 客户端音轨名消失等隐蔽故障。"