创作者文档

美化规范

Updated · 2026-07-07Public document

这篇是 Foreverse 聊天美化的机制参考:单条消息里能放什么(HTML / fv-card / 贴纸), 整卡美化的渲染链路怎么走,正则引擎支持到哪。所有条目对应 App 的真实行为, 照着写的卡导入即渲染。

快速开始

最快的路径:把下面这段发给任何一个 AI,让它替你生成美化代码,然后放进角色卡的开场白或消息里试渲染。

请生成一段用于聊天气泡的自包含 HTML + 内联 <style>。
需求:紫色渐变主题的状态栏卡片,白色描边,圆角,顶部一行标题。
约束:不要引用外部资源(图片/字体/JS 库都不行);不要用 min-height: 100vh;
所有样式写在一个 <style> 里;宽度自适应容器。

生成结果整体放进 ```html 围栏里发出,Foreverse 会用内置 WebView 按你的样式渲染这条消息。 注意「不要引用外部资源」不是建议,是沙箱限制(见下文)。

单条消息语法

一条 AI 回复的文本会被按顺序切成若干段,每段按命中的语法各自渲染:

语法渲染为说明
```html … ```WebView 富渲染完整 HTML/CSS 按作者意图渲染;每个围栏一个独立 iframe 作用域,高度自动回报
裸 HTML 块WebView 富渲染无围栏但出现成对的 <div> / <section> / <style> / <table> / <svg> / <details> / <center> 时同样进 WebView
```fv-card … ```原生小卡片围栏内是 JSON,不走 WebView,由 App 原生渲染(字段见下表)
[[sticker:名字]]贴纸图片名字 ≤40 字符;从该伴侣目录的 stickers/ 文件夹取同名图片,找不到时退化为文本徽标
其余文本普通气泡按 markdown 基础语法渲染

fv-card 字段(v1 · 三型)

字段类型说明
typestringnote(小纸条)/ countdown(倒数日)/ mood(心情卡);未知值按 note 渲染,向前兼容
titlestring卡片标题;title 和 body 至少要有一个非空,否则整卡不渲染
bodystring正文,可选
datestringcountdown 用,yyyy-MM-dd;App 自动算「还有 N 天 / 今天 / 已过 N 天」
emojistringmood 卡用
accentstring点缀色 #RRGGBB,留空用当前角色的 accent 色
```fv-card
{ "type": "countdown", "title": "见面纪念日", "date": "2026-08-14", "accent": "#8b5cf6" }
```

整卡美化链路(状态栏 / 思维链 / 可点选项)

想让模型每一轮都输出主题化的状态栏、可折叠思维链、可点选项,走的是和桌面酒馆同构的三段链路:

模型输出纯文本 marker  →  卡内美化正则替换成主题化 HTML  →  WebView 渲染

三条铁律,违反任何一条都不渲染:

  • marker 必须是纯文本符号(如 :::think[状态|…]:::scene:::note:::opt), 不能用 <tag> 当 marker——导入期净化会把卡片文本字段里的生 HTML 剥掉。HTML 只允许出现在正则的 replaceString 里。
  • 美化正则要设 placement: [2](作用于 AI 输出)且 markdownOnly: true(只在显示期跑, 不污染回喂给模型的历史)。
  • 卡带 HTML 美化正则时,导入会自动打开该卡的富渲染开关,无需用户手动设置。
{{char}} / {{user}} 这类宏只在发给模型的 prompt 期展开,显示期不展开。 所以状态栏等展示字段里不要依赖宏——直接写角色名,或让模型在输出里带上。

正则规则

能力支持情况
捕获组回引$1$99$<name>{{match}}
变长循环 / 递归替换不支持——状态栏这类组件的字段数要固定(示范卡固定 4 个字段)
作用域placement 控制作用于用户输入 / AI 输出;markdownOnly 控制只影响显示、不改写回喂历史
安全兜底正则把内容替换成空时回退显示原文,不会白屏

WebView 能力与边界

富渲染 WebView 与桌面酒馆的渲染语义对齐,但运行在移动沙箱里。能力清单:

行为
内联 CSS / JS支持;每个 html 围栏一个独立 iframe 作用域,互不干扰
高度自动回报 scrollHeight 撑开气泡;不要写 min-height: 100vh 这类撑满视口的样式
外部资源禁止:file / content 访问被禁,远程 JS 库(如 jQuery CDN)不可用;外链点击转交系统浏览器
TavernHelper 宿主 API支持 triggerSlash(/setinput、/send、/trigger 等)、getChatMessagesgetCurrentMessageIdgetWorldbookgenerate() / generateRaw() 可真实触发二次生成
可点选项选项 / 按钮 / 链接禁用文本选择,正文允许选择——点选项不会误选中文字
敏感信息形如 token: 值 的内容在进入模型上下文前会被脱敏为 ***

桌面端调好的美化卡在手机上行为一致是这套设计的目标;遇到渲染差异,把卡和截图发到 [email protected],我们按 P1 处理。

Foreverse 美化规范 — 聊天卡片、贴纸与 HTML 渲染