一行一条提示,纯文本直接可用。需要更多控制时,往行首加一个
[标记] —— 控制这句话什么时候出现、以什么形态出现。
就像文字转语音时给句子加 (笑) (停顿),只不过这里的标记是演给你自己看的。
三个层次,按需要往下走。停在第一层也完全能用。
每个非空行 = 一条提示。第一行不超过 15 字则当标题。不需要学任何语法。
路演·产品介绍
我们解决的核心问题是…
市场规模 500 亿
核心壁垒是专利算法
第一行写 幕词1 开启结构化解析,--- 之前是头部。
幕词1
标题: 路演·产品介绍
模式: 定时
时长: 5
---
我们解决的核心问题是…
市场规模 500 亿
行首 […] 可连写。括号里的内容是给自己看的表演提示。
== 开场 ==
[重]市场规模 500 亿
增速 30%,CAGR 45%
[待]等他们点头再往下(扫视全场)
[听:融资]本轮融资用途
左边改,右边立刻出解析结果、字节预算和眼镜端渲染预览。这里的解析器和应用侧是同一份代码。
直接由上面的稿本生成。眼镜摄像头扫的是屏幕,模块越大越好扫 —— 先点「全屏扫码」把码放到最大再试。
魔术行 → 头部 → --- → 正文。头部和分隔线都可以省。
第一个非空行是 幕词1 或 MUCI1 时按本规范解析,结尾数字是格式主版本。
解析器遇到更高版本号应当尽力解析而不是拒绝。
没有魔术行 = 纯文本回退:每个非空行当一条提示。这条回退保证「随手粘一段文字」永远能用。
| 键 | 别名 | 取值 | 默认 |
|---|---|---|---|
标题 | title | 任意文本 | 未命名词稿 |
模式 | mode | 手动 定时 跟读 滚动 | 手动 |
时长 | dur | 秒数,定时模式默认停留 | 4 |
速度 | speed | 字/分钟,滚动模式 | 200 |
字号 | size | 大 中 小 | 中 |
作者 | by | 任意文本 | — |
| 写法 | 类型 | 行为 |
|---|---|---|
== 开场 == | 段落 | 分节标记,不作为提示显示,用于跳转与进度 |
// 随便写 | 注释 | 完全忽略 |
| (空行) | — | 忽略 |
␣␣两格缩进 | 副文本 | 附到上一条提示,小字显示在主文下方 |
| 其它 | 提示条 | 一行一条 |
行首的 […],可以连写多个:[重][3s]核心壁垒是专利算法
| 标记 | 含义 |
|---|---|
[3s] | 停留 3 秒后自动推进。也可写 [3] |
[1:30] | 绝对时间码,从开场计时。到点才显示这条 |
[待] | 等待手动推进(点头 / 双击)。可覆盖定时、滚动模式 |
[听:融资] | 语音里说到「融资」时推进 |
含 : 且形如 m:ss → 绝对时间码;纯数字或以 s 结尾 → 相对停留时长。
| 标记 | 含义 |
|---|---|
[重] | 强调。更大更亮 |
[淡] | 弱化。次要信息 |
[警] | 警示。用于「别提这个」「时间到了」这类自我提醒 |
括号包起来的内容 = 给自己看的表演指令,弱化小字渲染,全角半角都算。
我们解决的核心问题是…(停顿,扫视全场)
所以这就是我们的护城河(笑)
(笑) 告诉合成器怎么念;这里 (笑) 告诉你自己怎么演。
整行只有舞台提示时,它会附到上一条提示上,不单独成条。
需要显示字面括号或行首方括号时,行首加 \ 转义:\[这是字面方括号]
模式定默认值,行内标记做局部覆盖 —— 标记永远优先于模式。
一次一条,点头 / 双击推进。最稳,适合问答、谈判、路演 QA。个别条目仍可用 [3s] 让它自己走。
每条停留 时长 秒后自动推进。适合有严格时间控制的演讲。配 [m:ss] 绝对时间码可以全程卡点。
语音识别听到 [听:关键词] 时推进。适合已背熟、只需要防卡壳。没写 [听:] 的条目退化为等待手动推进 —— 不替你猜。
传统提词器,全文按 速度 字/分钟连续滚动。[待] 会硬停直到你推进。适合逐字稿。
眼镜摄像头扫的是屏幕上显示的码,字节数直接决定能不能扫上。UTF-8 下汉字 3 字节、ASCII 1 字节。
| 稿本规模 | 约合字节 | 可扫性 |
|---|---|---|
| ≤ 100 汉字 | ~300 B | 很好,随便扫 |
| ≤ 200 汉字 | ~600 B | 好,推荐上限 |
| ≤ 400 汉字 | ~1200 B | 一般,得凑近、屏幕要亮 |
| > 700 汉字 | > 2100 B | 差,接近 QR 容量上限(M 级纠错 2331 B),不建议 |
| 载体 | 二维码内容 | 长度 | 联网 | 状态 |
|---|---|---|---|---|
| 内联 | 稿本文本本身 | 受上表限制 | 不需要 | v1 已定 |
| 引用 | https://muci.daduiot.com/s/<id> | 无限 | 需要 | 预留 |
引用载体把长度问题彻底解决,代价是必须联网、且内容离开了本地。 长逐字稿走引用,敏感内容走内联。
文本格式是书写与传输格式;应用内部统一转成下面这个结构。
既有的 {title, cues:[…]} JSON 是它的最小子集,保持兼容。
{
"v": 1,
"title": "路演·产品介绍",
"mode": "manual",
"defaultDur": 4,
"speed": 200,
"size": "medium",
"sections": [ { "name": "开场", "from": 0 } ],
"cues": [
{
"text": "我们解决的核心问题是…",
"sub": "先讲痛点,别讲产品",
"notes": ["停顿,扫视全场"],
"advance": { "type": "manual" },
"style": "normal"
},
{
"text": "本轮融资用于扩团队和获客",
"advance": { "type": "listen", "keyword": "融资" },
"style": "strong"
}
]
}
| 字段 | 取值 |
|---|---|
advance.type | manual · timer(带 sec) · at(带 sec,绝对) · listen(带 keyword) · scroll |
style | normal · strong · dim · warn |
给实现者的硬性要求。参考实现就是本页加载的
cue-script.js,纯 ES5,可以原样搬进 muci/lib/。
| # | 要求 | 为什么 |
|---|---|---|
| 1 | 永不抛异常 | 任何畸形输入都要产出可用结果,最差也是「整段当一条提示」 |
| 2 | 未知标记丢标记、留文字 | 向前兼容的基础 —— 旧版本应用必须能读新版本稿本 |
| 3 | 未知头部键忽略 | 不影响其它键的解析 |
| 4 | \r\n / \n / \r 全认 | 跨平台粘贴很常见 |
| 5 | 首尾空白裁掉,但缩进在裁剪前判定 | 副文本靠缩进识别,先 trim 就没了 |
| 6 | 0 条提示 = 明确失败 | 让调用方退回扫码页,而不是进一个空的 Ghost 模式 |