laohu-motion-typography · git:20261106.42593f7 · 2026-11-06 · sha256 784bb222a7463632
laohu-motion-typography git:20261106.42593f7A
Immutable. This exact content never changes and is served at /api/v1/blob/784bb222a7463632.
---
name: laohu-motion-typography
description: 当文字本身承担主要画面主体、形态或空间运动时,由 laohu-motion 按需读取并设计局部文字操作。
---
# 文字作为画面主体
## 何时采用
当观众需要把字词、字形或文字组本身看作主要图像,并通过其分组、展开、遮罩、形态变化或重新组合理解内容时,读取本模块。普通标题、字幕、对象名、数据标签仍按 [字体、字幕与可读性](../../references/typography-and-legibility.md) 处理;文字恰好出现在某镜头里,不足以触发本模块。
本模块只决定文字在当前镜头如何成为视觉对象,不替代内容权限、字体选择、真实测量、对比和阅读时长判断,也不构成全片字体/版式风格。收到主线的观看任务、锁定原文/字幕范围、文字身份与语言单位、画幅/字体资源、目标镜头前后态和工具接口,返回文字组、锚点、局部操作、曝光/阅读/退出区间及可由 renderer 消费的映射,写回同一镜头蓝图。需要跨状态追踪、交接或动态证据的语义词组才登记 `entityId`,实际文字层或标注组用各自 `instanceId` 区分;一次显现且无需身份判断的标签不新增字段。重排、遮罩和跨图层交接时说明实体与实例如何对应及属性归属,不能由复用文本内容或 draw ID 推断观众仍能识别其身份。
若主线已选 `templateId`,以 `show` 和实际入口确认文字、数值、色板、布局与时钟中哪些字段真实开放;保留原模板的字级/构图/动效,只传确实消费的文字与 cue。随后仍按 [字体、字幕与可读性](../../references/typography-and-legibility.md) 检查实际字体、测量、对比和阅读窗;不因模板已渲染而跳过字形或遮挡检查。
当前局部 effect adapter 不绘制或缩放 `text` 对象;必要时仅可绑定到独立、静态矩形边界,做一次圈注/框架强调,并按真实文字组几何复核是否指向正确。不能把该轮廓当作文字显现、字形变换或可读性证明;文字自身的排版与曝光仍按本模块和字体 Reference 处理。
## 把文字分成可读且可动的组
先判断文字在本镜的语义单位:可独立理解的短语、专名、数字与单位、成对词、句内关系,或用户锁定的逐字文本。按观看者需要建立的理解关系分组,不为制造节奏把词、标点、数字单位或不可分的专名任意拆开。多组文字同时出现时,标明彼此的先后、归属、对照或层级;若某组的变化将改变句意、方向、条件或数字口径,先保留完整组再选运动。
每组分配稳定身份、内容来源/权限、行与字形排列、基线/变换锚点、画面区域、层级、前态/后态和退出后的去向。还未曝光的内容可以保持隐藏,但用户锁定全文持续可见时不能分批遮去;可用活动轮廓、焦点或关联图形组织注意,并承认全段一直可见。
## 选择字层上的局部操作
先确定哪个字组或文字状态必须完成本镜的表达/阅读任务,再选择局部轮廓揭示、沿承重路径展开、字组分离/靠拢、字层位置或尺度变换、局部遮罩、短促强调或分组重排。若有速度线、高亮、底线、第二组文字等辅助层,分别安排其相位、曲线、锚点与控制属性;它们可以与主动作错时或在不争焦点时交叠,不要求同一时间进入或共用一条曲线。操作须由内容关系或体验进程解释;装饰性碎裂、抖动、弹跳或反复高亮没有对应职责时删去。使用遮罩时,说明遮罩边界、绘制顺序和被保护的邻近文字/图形;局部变换不应改变文字方向、身份、数值或引出无来源含义。
当文字需要迅速建立视觉重音时,可让字组以尺度冲入、遮罩揭示或直接切入进入,但须在入场后及时落到可读状态;按判断、转折、对象、条件等语言关系错开字组,不把每个词拆成独立弹跳。文字进入后如占位改变,按实际量得的字形边界重排周围图形与后续标签;字组可随关系变化重组,也可缩为贴近对象的标签并把焦点交给图形或下一字组。局部操作只提供可组合的进入、稳定、关系接续和交接方法,不要求每镜使用同一尺度变化、遮罩、字幕位置或排版模板;须由宿主把本地操作接回整幅构图,并由字体 Reference 核对加载、对比与阅读窗。
若同一文字从完整词组拆成部件再组合,标出哪些字形保持身份、部件如何对应、过渡中间态与组合后的真实可读状态;只有对应可信且确有解释价值时才做连续形变。若字形不应被拆解,就用整体平移、显隐或局部空间编排,不强迫字形 morph。强调的峰值、衰减和遮罩进程由局部自定义操作控制,不把 `overshoot` 写成 `motion-core` 原生曲线或通用事件字段。
## 安排曝光、阅读与退场
对每组明确入场、首次可辨、有效阅读、退场和下一阶段复用/回收的时段。入场中的运动、透明度或柔化本身不自动排除阅读:按目标尺寸检查文字是否已完整可辨、对比与遮挡是否足够、运动是否妨碍连续阅读;满足这些条件的阶段可以计入有效阅读窗,尚未满足的部分不计。随后仍须满足字体 Reference 对连续停留和实际播放的检查。不能把“字幕没有高亮”说成“字幕尚未曝光”,也不能用字符平均速度替代目标尺寸顺播。
必要阅读完成后,标题或字组可退出、转入对象、重组成下一字组/图形,或在确实继续承担锚点、比较基线或必要上下文时保留;不默认常驻画面顶部。辅助高亮或装饰尾部可晚于主要文字完成而退去,但不得拖延必要阅读或抢走下一焦点。重组若只在外观上相似但语义或身份已变,明确作为新对象交接;若仍是同一词/部件,则在工程与画面中保持身份可追。回收已离场字层时确认其后续不再被 renderer、遮罩或重复 draw 消费,避免残影、双份文字或前一段含义滞留。
如果实际承载文字动作的是 Video Shotcraft `TextReveal`,用真实 `by` 拆分结果把字/词/行与语义 cue 对齐,分清源 props 与外部 adapter placement;按源局部 frame 计算完整曝光和退场,按 Film segment 窗口计算它何时出现于成片。修改文案、字体或宽度后须重新测字框并重算 reveal 完成、连续阅读和退场时间;精确属性与公式见[源接入规则](../../references/video-shotcraft-integration.md)。asrcut-v2 只有在 source landmark、真实保留 ASR token occurrence/time 与允许误差都进入 renderer 后才称具备口播时点绑定;默认语义关联允许屏幕解释字不同,只有 `textRelation:"literal"` 的逐字字幕/词级高亮要求同词。Film-global 不提供 ASR token anchor。
## 接到实际 Canvas 消费者
在本仓库 Canvas2D runner 中,`scripts/render.mjs` 将 `window.MotionOps` 与 `window.MotionCore` 一起提供给作品级 `--draw-module`;内建 scene JSON 不增加专用文字动画字段。具名 custom draw 可用 `MotionOps.createTextBitmapCache({fontSet, createCanvas, maxEntries})` 生成按文本与样式缓存的 Canvas 位图;先等待字体 ready,`get(text, style)` 可要求 `requireFont: true`,`style.blurPx` 指定实际模糊半径,返回对象的 `blurPx` 可用于检查该版本。需要一次准备清晰和柔化版本时,`getVariants(text, style, softBlurPx)` 返回 `{clear, soft}`;不提供多分辨率纹理或完整排版 API。位图按对应文字锚点绘制。字体名、真实文件、fallback、字重和阅读可读性仍须由字体 Reference 和实际渲染检查确认。
文字或标注采用 `measureTextOccupancy`/`composeLabelGeometry` 时,先从当前实际字形、样式与变换生成唯一完整组几何;该几何须真正决定候选位置以及文字和部件的 draw 坐标,而不是画完后才补测。每帧绘制完成后,以实际可见字组 ID 和同一屏幕坐标中的组框构造 snapshot,交给 `window.MOTION_EVIDENCE.layoutFrame(timeSec, scene, canvas, MotionOps)`;声明必需窗口时再由 runner 的 `--require-layout-evidence` 对蓝图 ID 严格核验。需要查某个关键点的后续遮挡/裁字时,才按[工具链 Reference](../../references/toolchain-render-and-check.md#可选的必需布局证据门禁与文字像素探针)声明 pixel probe。几何登记完整与字形像素可见是两类证据,均不能替代目标尺寸的正常播放检查。
可用 `MotionOps.withLocalMask(ctx, buildMaskPath, draw)` 限定单次局部绘制遮罩;函数使用 save/restore,作品自定义 renderer 仍须保证 mask 路径与目标坐标空间正确。文字变换、曝光和重组由自定义 draw 在每帧按绝对时间确定性计算,并通过真实解码帧检查,不依赖连续播放累加或隐藏状态。若现有工程使用排版软件、合成软件或其他 renderer,则调用其真实文字层/遮罩接口并记录等价对象与时间映射,不为了兼容该 API 改写成新 schema。
## 返回主线与验收
把文字身份、分组依据、内容锁定、局部操作、锚点/遮罩、全局时间窗、阅读停留、退场/重组及实际 consumer 写回镜头蓝图。起态、关键中态与落态均核对字组身份、字形和关系;还要随机顺序 seek/重复绘制,确认帧不依赖之前状态。最终按目标尺寸和正常速度检查首个可辨时刻、有效阅读窗、背景/图形遮挡、重组读法和结尾是否留有完整信息。若运动只让字更花,却让字句关系、数字单位或阅读时长更差,退回到更清楚的分组或静态停留。自检仅报告实际观察,不代替观众可读性或审美反馈。