diff --git a/.github/pr-assets/pr-maskedmimic-round5.png b/.github/pr-assets/pr-maskedmimic-round5.png new file mode 100644 index 00000000..f291907a Binary files /dev/null and b/.github/pr-assets/pr-maskedmimic-round5.png differ diff --git a/.github/pr-assets/pr-maskedmimic-round6.png b/.github/pr-assets/pr-maskedmimic-round6.png new file mode 100644 index 00000000..9d5b439d Binary files /dev/null and b/.github/pr-assets/pr-maskedmimic-round6.png differ diff --git a/AGENTS.md b/AGENTS.md index 3b0f537a..5a07eb16 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -100,7 +100,7 @@ Jekyll 把笔记渲染成同名 `.html`,源 `.md` 不会发布,所以 `[PPO] - **画真实机器人用真机的图,不用火柴人**:取 [Robot_Description_Gallery_Online](https://github.com/ImChong/Robot_Description_Gallery_Online) 的 `web/thumbs/.webp`(透明底,按各家开源 URDF 渲染),裁到机身、按 `data/robots.json` 的 `measured.height_m` 等比例缩放后放进 `assets/img/robots/`,图注写明出处;bundle 里用 `document.currentScript.src` 解析 `../../img/robots/`,网页和离线视频都能找到(LCP 第 10 幕就是这么做的)。**机器人要跟着数据动**(重定向结果、跟踪轨迹)时,可以用 [Robot_Retarget_Online](https://github.com/ImChong/Robot_Retarget_Online) 的 MuJoCo WASM + three.js 模型加载代码按 qpos 逐帧离线渲染成透明底贴图表(正交相机与 bundle 的投影同一套,二维标注直接叠上去),做法见 GMR(`g1Mesh()`)。 - **讲硬件 / 机构设计时,可以直接用论文的图**(裁剪截图):放进 `assets/img/papers//`(webp),bundle 里同样用 `document.currentScript.src` 解析路径,画面上写明「论文图 N」;论文图可以做底图,动的部分(高亮、标注、示意动画)叠在上面。ToddlerBot 第 2 幕(图 7 的三种传动)、第 5 幕(图 10 的标定卡具,旁白念到哪种颜色就框出哪几块)、第 6 幕(图 11 的台架照片加部件标注)、第 8 幕(图 1 的遥操作装置)是这样做的。arXiv 默认许可下图的版权仍归作者,只做讲解引用、不改原图。 - **主动画各幕里不预告下一篇**:下一篇的主题只放在配音视频的片尾,`K.explainer` 的分镜、字幕轨和旁白的正片部分都不提(2026-10-11 的看片反馈)。 -- **真机效果用项目页的视频片段**:论文项目页放了真机视频时,直接剪对应的片段嵌进讲解动画和配音视频,别再用论文里的静态截图(2026-10-16 OmniH2O 的看片反馈;之后的视频照此做)。片段剪成 H.264、无声、faststart 的 mp4(单段 480×270,或 2×2 / 1×3 拼成一段,小块高必须是偶数,`-crf 30 -preset slow`,一段 0.1–0.5 MB)加一张首帧 webp 当海报,放进 `assets/img/papers//clips/`;分镜里用 `K.svgClip(x, y, w, h, src, { poster })`,draw 里调 `clip.at(K.clipSince(t, cue), 可见)`,`cue` 是片段开始那一幕内时刻。网页上片段 `preload="none"`,播到那一幕才下载,那一幕不画了(换幕、暂停)就停;离线视频里 `stage.html` 按时间线算出片段已经播了几秒(旁白比分镜长时片段照样往下播),`render.mjs` 先把 `clips/*.mp4` 转成全关键帧 VP9 放进 `out//clips/`(渲染用的 Chromium 解不了 H.264),每帧 seek 到准确时刻、等 `window.__clipWait()` 返回再截图。画面上写明「项目页视频」和项目页标的倍速,笔记的参考来源写明出处,只做讲解引用。片段上别压字(`check_layout` 把它当整块图)。做法见 OmniH2O 的 `projClip()`,`test_storyboard_clips_live_where_render_finds_them` 会核对位置、编码与海报。 +- **真机效果用项目页的视频片段**:论文项目页放了真机视频时,直接剪对应的片段嵌进讲解动画和配音视频,别再用论文里的静态截图(2026-10-16 OmniH2O 的看片反馈;之后的视频照此做)。片段剪成 H.264、无声、faststart 的 mp4(单段 480×270,或 2×2 / 1×3 拼成一段,小块高必须是偶数,`-crf 30 -preset slow`,一段 0.1–0.5 MB)加一张首帧 webp 当海报,放进 `assets/img/papers//clips/`;分镜里用 `K.svgClip(x, y, w, h, src, { poster })`,draw 里调 `clip.at(K.clipSince(t, cue), 可见)`,`cue` 是片段开始那一幕内时刻。网页上片段 `preload="none"`,播到那一幕才下载,那一幕不画了(换幕、暂停)就停;离线视频里 `stage.html` 按时间线算出片段已经播了几秒(旁白比分镜长时片段照样往下播),`render.mjs` 先把 `clips/*.mp4` 转成全关键帧 VP9 放进 `out//clips/`(渲染用的 Chromium 解不了 H.264),每帧 seek 到准确时刻、等 `window.__clipWait()` 返回再截图。画面上写明「项目页视频」和项目页标的倍速,笔记的参考来源写明出处,只做讲解引用。片段上别压字(`check_layout` 把它当整块图)。剪之前先按 0.25 s 抽一张缩略图表把整段源视频看一遍,确认旁白讲的动作落在剪的区间里、人物不贴着裁剪框(MaskedMimic 第 14 幕两段「侧手翻」原先都剪在源视频 0–5 s,翻是在 5.5–7.0 s,2026-10-18 看片反馈)。做法见 OmniH2O 的 `projClip()`,`test_storyboard_clips_live_where_render_finds_them` 会核对位置、编码与海报。 - **一个格子里只放一个例子**:项目页常把四个例子拼成 2 × 2,原样塞进 380 宽的格子,每个例子只剩 190 × 107,手机上人小得看不清(MaskedMimic 2026-10-17 的看片反馈)。把每个例子单独裁出来、按顺序拼成一段,片段下面写出放到第几个、是什么(MaskedMimic 的 `seqClip()`);论文里竖排几块的总览图同理,旁白讲到哪块就把哪块单独放大。 - **改了某一幕先出这一段给人看**:`node render.mjs clip ,` 只渲染这段时间并配上同一段旁白,确认后再重渲整片。 @@ -153,7 +153,7 @@ kramdown 在 `markdown="1"` 的 HTML 块里既不跑 GFM 的中文 id 生成器

(……也可以直接下载 mp4)

``` -`