feat(architecture): implement consultant review r4 (stream separation, nav upgrade, internal cta, schema & anchor fixes)
Deploy / build (push) Successful in 25s

This commit is contained in:
hoelee committed 2026-10-27 01:19:38 +08:00
1 parent cc28722c79
commit 419c962e2f
31 files changed
+286 -42

No files matched your search

@@ -4,6 +4,7 @@ description: "Diagnose audio-reactive background jitter and crossfade flicker in
pubDate: 2025-11-26
updatedDate: 2026-10-22
category: engineering
stream: creative-lab
tags: ["remotion", "react", "audio-visualizer", "css-animation", "debugging"]
ogImage: "/og/debugging-remotion-video-jitter.jpg"
banner: "/banners/debugging-remotion-video-jitter.jpg"
@@ -3,6 +3,7 @@ title: "From Audio to a 4-Minute Music Video: Orchestrating Gemini Argon 4, AI D
description: "A complete production breakdown of building a 4-minute 1080p anime OP music video (Crescent Bay): AI music generation, Gemini Argon 4 storyboard prompting, iterative image-to-video rerolls, and Filmora VFX editing."
pubDate: 2026-10-25
category: case-studies
stream: creative-lab
tags: ["ai-video", "music-video", "gemini", "filmora", "face-swapping", "ai-music", "creative-workflows"]
ogImage: "/og/from-audio-to-a-4-minute-ai-music-video.jpg"
banner: "/banners/from-audio-to-a-4-minute-ai-music-video.jpg"
@@ -3,6 +3,7 @@ title: "Generating Full-Length Songs with YuE2 BF16: Overcoming Duration Limits
description: "AI music tools cut off complex tracks mid-sentence. Here is how I solved the 240s duration wall using YuE2 BF16, 295s headroom budgeting, and a 60-song pipeline."
pubDate: 2026-10-26
category: tutorials
stream: creative-lab
tags: ["ai-music", "yue2", "comfyui", "audio-engineering", "subtitles", "python"]
ogImage: "/og/generating-full-length-songs-with-yue2-comfyui.jpg"
banner: "/banners/generating-full-length-songs-with-yue2-comfyui.jpg"
@@ -3,6 +3,7 @@ title: "Generating Subtitles for Songs That Ship Without Timestamps"
description: "AI music tools give you audio and nothing else — no line timings, no karaoke. Here is the pipeline I use to produce LRC and SRT subtitles for 18 songs, why plain transcription fails, and the two bugs that made the lyrics box scroll to the bottom."
pubDate: 2026-10-20
category: tutorials
stream: creative-lab
tags: ["subtitles", "lrc", "srt", "whisper", "forced-alignment", "ai-music", "python"]
ogImage: "/og/generating-subtitles-for-songs-without-timestamps.jpg"
banner: "/banners/generating-subtitles-for-songs-without-timestamps.jpg"
@@ -4,6 +4,7 @@ description: 'Explore an automated music video workflow using Remotion, Whisper,
pubDate: 2025-04-18
updatedDate: 2026-10-22
category: case-studies
stream: creative-lab
tags: ["remotion", "docker", "cdp", "youtube", "automation", "video-generation", "whisper"]
ogImage: "/og/how-i-built-an-automated-music-video-pipeline.jpg"
banner: "/banners/how-i-built-an-automated-music-video-pipeline.jpg"
@@ -3,6 +3,7 @@ title: "How I Made My Own Songs with Suno AI"
description: "I wrote the lyrics, tuned the prompts, and shipped seven songs with Suno AI — folk ballads, a kids' tune, an anime-style Heart Sutra. Full workflow + the tracks."
pubDate: 2026-09-11
category: case-studies
stream: creative-lab
tags: [suno, ai-music, music, lyrics, prompting, ai]
ogImage: /og/how-i-made-my-own-songs-with-suno-ai.jpg
banner: /banners/how-i-made-my-own-songs-with-suno-ai.jpg
@@ -3,6 +3,7 @@ title: "Running AI Video Locally on a 12 GB GPU: Real Numbers for Wan 2.2 and Se
description: "Measured on an RTX 3060: Wan 2.2 TI2V-5B generation, SeedVR2 upscaling, the 1080p resolution trap, and the one command that fixed five failed runs."
pubDate: 2026-10-20
category: ai
stream: creative-lab
tags: [ai-video, wan, comfyui, seedvr2, local-llm, gpu, cost]
ogImage: /og/running-ai-video-locally-on-a-12gb-gpu.jpg
banner: /banners/running-ai-video-locally-on-a-12gb-gpu.jpg
@@ -3,6 +3,7 @@ title: "Why My AI Songs Kept Losing Their Endings: Running YuE2 on a 12 GB GPU"
description: "Twelve Mandarin songs came out exactly 240.000 seconds long with the outros missing. The cause wasn't the lyrics — it was a hard cap, a VRAM ceiling, and a planner that ignores BPM."
pubDate: 2026-10-20
category: ai
stream: creative-lab
tags: ["yue2", "comfyui", "ai-music", "local-ai", "gpu", "vram", "mandarin"]
ogImage: "/og/yue2-on-a-12gb-gpu-songs-that-lost-their-endings.jpg"
banner: "/banners/yue2-on-a-12gb-gpu-songs-that-lost-their-endings.jpg"
@@ -4,6 +4,7 @@ description: "深入排查 Remotion 音频可视化中背景画面剧烈抽搐
pubDate: 2025-11-26
updatedDate: 2026-10-22
category: engineering
stream: creative-lab
tags: ["remotion", "react", "audio-visualizer", "css-animation", "debugging"]
ogImage: "/og/zh-debugging-remotion-video-jitter.jpg"
banner: "/banners/debugging-remotion-video-jitter.jpg"
@@ -47,7 +47,7 @@ RestartPolicy: always
照字面读,结论就是:进程干净退出了六次,每次都由重启策略续了命。一个长期运行的代理不会自己以状态 0 退出——而「干净退出」重复六次本身是矛盾,不是答案。`ExitCode` 和 `OOMKilled` 恰好是我在这里最信任的两个字段。在这台机器上,两个都是错的。
## 内核自己留了另一份记录
## 内核自己留了另一份记录 <a id="the-kernel-keeps-its-own-record"></a>
在 Linux 上,cgroup 的内存击杀由内核记录,哪怕容器运行时的账本没有把它带过来:
@@ -124,13 +124,13 @@ dmesg 里这样的记录一共 **6 条**,而 `RestartCount` 正是 **6**。同
线索就在同一轮测试里:`/robots.txt` 返回 200,内部的 `/cdn` 路径返回 400,而两者是同一时刻——说明路由是健康的,只有我自己的请求被过滤。在一台「你同时是客户端」的宿主上,永远不要用裸 curl 做判断:去探一个过滤器会忽略的路径,或者从访问日志里读出一个 200。
## 如果重来一次
## 如果重来一次 <a id="what-i-would-do-differently"></a>
1. **把「意外停止」加 `ExitCode 0` 当成「去读 dmesg」的指令**,而不是干净退出的证据。重启计数大于零的容器,在证明清白之前都当作内存事故来查。
2. **对 cgroup 高水位告警,而不是只对重启告警。** 重启后那个已经贴着天花板的读数,在通知到达前约十八分钟就告诉我第 7 次击杀要来了。
3. **早点拿到「谁在打我」这个数字。** 一份日志样本里 25,976 个不同 IP 就是全部故事,而我是在看完整条内存曲线之后才找到它。
4. **怀疑容器,别怀疑服务器。** 「服务器内存不够」和「一台 64 GB 的机器上某个容器只有 512 MiB 上限」需要完全不同的应对,而后者你不去看那个上限就根本看不见。
## 结果
## 结果 <a id="the-result"></a>
改动之后再没有出现 OOM 击杀,18 分钟后的峰值是 210 MB,而过去每一个周期都会摸到上限——四天里一直悄悄重启公网入口的那七次击杀,也从 dmesg 里消失了。爬虫洪水并没有停,所以我把这个失败形态记进了那套 stack 的运维笔记:**「容器意外停止」+ `exit 0` / `OOMKilled=false` 是一个会误导人的签名**,而在这类平台上,诚实的证据住在内核日志和 cgroup 的高水位里。
@@ -3,6 +3,7 @@ title: "从一首歌到 4 分钟完整 MV:我如何用 Gemini、AI 生成与 F
description: "基于《月牙湾》1080P 高清动漫 OP 制作实录:详解 AI 音乐重构、Gemini Argon 4 提示词分镜规划、文字生图与图生视频多次抽卡调优,以及 Filmora 剪辑与特效合成的真实生产实践。"
pubDate: 2026-10-25
category: case-studies
stream: creative-lab
tags: ["ai-video", "music-video", "gemini", "filmora", "face-swapping", "ai-music", "creative-workflows"]
ogImage: "/og/zh-from-audio-to-a-4-minute-ai-music-video.jpg"
banner: "/banners/from-audio-to-a-4-minute-ai-music-video.jpg"
@@ -3,6 +3,7 @@ title: "用 YuE2 BF16 生成完整长歌:突破时长限制与音频硬截断"
description: "AI 音乐工具常在歌词中途戛然而止。本文详解如何利用 YuE2 BF16、295秒余量预留公式与本地 ComfyUI,成功批量跑出 60 首自然收尾的完整长歌全集。"
pubDate: 2026-10-26
category: tutorials
stream: creative-lab
tags: ["ai-music", "yue2", "comfyui", "audio-engineering", "subtitles", "python"]
ogImage: "/og/zh-generating-full-length-songs-with-yue2-comfyui.jpg"
banner: "/banners/generating-full-length-songs-with-yue2-comfyui.jpg"
@@ -3,6 +3,7 @@ title: "给没有时间戳的歌曲自动生成字幕"
description: "AI 音乐工具只给你音频 —— 没有逐行时间,没有卡拉 OK。这是我给 18 首歌生成 LRC 与 SRT 字幕的完整流程,为什么单纯转写不行,以及让歌词框滚到底的两个 bug。"
pubDate: 2026-10-20
category: tutorials
stream: creative-lab
tags: ["subtitles", "lrc", "srt", "whisper", "forced-alignment", "ai-music", "python"]
ogImage: "/og/zh-generating-subtitles-for-songs-without-timestamps.jpg"
banner: "/banners/generating-subtitles-for-songs-without-timestamps.jpg"
@@ -4,6 +4,7 @@ description: '基于 Remotion、Whisper、Docker 与 Chrome DevTools Protocol
pubDate: 2025-04-18
updatedDate: 2026-10-22
category: case-studies
stream: creative-lab
tags: ["remotion", "docker", "cdp", "youtube", "automation", "video-generation", "whisper"]
ogImage: "/og/zh-how-i-built-an-automated-music-video-pipeline.jpg"
banner: "/banners/how-i-built-an-automated-music-video-pipeline.jpg"
@@ -28,7 +28,7 @@ Digi Kedai 销售数字产品——在线课程、电子书、模板——每一
这篇讲的是它是怎么搭起来的——架构、LLM 接线,以及那些各自吃掉我一整个下午的 bug。
## 为什么企业需要一个这样的机器人
## 为什么企业需要一个这样的机器人 <a id="why-a-business-needs-a-bot-like-this"></a>
讲架构之前,先说*为什么*。客服机器人不是噱头——它改变了小生意的经济学:
@@ -49,7 +49,7 @@ Digi Kedai 销售数字产品——在线课程、电子书、模板——每一
- **LiteLLM**——一个位于真实模型之前的自托管网关,这样我可以不碰机器人代码就切换供应商或加故障转移。
- **PostgreSQL**——对话与用户记忆存储,与我的 mem0 栈共用。
## 架构
## 架构 <a id="the-architecture"></a>
```
顾客 → Telegram/WhatsApp → Cloudflare 隧道 → bot.digikedai.com
@@ -112,7 +112,7 @@ LLM 擅长开放式问题,却很不擅长*状态*。所以那些需要可靠
- **在写通道适配器之前先定好 payload 契约。** WhatsApp 的 `m_text` bug 就来自我信任了一个没读过契约的自定义功能。
- **把 webhook 超时当作一等架构**,而不是事后补丁——如果我在第一天就想到确认窗口,重投递循环本可以避免。
## 结果
## 结果 <a id="the-result"></a>
现在 NAS 上的一个容器就能跨两个通道(Telegram + WhatsApp)解答顾客问题,按 SKU 或自然语言检索到正确商品,并端到端发放免费试用账号——还有一套约 175 个单元测试覆盖确定性流程、检索和 payload 契约。源码在
[git.hoelee.com/hoelee/digikedai-bot](https://git.hoelee.com/hoelee/digikedai-bot)。
@@ -3,6 +3,7 @@ title: "我用 Suno AI 做出自己的歌"
description: "自己写词、调风格提示词,用 Suno AI 做出七首原创歌曲——民谣、儿歌、动漫风心经。完整工作流 + 可直接播放的成品。"
pubDate: 2026-09-11
category: case-studies
stream: creative-lab
tags: [suno, ai-music, music, lyrics, prompting, ai]
ogImage: /og/zh-how-i-made-my-own-songs-with-suno-ai.jpg
banner: /banners/how-i-made-my-own-songs-with-suno-ai.jpg
@@ -3,6 +3,7 @@ title: "12GB 显卡跑本地 AI 视频:Wan 2.2 加 SeedVR2 的真实数据"
description: "在 RTX 3060 上实测:Wan 2.2 TI2V-5B 生成、SeedVR2 放大、1080p 分辨率陷阱,以及那条让连续五次失败全部通过的命令。"
pubDate: 2026-10-20
category: ai
stream: creative-lab
tags: [ai-video, wan, comfyui, seedvr2, local-llm, gpu, cost]
ogImage: /og/zh-running-ai-video-locally-on-a-12gb-gpu.jpg
banner: /banners/running-ai-video-locally-on-a-12gb-gpu.jpg
@@ -3,6 +3,7 @@ title: "为什么我的 AI 歌曲总是丢结尾:在 12GB 显卡上跑 YuE2"
description: "12 首中文歌时长全都恰好 240.000 秒,尾奏不见了。原因不在歌词 —— 是一道硬上限、一堵显存天花板,和一个不看 BPM 的规划器。"
pubDate: 2026-10-20
category: ai
stream: creative-lab
tags: ["yue2", "comfyui", "ai-music", "local-ai", "gpu", "vram", "mandarin"]
ogImage: "/og/zh-yue2-on-a-12gb-gpu-songs-that-lost-their-endings.jpg"
banner: "/banners/yue2-on-a-12gb-gpu-songs-that-lost-their-endings.jpg"